From 7ae15be788bd255cfa0f386bcb67c08e7d4c7c0d Mon Sep 17 00:00:00 2001 From: Marcel Kronfeld Date: Tue, 11 Dec 2007 16:38:11 +0000 Subject: [PATCH] Importing release version 322 from old repos --- .classpath | 6 + .project | 17 + Manifest.txt | 1 + ant/build.xml | 888 ++++++++ ant/check.xml | 104 + ant/out | 52 + lastmodule.ser | Bin 0 -> 27 bytes resources/ConvergenceTerminator.html | 13 + resources/Default.html | 15 + resources/EPSILON_SVM.html | 13 + resources/ESIndividual.html | 16 + resources/ESInitPopulationDOptimal.html | 18 + resources/ESInitPopulationRandom.html | 10 + resources/ESInitPopulationSpaceFilling.html | 18 + resources/ESPara.html | 17 + resources/ESPopulation.html | 18 + resources/ESRecombination.html | 18 + resources/ESSelectionStrategyComma.html | 12 + resources/ESSelectionStrategyMedian.html | 26 + resources/ESSelectionStrategyMixed.html | 18 + resources/ESSelectionStrategyPlus.html | 13 + resources/EvolutionStrategies.html | 21 + resources/F1Problem.html | 24 + resources/F2Problem.html | 36 + resources/F3Problem.html | 29 + resources/F5Problem.html | 27 + resources/F6Problem.html | 42 + resources/F8Problem.html | 34 + resources/GO.html | 17 + resources/GOParameters.html | 25 + resources/GaussProcess.html | 13 + resources/JavaEvA.props | 19 + resources/MAES.html | 28 + resources/MAESIndividual.html | 16 + resources/MAESPara.html | 17 + resources/MAESPopulation.html | 23 + resources/MAESRecombination.html | 18 + resources/MAESSelectionStrategyComma.html | 12 + resources/MAESSelectionStrategyMedian.html | 32 + resources/MAESSelectionStrategyPlus.html | 13 + resources/MOCCO/MOCCO_GDF.gif | Bin 0 -> 1674 bytes resources/MOCCO/MOCCO_MOEA.gif | Bin 0 -> 1545 bytes resources/MOCCO/MOCCO_REFP.gif | Bin 0 -> 1777 bytes resources/MOCCO/MOCCO_STEP.gif | Bin 0 -> 1688 bytes resources/MOCCO/MOCCO_TBCH.gif | Bin 0 -> 2004 bytes resources/MOPReference/T1_250.txt | 252 +++ resources/MOPReference/T1_500.txt | 502 ++++ resources/MOPReference/T2_250.txt | 252 +++ resources/MOPReference/T2_500.txt | 502 ++++ resources/MOPReference/T6_50.txt | 52 + resources/MOPReference/T6_500.txt | 502 ++++ resources/MutationCMA.html | 13 + resources/MutationMSRGlobal.html | 13 + resources/MutationMSRSeperate.html | 15 + resources/MutationMVA.html | 13 + resources/MutationRandom.html | 13 + resources/MutationSuccessRule.html | 13 + resources/NU_SVM.html | 13 + resources/ParticleSwarmOptimization.html | 23 + resources/Poly.html | 13 + resources/PolyRBFJama.html | 18 + resources/RBF.html | 13 + resources/StatisticsParameterImpl.html | 17 + resources/Tribes.html | 22 + resources/images/Add24.gif | Bin 0 -> 962 bytes resources/images/Export24.gif | Bin 0 -> 473 bytes resources/images/Import24.gif | Bin 0 -> 473 bytes resources/images/Information24.gif | Bin 0 -> 1328 bytes resources/images/JavaEvAIcon.gif | Bin 0 -> 937 bytes resources/images/JavaEvAIcon_2.gif | Bin 0 -> 959 bytes resources/images/JavaEvAIcon_3.gif | Bin 0 -> 1010 bytes resources/images/JavaEvaSplashScreen.png | Bin 0 -> 26655 bytes resources/images/Play24.gif | Bin 0 -> 247 bytes resources/images/QueenB.gif | Bin 0 -> 979 bytes resources/images/QueenW.gif | Bin 0 -> 978 bytes resources/images/Refresh24.gif | Bin 0 -> 316 bytes resources/images/Stop24.gif | Bin 0 -> 313 bytes resources/images/Sub24.gif | Bin 0 -> 908 bytes resources/images/ackley.jpg | Bin 0 -> 30280 bytes resources/images/ackleyopt.jpg | Bin 0 -> 41846 bytes resources/images/ackleytex.jpg | Bin 0 -> 19078 bytes resources/images/f1.jpg | Bin 0 -> 35605 bytes resources/images/f1tex.jpg | Bin 0 -> 3312 bytes resources/images/f2.jpg | Bin 0 -> 37887 bytes resources/images/f2tex.jpg | Bin 0 -> 3643 bytes resources/images/f81.jpg | Bin 0 -> 43534 bytes resources/images/f85.jpg | Bin 0 -> 38474 bytes resources/images/grie100.jpg | Bin 0 -> 31658 bytes resources/images/rastrigin1.jpg | Bin 0 -> 38231 bytes resources/images/rastrigin20.jpg | Bin 0 -> 45324 bytes resources/images/rastrigin5.jpg | Bin 0 -> 41352 bytes resources/images/rastrigintex.jpg | Bin 0 -> 9014 bytes resources/images/rosenbrocktex.jpg | Bin 0 -> 6620 bytes resources/images/schwefelsymmetrie.jpg | Bin 0 -> 13112 bytes resources/images/step5.jpg | Bin 0 -> 42789 bytes resources/images/stepopt.jpg | Bin 0 -> 43103 bytes resources/images/steptex.jpg | Bin 0 -> 5055 bytes resources/rvm.html | 13 + src/jalopy.format.convention.xml | 398 ++++ src/javaeva/client/AppExitAction.java | 35 + src/javaeva/client/EvAClient.java | 726 ++++++ src/javaeva/client/EvAComAdapter.java | 137 ++ src/javaeva/client/RMIConnectionEvA.java | 53 + src/javaeva/gui/BeanTest.java | 309 +++ src/javaeva/gui/BigStringEditor.java | 210 ++ .../gui/Chart2DDPointContentSelectable.java | 123 + src/javaeva/gui/Chart2DDPointIconCircle.java | 55 + src/javaeva/gui/Chart2DDPointIconContent.java | 88 + src/javaeva/gui/Chart2DDPointIconCross.java | 44 + src/javaeva/gui/Chart2DDPointIconPoint.java | 56 + src/javaeva/gui/Chart2DDPointIconText.java | 49 + src/javaeva/gui/ComponentFilter.java | 17 + src/javaeva/gui/DPointSetMultiIcon.java | 504 +++++ src/javaeva/gui/DataViewer.java | 145 ++ src/javaeva/gui/DataViewerInterface.java | 18 + src/javaeva/gui/Exp.java | 36 + src/javaeva/gui/ExtAction.java | 69 + src/javaeva/gui/ExtActionChangedListener.java | 40 + src/javaeva/gui/ExtDesktopManager.java | 70 + src/javaeva/gui/FunctionArea.java | 702 ++++++ src/javaeva/gui/GenericAreaEditor.java | 168 ++ src/javaeva/gui/GenericArrayEditor.java | 434 ++++ src/javaeva/gui/GenericDoubleArrayEditor.java | 279 +++ .../gui/GenericEpsilonConstraintEditor.java | 246 ++ .../gui/GenericEpsilonThresholdEditor.java | 263 +++ src/javaeva/gui/GenericFilePathEditor.java | 154 ++ src/javaeva/gui/GenericIntArrayEditor.java | 225 ++ src/javaeva/gui/GenericObjectEditor.java | 871 +++++++ .../GenericOptimizationObjectivesEditor.java | 411 ++++ ...OptimizationObjectivesWithParamEditor.java | 476 ++++ .../gui/GenericRemoteServersEditor.java | 537 +++++ src/javaeva/gui/GenericStringListEditor.java | 164 ++ .../GenericWeigthedLPTchebycheffEditor.java | 270 +++ src/javaeva/gui/Graph.java | 109 + src/javaeva/gui/GraphPointSet.java | 579 +++++ src/javaeva/gui/GraphWindow.java | 158 ++ src/javaeva/gui/HtmlDemo.java | 132 ++ .../gui/InterfaceDPointWithContent.java | 26 + .../gui/InterfaceSelectablePointIcon.java | 40 + src/javaeva/gui/JClassTree.java | 491 ++++ src/javaeva/gui/JDocFrame.java | 92 + src/javaeva/gui/JEFrame.java | 101 + src/javaeva/gui/JEFrameRegister.java | 47 + src/javaeva/gui/JExtDesktopPane.java | 261 +++ src/javaeva/gui/JExtFileChooser.java | 39 + src/javaeva/gui/JExtMenu.java | 81 + src/javaeva/gui/JExtToolBar.java | 83 + src/javaeva/gui/JModuleGeneralPanel.java | 204 ++ src/javaeva/gui/JParaPanel.java | 89 + src/javaeva/gui/JTabbedModuleFrame.java | 147 ++ src/javaeva/gui/JTextEditorInternalFrame.java | 284 +++ src/javaeva/gui/JTextoutputFrame.java | 116 + .../gui/JTextoutputFrameInterface.java | 23 + src/javaeva/gui/LogPanel.java | 121 + src/javaeva/gui/Mnemonic.java | 47 + src/javaeva/gui/MultiLineString.java | 29 + src/javaeva/gui/MultiLineStringEditor.java | 68 + src/javaeva/gui/Plot.java | 429 ++++ src/javaeva/gui/PlotInterface.java | 37 + src/javaeva/gui/PropertyBoolSelector.java | 50 + src/javaeva/gui/PropertyDialog.java | 67 + src/javaeva/gui/PropertyDoubleArray.java | 40 + src/javaeva/gui/PropertyEditorProvider.java | 167 ++ .../gui/PropertyEpsilonConstraint.java | 29 + src/javaeva/gui/PropertyEpsilonThreshold.java | 34 + src/javaeva/gui/PropertyFilePath.java | 62 + src/javaeva/gui/PropertyIntArray.java | 39 + .../gui/PropertyOptimizationObjectives.java | 84 + ...opertyOptimizationObjectivesWithParam.java | 161 ++ src/javaeva/gui/PropertyPanel.java | 88 + src/javaeva/gui/PropertyRemoteServers.java | 306 +++ src/javaeva/gui/PropertySheetPanel.java | 740 ++++++ src/javaeva/gui/PropertySheetPanelStat.java | 124 + src/javaeva/gui/PropertySlider.java | 98 + src/javaeva/gui/PropertyStringList.java | 49 + src/javaeva/gui/PropertyText.java | 68 + src/javaeva/gui/PropertyValueSelector.java | 55 + .../gui/PropertyWeightedLPTchebycheff.java | 34 + src/javaeva/gui/SerializedObject.java | 136 ++ src/javaeva/gui/StatisticsEditor.java | 137 ++ src/javaeva/gui/TagEditor.java | 146 ++ src/javaeva/gui/TopoPlot.java | 105 + src/javaeva/gui/TreeElement.java | 19 + src/javaeva/gui/WindowCloseAction.java | 66 + src/javaeva/server/EvAMainAdapter.java | 33 + src/javaeva/server/EvAMainAdapterImpl.java | 50 + src/javaeva/server/EvAServer.java | 148 ++ src/javaeva/server/ModuleServer.java | 206 ++ src/javaeva/server/RMIServerEvA.java | 56 + src/javaeva/server/go/CrossoverInterface.java | 24 + .../server/go/GOStandaloneVersion.java | 752 ++++++ .../server/go/IndividualInterface.java | 26 + .../server/go/InterfaceGOParameters.java | 64 + .../server/go/InterfaceGOStandalone.java | 13 + ...terfacePopulationChangedEventListener.java | 19 + src/javaeva/server/go/InterfaceProcessor.java | 30 + src/javaeva/server/go/MOCCOStandalone.java | 514 +++++ src/javaeva/server/go/MutationInterface.java | 24 + .../server/go/PopulationInterface.java | 47 + src/javaeva/server/go/SelectionInterface.java | 24 + src/javaeva/server/go/SwingWorker.java | 133 ++ .../server/go/TerminatorInterface.java | 25 + .../go/individuals/AbstractEAIndividual.java | 672 ++++++ .../AbstractEAIndividualComparator.java | 53 + .../individuals/ESIndividualBinaryData.java | 332 +++ .../individuals/ESIndividualDoubleData.java | 346 +++ .../individuals/ESIndividualIntegerData.java | 342 +++ .../ESIndividualPermutationData.java | 406 ++++ .../GAESIndividualBinaryDoubleData.java | 329 +++ .../individuals/GAIndividualBinaryData.java | 294 +++ .../individuals/GAIndividualDoubleData.java | 383 ++++ .../individuals/GAIndividualIntegerData.java | 423 ++++ .../individuals/GAPIndividualProgramData.java | 317 +++ .../individuals/GEIndividualProgramData.java | 681 ++++++ .../individuals/GIIndividualIntegerData.java | 338 +++ ...IOBGAIndividualIntegerPermutationData.java | 328 +++ .../individuals/GPIndividualProgramData.java | 402 ++++ .../individuals/InterfaceDataTypeBinary.java | 47 + .../individuals/InterfaceDataTypeDouble.java | 58 + .../individuals/InterfaceDataTypeInteger.java | 57 + .../InterfaceDataTypePermutation.java | 60 + .../individuals/InterfaceDataTypeProgram.java | 51 + .../go/individuals/InterfaceESIndividual.java | 43 + .../go/individuals/InterfaceGAIndividual.java | 43 + .../go/individuals/InterfaceGIIndividual.java | 59 + .../go/individuals/InterfaceGPIndividual.java | 43 + .../individuals/InterfaceOBGAIndividual.java | 40 + .../OBGAIndividualPermutationData.java | 315 +++ .../codings/ga/GAGrayCodingDouble.java | 119 + .../codings/ga/GAGrayCodingInteger.java | 110 + .../codings/ga/GAStandardCodingDouble.java | 202 ++ .../codings/ga/GAStandardCodingInteger.java | 155 ++ .../codings/ga/InterfaceGADoubleCoding.java | 33 + .../codings/ga/InterfaceGAIntegerCoding.java | 39 + .../codings/gp/AbstractGPNode.java | 218 ++ .../go/individuals/codings/gp/GPArea.java | 136 ++ .../go/individuals/codings/gp/GPNodeAdd.java | 89 + .../go/individuals/codings/gp/GPNodeCos.java | 83 + .../go/individuals/codings/gp/GPNodeDiv.java | 102 + .../go/individuals/codings/gp/GPNodeExp.java | 83 + .../codings/gp/GPNodeFlowExec2.java | 84 + .../codings/gp/GPNodeFlowExec3.java | 84 + .../individuals/codings/gp/GPNodeInput.java | 89 + .../go/individuals/codings/gp/GPNodeMult.java | 86 + .../individuals/codings/gp/GPNodeOutput.java | 84 + .../go/individuals/codings/gp/GPNodePow2.java | 83 + .../go/individuals/codings/gp/GPNodePow3.java | 83 + .../go/individuals/codings/gp/GPNodeSin.java | 83 + .../go/individuals/codings/gp/GPNodeSqrt.java | 84 + .../go/individuals/codings/gp/GPNodeSub.java | 88 + .../codings/gp/InterfaceProgram.java | 22 + .../go/mocco/InterfaceProcessElement.java | 22 + .../go/mocco/MOCCOChooseMOStrategy.java | 214 ++ .../go/mocco/MOCCOChooseReferencePoint.java | 131 ++ .../mocco/MOCCOChooseReferenceSolution.java | 148 ++ .../go/mocco/MOCCOInitialPopulationSize.java | 81 + .../server/go/mocco/MOCCOParameterizeGDF.java | 247 ++ .../server/go/mocco/MOCCOParameterizeMO.java | 150 ++ .../go/mocco/MOCCOParameterizeRefPoint.java | 255 +++ .../server/go/mocco/MOCCOParameterizeSO.java | 129 ++ .../go/mocco/MOCCOParameterizeSTEP.java | 317 +++ .../mocco/MOCCOParameterizeTchebycheff.java | 280 +++ src/javaeva/server/go/mocco/MOCCOPhase.java | 138 ++ .../go/mocco/MOCCOProblemInitialization.java | 111 + .../go/mocco/MOCCOProblemRedefinition.java | 89 + src/javaeva/server/go/mocco/MOCCOState.java | 228 ++ .../InterfaceParetoFrontView.java | 17 + .../InterfaceRefPointListener.java | 16 + .../InterfaceRefSolutionListener.java | 19 + .../mocco/paretofrontviewer/MOCCOViewer.java | 615 +++++ .../paretofrontviewer/ParetoFrontView2D.java | 379 ++++ .../ParetoFrontViewParallelAxsis.java | 27 + .../ParetoFrontViewScatterPlot.java | 390 ++++ .../archiving/AbstractArchiving.java | 178 ++ .../archiving/ArchivingAllDominating.java | 80 + .../ArchivingMOMAIIAllDominating.java | 76 + .../operators/archiving/ArchivingMaxiMin.java | 210 ++ .../go/operators/archiving/ArchivingNSGA.java | 83 + .../operators/archiving/ArchivingNSGAII.java | 189 ++ .../operators/archiving/ArchivingPESAII.java | 289 +++ .../operators/archiving/ArchivingSPEAII.java | 557 +++++ .../InformationRetrievalInserting.java | 60 + .../archiving/InformationRetrievalNone.java | 48 + .../InformationRetrievalReplacing.java | 60 + .../archiving/InterfaceArchiving.java | 25 + .../InterfaceInformationRetrieval.java | 27 + .../InterfaceRemoveSurplusIndividuals.java | 26 + ...oveSurplusIndividualsDynamicHyperCube.java | 101 + ...moveSurplusIndividualsStaticHyperCube.java | 71 + .../ClassificationSelfOrganizingMaps.java | 564 +++++ .../InterfaceClassification.java | 36 + .../cluster/ClusteringDensityBased.java | 252 +++ .../operators/cluster/ClusteringKMeans.java | 374 +++ .../operators/cluster/ClusteringXMeans.java | 373 +++ .../cluster/InterfaceClustering.java | 54 + .../ConstBelongsToDifferentClass.java | 82 + ...tObjectivesInEqualityBiggerThanLinear.java | 45 + ...ObjectivesInEqualityBiggerThanSurface.java | 77 + ...tObjectivesInEqualityLesserThanLinear.java | 44 + ...bjectivesInEqualitySmallerThanSurface.java | 77 + .../constraint/InterfaceConstraint.java | 26 + .../operators/crossover/CrossoverEAMixer.java | 225 ++ .../crossover/CrossoverESArithmetical.java | 124 + .../crossover/CrossoverESBLXAlpha.java | 145 ++ .../crossover/CrossoverESDefault.java | 121 + .../operators/crossover/CrossoverESFlat.java | 125 + .../crossover/CrossoverESIntermediate.java | 113 + .../crossover/CrossoverESNPointDiscrete.java | 144 ++ .../CrossoverESNPointDiscreteDislocation.java | 156 ++ .../operators/crossover/CrossoverESPCX.java | 400 ++++ .../operators/crossover/CrossoverESSBX.java | 208 ++ .../operators/crossover/CrossoverESSPX.java | 290 +++ .../operators/crossover/CrossoverESUNDX.java | 400 ++++ .../crossover/CrossoverESUniformDiscrete.java | 119 + .../crossover/CrossoverGABitSimulated.java | 119 + .../crossover/CrossoverGADefault.java | 110 + .../crossover/CrossoverGANPoint.java | 148 ++ .../crossover/CrossoverGAUniform.java | 117 + .../crossover/CrossoverGIDefault.java | 125 + .../crossover/CrossoverGINPoint.java | 146 ++ .../crossover/CrossoverGINPointVL.java | 204 ++ .../crossover/CrossoverGIUniform.java | 121 + .../crossover/CrossoverGPDefault.java | 125 + .../operators/crossover/CrossoverOBGAPMX.java | 114 + .../crossover/CrossoverOBGAPMXUniform.java | 110 + .../crossover/InterfaceCrossover.java | 49 + .../go/operators/crossover/NoCrossover.java | 90 + .../crossover/PropertyCrossoverMixer.java | 165 ++ .../PropertyCrossoverMixerEditor.java | 472 ++++ .../operators/crossover/TestESCrossover.java | 278 +++ .../distancemetric/GenotypeMetricBitSet.java | 67 + .../InterfaceDistanceMetric.java | 31 + .../distancemetric/ObjectiveSpaceMetric.java | 59 + .../distancemetric/PhenotypeMetric.java | 186 ++ .../PhenotypeMetricDoubleData.java | 66 + .../SigmaSingleMetricGlobalMutation.java | 75 + .../FitnessAdaptiveClustering.java | 85 + .../fitnessmodifier/FitnessModifierNone.java | 42 + .../fitnessmodifier/FitnessSharing.java | 100 + .../InterfaceFitnessModifier.java | 22 + .../migration/InterfaceMigration.java | 40 + .../operators/migration/MOBestMigration.java | 120 + .../migration/MOClusteringSeparation.java | 402 ++++ .../operators/migration/MOConeSeparation.java | 760 +++++++ .../migration/MOXMeansSeparation.java | 389 ++++ .../operators/migration/SOBestMigration.java | 117 + .../operators/migration/SOMONoMigration.java | 59 + .../moso/InterfaceMOSOConverter.java | 59 + .../moso/MOSODynamicallyWeightedFitness.java | 114 + .../operators/moso/MOSOEpsilonConstraint.java | 124 + .../operators/moso/MOSOEpsilonThreshold.java | 146 ++ .../operators/moso/MOSOGoalProgramming.java | 113 + .../go/operators/moso/MOSOLpMetric.java | 148 ++ .../go/operators/moso/MOSOMOGARankBased.java | 98 + .../server/go/operators/moso/MOSOMaxiMin.java | 163 ++ .../go/operators/moso/MOSONoConvert.java | 84 + .../go/operators/moso/MOSORandomChoice.java | 90 + .../go/operators/moso/MOSORandomWeight.java | 97 + .../go/operators/moso/MOSORankbased.java | 87 + .../operators/moso/MOSOUtilityFunction.java | 113 + .../operators/moso/MOSOWeightedFitness.java | 123 + .../moso/MOSOWeightedLPTchebycheff.java | 147 ++ .../operators/mutation/InterfaceMutation.java | 52 + .../go/operators/mutation/MutateEAMixer.java | 234 ++ .../mutation/MutateESCorrolated.java | 318 +++ .../MutateESCovarianceMartixAdaption.java | 310 +++ .../operators/mutation/MutateESDefault.java | 85 + .../mutation/MutateESDerandomized.java | 178 ++ .../mutation/MutateESFixedStepSize.java | 125 + .../go/operators/mutation/MutateESGlobal.java | 203 ++ .../go/operators/mutation/MutateESLocal.java | 260 +++ .../mutation/MutateESMainVectorAdaption.java | 228 ++ .../MutateESMutativeStepSizeControl.java | 159 ++ .../operators/mutation/MutateESStandard.java | 120 + .../mutation/MutateESSuccessRule.java | 170 ++ .../operators/mutation/MutateGAAdaptive.java | 160 ++ .../operators/mutation/MutateGADefault.java | 86 + .../mutation/MutateGAInvertBits.java | 146 ++ .../operators/mutation/MutateGAStandard.java | 122 + .../operators/mutation/MutateGASwapBits.java | 128 ++ .../operators/mutation/MutateGIDefault.java | 82 + .../mutation/MutateGIInsertDelete.java | 158 ++ .../go/operators/mutation/MutateGIInvert.java | 132 ++ .../operators/mutation/MutateGINominal.java | 122 + .../operators/mutation/MutateGIOrdinal.java | 144 ++ .../mutation/MutateGITranslocate.java | 144 ++ .../operators/mutation/MutateGPAdaptive.java | 169 ++ .../operators/mutation/MutateGPDefault.java | 89 + .../mutation/MutateGPSingleNode.java | 117 + .../go/operators/mutation/MutateOBGAFlip.java | 107 + .../mutation/MutateOBGAInversion.java | 98 + .../go/operators/mutation/NoMutation.java | 81 + .../mutation/PropertyMutationMixer.java | 165 ++ .../mutation/PropertyMutationMixerEditor.java | 470 ++++ .../InterfaceParetoFrontMetric.java | 24 + .../MetricD1ApproxParetoFront.java | 159 ++ .../MetricD1TrueParetoFront.java | 158 ++ .../paretofrontmetrics/MetricErrorRatio.java | 183 ++ .../MetricMaximumParetoFrontError.java | 161 ++ .../MetricOverallNonDominatedVectors.java | 74 + .../operators/paretofrontmetrics/MetricS.java | 220 ++ .../MetricSWithReference.java | 278 +++ .../selection/InterfaceSelection.java | 57 + .../selection/MOMultipleSolutions.java | 52 + .../go/operators/selection/MOSolution.java | 29 + .../go/operators/selection/SelectAll.java | 115 + .../go/operators/selection/SelectBest.java | 134 ++ .../selection/SelectBestIndividuals.java | 186 ++ .../selection/SelectEPTournaments.java | 211 ++ .../selection/SelectHomologousMate.java | 110 + .../SelectMOMAIIDominanceCounter.java | 151 ++ .../operators/selection/SelectMOMaxiMin.java | 123 + .../SelectMONSGAIICrowedTournament.java | 183 ++ .../selection/SelectMONonDominated.java | 149 ++ .../go/operators/selection/SelectMOPESA.java | 134 ++ .../operators/selection/SelectMOPESAII.java | 158 ++ .../operators/selection/SelectMOSPEAII.java | 165 ++ .../selection/SelectParticleWheel.java | 141 ++ .../go/operators/selection/SelectRandom.java | 118 + .../operators/selection/SelectTournament.java | 148 ++ .../selection/SelectXProbRouletteWheel.java | 235 ++ .../probability/AbstractSelProb.java | 143 ++ .../InterfaceSelectionProbability.java | 46 + .../probability/SelProbBoltzman.java | 203 ++ .../probability/SelProbFitnessSharing.java | 127 ++ .../probability/SelProbInvertByMax.java | 112 + .../probability/SelProbLinearRanking.java | 184 ++ .../probability/SelProbNonLinearRanking.java | 195 ++ .../selection/probability/SelProbRanking.java | 103 + .../probability/SelProbStandard.java | 106 + .../probability/SelProbStandardScaling.java | 153 ++ .../replacement/InterfaceReplacement.java | 27 + .../replacement/PreplacePreselection.java | 50 + .../ReplaceDeterministicCrowding.java | 64 + .../selection/replacement/ReplaceRandom.java | 49 + .../selection/replacement/ReplaceWorst.java | 50 + .../replacement/ReplaceWorstParent.java | 57 + .../replacement/ReplacementCrowding.java | 89 + .../terminators/CombinedTerminator.java | 103 + .../terminators/ConvergenceTerminator.java | 174 ++ .../terminators/EvaluationTerminator.java | 87 + .../terminators/FitnessValueTerminator.java | 75 + .../terminators/GenerationTerminator.java | 77 + .../server/go/populations/PBILPopulation.java | 167 ++ .../server/go/populations/Population.java | 553 +++++ .../go/problems/AbstractDynTransProblem.java | 183 ++ .../AbstractDynamicOptimizationProblem.java | 340 +++ ...ractMultiObjectiveOptimizationProblem.java | 388 ++++ .../problems/AbstractOptimizationProblem.java | 354 +++ .../AbstractParallelOptimizationProblem.java | 109 + ...bstractSynchronousOptimizationProblem.java | 132 ++ src/javaeva/server/go/problems/B1Problem.java | 172 ++ .../server/go/problems/BKnapsackProblem.java | 416 ++++ .../server/go/problems/DynJumpProblem.java | 253 +++ .../go/problems/ExternalRuntimeProblem.java | 287 +++ .../server/go/problems/F10Problem.java | 145 ++ .../server/go/problems/F11Problem.java | 110 + .../server/go/problems/F12Problem.java | 117 + .../server/go/problems/F13Problem.java | 95 + .../server/go/problems/F14Problem.java | 102 + src/javaeva/server/go/problems/F1Problem.java | 312 +++ src/javaeva/server/go/problems/F2Problem.java | 86 + src/javaeva/server/go/problems/F3Problem.java | 85 + src/javaeva/server/go/problems/F4Problem.java | 116 + src/javaeva/server/go/problems/F5Problem.java | 121 + src/javaeva/server/go/problems/F6Problem.java | 141 ++ src/javaeva/server/go/problems/F7Problem.java | 193 ++ src/javaeva/server/go/problems/F8Problem.java | 126 ++ src/javaeva/server/go/problems/F9Problem.java | 84 + .../server/go/problems/FLensProblem.java | 540 +++++ .../server/go/problems/FM0Problem.java | 327 +++ .../go/problems/Interface2DBorderProblem.java | 20 + .../InterfaceFirstOrderDerivableProblem.java | 18 + .../go/problems/InterfaceHasInitRange.java | 14 + .../go/problems/InterfaceLocalSearchable.java | 22 + .../InterfaceMultiObjectiveDeNovoProblem.java | 36 + .../problems/InterfaceMultimodalProblem.java | 46 + .../InterfaceOptimizationObjective.java | 48 + .../InterfaceOptimizationProblem.java | 106 + .../problems/InterfaceOptimizationTarget.java | 18 + .../go/problems/InterfaceProgramProblem.java | 24 + .../go/problems/PSymbolicRegression.java | 413 ++++ .../server/go/problems/TF1Problem.java | 489 ++++ .../InterfaceRegressionFunction.java | 22 + .../problems/regression/RFKoza_GPI_10_1.java | 51 + .../problems/regression/RFKoza_GPI_10_2.java | 51 + .../problems/regression/RFKoza_GPI_7_3.java | 51 + .../regression/RFKoza_GPI_7_3_extended.java | 51 + .../go/problems/regression/RFRaidl_F1.java | 51 + .../go/problems/regression/RFRaidl_F2.java | 51 + .../go/problems/regression/RFRaidl_F3.java | 51 + .../CHCAdaptiveSearchAlgorithm.java | 336 +++ .../go/strategies/ClusterBasedNichingEA.java | 732 ++++++ .../go/strategies/DifferentialEvolution.java | 569 +++++ .../DynamicParticleSwarmOptimization.java | 631 ++++++ .../go/strategies/EvolutionStrategies.java | 510 +++++ .../strategies/EvolutionStrategiesEditor.java | 625 +++++ .../strategies/EvolutionaryProgramming.java | 213 ++ .../server/go/strategies/FloodAlgorithm.java | 264 +++ .../go/strategies/GeneticAlgorithm.java | 324 +++ .../go/strategies/GeneticAlgorithmEditor.java | 531 +++++ .../strategies/GradientDescentAlgorithm.java | 453 ++++ .../server/go/strategies/HillClimbing.java | 225 ++ .../go/strategies/InterfaceOptimizer.java | 85 + .../server/go/strategies/IslandModelEA.java | 533 +++++ .../go/strategies/MemeticAlgorithm.java | 308 +++ .../go/strategies/MonteCarloSearch.java | 202 ++ .../go/strategies/MultiObjectiveEA.java | 292 +++ .../MultiObjectiveMemeticAlgorithmII.java | 227 ++ .../ParticleFilterOptimization.java | 347 +++ .../strategies/ParticleSwarmOptimization.java | 1814 +++++++++++++++ .../PopulationBasedIncrementalLearning.java | 294 +++ .../go/strategies/SimulatedAnnealing.java | 267 +++ .../server/go/strategies/SteadyStateGA.java | 247 ++ .../go/strategies/ThresholdAlgorithm.java | 259 +++ src/javaeva/server/go/strategies/Tribes.java | 765 +++++++ .../go/strategies/WingedMultiObjectiveEA.java | 327 +++ .../server/go/strategies/tribes/Tribe.java | 287 +++ .../go/strategies/tribes/TribesExplorer.java | 1012 +++++++++ .../go/strategies/tribes/TribesMemory.java | 90 + .../go/strategies/tribes/TribesParam.java | 32 + .../go/strategies/tribes/TribesPosition.java | 895 ++++++++ .../go/strategies/tribes/TribesSwarm.java | 722 ++++++ .../server/go/tools/AbstractObjectEditor.java | 305 +++ src/javaeva/server/go/tools/DeNovofilter.java | 78 + src/javaeva/server/go/tools/FileLoader.java | 57 + src/javaeva/server/go/tools/GONamingBox.java | 78 + .../server/go/tools/GeneralGEOFaker.java | 154 ++ .../server/go/tools/GeneralGOEProperty.java | 28 + .../GeneralGenericObjectEditorPanel.java | 328 +++ .../go/tools/ImpactOfDimensionOnMOEAs.java | 136 ++ .../server/go/tools/InterfaceTest.java | 11 + src/javaeva/server/go/tools/ModuloTest.java | 20 + .../go/tools/ParetoFrontLocalTester.java | 167 ++ .../server/go/tools/PortfolioFrontTester.java | 344 +++ .../go/tools/RandomNumberGenerator.java | 286 +++ src/javaeva/server/go/tools/Test1.java | 42 + src/javaeva/server/go/tools/Test2.java | 50 + src/javaeva/server/go/tools/Test3.java | 81 + src/javaeva/server/go/tools/Test4.java | 35 + src/javaeva/server/go/tools/Test5.java | 74 + src/javaeva/server/go/tools/TestingDArea.java | 60 + src/javaeva/server/go/tools/entity.java | 59 + src/javaeva/server/go/tools/point.java | 62 + .../server/modules/AbstractModuleAdapter.java | 176 ++ .../server/modules/DEModuleAdapter.java | 29 + src/javaeva/server/modules/DEParameters.java | 251 ++ .../server/modules/EPModuleAdapter.java | 27 + src/javaeva/server/modules/EPParameters.java | 210 ++ .../server/modules/GAModuleAdapter.java | 27 + src/javaeva/server/modules/GAParameters.java | 264 +++ .../server/modules/GOModuleAdapter.java | 34 + src/javaeva/server/modules/GOParameters.java | 194 ++ .../server/modules/GenericModuleAdapter.java | 75 + .../server/modules/HCModuleAdapter.java | 31 + src/javaeva/server/modules/HCParameters.java | 198 ++ .../server/modules/MCModuleAdapter.java | 31 + src/javaeva/server/modules/MCParameters.java | 197 ++ .../server/modules/MOEAModuleAdapter.java | 43 + .../server/modules/MOEAParameters.java | 255 +++ src/javaeva/server/modules/ModuleAdapter.java | 36 + .../server/modules/PBILModuleAdapter.java | 31 + .../server/modules/PBILParameters.java | 282 +++ .../server/modules/PSOModuleAdapter.java | 31 + src/javaeva/server/modules/PSOParameters.java | 415 ++++ src/javaeva/server/modules/Processor.java | 302 +++ .../server/modules/SAModuleAdapter.java | 32 + src/javaeva/server/modules/SAParameters.java | 227 ++ .../server/modules/SSGAModuleAdapter.java | 31 + .../server/modules/SSGAParameters.java | 265 +++ .../server/stat/GenericStatistics.java | 190 ++ src/javaeva/server/stat/LoggerInterface.java | 24 + src/javaeva/server/stat/MovingAverage.java | 77 + .../stat/ProcessControlerInterface.java | 26 + src/javaeva/server/stat/Statistics.java | 31 + .../server/stat/StatisticsParameter.java | 46 + .../server/stat/StatisticsParameterImpl.java | 288 +++ .../server/stat/StatisticsStandalone.java | 441 ++++ .../server/stat/StatisticsWithGUI.java | 531 +++++ src/javaeva/tools/Cluster.java | 47 + src/javaeva/tools/CompileAndLoad.java | 183 ++ src/javaeva/tools/CubicSpline.java | 208 ++ src/javaeva/tools/EVAERROR.java | 59 + src/javaeva/tools/EVAHELP.java | 161 ++ src/javaeva/tools/EVAThread.java | 392 ++++ src/javaeva/tools/JPasswordDialog.java | 412 ++++ src/javaeva/tools/JarResources.java | 178 ++ src/javaeva/tools/JavacWrapper.java | 98 + src/javaeva/tools/KMEANSJAVA.java | 151 ++ src/javaeva/tools/LogProxy.java | 122 + src/javaeva/tools/Mathematics.java | 290 +++ src/javaeva/tools/MultirunRefiner.java | 289 +++ src/javaeva/tools/ReflectPackage.java | 287 +++ src/javaeva/tools/SelectedTag.java | 153 ++ src/javaeva/tools/Serializer.java | 206 ++ src/javaeva/tools/ServerPingThread.java | 69 + src/javaeva/tools/Source.java | 87 + src/javaeva/tools/TXTFileFilter.java | 40 + src/javaeva/tools/Tag.java | 38 + src/javaeva/tools/TokenHolder.java | 147 ++ src/javaeva/tools/URLGetter.java | 48 + src/wsi/ra/chart2d/DArea.java | 726 ++++++ src/wsi/ra/chart2d/DArray.java | 205 ++ src/wsi/ra/chart2d/DBorder.java | 45 + src/wsi/ra/chart2d/DComponent.java | 159 ++ src/wsi/ra/chart2d/DContainer.java | 223 ++ src/wsi/ra/chart2d/DElement.java | 51 + src/wsi/ra/chart2d/DFunction.java | 63 + src/wsi/ra/chart2d/DGrid.java | 115 + src/wsi/ra/chart2d/DIntDoubleMap.java | 88 + src/wsi/ra/chart2d/DLine.java | 70 + src/wsi/ra/chart2d/DMeasures.java | 274 +++ src/wsi/ra/chart2d/DParent.java | 34 + src/wsi/ra/chart2d/DPoint.java | 99 + src/wsi/ra/chart2d/DPointIcon.java | 38 + src/wsi/ra/chart2d/DPointSet.java | 350 +++ src/wsi/ra/chart2d/DRectangle.java | 207 ++ src/wsi/ra/chart2d/ScaledBorder.java | 493 ++++ src/wsi/ra/diagram/ColorBarCalculator.java | 156 ++ src/wsi/ra/jproxy/ComAdapter.java | 639 ++++++ src/wsi/ra/jproxy/JProxyRemoteThread.java | 113 + src/wsi/ra/jproxy/MainAdapter.java | 31 + src/wsi/ra/jproxy/MainAdapterClient.java | 25 + src/wsi/ra/jproxy/MainAdapterClientImpl.java | 76 + src/wsi/ra/jproxy/MainAdapterImpl.java | 154 ++ src/wsi/ra/jproxy/NO_RMIServerAvailable.java | 24 + src/wsi/ra/jproxy/RMIConnection.java | 98 + src/wsi/ra/jproxy/RMIInvocationHandler.java | 27 + .../ra/jproxy/RMIInvocationHandlerImpl.java | 128 ++ src/wsi/ra/jproxy/RMIProxyLocal.java | 111 + src/wsi/ra/jproxy/RMIProxyLocalThread.java | 116 + src/wsi/ra/jproxy/RMIProxyRemote.java | 116 + src/wsi/ra/jproxy/RMIProxyRemoteThread.java | 136 ++ src/wsi/ra/jproxy/RMIServer.java | 194 ++ .../ra/jproxy/RMIThreadInvocationHandler.java | 27 + .../RMIThreadInvocationHandlerImpl.java | 147 ++ src/wsi/ra/jproxy/RemoteStateListener.java | 27 + src/wsi/ra/jproxy/ThreadProxy.java | 96 + src/wsi/ra/jproxy/ThreadWrapper.java | 83 + src/wsi/ra/jproxy/XThread.java | 257 +++ .../ra/math/Jama/CholeskyDecomposition.java | 182 ++ .../ra/math/Jama/EigenvalueDecomposition.java | 956 ++++++++ src/wsi/ra/math/Jama/LUDecomposition.java | 318 +++ src/wsi/ra/math/Jama/Matrix.java | 1111 +++++++++ src/wsi/ra/math/Jama/QRDecomposition.java | 218 ++ .../math/Jama/SingularValueDecomposition.java | 540 +++++ src/wsi/ra/math/Jama/util/Maths.java | 21 + src/wsi/ra/math/RNG.java | 184 ++ src/wsi/ra/math/SpecialFunction.java | 1364 +++++++++++ .../interpolation/AbstractDataModifier.java | 52 + .../math/interpolation/AbstractDataSet.java | 116 + .../ra/math/interpolation/BasicDataSet.java | 100 + .../interpolation/InterpolationException.java | 44 + .../interpolation/LinearInterpolation.java | 573 +++++ .../math/interpolation/PolyInterpolation.java | 453 ++++ .../PolynomialInterpolationResult.java | 56 + .../interpolation/SplineInterpolation.java | 299 +++ src/wsi/ra/print/PagePrinter.java | 156 ++ src/wsi/ra/sort/XYDoubleArray.java | 114 + src/wsi/ra/tool/BasicResourceLoader.java | 589 +++++ src/wsi/ra/tool/DummyCategory.java | 41 + src/wsi/ra/tool/IntegerArrayList.java | 161 ++ src/wsi/ra/tool/ResourceLoader.java | 52 + src/wsi/ra/tool/StatisticUtils.java | 534 +++++ src/wsi/ra/tool/matlab/JMatLink.c | 481 ++++ src/wsi/ra/tool/matlab/JMatLink.h | 149 ++ src/wsi/ra/tool/matlab/JMatLink.java | 2014 +++++++++++++++++ src/wsi/ra/tool/matlab/Makefile | 27 + 668 files changed, 109288 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 Manifest.txt create mode 100644 ant/build.xml create mode 100644 ant/check.xml create mode 100644 ant/out create mode 100644 lastmodule.ser create mode 100644 resources/ConvergenceTerminator.html create mode 100644 resources/Default.html create mode 100644 resources/EPSILON_SVM.html create mode 100644 resources/ESIndividual.html create mode 100644 resources/ESInitPopulationDOptimal.html create mode 100644 resources/ESInitPopulationRandom.html create mode 100644 resources/ESInitPopulationSpaceFilling.html create mode 100644 resources/ESPara.html create mode 100644 resources/ESPopulation.html create mode 100644 resources/ESRecombination.html create mode 100644 resources/ESSelectionStrategyComma.html create mode 100644 resources/ESSelectionStrategyMedian.html create mode 100644 resources/ESSelectionStrategyMixed.html create mode 100644 resources/ESSelectionStrategyPlus.html create mode 100644 resources/EvolutionStrategies.html create mode 100644 resources/F1Problem.html create mode 100644 resources/F2Problem.html create mode 100644 resources/F3Problem.html create mode 100644 resources/F5Problem.html create mode 100644 resources/F6Problem.html create mode 100644 resources/F8Problem.html create mode 100644 resources/GO.html create mode 100644 resources/GOParameters.html create mode 100644 resources/GaussProcess.html create mode 100644 resources/JavaEvA.props create mode 100644 resources/MAES.html create mode 100644 resources/MAESIndividual.html create mode 100644 resources/MAESPara.html create mode 100644 resources/MAESPopulation.html create mode 100644 resources/MAESRecombination.html create mode 100644 resources/MAESSelectionStrategyComma.html create mode 100644 resources/MAESSelectionStrategyMedian.html create mode 100644 resources/MAESSelectionStrategyPlus.html create mode 100644 resources/MOCCO/MOCCO_GDF.gif create mode 100644 resources/MOCCO/MOCCO_MOEA.gif create mode 100644 resources/MOCCO/MOCCO_REFP.gif create mode 100644 resources/MOCCO/MOCCO_STEP.gif create mode 100644 resources/MOCCO/MOCCO_TBCH.gif create mode 100644 resources/MOPReference/T1_250.txt create mode 100644 resources/MOPReference/T1_500.txt create mode 100644 resources/MOPReference/T2_250.txt create mode 100644 resources/MOPReference/T2_500.txt create mode 100644 resources/MOPReference/T6_50.txt create mode 100644 resources/MOPReference/T6_500.txt create mode 100644 resources/MutationCMA.html create mode 100644 resources/MutationMSRGlobal.html create mode 100644 resources/MutationMSRSeperate.html create mode 100644 resources/MutationMVA.html create mode 100644 resources/MutationRandom.html create mode 100644 resources/MutationSuccessRule.html create mode 100644 resources/NU_SVM.html create mode 100644 resources/ParticleSwarmOptimization.html create mode 100644 resources/Poly.html create mode 100644 resources/PolyRBFJama.html create mode 100644 resources/RBF.html create mode 100644 resources/StatisticsParameterImpl.html create mode 100644 resources/Tribes.html create mode 100644 resources/images/Add24.gif create mode 100644 resources/images/Export24.gif create mode 100644 resources/images/Import24.gif create mode 100644 resources/images/Information24.gif create mode 100644 resources/images/JavaEvAIcon.gif create mode 100644 resources/images/JavaEvAIcon_2.gif create mode 100644 resources/images/JavaEvAIcon_3.gif create mode 100644 resources/images/JavaEvaSplashScreen.png create mode 100644 resources/images/Play24.gif create mode 100644 resources/images/QueenB.gif create mode 100644 resources/images/QueenW.gif create mode 100644 resources/images/Refresh24.gif create mode 100644 resources/images/Stop24.gif create mode 100644 resources/images/Sub24.gif create mode 100644 resources/images/ackley.jpg create mode 100644 resources/images/ackleyopt.jpg create mode 100644 resources/images/ackleytex.jpg create mode 100644 resources/images/f1.jpg create mode 100644 resources/images/f1tex.jpg create mode 100644 resources/images/f2.jpg create mode 100644 resources/images/f2tex.jpg create mode 100644 resources/images/f81.jpg create mode 100644 resources/images/f85.jpg create mode 100644 resources/images/grie100.jpg create mode 100644 resources/images/rastrigin1.jpg create mode 100644 resources/images/rastrigin20.jpg create mode 100644 resources/images/rastrigin5.jpg create mode 100644 resources/images/rastrigintex.jpg create mode 100644 resources/images/rosenbrocktex.jpg create mode 100644 resources/images/schwefelsymmetrie.jpg create mode 100644 resources/images/step5.jpg create mode 100644 resources/images/stepopt.jpg create mode 100644 resources/images/steptex.jpg create mode 100644 resources/rvm.html create mode 100644 src/jalopy.format.convention.xml create mode 100644 src/javaeva/client/AppExitAction.java create mode 100644 src/javaeva/client/EvAClient.java create mode 100644 src/javaeva/client/EvAComAdapter.java create mode 100644 src/javaeva/client/RMIConnectionEvA.java create mode 100644 src/javaeva/gui/BeanTest.java create mode 100644 src/javaeva/gui/BigStringEditor.java create mode 100644 src/javaeva/gui/Chart2DDPointContentSelectable.java create mode 100644 src/javaeva/gui/Chart2DDPointIconCircle.java create mode 100644 src/javaeva/gui/Chart2DDPointIconContent.java create mode 100644 src/javaeva/gui/Chart2DDPointIconCross.java create mode 100644 src/javaeva/gui/Chart2DDPointIconPoint.java create mode 100644 src/javaeva/gui/Chart2DDPointIconText.java create mode 100644 src/javaeva/gui/ComponentFilter.java create mode 100644 src/javaeva/gui/DPointSetMultiIcon.java create mode 100644 src/javaeva/gui/DataViewer.java create mode 100644 src/javaeva/gui/DataViewerInterface.java create mode 100644 src/javaeva/gui/Exp.java create mode 100644 src/javaeva/gui/ExtAction.java create mode 100644 src/javaeva/gui/ExtActionChangedListener.java create mode 100644 src/javaeva/gui/ExtDesktopManager.java create mode 100644 src/javaeva/gui/FunctionArea.java create mode 100644 src/javaeva/gui/GenericAreaEditor.java create mode 100644 src/javaeva/gui/GenericArrayEditor.java create mode 100644 src/javaeva/gui/GenericDoubleArrayEditor.java create mode 100644 src/javaeva/gui/GenericEpsilonConstraintEditor.java create mode 100644 src/javaeva/gui/GenericEpsilonThresholdEditor.java create mode 100644 src/javaeva/gui/GenericFilePathEditor.java create mode 100644 src/javaeva/gui/GenericIntArrayEditor.java create mode 100644 src/javaeva/gui/GenericObjectEditor.java create mode 100644 src/javaeva/gui/GenericOptimizationObjectivesEditor.java create mode 100644 src/javaeva/gui/GenericOptimizationObjectivesWithParamEditor.java create mode 100644 src/javaeva/gui/GenericRemoteServersEditor.java create mode 100644 src/javaeva/gui/GenericStringListEditor.java create mode 100644 src/javaeva/gui/GenericWeigthedLPTchebycheffEditor.java create mode 100644 src/javaeva/gui/Graph.java create mode 100644 src/javaeva/gui/GraphPointSet.java create mode 100644 src/javaeva/gui/GraphWindow.java create mode 100644 src/javaeva/gui/HtmlDemo.java create mode 100644 src/javaeva/gui/InterfaceDPointWithContent.java create mode 100644 src/javaeva/gui/InterfaceSelectablePointIcon.java create mode 100644 src/javaeva/gui/JClassTree.java create mode 100644 src/javaeva/gui/JDocFrame.java create mode 100644 src/javaeva/gui/JEFrame.java create mode 100644 src/javaeva/gui/JEFrameRegister.java create mode 100644 src/javaeva/gui/JExtDesktopPane.java create mode 100644 src/javaeva/gui/JExtFileChooser.java create mode 100644 src/javaeva/gui/JExtMenu.java create mode 100644 src/javaeva/gui/JExtToolBar.java create mode 100644 src/javaeva/gui/JModuleGeneralPanel.java create mode 100644 src/javaeva/gui/JParaPanel.java create mode 100644 src/javaeva/gui/JTabbedModuleFrame.java create mode 100644 src/javaeva/gui/JTextEditorInternalFrame.java create mode 100644 src/javaeva/gui/JTextoutputFrame.java create mode 100644 src/javaeva/gui/JTextoutputFrameInterface.java create mode 100644 src/javaeva/gui/LogPanel.java create mode 100644 src/javaeva/gui/Mnemonic.java create mode 100644 src/javaeva/gui/MultiLineString.java create mode 100644 src/javaeva/gui/MultiLineStringEditor.java create mode 100644 src/javaeva/gui/Plot.java create mode 100644 src/javaeva/gui/PlotInterface.java create mode 100644 src/javaeva/gui/PropertyBoolSelector.java create mode 100644 src/javaeva/gui/PropertyDialog.java create mode 100644 src/javaeva/gui/PropertyDoubleArray.java create mode 100644 src/javaeva/gui/PropertyEditorProvider.java create mode 100644 src/javaeva/gui/PropertyEpsilonConstraint.java create mode 100644 src/javaeva/gui/PropertyEpsilonThreshold.java create mode 100644 src/javaeva/gui/PropertyFilePath.java create mode 100644 src/javaeva/gui/PropertyIntArray.java create mode 100644 src/javaeva/gui/PropertyOptimizationObjectives.java create mode 100644 src/javaeva/gui/PropertyOptimizationObjectivesWithParam.java create mode 100644 src/javaeva/gui/PropertyPanel.java create mode 100644 src/javaeva/gui/PropertyRemoteServers.java create mode 100644 src/javaeva/gui/PropertySheetPanel.java create mode 100644 src/javaeva/gui/PropertySheetPanelStat.java create mode 100644 src/javaeva/gui/PropertySlider.java create mode 100644 src/javaeva/gui/PropertyStringList.java create mode 100644 src/javaeva/gui/PropertyText.java create mode 100644 src/javaeva/gui/PropertyValueSelector.java create mode 100644 src/javaeva/gui/PropertyWeightedLPTchebycheff.java create mode 100644 src/javaeva/gui/SerializedObject.java create mode 100644 src/javaeva/gui/StatisticsEditor.java create mode 100644 src/javaeva/gui/TagEditor.java create mode 100644 src/javaeva/gui/TopoPlot.java create mode 100644 src/javaeva/gui/TreeElement.java create mode 100644 src/javaeva/gui/WindowCloseAction.java create mode 100644 src/javaeva/server/EvAMainAdapter.java create mode 100644 src/javaeva/server/EvAMainAdapterImpl.java create mode 100644 src/javaeva/server/EvAServer.java create mode 100644 src/javaeva/server/ModuleServer.java create mode 100644 src/javaeva/server/RMIServerEvA.java create mode 100644 src/javaeva/server/go/CrossoverInterface.java create mode 100644 src/javaeva/server/go/GOStandaloneVersion.java create mode 100644 src/javaeva/server/go/IndividualInterface.java create mode 100644 src/javaeva/server/go/InterfaceGOParameters.java create mode 100644 src/javaeva/server/go/InterfaceGOStandalone.java create mode 100644 src/javaeva/server/go/InterfacePopulationChangedEventListener.java create mode 100644 src/javaeva/server/go/InterfaceProcessor.java create mode 100644 src/javaeva/server/go/MOCCOStandalone.java create mode 100644 src/javaeva/server/go/MutationInterface.java create mode 100644 src/javaeva/server/go/PopulationInterface.java create mode 100644 src/javaeva/server/go/SelectionInterface.java create mode 100644 src/javaeva/server/go/SwingWorker.java create mode 100644 src/javaeva/server/go/TerminatorInterface.java create mode 100644 src/javaeva/server/go/individuals/AbstractEAIndividual.java create mode 100644 src/javaeva/server/go/individuals/AbstractEAIndividualComparator.java create mode 100644 src/javaeva/server/go/individuals/ESIndividualBinaryData.java create mode 100644 src/javaeva/server/go/individuals/ESIndividualDoubleData.java create mode 100644 src/javaeva/server/go/individuals/ESIndividualIntegerData.java create mode 100644 src/javaeva/server/go/individuals/ESIndividualPermutationData.java create mode 100644 src/javaeva/server/go/individuals/GAESIndividualBinaryDoubleData.java create mode 100644 src/javaeva/server/go/individuals/GAIndividualBinaryData.java create mode 100644 src/javaeva/server/go/individuals/GAIndividualDoubleData.java create mode 100644 src/javaeva/server/go/individuals/GAIndividualIntegerData.java create mode 100644 src/javaeva/server/go/individuals/GAPIndividualProgramData.java create mode 100644 src/javaeva/server/go/individuals/GEIndividualProgramData.java create mode 100644 src/javaeva/server/go/individuals/GIIndividualIntegerData.java create mode 100644 src/javaeva/server/go/individuals/GIOBGAIndividualIntegerPermutationData.java create mode 100644 src/javaeva/server/go/individuals/GPIndividualProgramData.java create mode 100644 src/javaeva/server/go/individuals/InterfaceDataTypeBinary.java create mode 100644 src/javaeva/server/go/individuals/InterfaceDataTypeDouble.java create mode 100644 src/javaeva/server/go/individuals/InterfaceDataTypeInteger.java create mode 100644 src/javaeva/server/go/individuals/InterfaceDataTypePermutation.java create mode 100644 src/javaeva/server/go/individuals/InterfaceDataTypeProgram.java create mode 100644 src/javaeva/server/go/individuals/InterfaceESIndividual.java create mode 100644 src/javaeva/server/go/individuals/InterfaceGAIndividual.java create mode 100644 src/javaeva/server/go/individuals/InterfaceGIIndividual.java create mode 100644 src/javaeva/server/go/individuals/InterfaceGPIndividual.java create mode 100644 src/javaeva/server/go/individuals/InterfaceOBGAIndividual.java create mode 100644 src/javaeva/server/go/individuals/OBGAIndividualPermutationData.java create mode 100644 src/javaeva/server/go/individuals/codings/ga/GAGrayCodingDouble.java create mode 100644 src/javaeva/server/go/individuals/codings/ga/GAGrayCodingInteger.java create mode 100644 src/javaeva/server/go/individuals/codings/ga/GAStandardCodingDouble.java create mode 100644 src/javaeva/server/go/individuals/codings/ga/GAStandardCodingInteger.java create mode 100644 src/javaeva/server/go/individuals/codings/ga/InterfaceGADoubleCoding.java create mode 100644 src/javaeva/server/go/individuals/codings/ga/InterfaceGAIntegerCoding.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/AbstractGPNode.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPArea.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeAdd.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeCos.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeDiv.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeExp.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeFlowExec2.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeFlowExec3.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeInput.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeMult.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeOutput.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodePow2.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodePow3.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeSin.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeSqrt.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/GPNodeSub.java create mode 100644 src/javaeva/server/go/individuals/codings/gp/InterfaceProgram.java create mode 100644 src/javaeva/server/go/mocco/InterfaceProcessElement.java create mode 100644 src/javaeva/server/go/mocco/MOCCOChooseMOStrategy.java create mode 100644 src/javaeva/server/go/mocco/MOCCOChooseReferencePoint.java create mode 100644 src/javaeva/server/go/mocco/MOCCOChooseReferenceSolution.java create mode 100644 src/javaeva/server/go/mocco/MOCCOInitialPopulationSize.java create mode 100644 src/javaeva/server/go/mocco/MOCCOParameterizeGDF.java create mode 100644 src/javaeva/server/go/mocco/MOCCOParameterizeMO.java create mode 100644 src/javaeva/server/go/mocco/MOCCOParameterizeRefPoint.java create mode 100644 src/javaeva/server/go/mocco/MOCCOParameterizeSO.java create mode 100644 src/javaeva/server/go/mocco/MOCCOParameterizeSTEP.java create mode 100644 src/javaeva/server/go/mocco/MOCCOParameterizeTchebycheff.java create mode 100644 src/javaeva/server/go/mocco/MOCCOPhase.java create mode 100644 src/javaeva/server/go/mocco/MOCCOProblemInitialization.java create mode 100644 src/javaeva/server/go/mocco/MOCCOProblemRedefinition.java create mode 100644 src/javaeva/server/go/mocco/MOCCOState.java create mode 100644 src/javaeva/server/go/mocco/paretofrontviewer/InterfaceParetoFrontView.java create mode 100644 src/javaeva/server/go/mocco/paretofrontviewer/InterfaceRefPointListener.java create mode 100644 src/javaeva/server/go/mocco/paretofrontviewer/InterfaceRefSolutionListener.java create mode 100644 src/javaeva/server/go/mocco/paretofrontviewer/MOCCOViewer.java create mode 100644 src/javaeva/server/go/mocco/paretofrontviewer/ParetoFrontView2D.java create mode 100644 src/javaeva/server/go/mocco/paretofrontviewer/ParetoFrontViewParallelAxsis.java create mode 100644 src/javaeva/server/go/mocco/paretofrontviewer/ParetoFrontViewScatterPlot.java create mode 100644 src/javaeva/server/go/operators/archiving/AbstractArchiving.java create mode 100644 src/javaeva/server/go/operators/archiving/ArchivingAllDominating.java create mode 100644 src/javaeva/server/go/operators/archiving/ArchivingMOMAIIAllDominating.java create mode 100644 src/javaeva/server/go/operators/archiving/ArchivingMaxiMin.java create mode 100644 src/javaeva/server/go/operators/archiving/ArchivingNSGA.java create mode 100644 src/javaeva/server/go/operators/archiving/ArchivingNSGAII.java create mode 100644 src/javaeva/server/go/operators/archiving/ArchivingPESAII.java create mode 100644 src/javaeva/server/go/operators/archiving/ArchivingSPEAII.java create mode 100644 src/javaeva/server/go/operators/archiving/InformationRetrievalInserting.java create mode 100644 src/javaeva/server/go/operators/archiving/InformationRetrievalNone.java create mode 100644 src/javaeva/server/go/operators/archiving/InformationRetrievalReplacing.java create mode 100644 src/javaeva/server/go/operators/archiving/InterfaceArchiving.java create mode 100644 src/javaeva/server/go/operators/archiving/InterfaceInformationRetrieval.java create mode 100644 src/javaeva/server/go/operators/archiving/InterfaceRemoveSurplusIndividuals.java create mode 100644 src/javaeva/server/go/operators/archiving/RemoveSurplusIndividualsDynamicHyperCube.java create mode 100644 src/javaeva/server/go/operators/archiving/RemoveSurplusIndividualsStaticHyperCube.java create mode 100644 src/javaeva/server/go/operators/classification/ClassificationSelfOrganizingMaps.java create mode 100644 src/javaeva/server/go/operators/classification/InterfaceClassification.java create mode 100644 src/javaeva/server/go/operators/cluster/ClusteringDensityBased.java create mode 100644 src/javaeva/server/go/operators/cluster/ClusteringKMeans.java create mode 100644 src/javaeva/server/go/operators/cluster/ClusteringXMeans.java create mode 100644 src/javaeva/server/go/operators/cluster/InterfaceClustering.java create mode 100644 src/javaeva/server/go/operators/constraint/ConstBelongsToDifferentClass.java create mode 100644 src/javaeva/server/go/operators/constraint/ConstObjectivesInEqualityBiggerThanLinear.java create mode 100644 src/javaeva/server/go/operators/constraint/ConstObjectivesInEqualityBiggerThanSurface.java create mode 100644 src/javaeva/server/go/operators/constraint/ConstObjectivesInEqualityLesserThanLinear.java create mode 100644 src/javaeva/server/go/operators/constraint/ConstObjectivesInEqualitySmallerThanSurface.java create mode 100644 src/javaeva/server/go/operators/constraint/InterfaceConstraint.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverEAMixer.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESArithmetical.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESBLXAlpha.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESDefault.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESFlat.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESIntermediate.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESNPointDiscrete.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESNPointDiscreteDislocation.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESPCX.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESSBX.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESSPX.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESUNDX.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverESUniformDiscrete.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverGABitSimulated.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverGADefault.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverGANPoint.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverGAUniform.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverGIDefault.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverGINPoint.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverGINPointVL.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverGIUniform.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverGPDefault.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverOBGAPMX.java create mode 100644 src/javaeva/server/go/operators/crossover/CrossoverOBGAPMXUniform.java create mode 100644 src/javaeva/server/go/operators/crossover/InterfaceCrossover.java create mode 100644 src/javaeva/server/go/operators/crossover/NoCrossover.java create mode 100644 src/javaeva/server/go/operators/crossover/PropertyCrossoverMixer.java create mode 100644 src/javaeva/server/go/operators/crossover/PropertyCrossoverMixerEditor.java create mode 100644 src/javaeva/server/go/operators/crossover/TestESCrossover.java create mode 100644 src/javaeva/server/go/operators/distancemetric/GenotypeMetricBitSet.java create mode 100644 src/javaeva/server/go/operators/distancemetric/InterfaceDistanceMetric.java create mode 100644 src/javaeva/server/go/operators/distancemetric/ObjectiveSpaceMetric.java create mode 100644 src/javaeva/server/go/operators/distancemetric/PhenotypeMetric.java create mode 100644 src/javaeva/server/go/operators/distancemetric/PhenotypeMetricDoubleData.java create mode 100644 src/javaeva/server/go/operators/distancemetric/SigmaSingleMetricGlobalMutation.java create mode 100644 src/javaeva/server/go/operators/fitnessmodifier/FitnessAdaptiveClustering.java create mode 100644 src/javaeva/server/go/operators/fitnessmodifier/FitnessModifierNone.java create mode 100644 src/javaeva/server/go/operators/fitnessmodifier/FitnessSharing.java create mode 100644 src/javaeva/server/go/operators/fitnessmodifier/InterfaceFitnessModifier.java create mode 100644 src/javaeva/server/go/operators/migration/InterfaceMigration.java create mode 100644 src/javaeva/server/go/operators/migration/MOBestMigration.java create mode 100644 src/javaeva/server/go/operators/migration/MOClusteringSeparation.java create mode 100644 src/javaeva/server/go/operators/migration/MOConeSeparation.java create mode 100644 src/javaeva/server/go/operators/migration/MOXMeansSeparation.java create mode 100644 src/javaeva/server/go/operators/migration/SOBestMigration.java create mode 100644 src/javaeva/server/go/operators/migration/SOMONoMigration.java create mode 100644 src/javaeva/server/go/operators/moso/InterfaceMOSOConverter.java create mode 100644 src/javaeva/server/go/operators/moso/MOSODynamicallyWeightedFitness.java create mode 100644 src/javaeva/server/go/operators/moso/MOSOEpsilonConstraint.java create mode 100644 src/javaeva/server/go/operators/moso/MOSOEpsilonThreshold.java create mode 100644 src/javaeva/server/go/operators/moso/MOSOGoalProgramming.java create mode 100644 src/javaeva/server/go/operators/moso/MOSOLpMetric.java create mode 100644 src/javaeva/server/go/operators/moso/MOSOMOGARankBased.java create mode 100644 src/javaeva/server/go/operators/moso/MOSOMaxiMin.java create mode 100644 src/javaeva/server/go/operators/moso/MOSONoConvert.java create mode 100644 src/javaeva/server/go/operators/moso/MOSORandomChoice.java create mode 100644 src/javaeva/server/go/operators/moso/MOSORandomWeight.java create mode 100644 src/javaeva/server/go/operators/moso/MOSORankbased.java create mode 100644 src/javaeva/server/go/operators/moso/MOSOUtilityFunction.java create mode 100644 src/javaeva/server/go/operators/moso/MOSOWeightedFitness.java create mode 100644 src/javaeva/server/go/operators/moso/MOSOWeightedLPTchebycheff.java create mode 100644 src/javaeva/server/go/operators/mutation/InterfaceMutation.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateEAMixer.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateESCorrolated.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateESCovarianceMartixAdaption.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateESDefault.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateESDerandomized.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateESFixedStepSize.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateESGlobal.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateESLocal.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateESMainVectorAdaption.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateESMutativeStepSizeControl.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateESStandard.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateESSuccessRule.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGAAdaptive.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGADefault.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGAInvertBits.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGAStandard.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGASwapBits.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGIDefault.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGIInsertDelete.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGIInvert.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGINominal.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGIOrdinal.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGITranslocate.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGPAdaptive.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGPDefault.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateGPSingleNode.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateOBGAFlip.java create mode 100644 src/javaeva/server/go/operators/mutation/MutateOBGAInversion.java create mode 100644 src/javaeva/server/go/operators/mutation/NoMutation.java create mode 100644 src/javaeva/server/go/operators/mutation/PropertyMutationMixer.java create mode 100644 src/javaeva/server/go/operators/mutation/PropertyMutationMixerEditor.java create mode 100644 src/javaeva/server/go/operators/paretofrontmetrics/InterfaceParetoFrontMetric.java create mode 100644 src/javaeva/server/go/operators/paretofrontmetrics/MetricD1ApproxParetoFront.java create mode 100644 src/javaeva/server/go/operators/paretofrontmetrics/MetricD1TrueParetoFront.java create mode 100644 src/javaeva/server/go/operators/paretofrontmetrics/MetricErrorRatio.java create mode 100644 src/javaeva/server/go/operators/paretofrontmetrics/MetricMaximumParetoFrontError.java create mode 100644 src/javaeva/server/go/operators/paretofrontmetrics/MetricOverallNonDominatedVectors.java create mode 100644 src/javaeva/server/go/operators/paretofrontmetrics/MetricS.java create mode 100644 src/javaeva/server/go/operators/paretofrontmetrics/MetricSWithReference.java create mode 100644 src/javaeva/server/go/operators/selection/InterfaceSelection.java create mode 100644 src/javaeva/server/go/operators/selection/MOMultipleSolutions.java create mode 100644 src/javaeva/server/go/operators/selection/MOSolution.java create mode 100644 src/javaeva/server/go/operators/selection/SelectAll.java create mode 100644 src/javaeva/server/go/operators/selection/SelectBest.java create mode 100644 src/javaeva/server/go/operators/selection/SelectBestIndividuals.java create mode 100644 src/javaeva/server/go/operators/selection/SelectEPTournaments.java create mode 100644 src/javaeva/server/go/operators/selection/SelectHomologousMate.java create mode 100644 src/javaeva/server/go/operators/selection/SelectMOMAIIDominanceCounter.java create mode 100644 src/javaeva/server/go/operators/selection/SelectMOMaxiMin.java create mode 100644 src/javaeva/server/go/operators/selection/SelectMONSGAIICrowedTournament.java create mode 100644 src/javaeva/server/go/operators/selection/SelectMONonDominated.java create mode 100644 src/javaeva/server/go/operators/selection/SelectMOPESA.java create mode 100644 src/javaeva/server/go/operators/selection/SelectMOPESAII.java create mode 100644 src/javaeva/server/go/operators/selection/SelectMOSPEAII.java create mode 100644 src/javaeva/server/go/operators/selection/SelectParticleWheel.java create mode 100644 src/javaeva/server/go/operators/selection/SelectRandom.java create mode 100644 src/javaeva/server/go/operators/selection/SelectTournament.java create mode 100644 src/javaeva/server/go/operators/selection/SelectXProbRouletteWheel.java create mode 100644 src/javaeva/server/go/operators/selection/probability/AbstractSelProb.java create mode 100644 src/javaeva/server/go/operators/selection/probability/InterfaceSelectionProbability.java create mode 100644 src/javaeva/server/go/operators/selection/probability/SelProbBoltzman.java create mode 100644 src/javaeva/server/go/operators/selection/probability/SelProbFitnessSharing.java create mode 100644 src/javaeva/server/go/operators/selection/probability/SelProbInvertByMax.java create mode 100644 src/javaeva/server/go/operators/selection/probability/SelProbLinearRanking.java create mode 100644 src/javaeva/server/go/operators/selection/probability/SelProbNonLinearRanking.java create mode 100644 src/javaeva/server/go/operators/selection/probability/SelProbRanking.java create mode 100644 src/javaeva/server/go/operators/selection/probability/SelProbStandard.java create mode 100644 src/javaeva/server/go/operators/selection/probability/SelProbStandardScaling.java create mode 100644 src/javaeva/server/go/operators/selection/replacement/InterfaceReplacement.java create mode 100644 src/javaeva/server/go/operators/selection/replacement/PreplacePreselection.java create mode 100644 src/javaeva/server/go/operators/selection/replacement/ReplaceDeterministicCrowding.java create mode 100644 src/javaeva/server/go/operators/selection/replacement/ReplaceRandom.java create mode 100644 src/javaeva/server/go/operators/selection/replacement/ReplaceWorst.java create mode 100644 src/javaeva/server/go/operators/selection/replacement/ReplaceWorstParent.java create mode 100644 src/javaeva/server/go/operators/selection/replacement/ReplacementCrowding.java create mode 100644 src/javaeva/server/go/operators/terminators/CombinedTerminator.java create mode 100644 src/javaeva/server/go/operators/terminators/ConvergenceTerminator.java create mode 100644 src/javaeva/server/go/operators/terminators/EvaluationTerminator.java create mode 100644 src/javaeva/server/go/operators/terminators/FitnessValueTerminator.java create mode 100644 src/javaeva/server/go/operators/terminators/GenerationTerminator.java create mode 100644 src/javaeva/server/go/populations/PBILPopulation.java create mode 100644 src/javaeva/server/go/populations/Population.java create mode 100644 src/javaeva/server/go/problems/AbstractDynTransProblem.java create mode 100644 src/javaeva/server/go/problems/AbstractDynamicOptimizationProblem.java create mode 100644 src/javaeva/server/go/problems/AbstractMultiObjectiveOptimizationProblem.java create mode 100644 src/javaeva/server/go/problems/AbstractOptimizationProblem.java create mode 100644 src/javaeva/server/go/problems/AbstractParallelOptimizationProblem.java create mode 100644 src/javaeva/server/go/problems/AbstractSynchronousOptimizationProblem.java create mode 100644 src/javaeva/server/go/problems/B1Problem.java create mode 100644 src/javaeva/server/go/problems/BKnapsackProblem.java create mode 100644 src/javaeva/server/go/problems/DynJumpProblem.java create mode 100644 src/javaeva/server/go/problems/ExternalRuntimeProblem.java create mode 100644 src/javaeva/server/go/problems/F10Problem.java create mode 100644 src/javaeva/server/go/problems/F11Problem.java create mode 100644 src/javaeva/server/go/problems/F12Problem.java create mode 100644 src/javaeva/server/go/problems/F13Problem.java create mode 100644 src/javaeva/server/go/problems/F14Problem.java create mode 100644 src/javaeva/server/go/problems/F1Problem.java create mode 100644 src/javaeva/server/go/problems/F2Problem.java create mode 100644 src/javaeva/server/go/problems/F3Problem.java create mode 100644 src/javaeva/server/go/problems/F4Problem.java create mode 100644 src/javaeva/server/go/problems/F5Problem.java create mode 100644 src/javaeva/server/go/problems/F6Problem.java create mode 100644 src/javaeva/server/go/problems/F7Problem.java create mode 100644 src/javaeva/server/go/problems/F8Problem.java create mode 100644 src/javaeva/server/go/problems/F9Problem.java create mode 100644 src/javaeva/server/go/problems/FLensProblem.java create mode 100644 src/javaeva/server/go/problems/FM0Problem.java create mode 100644 src/javaeva/server/go/problems/Interface2DBorderProblem.java create mode 100644 src/javaeva/server/go/problems/InterfaceFirstOrderDerivableProblem.java create mode 100644 src/javaeva/server/go/problems/InterfaceHasInitRange.java create mode 100644 src/javaeva/server/go/problems/InterfaceLocalSearchable.java create mode 100644 src/javaeva/server/go/problems/InterfaceMultiObjectiveDeNovoProblem.java create mode 100644 src/javaeva/server/go/problems/InterfaceMultimodalProblem.java create mode 100644 src/javaeva/server/go/problems/InterfaceOptimizationObjective.java create mode 100644 src/javaeva/server/go/problems/InterfaceOptimizationProblem.java create mode 100644 src/javaeva/server/go/problems/InterfaceOptimizationTarget.java create mode 100644 src/javaeva/server/go/problems/InterfaceProgramProblem.java create mode 100644 src/javaeva/server/go/problems/PSymbolicRegression.java create mode 100644 src/javaeva/server/go/problems/TF1Problem.java create mode 100644 src/javaeva/server/go/problems/regression/InterfaceRegressionFunction.java create mode 100644 src/javaeva/server/go/problems/regression/RFKoza_GPI_10_1.java create mode 100644 src/javaeva/server/go/problems/regression/RFKoza_GPI_10_2.java create mode 100644 src/javaeva/server/go/problems/regression/RFKoza_GPI_7_3.java create mode 100644 src/javaeva/server/go/problems/regression/RFKoza_GPI_7_3_extended.java create mode 100644 src/javaeva/server/go/problems/regression/RFRaidl_F1.java create mode 100644 src/javaeva/server/go/problems/regression/RFRaidl_F2.java create mode 100644 src/javaeva/server/go/problems/regression/RFRaidl_F3.java create mode 100644 src/javaeva/server/go/strategies/CHCAdaptiveSearchAlgorithm.java create mode 100644 src/javaeva/server/go/strategies/ClusterBasedNichingEA.java create mode 100644 src/javaeva/server/go/strategies/DifferentialEvolution.java create mode 100644 src/javaeva/server/go/strategies/DynamicParticleSwarmOptimization.java create mode 100644 src/javaeva/server/go/strategies/EvolutionStrategies.java create mode 100644 src/javaeva/server/go/strategies/EvolutionStrategiesEditor.java create mode 100644 src/javaeva/server/go/strategies/EvolutionaryProgramming.java create mode 100644 src/javaeva/server/go/strategies/FloodAlgorithm.java create mode 100644 src/javaeva/server/go/strategies/GeneticAlgorithm.java create mode 100644 src/javaeva/server/go/strategies/GeneticAlgorithmEditor.java create mode 100644 src/javaeva/server/go/strategies/GradientDescentAlgorithm.java create mode 100644 src/javaeva/server/go/strategies/HillClimbing.java create mode 100644 src/javaeva/server/go/strategies/InterfaceOptimizer.java create mode 100644 src/javaeva/server/go/strategies/IslandModelEA.java create mode 100644 src/javaeva/server/go/strategies/MemeticAlgorithm.java create mode 100644 src/javaeva/server/go/strategies/MonteCarloSearch.java create mode 100644 src/javaeva/server/go/strategies/MultiObjectiveEA.java create mode 100644 src/javaeva/server/go/strategies/MultiObjectiveMemeticAlgorithmII.java create mode 100644 src/javaeva/server/go/strategies/ParticleFilterOptimization.java create mode 100644 src/javaeva/server/go/strategies/ParticleSwarmOptimization.java create mode 100644 src/javaeva/server/go/strategies/PopulationBasedIncrementalLearning.java create mode 100644 src/javaeva/server/go/strategies/SimulatedAnnealing.java create mode 100644 src/javaeva/server/go/strategies/SteadyStateGA.java create mode 100644 src/javaeva/server/go/strategies/ThresholdAlgorithm.java create mode 100644 src/javaeva/server/go/strategies/Tribes.java create mode 100644 src/javaeva/server/go/strategies/WingedMultiObjectiveEA.java create mode 100644 src/javaeva/server/go/strategies/tribes/Tribe.java create mode 100644 src/javaeva/server/go/strategies/tribes/TribesExplorer.java create mode 100644 src/javaeva/server/go/strategies/tribes/TribesMemory.java create mode 100644 src/javaeva/server/go/strategies/tribes/TribesParam.java create mode 100644 src/javaeva/server/go/strategies/tribes/TribesPosition.java create mode 100644 src/javaeva/server/go/strategies/tribes/TribesSwarm.java create mode 100644 src/javaeva/server/go/tools/AbstractObjectEditor.java create mode 100644 src/javaeva/server/go/tools/DeNovofilter.java create mode 100644 src/javaeva/server/go/tools/FileLoader.java create mode 100644 src/javaeva/server/go/tools/GONamingBox.java create mode 100644 src/javaeva/server/go/tools/GeneralGEOFaker.java create mode 100644 src/javaeva/server/go/tools/GeneralGOEProperty.java create mode 100644 src/javaeva/server/go/tools/GeneralGenericObjectEditorPanel.java create mode 100644 src/javaeva/server/go/tools/ImpactOfDimensionOnMOEAs.java create mode 100644 src/javaeva/server/go/tools/InterfaceTest.java create mode 100644 src/javaeva/server/go/tools/ModuloTest.java create mode 100644 src/javaeva/server/go/tools/ParetoFrontLocalTester.java create mode 100644 src/javaeva/server/go/tools/PortfolioFrontTester.java create mode 100644 src/javaeva/server/go/tools/RandomNumberGenerator.java create mode 100644 src/javaeva/server/go/tools/Test1.java create mode 100644 src/javaeva/server/go/tools/Test2.java create mode 100644 src/javaeva/server/go/tools/Test3.java create mode 100644 src/javaeva/server/go/tools/Test4.java create mode 100644 src/javaeva/server/go/tools/Test5.java create mode 100644 src/javaeva/server/go/tools/TestingDArea.java create mode 100644 src/javaeva/server/go/tools/entity.java create mode 100644 src/javaeva/server/go/tools/point.java create mode 100644 src/javaeva/server/modules/AbstractModuleAdapter.java create mode 100644 src/javaeva/server/modules/DEModuleAdapter.java create mode 100644 src/javaeva/server/modules/DEParameters.java create mode 100644 src/javaeva/server/modules/EPModuleAdapter.java create mode 100644 src/javaeva/server/modules/EPParameters.java create mode 100644 src/javaeva/server/modules/GAModuleAdapter.java create mode 100644 src/javaeva/server/modules/GAParameters.java create mode 100644 src/javaeva/server/modules/GOModuleAdapter.java create mode 100644 src/javaeva/server/modules/GOParameters.java create mode 100644 src/javaeva/server/modules/GenericModuleAdapter.java create mode 100644 src/javaeva/server/modules/HCModuleAdapter.java create mode 100644 src/javaeva/server/modules/HCParameters.java create mode 100644 src/javaeva/server/modules/MCModuleAdapter.java create mode 100644 src/javaeva/server/modules/MCParameters.java create mode 100644 src/javaeva/server/modules/MOEAModuleAdapter.java create mode 100644 src/javaeva/server/modules/MOEAParameters.java create mode 100644 src/javaeva/server/modules/ModuleAdapter.java create mode 100644 src/javaeva/server/modules/PBILModuleAdapter.java create mode 100644 src/javaeva/server/modules/PBILParameters.java create mode 100644 src/javaeva/server/modules/PSOModuleAdapter.java create mode 100644 src/javaeva/server/modules/PSOParameters.java create mode 100644 src/javaeva/server/modules/Processor.java create mode 100644 src/javaeva/server/modules/SAModuleAdapter.java create mode 100644 src/javaeva/server/modules/SAParameters.java create mode 100644 src/javaeva/server/modules/SSGAModuleAdapter.java create mode 100644 src/javaeva/server/modules/SSGAParameters.java create mode 100644 src/javaeva/server/stat/GenericStatistics.java create mode 100644 src/javaeva/server/stat/LoggerInterface.java create mode 100644 src/javaeva/server/stat/MovingAverage.java create mode 100644 src/javaeva/server/stat/ProcessControlerInterface.java create mode 100644 src/javaeva/server/stat/Statistics.java create mode 100644 src/javaeva/server/stat/StatisticsParameter.java create mode 100644 src/javaeva/server/stat/StatisticsParameterImpl.java create mode 100644 src/javaeva/server/stat/StatisticsStandalone.java create mode 100644 src/javaeva/server/stat/StatisticsWithGUI.java create mode 100644 src/javaeva/tools/Cluster.java create mode 100644 src/javaeva/tools/CompileAndLoad.java create mode 100644 src/javaeva/tools/CubicSpline.java create mode 100644 src/javaeva/tools/EVAERROR.java create mode 100644 src/javaeva/tools/EVAHELP.java create mode 100644 src/javaeva/tools/EVAThread.java create mode 100644 src/javaeva/tools/JPasswordDialog.java create mode 100644 src/javaeva/tools/JarResources.java create mode 100644 src/javaeva/tools/JavacWrapper.java create mode 100644 src/javaeva/tools/KMEANSJAVA.java create mode 100644 src/javaeva/tools/LogProxy.java create mode 100644 src/javaeva/tools/Mathematics.java create mode 100644 src/javaeva/tools/MultirunRefiner.java create mode 100644 src/javaeva/tools/ReflectPackage.java create mode 100644 src/javaeva/tools/SelectedTag.java create mode 100644 src/javaeva/tools/Serializer.java create mode 100644 src/javaeva/tools/ServerPingThread.java create mode 100644 src/javaeva/tools/Source.java create mode 100644 src/javaeva/tools/TXTFileFilter.java create mode 100644 src/javaeva/tools/Tag.java create mode 100644 src/javaeva/tools/TokenHolder.java create mode 100644 src/javaeva/tools/URLGetter.java create mode 100644 src/wsi/ra/chart2d/DArea.java create mode 100644 src/wsi/ra/chart2d/DArray.java create mode 100644 src/wsi/ra/chart2d/DBorder.java create mode 100644 src/wsi/ra/chart2d/DComponent.java create mode 100644 src/wsi/ra/chart2d/DContainer.java create mode 100644 src/wsi/ra/chart2d/DElement.java create mode 100644 src/wsi/ra/chart2d/DFunction.java create mode 100644 src/wsi/ra/chart2d/DGrid.java create mode 100644 src/wsi/ra/chart2d/DIntDoubleMap.java create mode 100644 src/wsi/ra/chart2d/DLine.java create mode 100644 src/wsi/ra/chart2d/DMeasures.java create mode 100644 src/wsi/ra/chart2d/DParent.java create mode 100644 src/wsi/ra/chart2d/DPoint.java create mode 100644 src/wsi/ra/chart2d/DPointIcon.java create mode 100644 src/wsi/ra/chart2d/DPointSet.java create mode 100644 src/wsi/ra/chart2d/DRectangle.java create mode 100644 src/wsi/ra/chart2d/ScaledBorder.java create mode 100644 src/wsi/ra/diagram/ColorBarCalculator.java create mode 100644 src/wsi/ra/jproxy/ComAdapter.java create mode 100644 src/wsi/ra/jproxy/JProxyRemoteThread.java create mode 100644 src/wsi/ra/jproxy/MainAdapter.java create mode 100644 src/wsi/ra/jproxy/MainAdapterClient.java create mode 100644 src/wsi/ra/jproxy/MainAdapterClientImpl.java create mode 100644 src/wsi/ra/jproxy/MainAdapterImpl.java create mode 100644 src/wsi/ra/jproxy/NO_RMIServerAvailable.java create mode 100644 src/wsi/ra/jproxy/RMIConnection.java create mode 100644 src/wsi/ra/jproxy/RMIInvocationHandler.java create mode 100644 src/wsi/ra/jproxy/RMIInvocationHandlerImpl.java create mode 100644 src/wsi/ra/jproxy/RMIProxyLocal.java create mode 100644 src/wsi/ra/jproxy/RMIProxyLocalThread.java create mode 100644 src/wsi/ra/jproxy/RMIProxyRemote.java create mode 100644 src/wsi/ra/jproxy/RMIProxyRemoteThread.java create mode 100644 src/wsi/ra/jproxy/RMIServer.java create mode 100644 src/wsi/ra/jproxy/RMIThreadInvocationHandler.java create mode 100644 src/wsi/ra/jproxy/RMIThreadInvocationHandlerImpl.java create mode 100644 src/wsi/ra/jproxy/RemoteStateListener.java create mode 100644 src/wsi/ra/jproxy/ThreadProxy.java create mode 100644 src/wsi/ra/jproxy/ThreadWrapper.java create mode 100644 src/wsi/ra/jproxy/XThread.java create mode 100644 src/wsi/ra/math/Jama/CholeskyDecomposition.java create mode 100644 src/wsi/ra/math/Jama/EigenvalueDecomposition.java create mode 100644 src/wsi/ra/math/Jama/LUDecomposition.java create mode 100644 src/wsi/ra/math/Jama/Matrix.java create mode 100644 src/wsi/ra/math/Jama/QRDecomposition.java create mode 100644 src/wsi/ra/math/Jama/SingularValueDecomposition.java create mode 100644 src/wsi/ra/math/Jama/util/Maths.java create mode 100644 src/wsi/ra/math/RNG.java create mode 100644 src/wsi/ra/math/SpecialFunction.java create mode 100644 src/wsi/ra/math/interpolation/AbstractDataModifier.java create mode 100644 src/wsi/ra/math/interpolation/AbstractDataSet.java create mode 100644 src/wsi/ra/math/interpolation/BasicDataSet.java create mode 100644 src/wsi/ra/math/interpolation/InterpolationException.java create mode 100644 src/wsi/ra/math/interpolation/LinearInterpolation.java create mode 100644 src/wsi/ra/math/interpolation/PolyInterpolation.java create mode 100644 src/wsi/ra/math/interpolation/PolynomialInterpolationResult.java create mode 100644 src/wsi/ra/math/interpolation/SplineInterpolation.java create mode 100644 src/wsi/ra/print/PagePrinter.java create mode 100644 src/wsi/ra/sort/XYDoubleArray.java create mode 100644 src/wsi/ra/tool/BasicResourceLoader.java create mode 100644 src/wsi/ra/tool/DummyCategory.java create mode 100644 src/wsi/ra/tool/IntegerArrayList.java create mode 100644 src/wsi/ra/tool/ResourceLoader.java create mode 100644 src/wsi/ra/tool/StatisticUtils.java create mode 100644 src/wsi/ra/tool/matlab/JMatLink.c create mode 100644 src/wsi/ra/tool/matlab/JMatLink.h create mode 100644 src/wsi/ra/tool/matlab/JMatLink.java create mode 100644 src/wsi/ra/tool/matlab/Makefile diff --git a/.classpath b/.classpath new file mode 100644 index 00000000..bdb2412f --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/.project b/.project new file mode 100644 index 00000000..51c6ca7b --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + JORelease + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Manifest.txt b/Manifest.txt new file mode 100644 index 00000000..66158fb8 --- /dev/null +++ b/Manifest.txt @@ -0,0 +1 @@ +Class-Path: lib/activation.jar lib/j2ssh-common.jar lib/jmatlink.jar lib/mail.jar lib/commons-logging.jar lib/j2ssh-core.jar lib/libJMatLink.so pop3.jar lib/wsi2.jar lib/imap.jar lib/j2ssh-dameon.jar lib/log4j.jar lib/smtp.jar lib/xalan2.jar lib/j2ssh-ant.jar lib/jdom.jar lib/mailapi.jar lib/sshfactory.jar lib/libJMatLink.so lib/windows/JMatLink.dll lib/windows/SNNS_jkr.dll diff --git a/ant/build.xml b/ant/build.xml new file mode 100644 index 00000000..1c76844f --- /dev/null +++ b/ant/build.xml @@ -0,0 +1,888 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Supported targets (default=compileAll): + ------------------------------------------------------------------------- + check - checks if all needed binary and source libraries are + available. + compile - compile all project files. + compileAll - 1. gets an actual version from the WSI library + 2. and compiles all project files. + javadoc - build project javadoc files + binaryDist - will create a complete binary distribution + clean - will clean up files, except the source files and the api + documentation + run - will start JavaEvA + + use 'ant -projecthelp' for further Main targets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test]]> + +
+ JavaEvA + + ]]> +
+ + + + + +
+
+ + + + + Checking Project Mess Detection (PMD) rulesets. + + + + + + + + + + + + + + + + result written to ${basedir}/${build.directory}/pmdReport4JavaEVA-${DSTAMP}_basic.html + + + + + + + + result written to ${basedir}/${build.directory}/pmdReport4JavaEVA-${DSTAMP}_braces.html + + + + + + + + result written to ${basedir}/${build.directory}/pmdReport4JavaEVA-${DSTAMP}_codesize.html + + + + + + + + result written to ${basedir}/${build.directory}/pmdReport4JavaEVA-${DSTAMP}_controversial.html + + + + + + + + result written to ${basedir}/${build.directory}/pmdReport4JavaEVA-${DSTAMP}_coupling.html + + + + + + + + result written to ${basedir}/${build.directory}/pmdReport4JavaEVA-${DSTAMP}_finalizers.html + + + + + + + + result written to ${basedir}/${build.directory}/pmdReport4JavaEVA-${DSTAMP}_imports.html + + + + + + + + result written to ${basedir}/${build.directory}/pmdReport4JavaEVA-${DSTAMP}_naming.html + + + + + + + + result written to ${basedir}/${build.directory}/pmdReport4JavaEVA-${DSTAMP}_strictexception.html + + + + + + + + result written to ${basedir}/${build.directory}/pmdReport4JavaEVA-${DSTAMP}_strings.html + + + + + + + + result written to ${basedir}/${build.directory}/pmdReport4JavaEVA-${DSTAMP}_unusedcode.html + + + WARNING: use environment variable: ANT_OPTS=-Xmx512m or this task will fail. + Checking for duplicated code using the Copy/Paste Detector (CPD). + + + + + + + + + + + + + + result written to ${basedir}/${build.directory}/duplicatedCodeReport4JavaEVA-${DSTAMP}.txt + + + + + Starts JavaNCSS ... + + + + + + + + + Cyclomatic +Complexity Ease of Risk +Number (CCN) maintenance +(McCabe metric) +--------------------------------------------- +1-10, simple easy minimum +11-20, complex moderate moderate +21-50, more complex hard high +>50, unstable very hard very high + + + + result written to ${basedir}/${build.directory}/javancssReport4JavaEVA-${DSTAMP}.txt + + + + + + + + + + + + + + + Starts VizANT ... + + + + + + + + + + + + + + + + + + + + + + + + + result written to ${basedir}/${build.directory}/vizant_build.dot ... + result written to ${basedir}/${build.directory}/vizant_check.dot. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Starts findBugs ... + + result written to ${basedir}/${build.directory}/javaeva-fb.xml, now you can open this file with the findBugs GUI ... + open with 'File->LoadBugs' then open '${basedir}/${build.directory}/javaeva-fb.xml'. + + +
+ + diff --git a/ant/check.xml b/ant/check.xml new file mode 100644 index 00000000..f195fb0a --- /dev/null +++ b/ant/check.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ant/out b/ant/out new file mode 100644 index 00000000..234c307f --- /dev/null +++ b/ant/out @@ -0,0 +1,52 @@ +Buildfile: build.xml + +usage: + [echo] + [echo] Supported targets (default=compileAll): + [echo] ------------------------------------------------------------------------- + [echo] check - checks if all needed binary and source libraries are + [echo] available. + [echo] compile - compile all project files. + [echo] compileAll - 1. gets an actual version from the WSI library + [echo] 2. and compiles all project files. + [echo] javadoc - build project javadoc files + [echo] binaryDist - will create a complete binary distribution + [echo] clean - will clean up files, except the source files and the api + [echo] documentation + [echo] run - will start JavaEvA + [echo] + [echo] use 'ant -projecthelp' for further Main targets + [echo] + +init: + +buildDirectories: + +check: + +binary.libraries.check: + +binary.libraries.test.SNNS.windows: + +binary.libraries.test.SNNS.unix: + [echo] WARNING: lib/linux/libSNNS_jkr.so not available. + +binary.libraries.test.WSI: + [echo] WARNING: wsi package not available at lib/wsi.jar. + +binary.libraries.test.JavaNNS: + [echo] WARNING: javanns package not available at lib/JavaNNS.jar. + +binary.libraries.test: + +compileInfo: + [echo] ANT_HOME is set to = c:\jakarta-ant-1.5.1 + [echo] JAVA_HOME is set to = c:\j2sdk1.4.1 + [echo] You are using JDK version 1.4 + [echo] currently JDK version 1.3 is recomended! + + [echo] use 'ant compileAll' - to compile all java sources (+ WSI). + [echo] use 'ant compile' - to compile only the java sources (faster). + +compile: + [javac] Compiling 223 source files to Z:\work\JOpt\build diff --git a/lastmodule.ser b/lastmodule.ser new file mode 100644 index 0000000000000000000000000000000000000000..9714c0dc1bb7588cf2768c8baf2e5f5d3c4b9ee4 GIT binary patch literal 27 icmZ4UmVvc|LBu^ZFSR5yIo`jZBr`X&DzPLpKMw$k6$(rM literal 0 HcmV?d00001 diff --git a/resources/ConvergenceTerminator.html b/resources/ConvergenceTerminator.html new file mode 100644 index 00000000..0fd630c2 --- /dev/null +++ b/resources/ConvergenceTerminator.html @@ -0,0 +1,13 @@ + + +Convergence Terminator + + +

Convergence Terminator

+
+

+The convergence terminator stops the optimization, when there has been hardly +any change in the best population fitness (within percentual range) for a certain +time, given in generations or fitness calls. + + \ No newline at end of file diff --git a/resources/Default.html b/resources/Default.html new file mode 100644 index 00000000..c25cad58 --- /dev/null +++ b/resources/Default.html @@ -0,0 +1,15 @@ + + +Default page + + +  +

HTML description file is missing

+
+

+Unfortunately there is no additional HTML description +file to this class. Please refer to the JOptDocumentation +file or the JavaDoc for more information on this class. + + + \ No newline at end of file diff --git a/resources/EPSILON_SVM.html b/resources/EPSILON_SVM.html new file mode 100644 index 00000000..e80ece2b --- /dev/null +++ b/resources/EPSILON_SVM.html @@ -0,0 +1,13 @@ + + +Epsilon SV-Regression + + +  +

Epsilon SV-Regression

+
+

+Please read the JavaEvA manual for a detailed description. + + + \ No newline at end of file diff --git a/resources/ESIndividual.html b/resources/ESIndividual.html new file mode 100644 index 00000000..867a80aa --- /dev/null +++ b/resources/ESIndividual.html @@ -0,0 +1,16 @@ + + +ESIndividual + + +  +

ESIndividual

+
+

+This element represents the properties of an individual. +The most important evolutionary operator of an ES is +the mutation of the objective variables representing +the solution of the problem, which is responsible +for the self-adaptation capability of the ES + + \ No newline at end of file diff --git a/resources/ESInitPopulationDOptimal.html b/resources/ESInitPopulationDOptimal.html new file mode 100644 index 00000000..3fda59a2 --- /dev/null +++ b/resources/ESInitPopulationDOptimal.html @@ -0,0 +1,18 @@ + + +f_1 : Sphere function + + +  +

ESInitPopulationSpaceFilling

+
+

+ESPara contains the information describing the Evolution Strategy: + + + \ No newline at end of file diff --git a/resources/ESInitPopulationRandom.html b/resources/ESInitPopulationRandom.html new file mode 100644 index 00000000..4cccdc84 --- /dev/null +++ b/resources/ESInitPopulationRandom.html @@ -0,0 +1,10 @@ + + +ESInitPopulationRandom + + +  +

ESInitPopulationRandom

+
+

+Here you can specify the number of individuals, which are randomly initialized. \ No newline at end of file diff --git a/resources/ESInitPopulationSpaceFilling.html b/resources/ESInitPopulationSpaceFilling.html new file mode 100644 index 00000000..3fda59a2 --- /dev/null +++ b/resources/ESInitPopulationSpaceFilling.html @@ -0,0 +1,18 @@ + + +f_1 : Sphere function + + +  +

ESInitPopulationSpaceFilling

+
+

+ESPara contains the information describing the Evolution Strategy: + + + \ No newline at end of file diff --git a/resources/ESPara.html b/resources/ESPara.html new file mode 100644 index 00000000..ad6427c3 --- /dev/null +++ b/resources/ESPara.html @@ -0,0 +1,17 @@ + + +f_1 : Sphere function + +  +

Parameters for the Evolution Strategy

+
+

+The Java Class ESPara contains the information describing an Evolution Strategy (ES): + + + \ No newline at end of file diff --git a/resources/ESPopulation.html b/resources/ESPopulation.html new file mode 100644 index 00000000..1b8b65ee --- /dev/null +++ b/resources/ESPopulation.html @@ -0,0 +1,18 @@ + + +ESPopulation + +  +

ESPopulation

+
+

+ESPopulation contains the information describing an Evolution Strategy (ES): + + + \ No newline at end of file diff --git a/resources/ESRecombination.html b/resources/ESRecombination.html new file mode 100644 index 00000000..0f764bf9 --- /dev/null +++ b/resources/ESRecombination.html @@ -0,0 +1,18 @@ + + +ESRecombination + + +  +

ESRecombination

+
+

+The recombination operator has the following editable properties: + + + \ No newline at end of file diff --git a/resources/ESSelectionStrategyComma.html b/resources/ESSelectionStrategyComma.html new file mode 100644 index 00000000..50da1887 --- /dev/null +++ b/resources/ESSelectionStrategyComma.html @@ -0,0 +1,12 @@ + + +ES Comma Selection + + +  +

ES Comma Selection Operator

+
+

+The best mu individuals are selected from lambda offspring individuals. + + \ No newline at end of file diff --git a/resources/ESSelectionStrategyMedian.html b/resources/ESSelectionStrategyMedian.html new file mode 100644 index 00000000..bb41fb2d --- /dev/null +++ b/resources/ESSelectionStrategyMedian.html @@ -0,0 +1,26 @@ + + +ES - Median Selection + + +  +

ES Median Selection Strategy

+
+

+The main application field of the Median Selection Strategy +operator are steady state algorithms. +A standard steady-state ES is equivalent to a (mu + 1) ES. +Only one individual is generated and evaluated +at each step and gets immediately integrated into the population. +Compared to generation based algorithms the information of +new evaluated individuals can be integrated directly into the optimization process. +The idea is to approximate the selection mechanism +of a standard (mu,lambda) ES, by +using a fitness buffer containing +fitness values of the last n evaluations. +Given a relative rate of acceptance r=mu\lambda. +A newly evaluated individual substitutes the worst individual +of the population, if it has a better fitness than the r*n best individuals +in the buffer. + + \ No newline at end of file diff --git a/resources/ESSelectionStrategyMixed.html b/resources/ESSelectionStrategyMixed.html new file mode 100644 index 00000000..5fb72426 --- /dev/null +++ b/resources/ESSelectionStrategyMixed.html @@ -0,0 +1,18 @@ + + +f_1 : Sphere function + + +  +

ESSelectionStrategyMedian

+
+

+ESPara contains the information describing the Evolution Strategy: + + + \ No newline at end of file diff --git a/resources/ESSelectionStrategyPlus.html b/resources/ESSelectionStrategyPlus.html new file mode 100644 index 00000000..88f18849 --- /dev/null +++ b/resources/ESSelectionStrategyPlus.html @@ -0,0 +1,13 @@ + + +Plus Selection Strategy + + +  +

ES Plus Selection Operator

+
+

+The best mu individuals are selected from the +aggregation of the lambda offspring individuals and the mu parents. + + \ No newline at end of file diff --git a/resources/EvolutionStrategies.html b/resources/EvolutionStrategies.html new file mode 100644 index 00000000..4ec6818b --- /dev/null +++ b/resources/EvolutionStrategies.html @@ -0,0 +1,21 @@ + + +Evolution Strategy - ES + + +  +

Evolution Strategy - ES

+
+

+An ES works on a population of real valued solutions +by repeated use of evolutionary operators like reproduction, +recombination and mutation (see pseudocode in figures. +lambda offspring individuals are generated from mu parents +by recombination and mutation. After evaluating the fitness of the lambda +offspring individuals, mu individuals with the best fitness are +selected by a comma-strategy to build the parent population for the next generation. +On the other hand, a plus-strategy selects the best mu individuals +from the aggregation of parents and offspring individuals. +The properties of ES are given in the population sub frame. + + \ No newline at end of file diff --git a/resources/F1Problem.html b/resources/F1Problem.html new file mode 100644 index 00000000..00b97033 --- /dev/null +++ b/resources/F1Problem.html @@ -0,0 +1,24 @@ + + +f_1 : Sphere function + +  +

The Sphere function

+
+ +

+The sphere function is a n-dimensional, axis-symmetric, continuously differentiable, convex function: +

+Because of its simplicity every optimization-algorithm should be able to find its global minimum at x=[0, 0, ... , 0] +

+ + + +


+More information about the sphere function can be found at: +

+ +Kenneth De Jong. An analysis of the behaviour of a class of genetic adaptive systems. Dissertation, University of Michigan, 1975. Diss. Abstr. Int. 36(10), 5140B, University Microflims No. 76-9381. + + + \ No newline at end of file diff --git a/resources/F2Problem.html b/resources/F2Problem.html new file mode 100644 index 00000000..7397650e --- /dev/null +++ b/resources/F2Problem.html @@ -0,0 +1,36 @@ + + +Generalized Rosenbrock's function + +  +

Generalized Rosenbrock's function

+
+ +
+

+This function i unimodal and continuous, but the global optimum is hard to find, because of independence through the term (x_(i+1) - x_i*x_i)^2 between contiguous parameters. +

+ +
+Rosenbrock's function within the co-domain -5 <= x <= 5. +

+The global optimum is located in a prabolic formed valley (among the curve x^2 = x_1^2), which has a flatten ground. +
+ +
+The function close to its global optimum, which is: f(x) = f(1, 1, ... , 1) = 0. +

+Rosenbrock' function is not symmetric, not convex and not linear. + +


+More information about Rosenbrock's function can be found at: +

+Kenneth De Jong. An analysis of the behaviour of a class of genetic adaptive systems. Dissertation, University of Michigan, 1975. Diss. Abstr. Int. 36(10), 5140B, University Microflims No. 76-9381. +

+Hans Paul Schwefel. Evolution and optimum seeking. Sixth-Generation Computer Technology Series. John Wiley & Sons, INC., 1995. +

+Darrell Whitley, Soraya Rana, John Dzubera, Keith E. Mathias. Evaluating Evolutionary Algorithms. Artificial Intelligence, 85(1-2):245-276. 1996. +

+Eberhard Schoeneburg, Frank Heinzmann, Sven Feddersen. Genetische Algorithmen und Evolutionstrategien - Eine Einfuehrung in Theorie und Praxis der simulierten Evolution. Addison-Wesley, 1994. + + \ No newline at end of file diff --git a/resources/F3Problem.html b/resources/F3Problem.html new file mode 100644 index 00000000..a082d759 --- /dev/null +++ b/resources/F3Problem.html @@ -0,0 +1,29 @@ + + +The step function + +  +

The step function

+
+ +
+

+The idea of this function is the implementation of a flat plateau (slope 0)in an underlying continuous function.Its harder for optimization algortihms to find optimums because minor changes of the object variables don't affect the fitness. Therefore no conclusions about the search direction can be made. +

+ +

+The step function is symmetric considering the underlying function (here: f(x,y) = f(y,x)), but between the bulk constant plateau-areas not continuously differentiable. +

+Its minimum-area is located in the intervalls: f(x)=f([-5.12,-5), ... , [-5.12,-5))=0. +

+ +


+More information about the step function can be found at: +

+Thomas Baeck, Evolutionary Algorithms in Theory and Practice. Oxford University Press, 1996. +

+Darrell Whitley, Soraya Rana, John Dzubera, Keith E. Mathias. Evaluating Evolutionary Algorithms. Artificial Intelligence, 85(1-2):245-276. 1996. +

+Eberhard Schoeneburg, Frank Heinzmann, Sven Feddersen. Genetische Algorithmen und Evolutionstrategien - Eine Einfuehrung in Theorie und Praxis der simulierten Evolution. Addison-Wesley, 1994. + + \ No newline at end of file diff --git a/resources/F5Problem.html b/resources/F5Problem.html new file mode 100644 index 00000000..4d8ac72a --- /dev/null +++ b/resources/F5Problem.html @@ -0,0 +1,27 @@ + + +Schwefel's double sum + +  +

Schwefels double sum

+
+ +
+

+Schwefel's double sum is a quadratic minimization problem which difficulty increases by the dimension n in O(n²). It is used for analysis of correlating mutations. +

+It possesses specific symmetrical properties:
+ + +

+Its minimum is located at: f(x)=f([0, 0, ... , 0])=0 +

+ + +


+More information about Schwefel's double sum can be found at: +

+Hans Paul Schwefel. Evolution and optimum seeking. Sixth-Generation Computer Technology Series. John Wiley & Sons, INC., 1995. + + + \ No newline at end of file diff --git a/resources/F6Problem.html b/resources/F6Problem.html new file mode 100644 index 00000000..70abac76 --- /dev/null +++ b/resources/F6Problem.html @@ -0,0 +1,42 @@ + + +Generalized Rastrigin's function + +  +

Generalized Rastrigin's function

+
+ +
+

+Rastrigin's function is symmetric. It is based on the simple sphere function (called f_1 in the JavaEva© context), but it is multimodal because a modulation term on the basis of the cosine function is added. This evokes hills and valleys which are misleading local optimums. +

+Values are used for the following illustrations: A=10, ω=2*π, n=2. + +
+ + +
+ +Rastrigin's function within the co-domain -20>=x>=20 + +

+ +
+ +Rastrigin's function within the co-domain -5>=x>=5 + +

+ +Like Ackley's function a simple evolutionary algorithm would get stuck in a local optimum, while a broader searching algorithm would get out of the local optimum closer to the global optimum, which in this case is: f(x) = f(0, 0, ... , 0) = 0. +

+
+Rastrigin's function close to its optimum. + +


+More information about Rastrigin's function can be found at: +

+Darrell Whitley, Soraya Rana, John Dzubera, Keith E. Mathias. Evaluating Evolutionary Algorithms. Artificial Intelligence, 85(1-2):245-276. 1996. +

+Eberhard Schoeneburg, Frank Heinzmann, Sven Feddersen. Genetische Algorithmen und Evolutionstrategien - Eine Einfuehrung in Theorie und Praxis der simulierten Evolution. Addison-Wesley, 1994. + + \ No newline at end of file diff --git a/resources/F8Problem.html b/resources/F8Problem.html new file mode 100644 index 00000000..64f45238 --- /dev/null +++ b/resources/F8Problem.html @@ -0,0 +1,34 @@ + + +Ackley's function + +  +

Ackley's function

+
+ +
+

+Ackley's function is intense multimodal and symmetrical. It refers to an exponential function which is modulated through a cosine function. The outside region is almost planar by the growing influence of the exponential function. In the center it possesses a hole by the influence of the cosine function.
+Its minimum is at: f(x)=f([0, 0, ... , 0])=0. +

+The difficulty for an optmization algorithm is mid-graded because a simple optimization-algorithm like hill-climbing would get stuck in a local minimum. The optimization algorithm has to search a broader environ to overcome the local minimum and get closer to the global optima. + +

+ + +
+Ackley's function within the co-domain -20 >= x >= 20, a=20, b=0.2, c=2*π, n=2. +

+ + +
+Ackley's function close to the optimum. +


+More information about Ackley's function can be found at: +

+David. H. Ackley. A connection machine for genetic hillclimbing. Kluwer Academic Publishers, Boston, 1987. +

+Thomas Baeck. Evolutionary Algorithms in Theory and Practice. Oxford University Press, 1996. + + + \ No newline at end of file diff --git a/resources/GO.html b/resources/GO.html new file mode 100644 index 00000000..f4687953 --- /dev/null +++ b/resources/GO.html @@ -0,0 +1,17 @@ + + +JavaEvA Genetic Optimization + + +

The JavaEvA Genetic Optimization Module

+
+The Genetic Optimization module allows the application of a variety of +nature-inspired heuristics within one framework. You can combine several +datatypes as representations with specific evolutionary operators and +widely independently choose an optimization strategy. Some strategies, +however, only work with certain datatypes. Most remarkably, DE and PSO +require a real-valued representations for the moment, whereas GA, for example, +is typically run with a binary datatype but also works on real valued individuals +by just accessing the analoguous evolutionary operators. + + diff --git a/resources/GOParameters.html b/resources/GOParameters.html new file mode 100644 index 00000000..a76b4b03 --- /dev/null +++ b/resources/GOParameters.html @@ -0,0 +1,25 @@ + + +JavaEvA Genetic Optimization + + +

Genetic Optimization Parameters

+
+The GO parameter class is used to change main GO optimization settings. You may: + +Note:
+The evolutionary operators used by a strategy are tightly connected to the representation used. +On the other hand, the representation is usually defined by the underlying problem, therefore, +to change the operators effecting the individuals, select the problem and set them within the +Individual class presented there. Also note, that not all optimizers can handle all types +of representations. + + \ No newline at end of file diff --git a/resources/GaussProcess.html b/resources/GaussProcess.html new file mode 100644 index 00000000..7b33ff24 --- /dev/null +++ b/resources/GaussProcess.html @@ -0,0 +1,13 @@ + + +Gauss Process Regression Model + + +  +

Gauss Process Regression Model

+
+

+Please read the JavaEvA manual for a detailed description. + + + \ No newline at end of file diff --git a/resources/JavaEvA.props b/resources/JavaEvA.props new file mode 100644 index 00000000..7b82dc18 --- /dev/null +++ b/resources/JavaEvA.props @@ -0,0 +1,19 @@ +# Select a default module. Set empty or comment out to select from all available modules. +# +# possible values are the names of module objects as returned by their getName method (!). +# DefaultModule = Evolution_Strategy +DefaultModule = Genetic_Optimization + +## Uncomment this to show all loadable modules. Most are redundant, though. +ShowModules + +ServerList = localhost,134.2.172.14,ranode22 + +# base class for modules. Do not alter! +ModulePackage = javaeva.server.modules + +# filter class for modules. Do not alter! +ModuleFilterClass = javaeva.server.modules.AbstractModuleAdapter + +###################### The GO part ###################################### +# there are no further props necessary \ No newline at end of file diff --git a/resources/MAES.html b/resources/MAES.html new file mode 100644 index 00000000..69d5849a --- /dev/null +++ b/resources/MAES.html @@ -0,0 +1,28 @@ + + +Model Assisted Evolution Strategy - MAES + + +  +

Model Assisted Evolution Strategy - MAES

+
+

+In the pre-selection concept lambdaPlus>lambda +individuals are generated from mu parents. +All lambdaPlus individuals are evaluated by a +surrogate model of the fitness landscape and the estimated +fitness values are used to pre-select the lambda +best individuals, which will be evaluated with +the real fitness function. +The model is trained at the beginning with a randomly created +initial population and is updated after each generation +step with lambda new fitness cases. +The idea behind this approach is that only the +most promising individuals with a good fitness prediction +are evaluated with the true fitness function. + +Every generation a new offspring lambda is evaluated with the real fitness function, +the model is updated with this information of \lambda fitness cases. + + + \ No newline at end of file diff --git a/resources/MAESIndividual.html b/resources/MAESIndividual.html new file mode 100644 index 00000000..c7c2a730 --- /dev/null +++ b/resources/MAESIndividual.html @@ -0,0 +1,16 @@ + + +MAESIndividual + + +  +

MAESIndividual

+
+

+This element represents the properties of an individual. +The most important evolutionary operator of an ES is +the mutation of the objective variables representing +the solution of the problem, which is responsible +for the self-adaptation capability of the ES + + \ No newline at end of file diff --git a/resources/MAESPara.html b/resources/MAESPara.html new file mode 100644 index 00000000..3856eb08 --- /dev/null +++ b/resources/MAESPara.html @@ -0,0 +1,17 @@ + + +MAESPara + +  +

MAESPara

+
+

+MAESPara contains the information describing an Evolution Strategy (ES): + + + \ No newline at end of file diff --git a/resources/MAESPopulation.html b/resources/MAESPopulation.html new file mode 100644 index 00000000..36328310 --- /dev/null +++ b/resources/MAESPopulation.html @@ -0,0 +1,23 @@ + + +MAESPopulation + +  +

Model Assisted Population

+
+

+The MAESPopulation panel contains the information describing the Model Assisted Evolution Strategy (MAES): + + + \ No newline at end of file diff --git a/resources/MAESRecombination.html b/resources/MAESRecombination.html new file mode 100644 index 00000000..c5dcb583 --- /dev/null +++ b/resources/MAESRecombination.html @@ -0,0 +1,18 @@ + + +MAESRecombination + + +  +

MAESRecombination

+
+

+The recombination operator has the following editable properties: + + + \ No newline at end of file diff --git a/resources/MAESSelectionStrategyComma.html b/resources/MAESSelectionStrategyComma.html new file mode 100644 index 00000000..4c96d77e --- /dev/null +++ b/resources/MAESSelectionStrategyComma.html @@ -0,0 +1,12 @@ + + +MAES Comma Selection + + +  +

MAES Comma Selection Operator

+
+

+The best mu individuals are selected from lambda offspring individuals. + + \ No newline at end of file diff --git a/resources/MAESSelectionStrategyMedian.html b/resources/MAESSelectionStrategyMedian.html new file mode 100644 index 00000000..8fa75fb6 --- /dev/null +++ b/resources/MAESSelectionStrategyMedian.html @@ -0,0 +1,32 @@ + + +MAES - Median Selection + + +  +

MAES Median Selection Strategy

+
+

+The main application field of the Median Selection Strategy +operator are steady state algorithms. +A standard steady-state ES is equivalent to a (mu + 1) ES. +Only one individual is generated and evaluated +at each step and gets immediately integrated into the population. +Compared to generation based algorithms the information of +new evaluated individuals can be integrated directly into the optimization process. +The idea is to approximate the selection mechanism +of a standard (mu,lambda) ES, by +using a fitness buffer containing +fitness values of the last n evaluations. +Given a relative rate of acceptance r=mu\lambda. +A newly evaluated individual substitutes the worst individual +of the population, if it has a better fitness than the r*n best individuals +in the buffer. + + + \ No newline at end of file diff --git a/resources/MAESSelectionStrategyPlus.html b/resources/MAESSelectionStrategyPlus.html new file mode 100644 index 00000000..8cc93b09 --- /dev/null +++ b/resources/MAESSelectionStrategyPlus.html @@ -0,0 +1,13 @@ + + +Plus Selection Strategy + + +  +

MAES Plus Selection Operator

+
+

+The best mu individuals are selected from the +aggredation of the lambda offspring individuals and the mu parents. + + \ No newline at end of file diff --git a/resources/MOCCO/MOCCO_GDF.gif b/resources/MOCCO/MOCCO_GDF.gif new file mode 100644 index 0000000000000000000000000000000000000000..d4a7f2c16a38c9fb05c1e88affbc0261c0f61369 GIT binary patch literal 1674 zcmb7@`BRfu6o&6q6m*KM0(G#J;s#+67`|c!T&P&BAUld|DydvFh)ZROqF}W|5K(F% zctMt^C=eusMI}(TswHq$kWG}^wz4O-9)uNgmwKbYeP$5D=B{8*?k<}l$fB#aUUIYQD90C2%`2pZf%l#mBt zLN~+#Okfxs0yT&MG;{(MaKK>D25H8xh<^>&P{U!cF$fa;!C0s$WBdZO>*p!78|C+@ zT@nwa&7EJbHcFmRn-0HitzjNn>w#as7K?YFodnYGIlz`6Jn*C)h4l6HXU?1{5C|L` z99&&py}i9dLqj7YBgJB|L?V$&rE7funeg$m;ZX$YQ0LmP&MaP>Svs=t4KBXx8o+R2fwhWczP{T z;8zl&sVHpBvirW_lw(VSRA#XCMVF@1++*E@-6c9bl|{{GzEYIBG*lJ0WV&2foaaOfWo2{8=5U#{pOt%!Z%kv$k>G-kvrE&|)wXU+;<`Pn zM|W@YQakmZ(>W5iqv?k2(7=i{2Hu{(h(di6ir;0A8V2VEiag68Fz_AJ;~Nv4i~)p z=%*Eeq4z<@G#!2Yx7vLsEw8GpiSO-LGvoN`2X!HNL8-A}cXJbmA4`|W^49d;$*7Ol z3qmGdx%wl4bKV7hIy-LjYyUrDZdaf9Grpu8cxA&7arHJQxRnim5rW1YRT0-omh0FJ>elI9Ud!D4XHhO`> zWuwTYvbFxEm8$8FqFn4pyTi7&nav6h@JaE_^1EOkYjt1{vo^+O#D{WcaC; zXXI69c4kSlhjjXmhh6mFDB3wS(9mjc`q%UG_FTDrLe^fK`SCnWfliuTR+V_&S!)N0 zfoMWPjK+q^lII_tUmJ4p+1c!Kt!9}`EjrnVo`>C)*!x!1-8Qk$4=C*wy2Z7Iy(z_=8xHmP zoKn|sv$#6NFU0(+#NFp2d6KP2ZJ5$Mx%5U=?aRwq<04h@_Ng5Mifh87e;sI22db3m zdQzo(YMHwH&?mvmm5tN0UYcD??~1=uKS|fPKzLF%eV1Eq#*Mahp0;>`zjtp)^3jOyeZMY6tN?B z$?$yv7c=zxF7cR={o~vQ{gIr6#>FG8*%nde_YS*1Y$@%@#($HoRO4R0TNr5-a`{JPG- bc3*$2v2y%1o$+{lu*vq-_?u>39pwBk7%L?v literal 0 HcmV?d00001 diff --git a/resources/MOCCO/MOCCO_MOEA.gif b/resources/MOCCO/MOCCO_MOEA.gif new file mode 100644 index 0000000000000000000000000000000000000000..a2910c1a75092244afeb6095ec56d8f16b9c477b GIT binary patch literal 1545 zcmb7@`%~0a7{*UtiVC`LQ6ao!EiRJRv&(3K0;{I05g@o+Hvv7Uh!~hRgaid76jWxx z1EQ=+%Yv>z0>##ZX41kL4Ta?rGdWzvfT9^ln&R}HwSS=V%g#IJywCf2p7*=&Z`!bG zb>trOA^Hmy}>i zF=d!?0R?Xv!Hi`C+bUhFIy=@^Dji zX>-By=%$OSA2!()u1b8;ZQ3fSNVQ9PX|7Thqj6ZDw>UyM_Vz=aUt*}Vg zmDIQ?w*~uW1nrrrSKX+n42>)w9}d|@XjeBK4p8p8?eTT;?sUz(TCYT(FK;%F$|KJn zl>FSBFtYxF_s8?vvSvRh-F#{pRy$4>MiEKiV zN%_in@N)3<)ONl6ugR-x+kd+w$6JezTV1&smNxB4 z;o}*dwcNFMA~HSspG9H*1>UySZVl%a zMJ{NZl%0)N90>^9@4lvEeunFk3xTH#gPsNjZ?9U{vn6v}wm7{Kq&(k#AR+5WtWxFV9~clas9ZK`>PS7^Z;HxMOY#QR zX|8uXDvr?}?1?1GQ>9@m%+JT9+3y=D+wV|2v@Ic1`Shx4=PVaV_H&~(-SQQ_rUfOx z@6+7gebM+6EjgFedGw4S+jdB&%3COXd^y@>RYzv~P^U&WtycN@PVZ3pla!ndj&Z8w zHK+O{=0`KmTsIwmu`|aZzwnE?4(*Pzih$Sa=a;Fg-*{M*uZemrsq2@GB$<7Br7LBU z=yKY0*M2zVQo|9dmbGNZ-|C%^Xbqp;-LY%`H}~!g-&p!)bWuTKb)&R#iNww|ZfM%Z zge{@!w4!U)y)%Ao!rsnBM%na%*n0_{jfsJD%DU~Y&+MA`7RAnN*|EN*-`X2|?LIls r`tIB<Eot@FYSukyS7+KxbVSAMNcVcR^!h~C-nuwHFZABO(fiho literal 0 HcmV?d00001 diff --git a/resources/MOCCO/MOCCO_REFP.gif b/resources/MOCCO/MOCCO_REFP.gif new file mode 100644 index 0000000000000000000000000000000000000000..8d11317307067e2345f8f258f8f5a7913f7fcdf2 GIT binary patch literal 1777 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 lB1@Q}D<=|OcR4sTg)H?6|M2ESs literal 0 HcmV?d00001 diff --git a/resources/MOCCO/MOCCO_TBCH.gif b/resources/MOCCO/MOCCO_TBCH.gif new file mode 100644 index 0000000000000000000000000000000000000000..a44c66b02cef354ca5dd061f475e057e773042f0 GIT binary patch literal 2004 zcmb7@`CF9N6~`~KBOp-51tq1(ltn^-*NGTZHe+B02o5l1$spixtsu1$v4BfO1?_`LNS_{@btuhDHoQ3>2UZ(x3&+@S0)gum@8VO;LoR7 z(1K=$HN@6%Xp9NQ4C@cZLPgVof z`~w6y1ZofiXrP3rzyX6n8>B&tVUuI8p@u_fnqh+ke=rs*LTJK3u3#4^;F4wt%|MQj zGz0)#@En2$w-6=d0hrJYaR3t-28TcmVgL=DfCU^d7_>o}VOPYyhHI$dFt9NQ68ynf zs0hQb3)HTkrOptSw?L-?6$RrS!AsTcKKQ?)`4~sNW$u=P7}EQ(vq5ov^%f{ovQ-dd)KX*lfsA8ts6d&=d-Xnws0%IA z6}yNBuGK%N4ZF;j@n2VWHAJ-}KUTKdX`17Ea1z&|X0+vxL!#&}uQ!f2N*Zs<-i=(1 zmK)8!5D)Or4f^hXrhas#f)jr|RcaMSOb$(4DKz$(ol~bsI{y~^I7dkz92@-n-cQF( z-Zqc4?l)XzV9Sv|syj5~-%(1E6oM9CtXS?iMfzWW=spyN#J z!yNC-5lwTmcW(pDxi){_byT8k zR7ZSvxZ61Vy@agu)}qg3-K*n0A50q9I`l{N4M-9zYd9zQnf_0BYV?<&w4bBpCQ<1<%qdm2kLS$B$Xt&k z{mp%^hD#hrx<@6V$IK2ieSIJb|K^ZqmI=fvZXcGHviaP;JDX*zk`E}1lb=fh*_U{BlyNg zvd)e!m&WQadEOk)t0ZP1V>T+&1T8lyky z*w^J1dJpqARqIYGK5f#y{%KNZo%)yCBOiYs|JT%Ro$|gV#S4R$6W*a>z29}1zbrHR zZvI`vw_9tniRViD{NimNJnP%i7I({I&Cs5ucEQ8mhAmAOA2&z+IB4F#4NE!4`Xp)V z##X3KDZY>&j9!+nu+vM-d21v&t+z07TW_kHlW{-cx6>2G<7d38#09%G{(N-#lw&NX zIFP^lsp-nsp4I<$jr6?PGH%|Zzhn8aMX=$9M1}Pm|1vv4F2A&7sr|^#5Uxi-ezKVP z!LZY*;KeE7;yUxw-`~9>%P;yM^U|w<^CdP`?vkGp;#Hd;^ymq5PH&u?h_SE6<4G1lV%8aeDiaa + +CMA Mutation + + +  +

CMA Mutation

+
+

+Please read the JavaEvA manual for a detailed description. + + + \ No newline at end of file diff --git a/resources/MutationMSRGlobal.html b/resources/MutationMSRGlobal.html new file mode 100644 index 00000000..8c4d66b4 --- /dev/null +++ b/resources/MutationMSRGlobal.html @@ -0,0 +1,13 @@ + + +f_1 : Sphere function + + +  +

MutationMSRGlobal

+
+

+Please read the JavaEvA manual for a detailed description. + + + \ No newline at end of file diff --git a/resources/MutationMSRSeperate.html b/resources/MutationMSRSeperate.html new file mode 100644 index 00000000..fbae40db --- /dev/null +++ b/resources/MutationMSRSeperate.html @@ -0,0 +1,15 @@ + + +f_1 : Sphere function + + +  +

MutationMSRSeperate

+
+

+
+

+Please read the JavaEvA manual for a detailed description. + + + \ No newline at end of file diff --git a/resources/MutationMVA.html b/resources/MutationMVA.html new file mode 100644 index 00000000..25dd4445 --- /dev/null +++ b/resources/MutationMVA.html @@ -0,0 +1,13 @@ + + +MVA Mutation + + +  +

MVA Mutation

+
+

+Please read the JavaEvA manual for a detailed description. + + + \ No newline at end of file diff --git a/resources/MutationRandom.html b/resources/MutationRandom.html new file mode 100644 index 00000000..ac4d0f79 --- /dev/null +++ b/resources/MutationRandom.html @@ -0,0 +1,13 @@ + + +Random Mutation + + +  +

Random Mutation

+
+

+Please read the JavaEvA manual for a detailed description. + + + \ No newline at end of file diff --git a/resources/MutationSuccessRule.html b/resources/MutationSuccessRule.html new file mode 100644 index 00000000..97a71182 --- /dev/null +++ b/resources/MutationSuccessRule.html @@ -0,0 +1,13 @@ + + +Success Rule Mutation + + +  +

Success Rule

+
+

+Please read the JavaEvA manual for a detailed description. + + + \ No newline at end of file diff --git a/resources/NU_SVM.html b/resources/NU_SVM.html new file mode 100644 index 00000000..b3925b74 --- /dev/null +++ b/resources/NU_SVM.html @@ -0,0 +1,13 @@ + + +NU SV-Regression + + +  +

NU SV-Regression

+
+

+Please read the JavaEvA manual for a detailed description. + + + \ No newline at end of file diff --git a/resources/ParticleSwarmOptimization.html b/resources/ParticleSwarmOptimization.html new file mode 100644 index 00000000..66bf080e --- /dev/null +++ b/resources/ParticleSwarmOptimization.html @@ -0,0 +1,23 @@ + + +Particle Swarm Optimization - PSO + + +

Particle Swarm Optimization - PSO

+
+

+The Particle Swarm Optimization by Kennedy and Eberhardt is inspired by swarm intelligent +behaviour seen in animals like birds or ants. A swarm of particles is a set of individual agents +"flying" across the search space with individual velocity vectors. There is no selection as in +classic Evolutionary Algorithms. Instead, the individuals exchange knowledge about the space they +have come across. Each one is attracted to the best position the individual has seen so far (cognitive +component) and to the best position known by its neighbors (social component).
+The neighborhood is defined by the swarm velocity, which may be a linear ordering, a grid and some others. +The influence of the velocity of the last time-step is taken into account using an inertness/ +constriction parameter, which controls the convergence behaviour of the swarm. +The influence of social and cognitive attraction are weighed using the phi parameters. In the +constriction variant there is a dependence enforced between constriction and the phi, making sure that +the swarm converges slowly but steadily, see the publications of Clerc, e.g.
+ + + \ No newline at end of file diff --git a/resources/Poly.html b/resources/Poly.html new file mode 100644 index 00000000..4f0ae20d --- /dev/null +++ b/resources/Poly.html @@ -0,0 +1,13 @@ + + +Poly model + + +  +

Poly model

+
+

+Please read the JavaEvA manual for a detailed description. + + + \ No newline at end of file diff --git a/resources/PolyRBFJama.html b/resources/PolyRBFJama.html new file mode 100644 index 00000000..46dddbeb --- /dev/null +++ b/resources/PolyRBFJama.html @@ -0,0 +1,18 @@ + + +f_1 : Sphere function + + +  +

PolyRBFJama

+
+

+ESPara contains the information describing the Evolution Strategy: +
    +
  • The problem to be solved.
  • +
  • A seed value for the random number genarator.
  • +
  • A termination criterium for the algorithm.
  • +
  • The used population.
  • +
+ + \ No newline at end of file diff --git a/resources/RBF.html b/resources/RBF.html new file mode 100644 index 00000000..1cf144c1 --- /dev/null +++ b/resources/RBF.html @@ -0,0 +1,13 @@ + + +RBF model + + +  +

RBF model

+
+

+Please read the JavaEvA manual for a detailed description. + + + \ No newline at end of file diff --git a/resources/StatisticsParameterImpl.html b/resources/StatisticsParameterImpl.html new file mode 100644 index 00000000..68655f95 --- /dev/null +++ b/resources/StatisticsParameterImpl.html @@ -0,0 +1,17 @@ + + +Statistics Parameter Panel + + +  +

Statistics Parameter Panel

+
+

+Here you can edit the : +
    +
  • Number of statistical independent runs.
  • +
  • Name of result file.
  • +
  • Plot fitness of best, worse or both individuals.
  • +
+ + \ No newline at end of file diff --git a/resources/Tribes.html b/resources/Tribes.html new file mode 100644 index 00000000..dcab24c5 --- /dev/null +++ b/resources/Tribes.html @@ -0,0 +1,22 @@ + + +TRIBES + + +

TRIBES

+
+

+TRIBES is a parameter-free PSO implementation by Maurice Clerc. It combines several adaptive +mechanisms to achieve good performance in different domains. It uses a dynamic number of particles, +starting usually with 3 and adding new ones during optimization. Therefore, the number of generations +is not directly connected to the number of fitness calls, +because the population may grow (and seldomly shrink).
+ +Also, there are different initialization +methods implemented which are chosen randomly when particles are created. The particles are organized +in loosely connected groups or tribes (therefore the name), creating a kind of small-world topology. +
+As TRIBES uses an error approximation to steer the adaptations, a target value should be given, so far in the first +dimension only. + + \ No newline at end of file diff --git a/resources/images/Add24.gif b/resources/images/Add24.gif new file mode 100644 index 0000000000000000000000000000000000000000..69909d5bac2807dfb2804d066f0ac69c6d881ce7 GIT binary patch literal 962 zcmZ?wbhEHblwgox_|5cYIFE1}x-zYH}0z*Co6o0ZXGB7YP=zx3z$`cG6^BGtCmWNi6L zJTEZ1bf^bAsW3RCcuy8>){~GDaXdefK|sZ!)9B!(r5gSJTsAC7KE5!_+DkX%vswdd z;ND+PRs|~ftTjG8Nj6(3wPj0k_NvxO2Q`naT)ui9AHtLz83Y+tfAQY2;o;#9VQo1H H0S0RTWC>j% literal 0 HcmV?d00001 diff --git a/resources/images/Export24.gif b/resources/images/Export24.gif new file mode 100644 index 0000000000000000000000000000000000000000..ee523416e5de7726b3c859ad0deda60048b42588 GIT binary patch literal 473 zcmZ?wbhEHblwgoxIP#wX2>$>7f8f9Y1A|0c+q{Vr56zo*e&WQvhYo$3IC1Ow^Z)0~ zJM`((r}O8}A36k-nm2LcL|$HAkT&9g;!hSv1_mYu9guR6oeZo!3l#cNGUsKink2Y+ zmEfg)={X|CwzrPXy}W1k`LA5x`s_ne91@gxI@63ZlUUX;xF$00s4Cs&;u3x;kI~A( zWo=#8&DSAEE-sk8^Q%=UONN7-K%!uMeXJK>1AioYOlPBuT5XFVcT!6iV|!--LtnMh zq`pP1Gfg|DuV|RhG$(uAoTchvo8z`@PT8?jMUlap^9o}e+ktcU%a$g(RIpY>GpMw; zr*?LDs>n!BXs((#vDlSCT25B3US;;|YLEUovdSFn{K`w`M!C&gpv1*1ptL}CQK-yP zMIk|9#WmBLX3bF$5fxL|zSC{VY>@7sOIsb#^*0o9T^n= z`8($qR2F5XXOt)y85kHSBvmQ|m*y$>W+oTq7grXSq~;duD0t>2>nS+q$>7f8f9Y1A|0c+q{Vr56zo*{?MUM=gdt`R{Y7r$iTqFpaaqgGJ}DoHQb+MP-)@-BP^94SA@N+Ih+k1$V&atb zQ`hCj9^Jgs-+bC@cBc~=TOFJvb2O*QGb9?AO05W4(yspcTh^Vc=BGHPn=$k!FHHFC z^~RNNS%$%zg_C68Z`OU+P}RU&EXGjU+*zYhU)@#SYTeN{g(pg~x4(L#NJi@Xj9M}8 zCH_m7xabQqSVP^zw%B2EfrpM%|A{9XSrV*f2c!#aco})(LEp6_Fxh$+4 zs{IMxfefrHTuW!UGfJ&hows1!=EYuW%T_RKOWdfs+j+~5m1~c9sWLI2*m&~f>OIRZ z?9Jc3;o|&r+pb>P?{an19aq)+4<25A^8AIHBZJ~Uf9L#y%A(Blj1mPS0|Ntvq)LV0 z(mVy<%;ci{;>zNZ)ZAhn1<$->Jq5>{9EBi|!eWJ>)Z)~lveXnkUM?>mHwE_~g|O5j M1w%apUM>b}0164ckN^Mx literal 0 HcmV?d00001 diff --git a/resources/images/Information24.gif b/resources/images/Information24.gif new file mode 100644 index 0000000000000000000000000000000000000000..16cb3def15753c217a69107877caf1adf45b13d1 GIT binary patch literal 1328 zcmeH`>ra|z0L32^Em~2?W@fE1uUoUt#TqnSrme|T+Ja`CO1q{m%+w1`tJO}NDNWOK ziYQL-QoO*tR#1G!77(R^!Yio7W+L zEj z#jPAke}|@(GX(c)9ZUP>XD>}p-NqT0%dx#`+sed-#qt2+EyJQYL}{19MxDwwGwIN&tZvut+Ukx(IM>lKrd2vdhD>sJ zUaPcgRf}%d-uj{Ie6{A>;c~gf#l=`G7W}XOWPymk(I@~=AnJ&A^a+6R0B=kfS=uvI zg$|0O-o~sZRTHAF;E1`tA=MzvKLPF1wc!FKr;^H^vVI_*z=x{{sM_XtLUX+CWH60@ z7nG?=|2>h&?G7cF_7=|rBa`rTWn6}CAmBtOhLNJ5{)L|$`B~PrT~J9LNZ&idaLr;L z^r7PJq42SOez7s1Vsx+b*_o$5mzGFS$;s?fH_w(&HImZ(&(II3Z0~ALFRvztX*K8j zR6U8Y?PfdCsrX=05JyI-PGv?@?|Mzju3dUJI6S!~C7CvJJpLYX18EYa@$e*=*>B3P zt9`$yb~8{RGGKzDLKEx-16=%CnqV_rNUE#(DER0*dIIO9b^4g1(9aYR zd;SmeKcN*0^8M=*iJ&F`)Zp5K4c`7?$i5@O>t{SV@GPz}$(Oc`=uti&$KmduoLFTR zAzv*Z$1nwC9HPx3aug^vt#G^qSD=H6jHM8)oqdvhcb~X6=puxE>sm=?Tj5P(w zp#%`T8&hvnK6vk&#B5^bhvWO^m5uwdK8pWk{b;r6&FL4 jqaYok(CD~o++s=N@7Fp5~NEj1qFME0jXdij+PQcM391V z;9#Plf<&L`@@V=_Z=JfHj4f53MM$NS!MpXa%63Zo<0;d7nTNq=bL zFp&@`kr6qeVkQ=1B{pJ@OJNcrQ4%BZc&kh*q)KX}9<9b?LZ)O!=1?MMav@i8BS!&k zNJ9(FcD92g93NJGmbxwuA+W2zoO!XL(>GE;Np3cH}drMjsjMF7MQF*D3XoF zK9eN{RFZqFH;FPBlXPO+iQzy_JjC)7tZu-Pdc5>WHPy2 zu2?KiO-+?brE~j_xy$76DKFSsEdBn z&S4@UQX(UALd8rh#7b<$9+$!-LZT!_;_+6QR7jQ7NIhDO$%IVFjLe}#&g4R_jsuq(T7F5 z;(&iZz#*t1253;?DL60~+K`5pM{;qE8pl*Uf`mVeMP;Vu$Q5=$flGB$M~+Au0e}n7 z5j5N)O5_1dbR!Nh!7vdUO% literal 0 HcmV?d00001 diff --git a/resources/images/JavaEvAIcon_3.gif b/resources/images/JavaEvAIcon_3.gif new file mode 100644 index 0000000000000000000000000000000000000000..bcdf3491935695f5a18ff8611f69890e31d8f73e GIT binary patch literal 1010 zcmb7@&r8%%6vZzXq>^P?f@6Y>hC>>K4^63sWHt_3DTrYr8OaqHTof*}MS%+&7lt_) zU8RMUDFkLnE8A3}Shq!(8np^s^n(_zYn4FMPa^^4D5i_w6E3x^v;z*c8NR-5Ut2$C96;dTND3LibCKECx zLji3_LkrD#ZGMhF?3_5K&Y2&JirKL^R>$Tka4GCWoTwA?PLT_!O(^@w9F^xuTkTui1{Gl4`WfOiW+i-T~OdsOvR8R zl12dF!gB--w}=vX02AGa157XshoFWSpwS5|a9}XBA#Hv|{xz;q;}|xEAmI;VQK^|< zV6c8q5p2}&Ggy*`3Uc@B4WjgnK{|fhfnkpvc<{>)u)Kp{5~T4tU`q%Oo`O-7k&zJ! zg(8tid3kwFO-*BCV|#mhJRa}s>l+*#OeT|)lasTvvkMCgD=RDO>+74Fn_F93JH7ut zhs~$djDZQwwKAJm_(=$5MKU^dQ#kYT^mh~1cwO04;DM~g+o2G|O zgnq}GpDadeuZ7bG5>upy zuTt9f=l>a-S&d)GznPZxva9LQ{I0LPGxvTq9M9@{5q_Lfw=q(Yw>u|yu|C#v;aRx! c^o^-6%X9q|od>r|GFQv;LJdU|9o2N|FOYD&>i_@% literal 0 HcmV?d00001 diff --git a/resources/images/JavaEvaSplashScreen.png b/resources/images/JavaEvaSplashScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..76ef87c80eede5667e03fa9a5eb1fe7ee884daa9 GIT binary patch literal 26655 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 RE+F7XOI=T`R>d~*KLAtnhL!*T literal 0 HcmV?d00001 diff --git a/resources/images/Play24.gif b/resources/images/Play24.gif new file mode 100644 index 0000000000000000000000000000000000000000..572467c59508619649b9d374ad3ff2dfee7d229c GIT binary patch literal 247 zcmV5Dk;0yy&%nUIA^8LW000L7 zEC2ui02lxm0009|c)HyFFh&uiJ;97S3#puwd0@B*h4z`tNDM2Bs&L7^f{BE;+5sv%2HmgAuJ=a6xg$R{YU@+JFi(CZgbt(Hx(u( zTV*D%s|H5fPu%nw0RSQXPeX5Td2(rIXmlVlFfcG6VtF7_b#5R{X=8G4b9r-gWo>gT xAW3dxE+9c{Y#>r;XJ~YDAW~&>WpZ|9WG)Q~N=!x|M^YeGWpW@fE-(!W06Y0rU*iA( literal 0 HcmV?d00001 diff --git a/resources/images/QueenB.gif b/resources/images/QueenB.gif new file mode 100644 index 0000000000000000000000000000000000000000..e23ce0755e541481da5f04f2239d4fcf48332b43 GIT binary patch literal 979 zcmZ?wbh9u|lw*)*_|Cxa|Nnmm82Dh%AoqZgnSojU0rMw&M!o}#zv@BUzyFyS8Q9nx z*#G=zaqH%F@8C|I!L@XX+?FjeQrk;s3uofA0ek z!gRbWg!k|&!!HRm1n7!a|1SXDdB^?>*hT+*S=PQo-*+`(kf@@>vt{Ch1sX T@W0+&q1h>?5{p3H7fg|xA)`h=;ztd$CD+_f412UM(5w&`Ime9U$OQ7|9@cS{{Jt| zz{vub}VuWJbUvmmW3CMO$tJKJjeQwBF|PGU(}v2_~{xS5_9Oo|&PL z`e;ey=Y;|NI)>j=Gz*h2FJO7#-e^luI>|F>jS$&;%SoR`bxoC-?0G%KRoD>i%6 zYyU;b`;Yz2Fn;8^E$5(FiM9FT*ggJ=r;c)MUwCUz)ptI-oijchKh&b=y|lVQ_vz^w J#_TK%)&NiHI!pin literal 0 HcmV?d00001 diff --git a/resources/images/Refresh24.gif b/resources/images/Refresh24.gif new file mode 100644 index 0000000000000000000000000000000000000000..577c46278c065f8900be1d9899d9e6da0d6ec88d GIT binary patch literal 316 zcmZ?wbhEHblwgox*!-UX2>$>7Z(xvUYnwN5;-Pu-&L2AT>HPWspFVx!<>fta-~dPk z5>Wif!pOkD#h?Qc1DV0VGA-bw=jy%X4{}`}EijUZ_h97Il5vq-)-HJ5_4g^4wa;}o zskY7C@SXcp5T~Q=LuX57VTSBZ4h1$BS0(pPnoHc*A5vz!!pE@U+KDARN22n6Tl@M? zn)3GMzGYt9r0Q)lvf@3;s^m0mSYw65CU8{s^z=zgb~Y@Qm=t4dq){*@n!QUiOpR+2 zTmFQV!jqU<*Kf$*A{M%Rmmq`UKY!=^g36-I^o$Y(BLf2ig``S_;Lu zlGNN{9R<(4WIYAPoE(K9kiuexpw!~jqO#N!Jzg#^A2$W}Ace5hA_YS|170o$YXDf* BZw3GW literal 0 HcmV?d00001 diff --git a/resources/images/Stop24.gif b/resources/images/Stop24.gif new file mode 100644 index 0000000000000000000000000000000000000000..90515c8acf860707391fa4744957e56ead156313 GIT binary patch literal 313 zcmV-90mlAENk%w1VHf}y0JHx900030|No%?0Im%Uxkg6DQ&X{DU%qT?$aHkofq~+t zrrol#^78Tx4GqA+zyJUMA^8LW000gEEC2ui02lxm000D&(8)=wy|V$$H^WtfBx6Z7 zALxjSak%gyprEJ_gOKk;F{dHKZKo>^dcWY%$UORJ5*Du6B*>tEgn`IyZUKQPLe?z{ zuBq&nTKT5nQJdQXu$U|-(j9hvMs9mkcRE%{4h#(f1%_-$P!f!ekX({L6P1r; znHZHXqA`k~jb@V|j2o;Rnkozdv9q!&wzd%fA^uN8Z*X~XX=iA3ATls8Fd$-iAX9a2 zAWdmwa&L2ab97~Gb1Wc9ZeuPWL2PUwQfX&sbaNn5Wpib6c4cHP4GKz3Mj%I0AXa5^ LATcg54GI7|P-%Cp literal 0 HcmV?d00001 diff --git a/resources/images/Sub24.gif b/resources/images/Sub24.gif new file mode 100644 index 0000000000000000000000000000000000000000..bf4cbf1fb5003681feccbd1b5714030fcdf9a747 GIT binary patch literal 908 zcmZ?wbhEHblwgox_|5cYIFE1}x-zYH}0z*Co6o0ZXGB7YP=zx3z$`cG6nGCEPG9DWi z9Bk$g)`~f?Vd3F+0cEc_6&DUVu}f$(-8ivP*&V1ssziXX@#JI;|F$a~3XP1@Ig|F8 zd?5OyDxUD{TY+3BFP*OC>#;f4v(Ip-;!&|jca3p#y!CyxCM6z1PGo$f)gYJf?H$3odChzrGo|u z7Hs&=nP+D1ob%;7_ujcbZuPVKPuJ5`yQ*vNcdflv-_PE!0>mmXWf*{h0strvFW`Ow zkOQzWF|jZ)u(7bPaB#43@yQAB@$m4eNXdxEX&=+m(LSc3VSsS4Ffeg|X=qr5pK|c< z3J3_$vp^+8_{6#R1^E8)B`7#JIQV$@AOZpqA0rJT-~a9Hz8xUJMtO;{iiW}jppu}V zk)Ygn1N0B)iGlKO8}Q#Z6jU^H3`{I+99+DI9qNbyR1`EcRCF{940QB|y#pUU2hd3{ zNEvx$Fv&E{v6$S*`9hOEVS{C>Iw-Wpjv)LN?qN8%l#f7EkC~saus&rI5EK#?fr`q> zE5H<$lvT8KboKNN42>+UtZi&x+Sz-&^7Qid@%0OT9TE8^Dmo_l-TRc(4*4+16Z_xtB6-LQ6&)Q79qS)?p`dy{1R4oC1|u&fsf;F;xf>Z1Unn-Y zY|^Ky4jeGQ))9q;`xq`IL|~2i_#dhLTW0^Y#KQg`W%fT3`=5Eu1Ndkt4>u2u1dswQ z{;=kS;Qs$H*!acST~iM@EWBZ_Vk;L13oscx87MX2PF>Uakq*&8BL@zfeGr9BLn}Hf z_{kbiqxMv_oU4wdD-@t)EwR+ValUwzsBDSuwI^O}G5|8TWKM~)K#}I_J3Qfmi!@4O zkZb;b9J)Tvtz+k2@yo$aUdHAr!ntjiI;-nxc=3G}ddCR~QGhB1{Wk}3=iWK}Z!Z)_ zBls>84|?YaSKbG7r3~~-abfdzI0<-@P!%MbV>HCs+C|wJM&vc|H&9Kw9XC{eUZ81KmzT+hC&HC-#t&5QZoq~-BN(~5t~@x~pTb?xTe zaG_Qb5y4bqh@4(#_xH(<#7=~`^?uSN#|MB_K%_@mn*3&HOV!RQl23(g)CFZ(u7+W; znpavA^TfT;JPZIkC=*nCIQL3k_uY;JlO(Os*?4WG>0=wD&>U<)@KF^WeQm;^(>b|2 z=dZ^R;^`_L5c{x2Yhas#ZeCM6n~S{~Ms4gs{HJKZ(B5KvYi*FgC{5)?0}_xy8eGJM5<9y0MO2&lXef`7=`*h0F3vtdg8SpWF_ z9}T;4&n=Y&eB6v`dCL+0J^Ie%$s;zudL?JvSZ6GTNb1mY?}nxoCV4I07@nklq|0b{ z;|GukbrbK%Mi{`M>*G>(7&PLvd79r4HB3JC)Mrleg?GY-toC?cDlh|$eq#-yZX#WQ zzaVuwf!tdua(!E%ePq02ZgyWgjM_~zvA32LwT0hA_1xRR^a+%Sn`wyQlqvWFPQ+k# zSu%B4K6Pk6W8`XJ)*%<7KZ!iWA{OEfT{vAmwC*LuJdE{dSba;bffE`t~@iVEG zfJb5mmWSp0@o=t1!h(kzp60*K309xl|NXW3(!BNCJ)nt4XFM@$b;KW=jj854^6j_? z?gZ9JP%zZGwIVT8gBTi;-|o2jSrUYJOyOX0P%>-rE@kQP=W5@X^>$P@2wFe~{dT~27jtCXZbU9=Q}VITCU^-ebLREN7JS`unx7_lQ`lHu z)Fc*UyP~;!G|!1kY!DE2{|tZjO);~b#oudPX)?Ku=M3F!Lqg}bHOm&kH%NenloT5d?<}okl?FhzW4+k%eMnBr&~T94jo;$^C3M)bD=o+A9R4Dq0+|E{~BGWPNZ7 zj{VK7j#ECX8+$HkNfA;J5!_)%4d~eg@ok@3Ne_zSEfw{;nK(TaiUFn?#d zS`_Aox>iven3a#n8Au1SCQS^@UAUH(y}_5G6FRO94-c`d&URSvXYWb<(IMF2Z2%f9 z{Z3vS{{rQiGty-^MT(0@noGyVM{kXD-k|$1c8AKmF+~YqdRLkwH+$htnd0BOmNNRo zbI{}BLhjl@iXJaA$(9!y0?+_hpj_;~cT)7fws7VaNu3Lq^OsDg)NplxAkEjAVi-D*aW)bV9AsSb&Obqj+W_%Qjhr5b< zaZsb)=py7(MV7<2EX60kdh)go!Lu(^4+lxG_2{=brF#zf*7QVWUZoyiC9`0?e_q!3 z#=NfDr(;Kt709cqlcIcSBsEKLS4jT!OK@N9M^2jXEu;^I?9HIN5(ruj*0~%qcX?9d zWNX{%V46H=`|g!KXR`wtA}`*+;}m5|8MP+GK+((dN4tf?JwQls4|L7`ehY26q`I5H z=w(h4Zs*B&s6G(SNpq`fydLzS#h^9qZqj>OwEM_gSZM>U>kwtmxG8%NxKhyKk@98| zUiAsCJs#~|A-30ixlO%O=3Kh*#5VR;3Ybymw> zuT29(1Zi@|h;)1JDj{!d=#I%muR;Lp`O%`Vp3!tl%ZG|9NB_veT8Osur3%$zK&%kc9*l1LX*ryW4>#)X>zEat3ig2xNUy@J`p070=vhuiwuHOmw zH_0a4MxT%s@A_#Sj7TWjZ)HDm-}P?@c!#H`OWh{nw-~r|yY$DHdGQzDd^_jb%79V_ zgv&p~U_%0n7N9U;0iiJ!&c$ca`=N$)hYnk8`f28+Mw6g){K}pL{9pYpuD@AyRdg|u zi1YJhnptH?_;^TE6Q1Jxp7i|(RXeuIfR518)|G=Fx$rpwUt|Y z=aI&p1BLFLB=XU!uYV-#ihcYwu7f^!og+|GTr@y@*}28&BtKTe`?0>1GzT{1+qlJN z-xe1eE|G}hy16Ac+1C4LZ_w6_&T)ADyeX!fo8Qpr*Wqf8y22_6ok&KaxGMMwzd1bM zZjmTjG{DoX^C25jmHU_vSX$hC?My;o=)}5Xsa$bz`31r11&By@UrSb>8b{ZU+##K_2M~T_nC3 zxb9z%R*I*1+wiBEh51$O_HTS=3&0=7%~3}&Gj8K z*B84LDc-&%c)L=N+sC=Ee}aNxxFKo0u2wq8*FYW37^z#&noB6vu}sl)^u1MH86)*$ z5|6P6w{0WL%WO4N_|LZ-(XHU=UyHJ4tUuB>G{*(^u&rCKo#KnVA?!3`Yy*zVI>~Y6 z9|=GtPPl`{oXJQ~d068;KztAMdvpe$Q@pzel*+%LS%93e=9bs@0-{Nj^;kOTuc#{xshM|C>FPlex*>x6QXVuQ*MCXHRJ3P1L6OaqBid@oSiPo*!lkPqeaH9u! zMWN@U(!1=-kbOS?H2?LYxC`4?4(Zi?8F5yLKNwU9?qaK2N&wAM@eca*&2;FaV@BG z8eOhG{b*vB3^?az;M_ermv(KJPDIcCR=Nq+{BnAoyiS#CW4_Co2SGgCI5aW!UkG6k zHPfogj4q+mDV4iu9rreWv7fKoeKAaG&s*2LkW7n?C1wf4y5dlWV5LeJAgL@?>m@|R z#bR>0$8Ulwz(31WyZ<~%B6vSDpVh)^%42NHnevW-wmtTy0nB*;gTa|9UG7*e{RRW= zXNH68c4FEgF`CX0EDYikcWPkMFDVhHA}f1)-Pnh-AX^`SSlW_3ROxBhs*ew6DHokI zcK?P`?rUj1Mps5hmDd*i}y=TCYNG2IRnQpTzR;NOqsE#4REj3=X zEg>?tFNc_neeC+|2o^}7LiQO8GYhdb;!ae^WvQSP?hGRe`u&LrN*|{VhW3j7&Sjtx zmQtT=jM0hmy6J-U|ALJOW$K2~(nw9tjo|It}Chr6*q2pidvi zF7H=$^%6;B6Vu~|Hu?<%8w5^}(ZiQVyB+I&NkZc)%xwhin#*hLd{mDiY(|Skt7gc% z=FP=pCxn*iiB@C;jXqa!$_!}n8+W1_m7AC^b;OAD0WXk8h+_WH^&tM4a&Fy7AIJEj zFTGMDBv?hZfrh>_hnFkb*adP%pYlqQ_V{!2TJ(kk-c0hcpf#m8{wN^`d1z&Z%#5YE zCMA5bNYaaapvET3gPbqtck@={bmU;`>C9`A_|#!?H*k9P7;!|bBb2jk8 zSBEKzxO`Ub4aB6%YY2m`CNak-5GI2$^|bh~!C#nKWf?Xm{q-*11UQvn+Pre0{vXH1 zBx2d>?-+%Gq(T|a$9p9{2lR?XuK(iTui3u`V1a_R!Z~PC^JWd*)lV)l$(_8O7ri^> z5<*D%!qIZ8URbYH#2Q(j%*{KveJlK3s%JRPQ{V6Ibz)Kpn#TbH*` z_gRz=Y@d(yXJOyHe#LNt%`o$d4Hk?iX-XDe5$W}nvW>f?MuA*6v&XkAV6;}io2)}% z4EuG|)yZ))e#xA4dlk|}1lR=FczyX6zD@NMB(~S@J(WqbB?x}( zbpJZbH7q(8P`uu)B;Fh?K0p@QRlmL1)wnn(zIm35_fXVJ$KkcgB-av?W7u(%O05>5 z%`P0+Vye7A7$2M_{Ym;dcdh9B)mR^~&-7EQH1?ahXF}w!Oh^|~q4StZ7%^qkqW_1I`!%;5ZN0Td>do)0M_TpwKtfdABZH3{ zo8Gkz(u-k)cxbU6v0Cpm^{vN?*xu=EG<#i-Oy2`qmE)_1XLt(^B8K%iT+9ZO^*FuC zG^_N3)t>a!FGXK8-^O|R)*m<(G$t}VA}QfIp{DAhz;E~CZbELQrXO>(b~-olQsxS)&T#j>SAq4)y;XhSG^kG<#UmFeg;gInHRw{9$P zw~E;1D;Q@<4$R*J2SJ9l4a~vrIAUD@OeKUjo2o5}dw6&$z;-IfAggQ(4KAdHZ_i0V zW8xd28aAA;?8VV#YvEhLxsxL!y%W>3&L&y(3C`Lnx4#m2CS1q;$iZ(U+$rB)c+}I$ zg*VH{G+V3N%-LfAjWgjQLE{mHAc2e4R2}rpxVgxGZpJD(7u(Rw5sVia)Tf>At3{6TM&+3ok_Cr<8gF84GxyfkY(&tNks7zO>3#{7K{9+ zKmA{QwPC{CWT?xWx9=*}O;#wSYX9%#S8 z?&v;MNX0_Mo<9}9dz^mq^ng=b?lBz2hU`Ue!$WUZRsgkMg|-i%n^~*>f*t)z2#{KL zVG?6+<2rP@c49%XzT(YB0e?a_%Z$ATJgZJ|s3eFaItt?rosi0_N%^TP`0=s2Num7= z@iOI2KE-{C#iy4o;RJdoMTc#itsDEI6=ux>d)6mKZ%G(V4k4!ybu7Y#3=cx2ht=u3 z=~mmLzJ$6qJow8>6Y=?17(<3iE6rw`l)xDlnBg39e99vkx|R_8BW1jHSQ~yaS8(#A z`4M`7UAy8FS%Z6^*082`KXcVfjts};)9Gwx0vYU3^5oLxHShl# z>^aAAEeIp}6v8*Rb&M%)_WRiyyTbkPKdaf0uCl&nZLi|?erQV5nI7$RlKFV(RH1cw z?2OINn|5(-bs1A}$$#K&LHVw(%GX;!6N0kpX0*&UUPo)J|Kru|vz_Ff;ZmISL@-vT z0(+Fvlf|+WJxuAYia#xc{w2s8xqE@+SsY&7cq+*CS+%Hy=zU# zH|ZmzE;BlL$vNQ{k)+f6HbM4zCQWu%?sntFYwKpS)yIG8ZUjHy121=k6MN2G_S?kv zj}}S_OuvB~ztAUuHZLkT-mPs7H(jd2THXfd6hBw>Q+-D{R(YVOnbaiWj?yvW=aIno z`LX80pM^V|^I4O_xK~qfVdVMB>iZza<8#@z1c9{k^D@L3w`7NdAA^_i-kY#_K^XT_ zwU7hQCh0YdzaLy@BS4eswcdEuoZVFz9J+ExTQQbIm`f+U{r=Tx88ww(_&X)+y&3ZE z+QlTlcbQ&$aFf7s=qOmA;|I}bj9=zv{0*T!RSVV^tehDN23o9*XIP0ixAwZwy_F)t z4AGqeC=4^WNG0o$hr9GfHk)9FD}Vb9TeoE@)Y-SRU?e4v<_qqLI?mpX9#aBjGqYm% z>2dism3TZHG;F9aXjLheKy_d;o))`HqDZ=N`K?#!BEK<9HI_IqY@M~ zYW_kUq&*_NV{%gBu3q(=(G^8AO!SU|2eBFHSlo}SGo~CK;OwV5hZe6Rp5dRAjaCSb zvK2wTzDLK63*#Y@o6oKveIn-$hs2Csi+-E~7@IRai!tiGHUa%iG(*u|II&HXN9M`U zz{Ncvu66sd-&ZDuYE`c)F2nc_j#eb@bz4%;9-^EBbXL?i? z{?gzPUg&|^HNSvWid}> zVj8rO-DyF!e3Sl{nj_?^*-)tuf-ej}n1jfjnV9Kh)`cnfXVFPM>BY6`pyOZhjpb33 zqUHvDFDDaaI?#4vLf5SU;qR?QWp+b!6xEGXtNwxZ??1_i;Pao{D!l6S7Go59PX&X? zpx*=8btI;)9(sjqQA-OnQ(mAEx4zTzk2N;sQ3n1&x>VwHfsMt+U<4d)6qOx*TBbR~ z8_T;;R0vao*ksSL?Cq$rfGb$)jG#~W8)!%E?SA^4_Y15CHSDOlz~M-}ScpO0r1O4J zUHY;YtoEacG|pf_&eKKm?a{BEHsT#A^Sai?YwJvXYNYS`0kQ6&6HE^N z*iI;GEn)N3nm=Lr$#)c#T1)sxPL3Jvx1 zRvPdnr&T~FllxhipP6&{?)b@!MxE+c_K(g^D`LzMUHN9KtMNn(37xGX9W3z@?56U^ zlr_0(_~}8PJji*U)znp{O;dqLvUai2iF4`gcOsuwL>==|p<9<>xjYFpH7A<;z4uab z7^C6?DNB;G2aN&XBo}d|DAT_Bik7X%_T?kurArUh#`?PWahx)yWHF!PdS+H^nGj51 zBX?)K)}c`>hZnLwZ~idWV#temU=074C=c$II-xnrxs9;82gcb;em;~@qMJA3Ecbx9 zq15k~-4M}#%%!12Z5Vd?kJ2GyeVcLxi^^^kO|B7{hi4l^b&(>gv1Z4c?*c>{uDRbh zt@~`{=r&~pZZ)oucA~zwc3Ln1O)F!`%JkV^y!`vPN@v36omSO&1#`@_b@H4u{vb>b zrWqDfID^iA0uccLl@>4xo}(Q29{fbYk-RI{n#N`Pct+Xt9`G^w0}Kj+eJseQEj3GKd0VjuMsfRQke zsLb&Aq%3%C>n_FG@%ZZy=W-$Qd*4pyE{v!H=ZL|6k7S_(Xocu!x>q+dH@xQ}&o=O4 z$6EEv?}78vl`(K=#|yYtu!`5AUo6pd+2X>tmQw|BHJU137z|`>K1uAS>-9Q3G+T6< zW*|GGVB=_)Rorv)dh$~UbYIG-loq!3OK|@^Vz*fm5qpBB5V3VGE z+p)IcR=HJ_HA5F=-$tNLNM#J8`qd=#S^R&agIisF!)2&>`a*<@=COu|}zYhB74HBRmsbGIZG>#LW^H>HZz#fmB18ULU1xyQ+9suXqQsiP`is_QjD_oaa3WN zAxIkVd6bdyZBmS_@K zg*GOeuNYyjV(ZOz>c~$pZ$4{KK&l9u2=u1y&r}XC8`fwh{swLE=+%L~^ETD4FEXA- zLcz-988sA~4Ilp|s_A&ns!$Cz=4f=D+nJd!sj))Nyi++rLP4XZh0?=0#do?(pe)k# zm`bufi9eH8$7dJAU`ao^A_{6LsY1u39?>X0D3o62nPq}27P-4RmU*w8yj3hA_HRLB zn!}UXgg@Sx>F&X02E@b^RWs!hyFN~kY&RElCyo)>-l*ocygz|M&SUA{%w&o*j^*b}R+mC~Jh~q{`%ZA|G%ZDL@VZ{x-*BFl3 zx7fuODG`OS7?x~UETP}1EPH{$oNwt3o$g+$f4;^0eT)?ZovN75a0_o;Wm~&g3LGm7 z@cvTu=}xYfo-a&6xwy(wq^ldd^p>A=yfIw6A{|Did(htK{gmxLhQz{G*c#bMz?sA{ zqk?P_4vdI;x(scpBV+AI*fvt#s>knco zy>nhRG3j80x;^prF`Njom#zks0NI#Xk&#dT-xyd~c6}$;u zle)$oxCaXKbx^8sO{C_w8-m$nNJtmDJ2sZRG7s562OYpoBfdL-Eb;6@$GLmeujFMg zzK2S$GAeB&^#X@SmGZ#m7nUcb|3?^OjbR6Z?)sC#jO=AOh$6(vqBQN|%J7Y3ogg`Z zP`$`=c)R8Oc8ALS6>f zEvVJTezIffU26^v?_X%&Jlu&7ibT8_%s#jqMt|Y>>7v_xA|R$YCp2=yMej=2cOUO7 zp7A!q;R~g<6HhkhVniY;nq?!E$f#WSB<|MNh}UO|jiI9sYgvUQ_rROrxP#4vl!{kF z8SHQS4>^|z3R>k00y<2$uas$Qx1^FvI4PH*G#)X3@JucP5cO&fXfDEkW)@tE#54*F zg5SF;w=Mm#I`INIPO;e9Q((wxwRy`(p1wJ2k$7zXX zmc(d9$96-&iw`q@ZkCr-_BW!fp+z{*h3qW*#Ut#kG&yk8JrE;I7N)CeZLvb?_6XIlg8ndp}3@#ju=lO1Z} zF?#Y+l}6?<$&IZ ztM5oq&e{vZ&jE_x>O@-V<2NySw_G?wN6WEqc%RdL=;36g|NWM_VM_Krw(by3KzkSr zkRS?nPFd9-;&t8!~1d!Te6Q`Xue9&NIz`-wG9z$f-R?+TE31 z=(;Z(RKpiJnQR9(i3r6HjpswHq*lHOYUshkiE3-6ye0WLRuuK+wqL3-wV>J)Qj(|$ z#r$H@{WIU+(giAlya`GfUAfVk(BuBCDmGv>LSE=rMO3ro_tMXlE^G<)HfGD4&PH(@-_3rov;4E{mZH)k~M|7GSVR< zB7@D+p!En`?h%@xJ!=&|1i!R)3$$LFn}3A&MHRgCz3jV2iZ*Bi%&gllvbzSiZ|L>7 z)EqV@iR_x2`fz4*55R{Sx0elAi$3*_BFbD0FBP>~L^b0DdMhAF#_k3Q91%8VD4k(_ zE4b>sVSzd7mw`@p-s_PG7dXX`)ae3NCe}@9lL#$L;Y>i90R}}1P8ePWt5qQ;nBwPf zCUoA~VWUi@uyrTJrVg-FiJzf1nTNf*Y%2@yKROmyh0%BD2j70ZDHsn*=s#W(UVDvL zIeM@7Sf$N8SxMmRBf+?c*)E)Y3NcvVSSQL5e( z7x$8*_8Id~!|aHyRE8(d+M!S|fm4`0R!Vbl2Ziz`kYL zj%6Mab(_8W@-=K1V#+JMgh)lFE&LcFL&XxWMyBTWXr9(7;O9n^xC43k_mn%w&(yf0 zTsY3EGzVxbuaaj^ilA!C>RW#$(5}EF%4w4?G!tz3|*}FcbF@y(Ib2x*USqN-Rk8lu)0A;iiEhasDdU z){cuM`=tdh747l1t+Qc@Yecl>$TFXFJ46HB6=c@d5RqRS=KqGDA+9gYwIu1QQWvmE zT6|-G0;OtCrYdK?7OSgxN0am@$vV+DNoweI=N4RVfS^M&u68CDaK6D$;)U*zqtl`4C#$tG$%x`-Kzhmz;OEG|;{bs%uxpv7tG=r1|;|lnt zXsir;i86n}Q0Ueh?adh_Y9&f3{iC~T3$8w#-2?am6~%V^v(I;lMSlrt-DVqVkY<}L z^}4M%kmRU*Pi98Ohf75Sg4c7QysEcJqM9YVW1&W5sT z>rY!F9p8^+5s6?;&CKx3K=$J48*bl%)-NZR*MccOs!5fpavCnd9^ zou##3)-KHd0K6v97`w|dx7u1fMg_B4&PMB~n?n;tabFChm2b73-MU;n9@|UL#;s`PrBL+rD*{qSD`EQ z*6+L8JiZ`Vzp3j$(eqtR2NyeW1otUK6Q-Jk@L?c?)7-MdR^(c9)YSB_U)TS7Rj*lc za-uS50_10h5M2`Y`gU%+Sm|?$EMz}#BO@9_K}&?MX_bluScdWEoL=hZEd+2UOIY0X z>9(mFQ;RWrG9T)jExw@|0BH;{LN;DYdAkZCif*1>>%aMZWxGIebAcl`#_@A(;eAIG zDmE7(5gWAsU?e8O?$x2|s7Sk39Wt=~RPE06)8_d!+0rKivVf=r_NNR1UkYbW6V^O3q&TpY{M&`(V9Bont~Yn3#s}R#HBuEN#(*G%o>cyND9N&j-Q$|yy2ZF z7Z)y=+f~^U;1lfm5!cW4T>9k+HQHgXFt-#7h%@~+E_*ph#cju@rb$-7Y&a!RdK9_Qv~^QiK|hU)?10R;ErT%%yKKuW=@)gp zHwK5W6>5+p28e3Jij3Vv98ms7V)Bj}ql*-i8pN^%1vcF>t*n!kb@w0HWI49#99ux> zo_A+kMYpdlcsQFc9y(^b`%T6Cb>I`ip{YQQLUU9$+)@cmghXk^y7Td%TSjW(=D5nx zmO!)D>1&@ApGQqISR$gOlQNwl&NjFnCn1E3#O|&>RSJN9<(vIKp0)HgVKYO~Wc>(e zJO?23sq-d3chyytFy%qQBX=GsI!{z1;KpD&C^nxo?`}D7E~v)RQlK>{$f_gFP@w zGwG#d7$Fu!sMU0CUNst-4vK{-2Kc5eq*|LWTIhHnViS3AC@f-t_ghl=KS7FoFg|02Q*F9hp#x10Ay$-c&Rd_zy-sOh)8c@=5PRR=Vtt%2(d~HH% zMzj=wc9l_C;xCXAK{nAQ)AZneyYUg%5H~FLqVV&xxD;F2+A9>ol&die91`=j-xdO9X{Zh8W67Ac%~LJZQW9JXGC+ zMU`puOUtaC36brR7BJlf*N*u{mv3P->*X@&LiNYS3q3SE@}b~(LEJC7W&jp|(#wka zA;lpm@gB$>+BDg3v7-{tgUC^-?JBw6aAWw8B+jnVX&YVo31)Cg-vgiKm+ZBA+(Z<- zi2Fa0r_@oA`84(|61%`M64;n$;aRS7BM*4oL( zC-Wm~oSeE$OUy%$blFoj*hVW837^xLyTu?qb8vS3B<>0wAa*pmVa`l0R7+Xq~Fet@v4L~heJ^f`Wec9EnKOdV7p5mAmdpj({5VK6Yppxh7 zUu_UEz@F)a3*C%44K(dkw&to6a9pvOFh|6hSov00Cb%Ib-jee7ZXLV`RJZ5bO1=le z5m(vM)B>FrWt0ajE`3Qs?ue|k&MQT83ttM>*O;1n6BNsK%UJryPg078w*}ni3eR?x zn!Ql_p2miWviWVk+vnIZB}6_b7cWRL9_M6NbbBrY)5I6^2MJ%+G2jOIuiZhx*|1fz0##u+kE87=MODDMbgK7?(|K*19ZA> zXYu1i=$=t}aF-IbOib^I*P~IB!~EN9ub8@fpknVxJni@i*VnDr^@z3L(cp$M^G}BJ_8#_m=*Bzi z1_fqV(#j)lnTgU5V+GVdx?k0}I)~K5;fUI3PKJf89t5LGR{QDXA=RkK>2%qcsqLGt ziBD?UpG%XgwpHqs1GECA2wGQ5ubrUai4-P8xLT8gJc84zBp@;OK!+oQLUy>8qEE^@ znO*i@^qIx)Pa6D#YgIW6>tYxgUWO}!Ng66orrcdoH_%fdvH1A24;~Afi#{&kncS=;)2G6{REkP~7LTQ3?~#L`2eQv#?ypeIe& zQuB{heQ!QmkfxD{58ng+Y$c8E?W`LvVj)ye0JZ0Vkf!(-M0UwJ@okQJefa(lqboNi zUrHozPYC9ui0S)RG=x|(sMn@ZiH<^!+JBp=ULJ5zz-l=2y@ z@o5*=p}|IY?J7Hd+^iYiKQ8m%9Vcwxt{o@Jjfb;2Pg>YC!A8ce5_=H0U#51k9QL^zcrQu^Y;&E zTkf8XQOU<=zZh+fuyz!&039RZ3TSB1U>oYb&p3Hbxoks>O@>@ZnMhGQlfp@_brBdE z!wCYL^ez0wDuNUR9u_~F-v1(swr{exz&Xuv>yfY?LRIGz)fFpdjQnF@ej3m)+jl+5 zI!8l?O=IQiM-s+|&HVPMQ_Ju52K&voAJRCbDo!M&uC;V_MYa8U=Kg#(CBvMDgL1zs zxmfB190Ig)Pv6HTXc`1t>>hY&hj_Y#sL6O8R&e7s|qs=B=)NrYlW>@lx~oknRL1$^5fo4O3#%o6Y2$w3( z;IByJ{lEF8Q1i1X8WE{jeCSEIyzwyDgPeX)M*9#OT&Ju6*miihnl&{V=1zj)Jc<giQb9UMXDWkal+H!6&KV-->RwxUeV;CZ!BQnHMGYK1;9@?IP3$k8C-iq6 z1XC^b7bJ=Tq@R?*NpkGPAcpV`bhnrXdtL>f3CsKwM6i$?F^TbD2Y6YS<`CDwxgY&z z7MF)Vv;T=+gAee|kE!vA5MCq%Ux)`j=#J9AA=2NEp7P?ahUk)Wyc+d-Q#PL}QX;N( z_=7pj^`H^KbLcGuhe|wno&Qmi|AiqseeK|GjHAkCn)P*P9swj4w%#?QJJ607OKOnJ z!^8i8a{d(s`mgZefBM%2BKH8hHa*GBz~evu+IQs=HF5+kFW@VS)xP{T&&vB`Sh<@I znUd`<{N7&HbP3I*o2Fn-S^GGzH5h_DubKNb+7CPvW0O& z80W4X`Fyde56iAykBYjo{U5&a730O*%!L7@q8my2(>$%?>VTGC^xR^hG$(v8X_3G8 zA!(GL1%bWPQ`@&B&{NKh2X!eCYqPNjVV8r|ark%veWJ97td0_h+FF^p;gZWj?^E{!Z*6Z|&U*4Kj)Yo6~kRqjWEy}WYSt!xf6^Cen zdjFSH(xbzK99-*T#)Y_Q+BVj!H|*~cgG`96!mJw+F|SC`lhD2-3q2HtlTsAzeQEGF zWofEA-5$g*L)&i-#%fj7Bj_Kve9gwzm=?XBP=iy=Pw)?`oX*7pn>;I$9?j)FGggQ= z$%pD(DK42Ng&dq@zWVyGaQn}xl`p6&Y%Qa1MDtH{uH_wwc^A5Kl}3a~h50d{SJGI{ z*iaF1C6jhC}>tjRa0*@xTeH=QU@s!-(w=LQSuQ zCf>%Dent4TSi99#Lun9L@oKIwD69OxS&SbVf(-~ZG*cdxa*r z^Yy&%WXPAqLjRQ9M(y~f!!_u6X%I}Dho0}WOFt=XSmv6wO?$t=fn8^!ds6+HTNQo4 zHRome(#;&cw1NvedV_Q~1|(Z3_r9Ne*E?;htsvu7%YL!cUPTn9lhV#c=>3%b>5^=h>#||$ z9)5Cj627^fyjWO1=AsXVGDB=NGDKxeu=zn9q3Xo_!4o1YV5h45IH{rd&In zcyJt6kS-jMnj|nyW52HOWH0H(8g9?)4DLcoci>anoX z9Gfx3bw8h$`~XCw>nkwI9+2+1Vwr{z`qBK!M$&vpF==X(t4F1Vm~VEymNgguirakAyq6trqe7(N<1g?XQAdzcup zg0jwG?X2_j&#>hA{m)|_D7YKAYaWSm5vMc}u7fxu{L+tDORu;pI1t~a+U7ZXw@;mj zKPcR8nDq?Nu=O^|e*fOLsj1JHP5qu5y=pLY4iAipk`nXZx;xL9sQPx@uYsW#0qFw* zGDz=8m#RZkDN+TbOYhP_0qK2)-n&$h&QPTf9Yh2idRLkV3i5!s*R%Keu=jhSZ?gBB z?40vql1WxFS;?$*m+QW--@kSPZLY{1bu*Z~A$u|;|3JvZ(&&01F0pvK!299zbeM5| zM_I^}Vdbf(-;pR-&BtlnbPcvZ%-LZ5E zt3<&y_$)T!2fyUwI*NOUNIcVyFN4oDw`$yxdN3yX@$tfAc;fB--35Taqy3AekX15=pXZ;f#N^*P`Z#QP!b`@mK1N@OA3Ym^#LTfZL|=SV~p9vxKc)NSz01113R2p1YrtHZX);) zDK?F$=aVGzSa!oG)Ve+n!o3l9~MG&BpvuDp^ z$g_?yTv`i4Rn~IA?3^SDu_JB)6ah1-OjFgLD93^c49?-!Qu?G)I^-f!%!ETy(7)@< z8Zg;p?C0C*r$X(C!>yGYsRpviUbaTlpZfyH6E&t$-mw@sKIi;Gu?_Tq>=-4~M=Hg@ zFtkeuKtgHJ8WAy~((E@?bzSrVj8$i~!Z56cR5aP!p_ zk6qlCv_|sgeA#sFXeW^w%K~%BB|zN z#0kD^Z7pfb>s;HRy4-LNE*md)D1|R;g0Swv7CL+1a;q%VXGP|2EzmAaSYmFfEb#53 zMnZ(@t-zZ8AH${=o}a);R{;0b?DSzv1cfK@I7?>xv#7X79O`vW!McD1lLW_C^4=5E z>6;0C_uHJ6mRErit2390ke4{Rq1v#TEgcfP;hNLm8qxKCI2`wVh&McptJ02laLH-5 z9Y;FAYUrszZpWQpKyOq`X|BBA1%8uzoM+@;$?tV}&G1J6WnvFwKqErx)-_&Q6S~nH;qM~{ zJ>M`6E5<&NqsD&jELq3uxA=L5oH4`$U1k}f(!s@cfE6v*n@Qder%g7G9GkCBb}Js~ zejX$#sxx(AmThW{wMLD6EeI2f4MA5t#fonkaLVG#C~`7@a4ci7*il-{{=4coycl9G zBMle+_JsX~VS0{8PUuTyp=C@>3whq-#esS?8{a7<#(Uk1x(&`SkE-N6T;_u0xM9+x z#X?_>1YPnWBYGjyYQ0G2J{-b*MR20^PxPuki-EC0uAFI>$rDB#zRF6k?irXayrda2 zp|+92jER3|)oL(N+e&RZo*DVfnx(*?LA`{~gxv!LVrnXQ` z(y~wipdcan<4x$v#EUy(jDz3JFMYA`I~caL3mvIDR)8joKA$sC&>+1Y`5N*EzbWat ze52FZFw5nAw)6ZE86AtOy4tcZm-}{w&E_~``wj!0-#f?Z?@{M>#imEk6qhfK&{yz>Z09L#1x_6IKf{6lVxjv0Ac1xGmjVPZAoO*r__v<*0(Il1OfnJZeeON{&`FSrsW zZ*{?P>htr*FTf0x(3kYST-v(^t(#Je;*ax;YN0mw+**TVMlNK(3hYJbX|ws!sK<{G zEp#+1w64CT`jM^M{(k){)Za?j~U>g->! z%}n0^+IV-^mFMNnR;&mXGB3nO_+1q2)x@XkYL*WP6I`iQKFQm?xNhI27e-0I_$m*MjvrcT4^)4p>T9|(7|g^V zg0CR`TV@@VQhkTOpn_%4UNb`L;q+S}0#YH&OJvTC0!rripLu1r%v<4$bl&y0)>Eo* zL=Wp)BmtE22Wa)HdE-u(hAPXOR$uMlp|sS@s4yQ-4yI9K7-d=|JwP$6wJIHHFqJbW z)eD(37*>(XL_jI$LwVE_RM|4u{4C>_=~k|bgladZj{L=3-N#zqP=%n7o}Klj!XHv; zZ#u=#JlYo^IEs>^zZwKb*%3IDKg!QQiLZu)yc_@{;q0;BQ*PNUltGvnkF}oH5?a_K zya(|pC$P^|2M?fFhUeQRXrBgD6p6$dnFbEvx*Sp`d8cWq!mShhXe_I$=cxQ_oCBLg z+Ei~P;p@VJy-3jF>(s%j=f<2+=gQO5>jS4^sJ%e(_S0aS<(0l0+akbvji*hadD zAXCmf*EkH_PjDtQ>`;WX^!sIKmDUReE+(p;5;!+&(ll8=mB`XV4;K&wH?IA{HxXCV zbZafOzKUR}S4d0QoJgpr%W^n}ViYc1U8A?%j?yrWaGqck(%@!$u2ltYrH7nF=vt@i z+#5--V{27N9svJG6W((0e-z0JhyY&B2ipM=gy7;E==!6x<%yxDeaeSP*ouaq!Lv|R zP3>hFv(x)1BOMh{TBMtJ1aW)BV&$q;FvcCa!~O*R#G;kuX}papN-bAu#MsWXP*W&7)#Lt{x{%|84F;IfDxlEE^m337l-AbJFTVNKSRNmi zL=Ejx*t6@1N8ETiCEdaR)Ivjg2Eb{OxcKRcE$!EHu=%%$q0cCB$QOhWj1Eo_Fp-7? zKU9#t*oaS=lfOnbc0Z=sz+IEoYWPu`oaA06_30|($`5DrXDgA?)c9s%owewt78luR zYs{nf&qY@lHcEAVq~e-hO3yso8;zRwHt8Yazn%+WFolh)qbloj&|Xw0*6C z>`lZoV`I*MJ-Y%8oA$ee)pdnt5~Lp5F{Ct0xw{D6!#6s-2)J1xd^CLKtDa!ZJoj zu!Y5JTJ=Fr1Z8jku?asOCxYkEKcP-De77BhbG9U?OJmNCLn zVb;xUwVE3%2UMf9&X!TCjI7hD{Vsg6O(r=2x`!j09T%4s=TA-ijB_bg2HO!0PjqxU z6KWXQ*HJOh@w+2Fw937T1K{G)LXVpI7OLwq-_a}!^?6iLQ6pz?^n&l4=BuNEd8-!h zZIx8)G@{Ug#9@ZX+dSYl_9~tZ!UH3TD`Oqu>!Q^`h2bHv=8L1p*XQX=SPOxAv&Nu` zQG`!@pBNVVgrD_~6{I+qdUQoP3JvY6eo>&(*83p9cKpr^Y$IBc+ve3#J`~hEYqj3x z1T2DZl$WdUvrlqu&1_{>vAuYveXBP-D&-VTe1 zEqypQdpWcU2sn^S<#^PZHysd=?VY9q8EEYNkTVREG{LbtPg?uX;@(K{5jQJg-B~NB zuKK_nSv;Ti)ns_HIgt!_W94c$EGq}Kue%Kx zHg>eM96K>-y579nrD^vV=YsXFD`{p7SlSM*uellGI4b?N+}DDp=m-9JszT*3?A-a~ zby-7*#C3P^_w*#&RAVC;%Y#Jk9jwqNQFJQ6`0oR@f4L;^Xr?h&!l=bK=#ge)SBQx; z#*28Quoj_Uj&M_*Y^_Ss!he#z_L=~Jc8nLi``*dcnrr$ow&cD6>uM^n!O9dsJoA6t z^q8)rrQ8pj>8JIYuXc5;g0^CzenP+v%Oo8WLEJI@h2$23tTMSbZ$332Hy0MERh8J8 zXcpsK%&Qjz_aQ0*X+|B!|spK22hwq)ao*gZK>G#+EUK-Z<{fRa=l&c;a&fyc2AK zRqGeOzuhTgc%nbD@oZ{iq6NvwT{z)=j+7+N z1dwRb1kfd^g&*i|n|f-o6I49hp0*Q&J+Bu4k(^uc_2SMa;xAu@;RS3O8u#BYM6*0a z89m`D&YTeo_hCtg?(l?n@3oXeDZsZDkH*w_nT6kZtN*#>SYwE^Q47;AV_n4?;? zik?MaSs2+U065sYtM<>aYK>kgY$f73iJ>HROGu!1woTLoW0&&3HpIgeJEuukj z8|Hax&ymWJrmC&1YG8L>Pwr7pk=O1|p}=Zi!+t{Y_&kQ=Zk#eJ-;j6cKFrRvq>lCa zaScLkL4iscDn6t`SR75#ka~}pM3mMFE0q234M*9;kQuc0kng zcOqq=NEec@%mIpYXk=>!_v8p5sIG5cbes|8d8{cxGkCXD7n?Z(>nEBZG%O6 zHP1cWYUA!)^+x;AY;sT~RwFgxTX^$JUpU2}PQ5ch72I`^Y>apczdy@1wd;YnYu(sF zww>uz1GvajJhXdEXIW|##o*+AH!FYsELWYSzPCO5fUTvM+AluMi7ewT=|HfS3D?ux z3A1^(X99cVDoX998Y`OkoUw-%^jKr6(I#BsMX9i0!d(ZhKTWaq?cj>Z|@Vhc)d}t$ngE?8**S1~sK>3{YEw zso5v#Ym#D}_TS+%u4N#K>zE#=xEIAmRoR^zS=g* zDCgX{&^G<_a6iQ+8|GFGIaiP#`6sQn=iWN63=2P)Apd&MuhS9Bzu&`O!s$kwd~1G5 z;VE%qG@-(NaQufEFj>2eynTAX(K5eg-1@|~KDJXcGp#pbVu$CaUhA;b2$gt;Sp&&u z@B4Ee;l`??h_6>igK&9^z-WgYc%bqwzqEv;~sjLV{-0Iqer@WgYg_Hz92fT)hfRM}IM0p6Nc zELGru2EJ1cP^mg$xC7YQ;l;%DzIIDazV!{E0F9#~Rg^MW%}+5$A}55Ce=n8%?_>-1 ztC>b3r-99D9x-2)EZw?$W9N9MEYqwz@R#8Tqll2k&qjGO)WT;`?Vi3Fm6XPV>? zJr?-m9jn~RCY{6g%Tj}rlWHc#6K@gSvw<{=BC5NS+Y3ilNhrtaJBErtVJ*H*T<~T z0L}RFk22+m^;4NUk7eSuwR&eyWBD%>hK#oZeAR3q*`#i*=ejLR-2`g)Jbdyv=Qhwy zF)KZ1?j@63nXZSrJgw{?jskH#>Drivq@Ib#VodAL=;~$9iXUlSkB%FqZR(8?pBJgF ztSd2a7d1LudMsicQs{ficqgMR>zGVrkm0dWW}N%ot>KB|zPR?oA=WeuC!9&@GN`Q2 zf`7a-t+XoDgPoB-WzK!9{fPKJ#odQe7VTSX>F|VSVk-on81*h3X#a9@Ef-Cfn0q)! z$1s0A+L~|GnSRhc?ys!H0`eyqgSkL8Tjs-rHoeraR$-G#p-!J39$gGc6o&P3RPggWZ)hbD zLC)0{kYqg#FaDJ0dipTc%3{ZA?1H21-dl!2?~okp@8550K51<}8jOGKo3NmouztXQ zc@aXWx{0Q&7(Bb9RO7!HOb(GG@TgjuU)c5c8V}!mZu5FZlXMsqk-H-pnBqeH!JU}Y zb*b-y6w9Bd4TDgy7ea_Re8cU0t1yA`cVTwNo~>{v{6sd5)n_#Mjz#vfkK@ixPcH;+ zEhTrxyxM3z<(7Hm35++AjX|7{SyKf#Xum7QKCjbaiRdPbV|fi*ZdB9KP0fZe=sClt z3S;77B~J~2)Bc}uNdJ&H{|hP!yoQ@N*Kw!X%okbXG~GWx`7?V*c8(mSa%x)B?jqpac zd|mqfs`XZK)elcS-;HxbMVbAaNcX-3KHn>$(cDS}WuD889oDC9v3Ks>jurJRT~y?F zn^h!JYLmr1McGlP@(TzOagWe(Q(ypE;k>-P`_}lJ%k9?S@R|1naO)%Wm15}Gh0tua zIZ}r$%Q|tOk2^jrFd`Td(_o&PC~wYD)L0)eWF66TBHP2?fB2e5y^_T?y~UoG*gTcP zL-~5{*tHSw8DtNspy&X#-HF_}kuJ_bqk!?ufgZ!1VCHh14*!^mMzQzhn)B{lIk=Yp*CVaGgc@ny4MKaa^z= zj>76Hj#@#)7LF#hM}e1HO<}N&`H0^kJ{(~r;dh( z?uD$GQ#2p{wUIF9npa-L5WR&P(`p34462y;+hjV9#-I7cvS}ZDmdlBC+lwRXaw-Yj zs(_ZRS?2)F8F2ZXTaGvT=*dCW?BszNIQp@>RtFN=e-@7& zUrmzl2NmxuZ2RT7n7ri8Zo z7y-z1V%m1%e`m+xbZ&*`6;i~UPLpH|?!(_j;(DaGT&ry0{!Xf*to^y|VRo@`Q&)N! z*06iRw74nUQfD3)&V?%p*v{*X{8#$iKMA-07=CebxAsrxXzP?;nJ$$~Hmh0Kg?5X` z*)H#@Zsw;5uYP?mXGRy>6h2FZz3Bfs;GN!lq+-vcg=h(BGLH3gi+gt>UB?5VvKhcNVO4Gcx{z&N=i!By<6sE_hT?@l#ga>G zZZ%`+8-4Wqn|38pKHymrrV7w4rdBwFVec{H)7H{GIlK37R?#RXqBVn`o6sGSn=D!4 ztMSzkCe(y5t@j&;57`QBQk7=T?1Z@1!oKm_11g4z|tRa>l2z&nv73eU)Y?+3rw& zPIKI5yIM=L+}#!Nqhy2Q9>-ObaR%?(eqd|uvit5!Z0XyS(KYXLa?*!B2(DxIuRLI* z#=EbDH~Hg1hYaVXp92fl_X5n5TEjtGf4LshoZ9BN47$1JFv>RuY6ScOZupbZQsyTO zS1b!=L|&|ODOZ&bt&W5xsf-9=Jk-|0*VJslQNl;62EepAt@p3oN(^o-XOqEuFK19r z2gP!&zvc8|HAfLpPA4bQLAWVm&;{hrUCA7E>@64f+{?ph*y`S|iPKic#<5vH%@Q4y zfCocbHq9B#l+}-#k(Q@t2PIfCqep_?`!2Sm2GF1)#cfF-6}qw2-OWTcGTG7iwylFu zkTvnXZFxC-Mw0+)ZH}uHbNqtnhqBK5+qvY%lVs;U`t=JP*t|W@ zW{&B!rJ_ZaG0BV@z{1MyJ!*)iPNGiQl7U8hV{^VQ-Ll+Lyg{9JHgYm>vo@og8Ev0U21B?Hgck=ht;$QKhVLIV& z>S#bGmDrhvxi{1Sw&7YDEapUaD%C-4!I;c=1hqR$(AF~C)Mm$y(lC%b-w>##2_g3P z(oV9&&5m5Z-H|muo6Z^eJ%h6z-PF=;d|kmAJ_VpxxJko zu!jdEk;lebXv5Ud13W7O!ZL0^vnV8b*pW*y3Sa4)c$-oE?`-;{Nto= zma)X&X->k`hj$3c(UtEmlv?}?Fr-8hdgMe9Kb$6%WS!mmp7J<6C#^yDGi>7)(J~!9 z>(M7=^4!Eb(grNePdOtS$2liXy87&CTC!VQen!!G zi@4|5GTbgyV0zxNTHzHCKv?4n5}vIijN{LwoFu0D$sz03MM5 zSpYUBCKe_JHWn5Z4h}XhJ~;tC9v(gwDH#ztEj8V9T51r89?Zi^&&b6D0LtzA>@ZTB=DjGTlCKfghF5c4(4a5Lc6f`tcbTkYMbo8gYKRjIrpp#&b zGVse_l4)9EF}jfpgd~5#W_n%IL!mWw3Kq0-55>WydTY1%*Xl zi%Uw&YU}D78k?G1T6_EY2L^|RM@FY-e$39zFDx!?{M_8y-r4=NxBvU>{NnQJ`p?bZ zf8jy_p#4`^Pv`#%>_6cmdBTN?j*fi5PqlsndM#d-*f=&K9 z`Aba?4wInPDTS5$6fPxLXoLCpzo7jGvi~_?q5oUR{yVV$57!a^9}VSc^3X^CuK?G7 z+46&N|6eo?K}k+m_z{50ov_%?& zT=W03>H0uBr>?vbR)bjH#pNrg^V+ZU);5Cp@qLhk(}aX5fSNb@ACKa%ymNl^5)%?@lBWN%GorJFo3@eQbkN(9tFsAN9?%@>Y!JI%f}8 zf{i%Be0`-O5^3AC2KK4wmUZpq0G*+4$YdWK=sMj*`v$sShYgSIZD)bSsM~YP0UQr^Br`DR5FNAUgbacOm zy2@ApSVKa4yd37nw$&*aWww`F{9ucA!RdR^|b8G?Oj)<9C^iItbeWl z(+M};#g)o{&s$OLv0P!}(GMmp&p7-V6`{CsP%QdLnvg5+=GHYvIW657zU1Lum&ve} zG@vL=D?eg06u_nH<5GDXh=6RJ7c@srkWaDuEJ~SqC#Ge0C-_n^(S!6`>Y5s6GTsOl z!simny%i&W?g(`wrh66_4z)vR+%%I0>)BA-1x-}0yq(Nh#29%Q$LP-)gVJy!Msq4* zG@%7FA;S!j>mRa@d76fk$y2T3!0uwm^YvrfK|;*qIFIJ_SaJ=_z)TmHEm_7fjAi&L zq~4oDr8O@AI94Y}`P}FubEnP4l zGYJFhU-i!mTuo4+B=gvTYl7rdGn5nS5I^HDZn@gq&@Mov{3kW;rLuhGL3_wJU)^L4rvmA9Rq6z z$78GOGW4EJIr(K@uIwVgu>H-k#^wkES;=+bVcnP`Df^6W-(e&p4WUQs0VK~y?~j=} z#o?6z-I0in?FUmcg@rJnb`uI}z@p8&PC0NF$Zogt5%BFmdyjLY;A1_xUXIbh?z!gW zS(`!Q1Nb)!Y?2@?im+A>NeQproAj*ZvqK4-!p4;6q)83*hNSonj+u&t+*t}2(-t*; zDK$1%aj&QubD>(U{qmvL1Ot~=KfoeCyR3Vw%9uza&gc!P`ZwQB`{T!Z)B-h7kfDTXM5O<|1I!ANoE|P*gf=*g;p*gV{Bm&#)|~w z3-hUux}ywliVhE>f6{ydApf5-%}Gh&#2*w*n;UIVo*3k^y;^_}RTh3~Rdwz3Jm<&e6jJ zx|#Er>wfo{fS9)2kjPCJy&GNMLoN*rA4ot~U40taq!2$aF5%C)U=!D9^XvYST^A~P z3sScChypxc?W{NS=ag^dTiE+}jtw@$>eo5(;}@JLOy|YpxVP2Z$iv1B`Kh;x@!MLg z69{L5D+EL=gSj-{kfWI0H#*F7?@UrMdh8evJ-O58nqG}Nw2^Zon^;8#W!Fb_YAr6p zJ~d>y0;{hCMD^Qv52a_f z*y;9CGAl^{QyO6?yHZ=D@=?@QB^tPOlMQ1KN|J^%t0HQL%pQOiPpz@+Jn&R1lI z{K_1yXeG2x&&wMJZ{HSK#~m|;C8_bVm?Qz^`C?lnS0<^4o% zF8GqQF@9Nb zA6v1t3RAWV;>sTzN}t>P4N}?dY-*A>bD{J}dXe;_(s@(iU53-^6y$O_F_i)Kl05&j zg>>XOKijBS1ux|v_#?n90`=VzO!?IJiTnu}$Ayj4G?v2+F`Cy=+9@PLZdzIDQ8}9f z_H61SUrw1SBX?&Z+wbOVmIHs^pt1wVT0sH{<{Vc9-wRY7%GYHXRRzq-C8vZ9q~wan zxl#GS+bXYPq;xqA=RRfm8qfTF=pyUF!I$JHE5l0QAI_mn1w=K`w8%zi95o|kdoo~wtzDwq>7*w=@<_^SJ=3X7P_Gn4V!$=34l{S9|^8k?FsyN0=-=tjj+C=#II5>FDqN2r%uEzspWAN`2v2cJkpxx{e(JcB^*GR&eez81J~*Uu%_3VeWh;ZZAE z>9LMcZDFvY?Q8;0xr-Cqc`GQZ>pNRoe3Mh*OH?rFW--oSQ0}!r--#=E^-$!1wPy}z z>@fP<2h)qj?T0>BG=`>7?(r`;60T^xqr`$WuRrUZEgSXh4!)0n0k&q89HforV1Hw! zC}lv3hKFG=KgJ)qBnnM*5qDs{4`j`}&yM)Uu4;BNsnWK0x^{V7X?Jh3tY`^8Lv8XJ zL;;f+hjhx{BoZ31;|rsF$0s!i>vg!bY>MnR8ge`}9{Ow{f5wDPOe(VUC3s05fKE^t zl57}A-afNkmofIXRV7wJ&%Cbs)36?khOPljk^V%Z7#+hTA$(uP7Vq7Zfr-JA0!kC{ zh&_-9wQ3pI&4KdP?OI;Ja=MM-h3E?1OS6g?GcLKc|&3lCQDY{ye$j0198T0vPhwl zI`+>;L$0EE6q23LU+cG~&RV1GtRUQlBSyd|kwDfgN)O*t!TYaxaVm^1!Itv#woAUR z1U8*Ku0NfMjqfsGWcZ1J!AX*7Ua&XMas*-- zv}+QvfRJK(8*8SFh5TT#4iV`e6#>3g2k!g)lg0abS0fa4oX`2Oa2GWBJ4^BkjpiO$qsS>2u8VJFp|Kd??s2C5o`Fo)*X$rN z8#+WGF)v4-_@ri**pk;bDun(Ht{`F><-06F_pQXTsY@~=JI4S}am%A=w`X}Q4n(j5 z+;!_Al|dJ7{B4XJcnV)am=az*g)bHWEC9+NhcX+W?27C|fm&nk5ud4VGSkh~CdpV5 z;TDz4r%O-{k@j4Lu0KxaRI#!86Ip2=PQJT!i`pK>a>s8P^-EC4Dm{>X8ngnz-XCR0j0-lhu`1qjM4=taElC=xBLM@g)d!F^>ca$ z>=(v5z2PqD8WDzZwBPcjVJI#2yWa>>U))*>LRVTPCXO7?`^uWrS5|h9@XU z1P0KKH}`a}OeJ`Oh*7NSrq5P)HEUqY>XIHyN?iIHElyVHv87lJcFVX~&nZr&5zeyK zE?A4BL!BxEDiJ3X2bBmLAtr6jpxi}r9eUfdhaoz02;>}qO{)a0sJF)HQrb^O!g zYUmA+e#N(}8wEhcqAMGtF{@C!Ui^HYZ%{xuo?w7q3Mwap3(*HtVRN8SZx8?<|Pu+pf`Lpo}JsR!*t4{36c>#*LmZTdV? zW@w<~_j|B*@~blVMkJtZ;Vvr1##W+G)JhTPJR6Z96v91T!(EIhgk*emAMYo(*DRze0Qq`H>G=-QU6wNxDUZ1aMAsx_f;k!=C-KTjP4Pl7(%tODNJ;_?hv2y3p znrGVW9|i#~399{|RxxxN_?o9Lv$4GwY*Qyek;f!AHK4K2nXZ=)LGFQ=_T^H4@yx05 zGU#;dckM-B#Lt5_Y%`&?rmvoTAYD3vOrNunVYCG~NTl4SF}?g`D|JCQ4Q0d9&>$`l zMWujJM3tpgKLYGlE4+=$mWC55;3r@wY}Hj8$-`x9C7q#!Jln_tFzo`EUj^dLT*B`7 zb*k}A=rr3afvZ88H+$o8q6oqlhni0_@O4taaE#bz$-u z1xTXf@PeJj25{&&hC^}4K|6?6lE$hl1NT{Nnq$m)t$=FP-J>Aq8K{v zrUGR2k_BWs+?)RWl~y$2sL^5mzS8L6npf2vF`ybWI@hrEB*8bqkKKX8Q(+NcXYHv| z?J+BzZQVlAeT*4P?~-mV>+G(2Y`6;dYaza}FYY#}imW@{0NP?2=GS?sV>&`dJWIyW z?tUNmH3 z%c-JAeO7WCEeM7YtP5fo^d{tOISHEdfaeAGU1j_Z0~W^ptr9GRh1Ge2^A)%PvIn_) zJnHr3=7xE{eTm}$e>UYNajhAy=(NO@;EIZqq5T{zf4J$G7AXW@UBdfpBM>4aPelcV zqBV`vdY#$e>VEptD=bez*-)zK-f8~`Ai8&K&-flEbfRf!8kk*m^6RjZx!gFDnzD># zmN7=D z>&0jwX8QtXYG{nYR(iVUWa!}>DkpvHuCtAFB%<20=DUvow7)@|+fieummG^aPTN7V zuMlHX$QiB%2?CX%1((XIM(dztj?U!^1Q9LKwzfLDh~61;`3>m1as)Wx4SrRjMJN$E z$slLg)J{XSU5>UXWb&>H+Sb0^Y9tBMU?WjR%?Yt z0I~%k|Gfnq%-4s09!st-GpPSh`?W#EAI4jgXIeug#~J1V%j%Ac28|LS4Zv0$VpxUS z7%vlmt>#4^@;=|tYNA3D2ThJz2^c@{5ni4W{0s=L0b5wupbk8x5-9#zJa**w6+m{( z4iqMJHy*Idq}vmOn&Q%1D5AL4WV(S-y1CuU7kDPb7XwOv_A5%ZMN5v5h4eMnn-wMd?t<1YCB{$+orF?5p1m+>ZK_qas-{RCDIZSTSjcAEQ=T^>%m>=1n zr-%?C6%oV`yOG9%VvC7N0u1sC$a?3AptXbca{4}f1fvy-S_&FCdVuSt4;;$>zp)xe zPI=kFFF(`4;?m_Ih&?oOJM}NygH1{>U<(EqdEs7nxgvP$(zle8vg`W_S`SA~AlvLN zINPYG20h|p013!`aoe3bmK5}}mrLNphkO|t>_t7*T8f1M!&w7PQX(vL>aqV(L^k8z zr|{#;Z|0azOk@EV6F?Pg2+DYks=W%gi` zMd09X99@%@!39zXSMvR4fm7_%@}#EM_eCdRhQJXB%OBseFZ9E zjjIW;Y%rj^amLY}5U<_cjy|%i7RsUhQCfbq=zZ}}uT_2n-= z(BH`P!U^Y$gbIvt4G6Dfj|h9WfMR(#l?^~l14TlgrrI;_-w0$B>wiC~{+uLMcQiws ztxnC_{aD9NQG)4@BRk>>Ja|Yvdh@?dEL76{k*~Zk2tZ1d$J39I)|y2xsYF{i(8e;p z-T>x@^PsqG9|bT46pQ{WJU;p|s|_x~9uUtt-*Y-S?;4%Bc|PPql=>2RpMl-JD0>pM z{q=^z`xP3&;A-Vr+4+JBS4|(;7-xlBKHS?QIL}?_WrUj)#c$cl!;HWN5Z|ggBU{_8 zpfOE)F9yf2b<$g1MGHRN0(1rjl>pOqu`U(R}MH`OrEjI=+ zGlCxjuZedgf7zyXv=;DowVrh({A9PzAB8X=RruU$ zBx;^n)OKYIL6X!?`%ElX@sjXh5l6tq{+L!0WuMR9cdSM-)rnOhhp{-@^ zapU=+-n$dtvZyNLby{EBNb&&%{1<=)&Iu+|s`7szgYZZ+Gc?=ALxJI`b_s9P|NhcU zKm-<`gD!E8%r!slxvB5;;73I>2|;!hc1W_=C1j6iKHEdp;cf^{c#2x+8P4&ypV6CK zV{Y5hT3f_NVN@P)(Ksjn zdP{AVv7@6&A19|FMTQ1B!FUuJl(R#0X}LBI6l{}md}=fxV8kVF(4w?O^D{LjTn{gm zi3=G86^?@<6v%`#g|j`2TvX#90iR+jrbmQoNs-qP1fjIon9?9r!BE0|m^#IpRQj_e zIVl@uoYvqItrMyxASy0M#7xG*Ee@n=GNN6~{K9_w-t!^5?^ZBFS;t)9{GsB(=mzIK zl$QsJW}sLjzt#m?vS9vPyWWH$d%W7?ZOxG8xGtVizEMuK)g(7Fw=aWR|C(J{hF&7q zCc$-3E1ZvsR$-LFcYc~aXB+kP9_`g!DocV4*e!b^IXM*^4M4`RS@pr`R~Ip6Yiw8H zF1JV-PSWS5d3?}aF9XO{qmAU2K7mjX1^e;6)CoMcvAiSAvqrn{hW-dT@d(H@XI-0J zk9U8V6Lh&M=R9~_7Ld+!J;JzEL-QF8CIA!;-0L$FPI zrtK!-V53QRj9Bqu#?7Uu0u-$pA{XcRWEkP5FacuzZglZbg>gWDI{>2*el=*$+&P8% z)lRtTMjo#RO>B5c8G`;{nUAV_(8H~)Si~PPb9~S9wp?Zg7OvHKANUBETk*D;0J&F8 z5GTo2s}#F{KYlu*IrXKJT2(haR$@p1>FF*CxiPJo%cZe(N8In@C#N7*igZwZKoJ5H zMxri4;;lEruq;1N7TF<%;YYK)i$RW-gg0bBM%0V3t0>(zcC4_JZZWrnfi@fJ19yjm zKY_xJfRO^alzER3ozC3($y1lznnXrOD(NZn%BMDAUya(MxMN#qC>TJk!9RNA=%<%I z^gPp+yZ_y^38&oQB!ivZBwVM?X7hwdrY+{n2XwdQ_RxiPe>2-=G5I875ma(0eO6ZE zGkgU)_R{*>BNk4f9CLmq@Suz#wdle(2A`#_f$ky9W@gRa@)!rN58sN8|8lOl9F%sb zIrJ#8+!oD`6g|AzZDO;n&9JvwfEvAV7Ct2QN*MA+5J|fo8G6Tl;9l0aNtUkxQK}+r ztcJYlcyK)Es77Ih#F$P>MaHo@ohqN>YHC*d2!*Qz+Mgei-`dZJeX+K?=HlV`X)dtw zF;(O>CV+SU)gsfMDArf(`R_Z5bk#Dv{O(#=k;Rjx*{q{kMKk9QT^qr@dyJFh{4ch6 zzEo~HGmk-+F!}gONE){Sij;nd2t5;S98ep3chax7vu$Q?8*NShES~)MY#0Ogs0UD` zPA6QC0RtATk}owSlk_Z2g>NT_@1p#E7)Gml2d9jZ#NoX0s<20>U7-_fz8oQ70DE$^ zC#++Ul7DYQWZ+_Lu8^`2kgZK%30o&MAHfQf?fs}R4mzuiIyezbjBEw z%)`)P6@<~b5?aI3w9UZl1xx0UDJ#_xenO{ox2D1_i3=dJX!2_ z%y~BVc}5rvbKNhGRtLZ(l2yOpGE~$Wh_bjq;2H73*Hmxs-xl0j@X^+jkWkT1&;8 zXrJO*RLGyy!sNW}L%cNZ1in=>;UwMYit5kNgIcZ)4Qty~w+?F%uQu`DK*twc`y$>D z%Il-1T*!sdB2Db3DbG)zFEc+oemqxLd`N^!%S#3iT!kb7@5xi*^o}Y=O}m+;yKO&} zzt_{!4LN#JTZce)&BpOBu2gpSehYkjH@dtc8Of+05YCB(YZ&B%3#Si*yR`bz3hWr` z!VM4SR+o_{e8|$|)SoCIbd3+>9Hq_?Ae)~Z)WDY3tcF*t_bxXVl6Pj5aSo-LcShc~ zU1P=CW(XH4%%J)nw`d#HQ+&3i!!~u+9TNyN@GJ*Q#_Asn9OxV7E)I}k7?soGGRO|{ z&xXuK6*Q=2B2Y5IkrJDDj+I2mVIamIW}8iKGN`UToBSMzu+T^5D+t|)}5SasM-tU3e%a( zRaF)LOZ4aOS(V*cdrRk}Kp)Ram4W4gwR>F5x6QA}A_wbLXyfK-8oD z$V@Qn+c>#>cA<5w($_(sSAE{%0cl37)itypnm1L#q`ef&iqicl-5kYOP$rqMCJ))4 zipLeayREf+1sJAEW^bF|-xGPfkautLeZKSPeArB-CtH|*Rk_^b=2E<31oqB10d}MJ zx#722b4&;8unQDyX7`9N;Y|?)(DrF zJ>&_TdAa+kZC>4{afFE&m9(Oe%V!VW=QXiD>rYkjA=Q}^ZibAbfkGGj(Lo1#cWeV2 z0f5(OCT^te`Ik7zQaWu>M{+~LqUz|#%ikHjSN<@nVopXmuq_ihdVI1B77+(pa~oN& zPp*M4Mr5L;_m#HO=Yoy|y96=rjpT6XA=U}dd3XUEp9X4p#Y$nwV;c1BK=#)u$*27) zQ%D=qX{C#^*u{9!+4R)3@Ha$Nd>TQkwixA7|2p6zi@}+4(|s6ySSN|h&fUbewWE6P z`k9EIcptcC@C8ZySauZ2wbCjq^77y-*NAX!5$}iWU4vFp7{}67Shf|X0*ySQ(CTf|Z zJ5YKHea0B9T%}pJ-4dKtTw$qQ-~P~Eup}_6g~L{ni{_B4>H7wy7aj$*wUOIE1NQiD zL`%<)&Zv&b1BPp>aGnUZX8c#_jzHyS)E_FBtu|Gwqef`w_>X%#Qq)d(m{`@MDI`6v5u`V7}{eK3}xokzt%}8OgS!IFj(w3jhrn z1VEZ^TR?6RiDjW25wj6}f-lFwDI7}Y-9=!0X+7Kmi4dzw1PUoXuF|Hf40WNG!&#|9 zs0qHM(t6{osPjZG)`jo>{u*Kt{b5@E}eNcq6vE(2{Nc&H}h@g#Xbvn@byXUq7g%x+1qfcU5>ThPoD+1aa@CFN( z?{=5BM4zWi6;K??dGJ^zuQOkdfaCzT2plXJmRh(wk*nL6CeOxSQd_^jxa>$KIX50qt&@ zhW+H9zX_|lgg*ijBgU|}7ST!8z;Wlp6Yn65%r^I%^!(xU7DEX)qI>nZc_3Ys9R-h6 zDgRwkKBjTbxDTr>Lsm+gk~Z_gJW$EHn7N0pAb%csZDV6gA$Xhe+kKE}kl@=A4~pj7 ziZ*7zCW^-$LZNv=fnyZkn?WhvO?Dv7?*Z04J?V(W&>mrzg;C_{xv$9EAR2*6M{#YUlaO%>={r ziT3Z%S8Y8=xENkYO8u@k*wx)H`QsR>oz`nK9F(o4JT@?ob@zHOkz`h|lrz3bD82QL z)~{h5I4DArtQ!Qfu%B6o3GB{fUcX_zR*4G;x4ygOolC`XbQr08->rd0s?b-Tbcc!YJLsnGt)=j z^)Ro)Tx}wU`yexUo-f4BuVcZ#qKNKllF+HpOMamyrj<-SAH}0lHDn@LS*B9FncYcm zPsvK6$?ZD#!~%-#b}qf)9o-14hCTy%(-ZY!BLARbmbIoUX*4Bc|1^y}ZV9#9}?sSGmW+?J+8`A$(<4?v!hka*DG*f&w%Bl`5vu@#cj*f-bzQ0}Vz>kc=Pr8K{<`MJyMW5=A zA3WssbK2gs8!Sd3g|yq7LYf}#)5GdOJo*VzuW!1UuziPwi{j}Y0ZImFaz|jU6nFe^ z+UaI25b>z1)UhuzM9)rvq+vSwD$~n?2#aSeXdiX+d8Y549`y>Tx8hGsF|rYi7Qi}M z&%SWTBOriewT<0~f6KT$NN?WwYsMo0Z!u%E4tnzUp)~;Ep`U=~+7sG-YA1SJ#rolx zkZ&r-pqB3@G>a%RF%wNh^+yBEpNC2N7Zt8=IED9k_!;xUOSp7gg8_H|oZ%iUmWE56 z9F?ewy!TGFxNhtm6e9SjeQ+QZy+>lZ4~3*x<#wSy`>s;QTbJ!rMyt;n%f}{|4mfoE z<1*+03%$jSRoiqCfkCHI4}Y`2mt#-Wry?I3AJVL!dKvCFYS)TMHNOATS8ARK`u2V< zyVtdlRJnBcfl+$gj~bfQ7<=X8IbAi52sTM)Y|I>IWRV!|LyZd$Uc_!j{3NWn+Rje4 zQc3^mj?p4&+%c`Fo}TCpHk*s6aN#yJ}51>dA(?TkyRi&-CFmHQkokBg3l=nA!P@ zM(UuSZ218djq{B)?GTVNwt130SC3bTRre!+^u(&x(&y8{LhNvnF*a|HESI`dtMpr+ zbGdldaf8}ODyw1-f&rDLfZs1ZiDf=?RjuthpEh%mm-)ZIVqIA~Rk}FuvTM-4fUp|E zc19iEvlZ0&Xef`{YQ^JVk#3Qe5zcLTSP&LhS|&z`zksI`EkfQK4@447gOzrbNO^SX zBwn46Q&`yOy&v9gK|h`2SOxo1D_J#}R8%8Z23{|FAUl zrXfYOt;SfWrbUl4$fkQ))~*%>#7hcA+2tscE#>lHaUURUDvrwfQha$IXcXhCN1d&3 zI6q{`z`<>A#M`B~cccBJPB?)_a^VD<=O?qh3miZh z^tpOzg~jp&eyxtiGT3%xq`&t+#`tVZ)yR$3}0m{S1uz>WG@oRfC=A zc{gdT*TW#VK7i*i+zJP=!$hLfs zMO5vE1^$Dpzd%al(4f=FH{mF}Q=c;x=~$7XzcBdKT;2`#wesar<%7e1!%5@em5OLU z6qVEjMyGA^m9%@YM;%m>D7~(w`F7m*rE1JKd!l4C*2TQ0@mi^2LY-qT$WX|+u(t@E zZz5}Hjj2NDf37s9P}iHWobz-#;@K!P;Du~8B^S{1>1!3ng$joKa@;0IncNE`3safP z)l!xJ8}!7vD!-n!HwR7$Oz^Cf0Jncwdw_6B) zMc~2=TX{7BEmI=#xs$mSUMMxCh~F@sRpR(f0e@mP`6mBlRKXC|_170Y3rh2`G7X76 zM=wK>nbDRaZ!Rw6V@!XwO*1d)4DNrC=8);F!S7>rr^W5%mNUO`KL3)`Yh%?*$G3e& z7+f>L`b`wUhf)5I)kr3%d51TxPf_&kq;l0uW(t+B4_;HeD$Ie$yEqP8;;PoxUVk%v z6Rm@MJ=|yHzmL078qkh+CwF|(XR~7eUE?Z^1@=|Kx zbMw!i_#Xik>!BiKz|G^F_>biyTxJZmVQ<|)4BXQTCYa2h=--70!;?b)bW5bFzgZH# zBzDqRlv=Tq_{?Lg@1#;5Jzk^2L0q!f8}1fg*`X6$;3dK*>jf?AZMdwJfQ@~daD3j($M;G3h zS#%U`nxkyZV){^-$6uSmBAnDr2#8KNMkbl%8 zW*R@zvovXny zUMP$h+&)*lM+$q>uVvX|iLFz|49+R#3!2CmEnwOu&!$<>>e!|+d7~%s*I#g_Z&$B= z13R9us5f+l*iw1hmf=4lq7{PxVC4h&&1(5jbO0=n~Pno$D8}Qffpz_LlKI5Rwt<^=L zZ}jKoLIGB$oir!iIBvnV&e4cuT(CcJpXjC7fa8#WI(q1;y!*By_&jG5dAxh09Vek1 z1-2Kp4n0W_hJEne%Nly4zt zjUoPJ@j3xW0i|@)FmNXMU0yJM{Rf3ApJS9fIowEla8{WjfAjNhl4EsA`@K0D*Maja zh(;b^_yy>qM{K8Z%LQBX+?yj|SZ4R`Z_IQooCR90cYEEsx7fj5px-%f$6*pPkt`_( zH$7|_HrUh*SxCtK``5dK61Zt0!&bPv3nEy?2fV&Gy1Xd2OdtFqYS#_UK}&EudCJ?A z*jVLCd9#RMScsVxJ_5Km&&o=}wO|m_AoW(icNdNE;CdE=1f91fT?XDX`XFqC!l5U@@!t#<=P0%w5gp-ya02xk+VFlDo@D|b~PtDoduh3Kg594c*`X#yDh3PtosBjF_`SEjM`h9z|d&)YKk(zYG zRTO4(#9U2&rZ~AV|K%%}+g2ifOcJ?x>1G^JU&-a>f#FYE@fw{?LSv+HxpCFK*@=qN zH{)pcdL*l^;tz2^J48YnA)Yd{H{Vn#Y3-&9Tn&1Egiw0uywkE>I7ac{(WdoE9@_k# za)DaF^SiH0Lba2TrY;g30(;3HW;)d;j|X{{rq&hkzDd5|L#Xb@uGjL`vT@0i2(gp- zV%7ye>U<9drcw0!*`%T7&F|LVYBr1KDwKN#8$^iJ5b3N*I8s{)AFE~#)Pf1ZoG9t> zOCNZprSbv|5Kf4JsZR%k&ydrTQ-R`6^V*K@Q{MP8wq*Cc?ECmY#~e&bsD{$LB-JwM zJdHGLx4~d5esy3NTe~YdgoYJIXM!Kotcfd7EoIyYbj1mBIY%C7D3N+}uD-xxh^g|* z@(WZrFA@(#I2N>hFn0Nto!#o>xujl~GQae0nmN{L3{=KXI>;oGb@uY5&+z121~GFN zY#$IC>=&1k-M38WP`jL*lq^xr$udjT^KkOZBf;03{#x^ zj`rhnOE1-pIMk6Sz5JqfZvKXy?Q+JB?X~uroD78AMY7^5J&KPWR6Dv{hL)>6cv1om z(}yibzz_-o=)jPX?d$}@hq9F+ri=`r9#@8*Ix zO1%f%d7(8vzWh9RQw$;T`;Xdl;=U5ihz$O!`f2w~QgU1Tm_@%6j7YfI^Gbd}owiRJ{!rXlnr?>2X6s z&xG?6+GzxQU}vgaV*UyW4q*K5V+R@0GQuXEB%e8Esd2)}9BCjXYNwe}=~JLoKU2ALt0TCt7ii;_ zsS-T!HHk7uL$f*l3_xFMdMu3}j5?_piBK$V%VB-?4xFeB=&hAMEbKU4mQg~t;DAYv zcOF#@eB_l1;cgh19f(Zv^z0C4+syf?xREuuYBhXRpPx2FU)mSamr5n`YeK00iPk&< z1mC{E)z0nW?o_()>hfQjYwLKbGr;==DVD{k_|8Q=Q~wB9yyn=*Fiu4QrU57vy{c`j z##nafg~@5hliCnfzP#j|(` z=E^bWrY#y}x60};a@anR+6>NPVT69|%~Vi1`*k2(^?mPIlvU2KVS7TSv)*3P^!kA6u*ZYW~utbx4@8EUQR7C&+ING3T_4fWyVr@r}k@3c&M}rA}_1 zgWe&cBKy{oamrXAv- z$>0~^^OCgoeoUca3&T95q+JKzFhq|uN>(mkTo7Gg@z=5|*BfGir*9qu#+VL+x7Bv- zmVM|1?LFMCKcD$!QfR7j3X0dp?QB!ntgeK{uzj`r&osc}5pW8Zc?94D-7y6%&ab^Y z*nKz{LvEj(3!j`zw%=u5LDtT8UziW6HYraJWr{=RE;bt3t~nn8Me?q@4omI!V&hE)1&mN|>eWkork?r47Xd11v+d3V0?<@-(mIA!=8y#L2 z&Wo>n%%&}IVexWmUd+$|qeN6iQ6~V3e29zzlfWeN9DBFYoT^hfGdyZy~mtf{{L@=47~J|Lah%bOCn? z9k2PT^U)fWcT<()P~rM?Wc_LPCX9cWiptjPjrQpy;A7?8D;vfHL)Pq1ICfsI#4s`= z5ahO*0KfATn9p-+weko3`&V73O3$n4p5Y3$%nvqR{<>@N^LD9082bd>l4-ZqM{`3w zt+)9MbZ*WRy1cHEF8EuRn3CcMk9yopFPgtOFTQm(K&CT=?jN7cd$iY(9td)7LQjXd zZlnJTbMF<^RJ*?YhTaiSFfnw3^xmt0bd)AldI#wpq=O(eKp-?}3QF&g&py--|Ccla>4UV%c!Us zJyVO9ZA?j;sGgJv(sqDEC(^C;aN*ws+i#jgX3Q*ZYk{$2d}xQT?>4bU*8c&FN{4$C zd(X$eLraDheCjL+9aQ2rQ|s4rU8^{=_<(4=cJo@IFaCo!UDn22jU|+hRG^TZTovACKX2KbbPMt^Pz|NKf2CO{2RK~zU{w-=1DdTL!2aA(niU< zH5`)4J&0JK1UmT_^)^&>PB^%)Qr;(x48m4d2Wxj*NK9hgkL?<|>TmFlgG-!0O*g)0 z!Gl18M~ELrMS{gqRm)s;r1?r)1?-HYvahUU9>wh8)D8bRAMkno3C@{;i1S&vS@Cc1 zU!9*b&R6D)N~{5|A^rr46kUhfl^~J~T|5FEz$C6%TC@HHk;>wG=vhA&>p**<0Yb)~ zm0F|SsH250`gXKEZvvBN3~B&W752@$8au%Uc&&=nJwI2A^9CY3U-jnQlaV{_! zj1{^qw*w?5O?~KU)sue{{n6|Hrg&I735l=gyh3-#qmCl3b1FplENKI+Ms1NS;@vDY z3Z{QT;le_YH%LgJBajA?Aw}o?`*sgR|9-WG;QiF{$--%;j-4R^(oY1Q(dwJF~1 zO3?-tqE*q##mO-=g@=lF#AHk9HX%-y9$gaL4sfv(+QmOOBaF`4NK(k!IU`oZvHe6L zF^aj_ zwhZDNL+2dE)vEch#oeWul@0_&>u_p-!+(h9qmopMS3A0Do@eVJlEO^xGcIiG!bC=j zY$jYs@I~_$wL?OWrF9E>HA5J*KtmssRh8nzZ zoSj2~8HiQD7K7>BSqr^}<sjz3ua&x=b$kFGP{SE2*gEcQb%=b7F) z!ggleI=W}q!N z5?45%pR=gcW|JIS;#L;siZOMwEa&=Mhe^Qc_3!w8oX#%kyJ3Vd&d;*ht%HY?@w8tg z%s5R>bQKaDgg8o76xz zxx^j>2ihY2c5Z=Juij?zRWtx{|gY!LvvnpL#yeDOpUE;;LSBMk^KM~6xy?vH< zYLwLRjL-8soiIHSDuP?Wn}q_+$h_t0yH-D>JyQAHVH7X4YhhiZMU4me3Va)vHWxb) zmL>DM^l6HQSVq*{-UJcusrUJ@ROq{j+Q8DWo5xr3$rf4I=s)L!E$5{?vOm-y!4KQm z0HLzk;tUCI4QXT(;ALD-SJvR2nxhRzOM6PvDjn9d9_6{xjzZC-_(W`VlbY@S08%v_ ze`=6|pg0mBo~YReE}?n9g@2aB4stFgioFO6*jgj_MITeXqP}XRq{moFY*LW2?Lfco z{hN5NOv%czt%~~ILS*~gx#-OCFv-n{6a3iCy-ok|Jtr36m;kq$U!1xGuTlLU0Jj}0Er&Ei?^mp0`txCjrXUVG zp>V`9d{yWQ8>$l8PD^_akD(!x*Q}UhJ4O6(wv&?b)5lAv2YhJ%IfHuTq@__p^<95@H~8nY-n&WEkNFauD^s<7rEQ&5Sn zLv{>2Aghqjz^7Rnw68`OlXmr#n!U=WD!e{(Y7E(twE$@D+J`3Dwu~xXyf0@1C%@cFeKhB`~l5>@Pychj?sBZ;7?zs|S z3a=V)i7v*>^x@7&UHOE36J^A#&*)7cq_%}(Mb+hyKJXj&!@!7i*~fX+L`#Nv5#m6R z?*sG8785eg4y%S*{4x}dJjMzYAwYm+ zd6|rN>Vju=^)3!+v2LrXN@pJlQDh|FBzlitt_R_35uR((*+)RNbDtIA9yV*-t$k z*dO#iXvY7a0a{-7lCG@=8Pbb0e#jECI+YfSJ5HhZQkrvH5+k?W%7II^$^FVMTd3TAbohXZ@g980!_C~qW5n%2ORq`YIeE%(I(F-#>C-9G9Zr>Bb4 z$$;u&o&M_HE<-dPr2(K2(n#!WSN#7EHX873N+J(lTe%YxHme@&tR<3HG+^ZS+uo;7Zy5-=QO`4 zt^45Z6sZ`_;fbejr($ez#Um@0)QPnM0&iY^4>2E`yg^*U>8hh;j01zlhz|mtvVmR@ zg$V#TSk1DtDqLTUih2-162Icb{vD-6@mEq4bN?f(H2ORrn-;;QcJHAQZ<9jBmdw#a zqFf4NkUF(CU2UOlT2k{>PP*ZxtLK;9@7JR;>7F)M4OSlIYQ!VtXHRDarMD@~MA~Kb zuG}vjna}JVbh2c8*w#nil8S-fB1bAFt<*!v!4=Kh&F~yTTPN!X<+be2%iROi+38R6 zO+u@1@j5+Lof3wEi>uqCkBiY2n&fBucP4u!`U|gee=fXpwV&Q;Zbih1H<8%tkXlle zMI`0|)RrnWC9HDEmDHR`Yf<|&`NGYvizVJPeP?=B_E4F3DJ>wp*k>5&PGrYtE3;+I zKe?%G$_O^Bp6#~EE)JbV<(*;awC43P1~DENZbx}9x2v$EJDOHHok6`S3CU!Y8Z$|! zz4}>H$5d6{Lo(UjnrsTGw=>CyVg`??!vFGi>Bkh?6a94 zwJmovwz*#Y_y+)}dysIHS8bDP8v7Avyp_0~`FH@!F@Zer&-nq@C;g<4YBqN4BOnM_ zH*O-oY@XCrrCQa8!}wE^gnbqZ(fKL8tb78g9BIl4G^wqnYXab5*2yRi;Ae8)H!5{Qcf- z{(67r^TauG=l2yL7XGi6cTb0x2rM5YXrWSj+ z(a!0J@@;aijRcC;gMj{>1KrSzXow+I+%1Ch9R&^(I^6$R(8u$WelL=((k5_Fth9_f zZDzdn>Cy%WH7mo+8r=6rxMmM{ z*$5=Ix%e4k_ZRHnP_m318rt+>N47nS%4_$TAY`LVyRLl!S4MF`x4zm|4#4oiBTQX);OuTt6syZ24NLa*^ic*)amKUO$ z3BL&tgSwZOIcw8>(33YLbVpUXBQk$P|FCvmH68i7`o8>=oDp4=q+{Z7*XKHvc&Zv! z{a}+2IPiu;(REZ64G5dVKb`eb=J#w$W_jilF&>yV_|9gk8ZzUun=|F8Zxp> zRAm_WR3p=@yRZFWcqOg{Ggek(u-I1V>d`rw{Uv&}_=`wxQDGQdF?Pfz*?r8k6hQR~ z_hD0k2vBU~oSu)pLNlR4=?qeRj>wNYI$Iic@%OtT!cC}^5=R-SuX~?fpukZ-O}<`< zFky=r38dk!b=s{5IskEVe?_*_4+Ujnl@pgrq-gdgu5Sv90Uj zA-4S|QS?`JjkkB1lGDcUu^nthbYKB&wzbG4IPejJHv^)9F|3}W;gSV)pO1%sEdOcQ zTR*+^WO%= z6{@B2h&F^OJ^MFC}pb}6;sTcm+yH-FVEE&k+l zq`_)fBf4*XiY5{8kS$WOJn>=x^)>?TnXjZaLJN#JLT}!N zq%ALZ^gdg{(vM^xs}~L!P$*@~OVlK&4#W|5y|w!|O0{_lFw3CHU{ghK?i8_xjNEH&Peh;h30Jh#{D!WahO!ET7Y)<$#pr-gVD!B2 zah1~-qvFh0d;-E!h8Zay0G)4EZ}YR+5)*$&yec9Y&z+@HpV8Yd;qcKIoxbWaA7Nca zo>8-KYZqjvmu&^nSO)!y{s-{1s=IYXd&kUgQ;>k(p8qkls76Lm>+Oz7-|NIz;B4Vt z0V&Dl5ni#%X-h!4jRA;p-3wnH9PzrtZqta*Ev(`A(+%~ss%rF}G5^L$3eeXDiq$RE zJjA$=X87oXuU$|TJP*^Nc{LxSmGJqofzI`cOb2+%_s~75uC2S-Ua+oAnt}*DI3qqN zTeOx-azbTdG&IJN|Ej&OvXEPYNvDZ!f;s?&8I^l$&XeX8!}bw|{KZzF>b#Pr5r71# zM*x9+$XoJ6C+kSUbslGTzC{qozUfs=JhMXJ8}RSNRHS9%?OGt>$u=y5Q@ZIfrb*X?{roU~iEg}r0WT7( zNg#@GZeix=LL-7MWAuY#tkdfiWkT@*x$DU2Zj|--SIZMFx{Kn6jnkv{)60D?+n@V= zg|G!NA2VfI2gkOlr%g=3h+i)jkZEAAqS2ihhx+1G@rg&_eWy4Le7Iasb`v=` z+v^PtI&L%luib*iXLdA`+jv)GHG-B)uE7Rh2~ViT+D4s9?YaEZkKK8^W~hR$OLC)z z7=MLx#uW0xCXB_JHZ{8~4H?A7#N)CMo53)Yjf4|8@0&=2H|fLYG94&5OGu1NFTJT$ z&htV2XKii*UzG`m#6M^@IVYTFuZ=;ePE`lYZoXJHZvn3j6QL4Y%{5A8ns3s>s(%4n-wot}12hW;fo4H^mvLhuCUVuF^T8!YH@P9bONry}-@n`L{ zlt_{USA_2BWm@xfJ_;RBcdBk2@B?DA>eUEN*9W!QOV8xk?T>=*b!2syTR>OOGP#q0OW z^dA7UvT|OAPy5u*LbRg9PQ7x%AhUq-yYROFV=L)^VDz1`XJ==zi$zr<+_44^Qq^+u|xCXF`r zajIQPVCu8ccRf2=2E%0CI!UN)yEk7pA$5=axgIHz`Xf_672B}lf2E5vI|&yL<~>aD z%ULNu{);a;@6DS^T9D7)Fe^*`bX61K@#?|xu#M`PZ=>hX;MfT6N@H?*v>rf!E&D+* znL*ttk1d?yx(=R7t@4bIRgO+9xEDJ9+u$>GFD-&-Rks7NtUUMOwrXkRLaZ!4eP`S` z3?<=QwlnQB*hWQC@eNGDj9tcW%c?6f+ye^$vBm?4q~!L5wH{P1736uk*wn{z^AdA5 z!x$+>nXC2V!uZ`-e>+U#K%?|#F0gpo{U+*4n{^;(rMB_ZjD6*RVWx2Df_7P#GVGeA z*MoLez!<{yq=l;#TaPjnxHTUYmAieu+deXlY~zve4J{~NeD+f0Wqz@z>_Ecy+tJfI z$)+FGNwl}mU(D=k-#E0jLN#y^&Lu0{E+40~h3MiR98ZYjZs&7}^&7@nk#^U(G0#?Y z=N#KA$_AGYUs|H7(Nv%0@Ksf}G5Cn;5*;C9l)$4jvx(1&jzbS}X@y^&Q552HzdhCD ze{1;6-EHAd<tAH_I$wCX2x7E}$P3K|844k2EHyvqf2!G{7K;3t^|lnLzTL#$9|9fk}X zcB__5Z~ncAtH3>ar|$0rGMgIB8$ZvwxrInTq@s_Vaj^`Ht?kut=3i(<|A_S9mR(?CIMRbEO3<8Fva9K!f- z2Sl+dij7`=F)}rgrd%}dOY)@k5dXH|ozBP^sX#bv^lOOoTHHXQ>=9MSrvtki-`&ix zhfawV%$4tCkLr&@O4Te;4g@|W6;$9b=V1em<9`5Jzq!87>s#rP=lp)W6(;hfVsEOg zim7F03j6nKsVvw(fEO(qZE8%uXHWBL8Kr=2fu0?<|RI$dV#xY8)nyp{-8<_i0_bs@7m6c5UetpgK7M^?+g=U zA7&eu$*9_|_~CZ7!aD!sdGb%!{%`pq=C>AaUiU{5tr8v2WtdpCWv-ktspxxDuJy)N;vk+agG^DP>mrdJnphdSd>lsVTjcbqUsY ztpQ`{aT9zxthrClzfLS^-&EaQW)|Q_;y=sEt1H#be_iC+b1c!4_KaXe!}|05i>7_jVUfDtM2$_Q|b1y z8#w^=#fN0D$vTKu@=R^No4`B#kryQ|gNKY3-@DSD8Sg=STBc`ese+FtsGZ^9q2;L%1c?8*o_)0(1fj=KWexc;1MBRkHu-1>C; z#NS+6%oS`LAO(Gd^9dm{Ctt`sO9V$M8mQD7ONqzx_25{_f(jo|V0ko`CnQyiv_NJg zu2@-uc$<=j;5l@Uj+x+x@;z6AjK+CWL1^-!831H(f8gcDy(+NHRQn_4;J{&pyV~ z)=SM(mA|V2_J=-Ih*1OJ^>R^rRHY8A)bZ(hsJvO46$S_0h`rMg)^$x(;cSt8#l&i6 z_z7XO9Zp315Y=D7t}2KYI(AwPBMHX`0BQ5(Fhd|tq&WfyKb>~3Mz9`(qS)|50kL+^6$1acRNg%4kfq_R3IIk9knI1kzc%@TNtDGSn*3NQ8#I&xQoN&h7z z*rFQxunyE|TJ+1;8f#uc-|a|~hv$q#ZWJ*?yOoy|u`7xRyX;`ZDJrV5fr5|)@@u&I z02na!lJ8)E`b{hJMBzUo_Q&JVLtL^;{p7h{*!SvNGp3k?q_{H$!pXl*Ece!D*bIBZ zv?L_HmjAU12jn=%c7FZgyr)7dzhzWRZ(DO_$Nx=d3L^zJ+H(X6{vCrA;iU#4QXfE6cV!pQxz!i#_u9v>p+AHMY1R65xn4RR=^5E4=`cL0W=L$r z86&Y2^c)w{1|)lA@1v}kQi`E+(*Q02a9x#udpM{! zujI|I+?`O%BIzSWI$W_h@5?}*_XW<<%6hGFb44sW%M)Jy_(P18(Go0)f8}4}V|w4_ zU<VvLd*={gQ^W zlce%5Yyk5naq3Z?-oKOZJaBbf+7x#wtdqs;@*hKyR_As^4A{nQ1RDX2}<7n9>13BMMhOW8tusb;m|g#OHr`23SVv`{eLI? z1GEt4>?%^+oOW3FS|ZPt#c2on0{aOIa(6ifB>)?A#{s{nH-^zG-)+HnBnh?{VmxHC z=sa~T5aW_N?Tedzn!%$1x5E#kMtJAZy|qh=(w65H)RQJ;>J6HoFr)vx_M7OH9QM0# zbl+%j&&!n}R`nEqLaRu^1Hu6!hL#&js zI{?CTuQsU0I(aw^3w@OIykAAhH{KfeibpEWUN&&ZsIBa5N;)Q7iG|S{H4NZ!QDJUA zqrfxD43-O{Kcph4k+A6VFMm9Z8@KxND4M*F(a!wE_Fkt@?z-Ovc5`hrNR9n@=;f{J zkCGgnF7FJ4E4S3;{=KA0bqCE3IKjZ#NO-h#@dUynB|R9bImtuBXj%VpA^_4C)=uUQ z=5lmd9qXq==-U#0Cq^8r*ADOpL9Z`M&%Ya>8|s3~^sfi_-;1Nzc4+tLy43U4+GAsM zGT)pG-P8UQD$rC}=So=16fP;6^LJu%b?sQ{dTFyesa!3f$x%gvA%!@*c#V^Fy{{JK zS%mi61y(Xa`GiKBS-=F+On5(waITWiu(2vypBDJLTh?1h+izaCS41QgS}n%@sdI|E z^1y5m-a~dv{*m<*vX%$4GR>;T zhd;iXCrM*F&FvRD(Q=?K(}OjRh)dlGL+nq ziWWeo6Dih^$?f&WhxO=-4#upeA&`<^FPI6saI(N*B>PS!z75lps}z5a6EpDW!5yyO zPI3u_*&whjUIhhXCOp%&0wW~1y~Gc&fYP3MoFe=G02$%dWIhG5jeo#DvB@RyKeN;AkTr`?l@RxtTmgN5ii}|0Uf`csev%j;FE%4lf?qbrRyw&!L;!R!gJDN{e@kmy+?4;Y3P{;%dSm(v`yQI zHxl=Q(BLD)G{c1g5Y|7YPGaMEre{l~jOITdyqPr*^eFWjsUHjpL>%H^t1?Y5X}lY2il^zmtDXytHcsU&#BDlAiIO(viF~{%R97yKScx zoEX(DQsr|*%RAEjiu-LrI>++&fZ<6^DTBB2VZ!5NjbBYxm-<8-zt4OU%7y6|3#B%D zpl!N9Yh;->YCjquZ(cgjxd$Cwe)lvSoJ(>X_<)gtH<%f&__gkD8zs9?a+msFLq@(A z;e^g>6L^rz;neE<(2Qq|p^1|VL^I=g9^$JW;Lp7}8kfC1kkScyT0(@F*hcbi6OEdnYV=!@y1_|G6+<-6Ygd7rjU4}#LcC=4YhbH#^B18U1CLH zzHN(ZpR4A~8~2X;-CNwm=h=H0QPk!p3N$-MW;V?kJn^>ZUtGa`0?8h9MrnyO>zKN! zoNG}#-atb^{ePMv^d_8p_iWwa=EY-RhTs2c|Tv1OW*U>Y$(gR>t;;b$IxfsdI@W?C8~^Y)#qC;aMBFs-;h8NKWA^Kfb?lelMeF>-MjPZfuN?e7q5451s-mE@kkG;W6O?;#(OBshK;N&&RkNmv#h?Ho=?{ znDCUvG<_q}pWCy0$%8sZ`H&wE)6^E5zk22%dKx%|Rh_UE^Y-hE!gYL znF5TM4L6pTK|Xj51-cO|u5SJaj-ymFVDC|3$?K9O-!-*dcl$ml1to-z%r)KwaS`f@ zHb$bAcIiq{rP_tej4vqL#Fy{^BvB~bl$DU8Lk#cs{>2nX5t?s4*%oc*B5n=*g-j}@ zrNw@JIdCI2xvg|lwAYgztm?Pr^4@(!)@lT!Va>z^F=o5DZsy@eK;#Y}Nf->0bOk`~ zhJx@!R~uhxJZaV-Lf5!DIO_`5hI`gb8*xRcL7Cs{c_=9=!=UvzX2osCFRpWXKHpoyfR$Io#f|gs~K` zj!mvckmw9jd>iydZ(@vbCHE+g!EyLg-c3r&Xt=7bU!>-RkUq*oGQW9(zgY%7}DiFMFdw-QBTZQL= zj%^LgOs#v*2HJme6|^JZy7nzG7LARHXem{FSGWo1c&+G9w4Zc^clR>T6ym_8;kLGL zaaI=?t=>>Fsxtp)`DGf?tc&Kz!3{dG@kJ@NKF+!is)nK)$zR_CO+GJBSIRO~z2Y=8 zzzf702=N?LAVfb~mr=6(?w{Z{6?~IVLFkg6Bi#eA$XIWiW=C&sUb*AksFCJiRl@y+-(p|0UIN)YqJK1 z#b6d*=TZp*5z)(#zw(Mm9c9TnGaXkCVj^h`n7iX20uBq9oOWwIyDWSUL+TM}!@FP+usm0b_ zk6(eFndo0k7z#BvKb_GYSOb71O)BZ!hqzJ9WEpCTWa3&;Kd6g1bK8>uD_}s$y`&E( zn2Gtne57{UGoxjRHZ<^R+u!+pFX`LS?c%yH%EOQ~rGBP7Bam9;w*vcIuR=Z|Fr_&a z(Qnv1t#iM~nm6_*WNx*WrynuBXpZCRYm3Gl%*$965^pP#h}orH+$3BdhAw&rIp0Uo zOtK!~B8AlQ!2*y#AS7gZ5ya-kr4T>aJXN`KW1GVE?f66#NkVJ8ke39#J*;7iahst^&4?_STlx#6B;YuP^>MY%}p13{c$r5 z+Cry@RZ04r?fltyyd*$BN@>CLD{Q3Tw!wIm!QEvA-TkCf8$`)dpd zmbpXo`=f`PA)iEIfk&I#5C?D^I6E@;wh#x2OPfm%`3un+8o<9(0vMqJm^$gNDU&ZUi7w-+*2Yu%a1BmtRj-l;r6M!H^;pkDu@g!61oltakul$% z`;!d1gCDhU9~MSpH?~+Fi{^c^mmzw_55eA1k)~KN8Flx3ie9cc(EPf_@YSv2fmy|G3i!YTqXS_318D?J3Ia2!uPw89?vf*Hh9qXMxn8kMOBZBnXWK{`j-) zz{0k?l1O<8O!nQcK9|0a{(@CSm`f7Zn-Od7UJXR9A4RSgl?YW)5G0pp{#T-21N!-{ z6x$N@XZa@zAB`!FaO>=QEsw30Wz7MQ;As`Xku&Bvthh_j?~C$M&x4B-`FqKgmAxb* z0RYSBYO0M-i4(CyFlsQ|C=x|qNL8+S()d=-qu2BC;#74zhB8^4#BGD2Oq$9X5=)B8 znQM@`;{0D7zrM7?Un8;@X@jzkGgnPkq3cQyjC^{82p8jgX0Fup(jw&}*5GzLlO2L* zVIMUj9?u>bh|@*Ll;^dsDqV`NC)gF6Y`}T9`9$Y7AP-uQ4(`g=u^wuqpN()7TJCIy zX86Jy?VC?+Sl+h7MEl_?Ebh|nmermEtAei^d3KsV99r*`MEb8uDb@noBngWx&7Sj~ z-&BhUQg!ie7|;x?1lLbpCq1eWb`=6W5p!MSG=X>=7STOA0@50!mwTz-kvdQ5+qhNe zZ%=4xr200y_{Q2iro`fJjMS4gF*|l}aFAPljjvExD=xm}w=((b9jqhQaMab8a%S&= zAHUap^rF#6kP6$VVK-y>I$|a~=t=zU64$6&mBY)QV@b3LFu`KWMCjWmi`EthefrUo zO#L(dKk2eHoO~u#?sLoc;B7A*&DN%?MZS-Q^%#=-BygFwf41JMD!kZ5e7M^d2b^T! zoK?*uy$iGQV9vSURHIbOS+Ew23=j8?r4C**tM)>yak#TKejku5xYN%)lj znbHnp-r{~uMUahTN)?)=2uLuh{h&N6l4QO*wDNlOY3{VNtgYiuCU`h4ViAIVpL!~o z_I2-@QIP(QNnpqV@71Rq-uVQa_zfTTt zHht2k#r>&kTa&)haoSKLzk9ajw8-%c>3p^AudSl_Imydg2uierr{lL$`(CoK!j0q! zbc&Y9-Xw@fFAdhZ|Gg23MoMz-}Wm7DA1?<_Y0*)n;&fhHH_VzLz)3rjg1sn<*ch&WBq!60u0af{z7{ zuia|4l&6bjPF3{&4*?i|R}}GFwC5YgYf0F`H^_*ysm=V|NDY}hbkg@2_?KrR6vjQ- zG7J_*UvU*jIsxqDn+derqTHBNag*Wo9?DCYgldQ35)Iz#(1lB9Bs$6437e}ito?NM z74UD|1fC!Txma@H*=1F?&bS0)IFtij((+FP0wbJg6DfdO8_{khmo}Z6>A3nuYoQ9$%v*85+HCZ`@jrLt%hp(h{`mXd7kiHjW1XE0Ks@$?zSrl zOcjR|lXYH)31`JvLDue=O`L+;%9tsO)L*O4CiQD&Hj`IP5OM=>fAYWdy$ov<&N#c~ z?_(8Y4*YO`sju&~6RtC`>JJd~0$}}>$@E|JUT`Kc&dRP0yMF*<-uDV!=VzDC>iz*Z zgsmlGtSmoy<}6HpXb!F0Y*)!ydT^?%{o~EF>HHcZus%3ia*019H|O zKM=~=n$unU1f=|fQK`A~g_IUA=Neb+SE_|O6sG^+c_pz{j&jDJ#97rq-30WT)!KNz zL9y+PaOq2!A>M{|0#$Io2EI!!pj>srXb<4vk}^p)@;K6HNA55>H3~4&Z{&&QXN2}q z>gsvPlTMP1K63ln`8zwEDygyB@avI1h%S!qJ0^#>^>d%>Yp%PGuMGvI$EZ`uH?gBl zMaky?TRYn@m2rp=_jfbga01)wEn5i#&HzhtL2((vZV>Jh04YUNkEyUu_7sRpp~$O( z!UzZRnX1uUCaXgqHNQXn*>H!ci zYiIiSin*fts5^d}msl`&YZv@Bg&h#{3vwgvm5iApQ>MQj`GJ`t`+F2eHP%PUvp~Fu zDyYruo6|ltKBOlr6>DQ=9Z83*2J zUg1KQZxU|$0zf$@e56%yBiUoh$Vf0iErtw}%)1_A%#>v3RU?9iy+#YUc}ztbtC5^W z8&ev*c+f6b1Zjow>UqnPjo{|9@5mi&m^}xKbf=%8`Elv{aO80LpSwge#*3%4N$6=8 zHVD{D`*W+YwLoU!W>qWF1Bgsp*a%D_t1%&>kzXGzx?_k#i!T++Ch_DK^BLI?X4~Ra zguOVxY+DLPdu^g9aw02KH*UC5`On4A$i*#$tWqT<5H=6dPkfN+4jfu~48X<*Zqo~3 z()en~djA0w^?N_g^o1y^7)7Z)Np0jm6OEW_9>NQUkdtHfyNx;|;zk^qJPciBA=U2d zXVJS3_$F&E8ZN$WON#A<)f*7WF3j-o;B|8Lli?7@oOHX-#P@a?Vgp6A1aX%zB1ZQi zmiQ{?FDhlfOL|={Jx94k*Om;u2FmxdSJfhnRREA7?C`$&krh1&8HRZ7?e-a;?`%-1 zJk3?d6IWx9mD+J(@3lJUlr$cKa}tde_l$i!45y=GKI@(lIc9UGH1fCLHjFOyAlvL4^lSn!(ME_mlnx8HV^T<1y8pWLVNGtl z=7GFX-YgkK6Bz8_(g3gnfKOX*o-IAm2)xa*rpl(2#-wrtahA7uq1Z7NzHpEPrnUGi z!(=Fdsw=BV&^>vVB8H1KS<66fI8Rp z>h%p6l!v7ClJvkvpGZ&Ev)TjNTzR4|r1YT#mRfI;{{H5x+-18`nchLg4@;Vr4Vsa0 zIFZK7{+#km#eUZjAbSXH?(l!ew*nZsfky>btYC&-Oo^OB?>+P^my-cy5XubGpG2>d z8rxKY3{xSgM{e}HG=XOEss{&JY+n{>@uUHA084Asznxg<{{L7^6aUcnQ z5hh40i8vOG1T%W;pkJ0hK#1g3QV9o9t#V~c!&5H&&mISo!~n3vkChLA6j&eiE>wk= zEAWwXpBi%}3>6)Z=U$6huQM_=Ll9pHss+Yz$9ekuTUua(HIGWCOyGTiAcaGaDGW-E zrl=GrAazl}oC5MNu|Up493UIP3IN!z~6THj9eG8!avsT+5+)pTkNbw;wtItgQruY1}ZyvBom_CQA4 zB4#PERYKmZnjRFw9@XA_2OgiI1*!1$=AJbMB&c4q)!(lmzo)$hZnV(nTdR(OJp|2+ zy^OGcv2MhHSm+fC+g3_CR*k{?cF$ z!VvuBJ-u&x?9@wgZ{%1U%4Y~S31#ag$hn=ytwqeAl5Jsql$3?jh#ZsaN#xjGcfctF zoLzO|eQl!CmC@YyWowVy4zPRDG@Ye!hp{YE0m7mD&A_eC6pPM(s3@IyzEs)MsSD3%xa3kI zikzS39oe;Jh{2XNb`y&^@rhg6uaOiAog^H(sxs8^b0K0Db+gq^#)LDLBAEiY-7-h> z^e9O1o`vAhbz0LX$oD>(EhPPYKFM|1J8`3u=Fc;6({yHQcJD9>wsl$FbtNDmB)%G| zMaD|kdB~1K>f3cxgi4)=kDu`pP3V(EEVyeEG8%mfC+2KjZkK(%JQ{nu0Mik0GLCW+ zH{dzF?W3H<1Iyt6X@1-pWvm9|7@M=|ez-s01f~z^GkK9v&dK-EHDXy;^x9{vIY7T% z)6^(@XMOD+psvA0tkUNDFOfbq}#dcmQN1I8;@0>AQZpKt)m!|3Lk$N03M$S0p2=ANd*ETh4 zOqzgcVj3bG5<}>kQcS5r_1J+k{t=Bm_aJm94sr#_A>~{kk`Q!Pv<0Ykd-OeoPY_)z z6M<;AKoTtZpnThSqm_*iSa~fg*wIDo4fK8hOV^=L?>xWS69 z0?$@^3zS{DrNCuI{9S2EYAx08UQrgnsVbItxIv{he%PW2L(5&+X-LiZ%BAm_bbhBn z=*jAqANp|XUsvsRMl0q;um%bKn501=9;=GIo=C$edhqpsx(+~oKKFI! z>FCoL$1T-W-PRsCP{vS(eteIo=RJ=1|Ly&7f4HyX zxR2wyulqiJ*YEnB=kGihTniYL-S96jP>z5Sq~AGuj%=vnjil$u4dq+A4C9S$%ow1M z1)vue_HlJLo>0wf*El&{GS7_9e(!{)&a~(w(Se+W`U}Z?amfvLJp9T}=NOEJ%HL!T zgBOmdq{>wY?78QCy2fI})n$KcP)UiQ{8lN7M*K1wjo)8IskDVZQ3{cVsA~YSCvY;r ztZKRS(qWV+*~xkO2q@~T?Ts>!9~eR7224cY?4luLxXBEjejdla{d$PG?fh|{7DGiJ z{_^eq#i?-!4TjEhlEy3*8l%d6#5BqMl#~obTdwEBZ+WE{aChBdKVTRDnEh9RYGsrt z$7hG@%i#{5c`T2_(c&FKAw;pXdGQ@$Y^OZ5-61m9ZRo zj1tvMe4`Op3Xb=+LoHeE(Op)V|8${_0M|!zY@%&xSii}&e--&DWSc^Qu=OJxE3h3K^7)rc5F!{!B1R% z*U&WpQY(~O^ky5{5zU0|h#Yke3Udg*B@0wUhNO1FVeR`f}M%oUe8m$g1lr*=Yk_ zPa~gr=k~m(`1e{*NhElHKbLv6E>&I)CDo_(pDfjU)7rgdT$RFSpNRjO7K z#>=iDso&(vkoTEDX8|^n)PPO3XKyP+6Ir-D) zr5|9CiFb!M^`<546A4SUjPP5pKy@}}hXzc90`*(lmh@;y{p;Nd|CvCr0%CDI_4e7> zK#k%`zvXQv(q2ET{QR}tp6BcJ-j-9GSbRHp54TzJ0HPqiEh4o&ZDJXphm|wg!f{*; z3Ir*#YM_$olu^*X&DbW$yZT)qI9i3byndyAmh&ZPl?^sKS*S~6=nGLu3btxoA**_|0Lyyhe$qlIvkGc0BI>-g22 z(%j3vWU>>nB8qN$AR%3s^_?O(2ncs!dPwDo};J!Ww zx_xu8MeaKyMo5E+B)06jj9WYc-Y+#K^*0eDBq|L`QV`SN$b9{^S$D=(URG9s_fLM- zG8%+M-S-zLdo^GTe%_W{!`(PKV`7@HJ?pBVtTW2?pt^~F+xNd3*IvTbrSeh%5Bu$2*&Ysta=EbS z=r@Iusc%PE3DoFfUR5S#jUZ!C@JZP5ASH8l*8G^nCX30<(wh2~iIV!vt}8~bvcC(Z z+wsPq*qrPeptLw;5R5g`BaDo2OS1RnVXq5M9%Fit(ovrR0u^+5dY&)9m^h(9IxK3^ zAmV5!EvAD^3oe=TCOh0owdGu|7^ipw+ymm6%o~)Tm?|b$g8H<7%v-%@^T8Dnsry%B zer8W_kOK=sru*|g6iM*~1^<%rJGEI{>995(N`Byb4V|qxY$DXFLfXU7YiCxxT?tzG zfu0^tj5c}(`jFcJxF6TW7pp2&C`YiCaB4grNHZKe0?5B~N^j0v5O>xQRd-&@kOTB*f@2HNkk%I*scfg~>hbgQ(u-Ia zJM`AGtCv6kpbqeyx3*-k-#>>7`Fd>r<_A^AP(SO9dGj=7C3ZF;e7U+)0daN}(rT&t zKfUMve9xoj{B4I6y##NpMe?Eab^;2voit5Er~C`Urm;#wfvzmq0)46<;{n-6bQ_av za*^MD|Jc_|y;RBZ(yJqcMUY8+^-MfmY39C^xBa+gro>4YRB>SetH(j2|IUlZsEYpA zS4Rt@uYe5D=&H79-tK=1+d)Q^H!2v-Brgw~2NA$)QQIwj zpfmO!a;dVa#VxizoCBeSl!oyt8EfPJ8)Ay^yF0WKnz|Gt2~IXti&2i5Ygblvs^*BC z8(cCsXFJ^x^CP0lZELe6v1k3bw}iDSPQ-IqvmOFeGsU*GG75H`R<3E+a3iuIlF-l4&5o+7GfzUVGP;YTm;rn`XFbR z^NmJP&lC>?!Q`P~pQG3H=3UQ8hBi5MuvoqTJ?VXWqs-|}lj+H6irPN8n(T>lxn9pr z=Fu2*hhpDE;Zrs4n1yWXl;(Mt8V4TynuF7-JQDA59swfXe_@21nR0o;MRRM?c?h*X zb;6C`YrmxV*><%L4(04n;*;*4FYuR8@AFI9a9iz&Rms@(~dG7{_$Gqon~mf;FejOcHg7sg5<@L;BCY#vGG2PVA89?kj7I_ z+4vR_b8*}q$Ck_qn);2MmZP1>R+iBn=P=%kTj0x*a(%v0s4*4_kw+JH!(aIk^J9Vx2-3&?-bXju~EK%qOHpl9?Jxj*RD(zO@sW6-nFk2dzUwTI-%8{Jy9$*6*1 z=9s^XeypeE+ZG2q!rHpQ9jJ7nufdLjs)F>j4+|4ar?36P^foYk z?TPoGTm*|xbTJ3)uI~gn=H~B&1O4c<0}Gl6I%g*$97Pk={ir;!-W7~rlLjiaWcydY zSCMY$bOfLUvI=(I%Q>2QOov9lBiIwcKLA&hhExz9kfuklp{C(iQ8YL=eETw~p(QSW z7<{2gJA|uQH`SP57wa9iF|I zo~~3{M{mP(_Ib(wS}f?H49IUDvf5^A&3#KyxMCe=jqAk{3#Q zpt>O3N5`po^ozJTWFH+UP#$liZvB4g_GW86Y|$U(f}nnp1OPdVGB481+CHKl(K4=A z(=WEAEee9WvRhjl&KpbGdY|o*qaneB@ik#m);=d^MR|L$N-uVs3G3VxC^sX(rrHx;!9s>n$lDhbop@Bs~p)J9T_IZW|{M1jo-kiCqm$H)M!J zyY)4sUSOVG$+^c0sU&}QeiBJlNLn7)f59*oMR?~ zg>{;B_M9D(@{0T@LT=agon}_sf=o|5^i#o(c5v6-*r)GG*L1}rc?|@pWjndoR+I#< z1aJ_0VccsAXS)CZIPaMGk76$jm;N@{{m(C!=$%@0+1hRAhst!J_M6ttw%@TzVek>< zyAB8(Y^G#YiO2c zRO=tJQu^`ymi?oL`NAi?mdL#O^JZ`#W}=#9Cv-$|bn8hDNAM_7=+Jp7XvJe{eFhDQER#`4f0wp0%S-L7)Z%M)q{v* zq%$?Dn2=05;1F~>0aq8*j`CK0apq@%UA1#v=O|m*{o-`p*7V0E&t~-78LC%mR=u2S R{=<0pr#SfkY#ekn^Hs1_!oLImA;u39auO0^ViHO+GE#DCN@{8HyD{&n6G;PROA46qGkdD2Eg?I00;mOkl?5IJIlX51cdk- zlai5BP*UMfXrc!Y5)cs)5)=KM3V(J8{&xT|0|_Iqq$(+sfi2lBPiCp`^g?nzwYpvw z!x<#M^h>V@3QAVC8|)kcfYhdMbuJ4gS<{JFS>0?7Zq4+wDetSI63|2U=^P_*yL z_byW2xm2vIx#l{@t*@vnDlZmkhyioMj`VsM+rvhPlNO_y4K(oMC1z<5>eqh_Al+ZT zy~yw1n9SIRFzm?S7au2`PMQtTs57EY0gqr+C*Oi*lOIIG_vk&B3Uj! z$Mp-3_1;w_rq`-=1b4T{Sjc@wf5j4Eb}JuNa8|FyhHstZ2a3P~GKvY?o70SJ-=+jE z&|y4kFIps^MArav58Q?pR(|QqGW(F=8W1Ia4e%(&aqi=)$I)TefIiM^K+DWEfad%f zV6uJr0J2GQ4Orc|2E<%k11i0)3P8x1Yrx?dq(20*@GW#2h*5{2FF>1J-FrW}o$0W= z-IpOiitoHsW;Q74}Eo`CeMbzo&Te1|7XSj>(^S=s~U*2HpmGW8JN;dDE2!+;*-x5?d}8C zjNebQx8sc;+@l&#{~;)y#SU_i2%E)HV_x?^Z^tcT!r^x&>)@YUAIoI>olw`iA9DrV zjw~g3LGV%p>imxf6B+9U1OLdTCgr0A!JrFuSs%OtL0g&rBDkI`n+sl%n*ZPPiy%Cp z)*{_2LI~QN%Lo3xJRlNqHY*e~;3f=}v-e+Vw%iMP(32sxO7;557LmYm{?{sr!zNwM zpmC+Rnu8-d^TO8f{$b&}B<5zXjUveTB53sgF4%t#mUjX0P9}X6NldhFl?xjBvmis) zsZ`G=-rFlq>X7T<(d*)j2MWg)jsJ1MzprFAF{#8~sTi~oUK(BldbLX;wAk_pF#?YKM#f^)Z9kTY z{BDwIQmgj%nPRF4*+q#84!Y`Jj~>a*2LrX6%X42I$qeEFqIWan8X% z4ksleZM0|b&uhbv(MP|^0TlaaGa{awI0p>NZs1BO!&x7Py5!}hh2v|(T1N0m9{ zG;+>yb<&~tTj}g%^Va~!)Fh6L!3pVM)IQQo3~z{7yK;=>VW2&uD#_kz0HlkdBZHZL z#Ha?%u0CaZ;DZ;0sWeJ{6PJy$-24@X1y&7Y?B=dTElPVNsr2kU@Fhzgdp#B;6>(Q1 zc>Eebynsoq-UCu$b&>G#ojj~(v-j1J%8~kUNWxdrWV2UTF z?1#+{dNYYpV)B!3qg=utsWW>7JDzP09|nBJKDjFPm5Ao>i8%e{cFbi`!?W|uCqF2F3qQ$ z$v2>uRM94F(#)-w8Vssd1P+HxtlP*I0CW z|M|kYm{qTH{?$F|q<~=o^H}y85LyfKI|P;8o72yge|&5a|E1--wV6<0P6fAuxRgOzFAu_wk(ECp9%wq)`9UUz+LGn?L&P=IoT$l=&O9ohfx zYii@K0kGQc6DPI}H0RfAz;s^M@?SgaAcJ-HLRc`C2>oIGIP04sQeyf;Z0JQOfBc8k zTYZZ}T%;PDlC57w!@~vcxyRtIw4)2lQ@{W>Ke+J?vdLvFF49|R$;in&!oZ5rgHxYW zN<^5gid{9hv^8N}wy#(TyK?_w&lrjySjuZaL`zX&Q{#+^h(A~yv@j%ItR6W}C!065 z;n{lMy!8_Op8~{`p}RY;0nz7|`oTA^@}5@VfTxg636#C?uUE}k+Z`VQ#t_j9(zi?qtyRS+B0=_^>6$8$AJwq_6`22V_sdg;W&bIT14D7Yvb$a$o(_L zA37dVQYpoXokS2Mdk--R;ZQ<{u6X?kXO&d%LY1?0AQ14&-z|i*3+|3)69a?hQ3hMd zlg4Jz>`}-+gTFfhVrnKP$j9OyQJ2*l$QmXH;eQU$X?59@i8Ab;d!`?f6pno&+8o;x=ykuj8S5L1EWNT8Q`#|3I8c=vYqz>;GQ$rUvxX(RS z+F|FvQ_gBhCJ^uDekEC(sRz0}W1IRe3Mweo-N zmiX^lJlK5sp&TcITgh*{1`Mo}vS|(*ME14WBikCqz*LI&49R%A#@%}&BU|&lXhLQ* zg7snfe{{1`uK@?S8rOgl6JzwC1E$!pbEZSOa*xA37dlz&;v|EHy6S9y_-0JSuZnz= z^@2@7Ve&N?28`N38tbzMyJBL6!hZ<;}zhJ7qV+L4C-#mRf#H?KOae2{VdR zg9g>IN{W ze;fUg=!?vES&WZr5L^j6PXGcGTntv7e~rRepBr z6-5(hpVohUK`TYh7isGJ4~do(?FahB%Z$j13F4NF=4uG;uB|+7(6~t)VLYD}K>Rw$ z82U#EN0|s~L^&OJz}vT^#EUn_Kiqd8(jFlZNbybnQ0kvx9%%Q`J1O!QLaZFz&5WbL z@D0MvN;99&xJhi^{VH5PO4*n=45-X9RHE0qQ3Fj7*}MiMq5Ki(ysMHf!C-0RP~!#d z2N;mbqNy;?+~oVdUx`2p+>@0mx>>xux>cm&b@fPXwF;BJhc(i#A4KgOdVA@^AkVG2 zGmKm9d8{GFk;79C^*kMg%i*lO0KpDZw8MhqRRPusuAiKnIU$(Ly}c2OWpNOG$r++@ zhfqH-lAqmOK+~{4EuCbPi>{=+h71wgH;Cy(UYu&iTv!30hex9mt1Q3i$Q-KOeauwB z1!GjFgKPR8o8{Lp4P|3ak*4aX`&)$L)=8sfU=#J!23OXjm!CYBS*>6Y-^EVHfBN?Z zta|k-2K->YDd_9ZIsN9WBU}1$=42{4GIj;h@?aHIb?QJqfxpKf^tpF`Dfq&nxf0Ah z8~yHOp1?bzFl}m%$_TNftgzL9VJ z)DwfQZB@QgP!=65QM^+(w#2a8{CcIT=I(RNa3Y4~kB&`vy<>`DRxNQ7cozd?KC86h z_HTcV1V#GjI)DB;-!ytuO$ROA%G@_8!f?#1u8YH@LrRhK1e(S_)QM+5|jX3Iiqd%_3Hk?ab4 z;0BC0vRD;k>~g;*T)frILA!|F6~{X-`!Jf1n!(oc+ctfYB(YYD!t-CQh_6Kn5xBlp zqq^3Hj+TU@$)9pD;DBjmuVO-WbA1wRetQ3#O9-1myixgQ;wWq{Eq1LHkO@{cSm~vY zhmEwxjxD0pXhz8!>+k6}>HU`jV^}T@ksENqNR(4gn?xd3I#8B|%Cv=zwFU6v-6)Cn z!B|fPcS5?Am^V%t1KFHP;9==TE+w3S^@7y9l7{cUJFuMzC${%9VIT43eG7{qCoRT! zY+6nc`7=F4o}=poyFE)*#R}$2qcr$YW#jC=#L1h4F}At#?>~ z@VjM{r~jhiPGvFU)LNnoj9o@AI1V(eu;w*K+E~)+F1w~7{%JQW$6}dP+IjS7yS{mojgR# zZw*=)ZLGiW>NLu|pe)WKKPt#zFV?Y5f28bn+rfd4m_9H<$&>_{5Br&ebcZmRV?5#Y z$mUAORf$u9sykooAya>mg}mrOLEVK1jncg+1$4c zLeRM4R{L>0&63BAu51$ZqP4G!gAgANhVIq$Z<6(M>PJ}<&S8~20#qu!c`g&LtWQ5A zKRVHrxc~jTj=6Sy&f)y?0c$iJ1gjcfj_s15HxLXE7 zxjCCAds38t~T zmFkF6@yjX#M5`$&T8H3%!FijD*uA@il)#9iSIc!vU1Z*0bL$qK~zc{*(+P zRWZG|Tn5PlZ9`|;e&E=z^16ifS!-r~?BZA##Nj>)4*rJ%4tyIoO+_vlFphK-p(FX^ zRc;?UyfE&Q*o@XcM|NzqAkud+LGYFi^Ai7TINd-D@?wu8JGO(S)U4k(#JemYtA(R! zzE*J6`6!!?%Tx5x(e%5QjvDI#UywvFYbJbZ_!>Zsb(w91#F=_KRk$Y!-ao`OAO%OJ8deO7;u&Dfa6Zf>v~ju+)ylA&JVnpF^Y z}GYzQH~vJ z6T&SNCDTp2%OrB+NZc%`@q@YL_|t&iQAZ8L8?CpYvy~_!^oy(PCjEE`)H9QL+?|#8 z4`Eb4rYtCXLU7V0%$uuV06@j@QT5u1g6JLRwl2@ zi*)N4<3BKjMM}9V*ktD^R46+jrf7l{XNIcb-3%@&H)g*ll6Nh76g7s8^t{tMk*YyN zhJQqYhjDjs^W7xpz!(*YrY1}~OzA_#SY2=V9+Sou`hd&H(UgM3nzbeJi zIRhI!`jVxeVQOI^N{02wtV}mwCqKB7LTQ9iL%g-TW*Upb3spk`VtVinkR(_Y*)s4+ zQ14lviomS$vr;X|mY_9OoXCjDQYuOom4Jg8FH%&#+ASB{!*lS8KpQ>F-PqmS$;Z3%5 zXrI|+^x~UEddAlvD8XMG0oz5(|||j@wUL99g6R zWB>|z&u5tN;XDqEZ*j8aVCb#cV9AmkR)&zO4GkB9^l;%1TMkykWJLF1OLX}7s2x%r zmnekSJyuv0f;j{t7eU0Jo%&!99;6oGmv+ihv9lsB2mXm;&Sb`yQ_tp6N0P2vh^^uj z@lK$WVn!8Rx$G~S#$Ur%K(r%9y4L^LO#QVRy}F%!r~A>yts9-;%5?`{hRJTI@OgWn zs2*OumpxAIlEcK7yL5r{*gFisr7M$*7lQ9u`D7IRmQPq;z&<~5kl=Ov!^OpPkY5jq z>u^ErvQ*Moc>3=oUjaBlJE zPw=4}WHax31aEN#9n6VLWg~)i;1r*i91pHutHTeK9QsVMjjV{_oUK zw$N!C5-bJGCN6gY-H8~Of3dW+D9+cRT^Mcm?wq{(GpR@bbHFO2tl0<0wOBHh7G(bB z(m;0%kTI0kwd*G8876V_`{ImTcu`3GzQO!U|E1q4#|lEhAF*-UQkn}-C2dsn;8Teg zkV6S%eowAPauXQHj2Z7|+Q&&m8sG7D`8;&Os?pSBe~0<&K`x0$+ZONZ*S+oeab2K= zZYK%o5-c^!r<=uf{U#Dmx5#TnWvhXfcvfQeD^4Okgi~8r&Fbfi(Hq)vanTR7fG?JQ zfv~LZ=Sw~KIPihR8`exr`gX>0_tDlJdV-ul#v)BX-iN7*+L?sfa#z+iz37RPPOM@Z81Nhe>_a(r0z(6pzkzBZ*fk)` zx0c<%6uIoI_>d=LexFmj$6h$vm^jPP;pu(t@=!*sG4j{YacrPOGFHI<_d0L^?jly2 zAsByBGt(yZb;QBP_kMjDaT3##fwl3a*)?FaD%k!SP$zAE4VY!GG)0G^1V6x!!@CF; z8WT%8=Z<7_^@V+iNmm&wUq4WmO2?QQ!}D34LrJIIo4OgnijdedORKKX;xB6gO&v<_ zZyl$P7>`Spk8XYC)_eWmeZ$`b%YShoemGW?V=Uqm>5?UKy`c;fsnNE!<*H~r`+Rkx zDM4GQ^PaS+B1G31B7Q%vFz$6qgdz@+69vLFy ztv6pS`$=&T*SE*H&sm-k6jbR#oUX?S7~APd8&f4_=q0UM`h#;v*XIM4LS4xB~PniIfh!`I1WJ8c9Z(b&Xt93Ug>&l%?0z2Q8 zbT$pg9T&Y}c=&kp5N2dp`byl=%gy;j=Ukt4Idr;9>MHk)TS*I#a&7uSEWVs(n@csv zwWTp4q7ede6U5%3=dA?ceT&qOvOOBIykHSb+wkNLfJ6-o9i(r69Tc}PV;&T zs~=o!lLbzvMQV15t0r|DhLUvd$(}6)>)1y|%R5 zDPVmc4Z%3bWXRO(Y$i)WHQff|8{;zcy+Xj#;0Tn*@NozJ}DF1a~IAi?KDHuKYmFt|=bk}WvX*?0w7;pJH*P-g7 zd@4r)P5&JI9>x@=WLji84rw+$w5$kbU+SPk?)PT6JjGlChJLF&w@&jqU1m^-Behb8vlfo{@Eg*(vXTK^oSYkY<29jN(`zWBk(TB767ZCQKTKqHudA>Oy0^$CXWBfyZvK2|ddlr} zI3i1qSW4<+j3EUv54kL61Et=_!;cTJKf^6vI3)*5P+!#cT?6RZ3|ziNjJr-;?%&~5 zI4#;lybS1L%KrpDKkZqUnN{J#$Uj6q3HOokv3fZvvai!Kw6pbeJbgI{7CCY=a-@1p z1fP&{kx0FuJD5Nwn&asSU&bEi-8ze9wO;#fxPqC@F$=MQYzB@}_dH+Z6-Rj1pzOoVX=Sg2koI>XV^%J`tAuAgu zn8M=VCn)hsga_@Yn{R-3)f$D&m60yKCZT5$w8yJvFQ8mvsvgF*R1h3;RV>j#ami^D zY&~6V*U}Y<-BjA#?@LNwWqDNClxq>vb4%J zZGtfFdHeUVi}B8_%}?=Pc-nCV7#eALFuUg_8EAsu%zN1$3s`f4B zZUZWH?d&r(()TkogWP4$iN?HlB{<7jsP5JJ{wb~_!% ztqWbX$^z;A7xkW*Aw7EcX&x;5Lv&`2lHVQG&p1tdYyXxMpDxuyUS!Wc@^VmWJ^xZ< z5M{B^-*r0{9+M-UmcDOT8+$0xWY(lKKi4ccr3hEy|I?E8{CFz{Cgy9y-KC5Hp*@k* zU3XDUXNwkU&$V3hox)4A%=48Dn0*yYlwr2|vdjK918pA3%F>_z?qrsSK$FH8+}N)1 zTRq}(9(jVWn=CKz8|jG%9lW^?&JFC%#KUGGSMd&=08bA)``Oiw>D9(Lem76yT5Ll+ z`}V6e@>KRw0QMUy?{c`Cs@qv20!NIL7|?UQv_`>Q?}AUjYz*uCPy6b|E}~3kiC8)k zln>)Ms`MJ%`y=yTVkD65aGNj{QU9OEHmC@&4XuY=i$2}1Dcf(;rRJkZMqQa~z&od{ zcUpHcF8F(sPKk>z<*p+RYhRd_P&pSKmfPztjpg zodhDE={>Qb#xf&q62$DCo9Jl$k2M#nxz#cRw9>Vx$#;I0^VJcXE*YB|&mQ`Ail08| zjC*cw)rUUq8wf+Sy>l4(m8K2v!W(yl{Mxwp<*gsXeD2!HxrMhd~@W2*`?;HM_Y^%7fR z$&lX}mgWq`{>m9WlyHdc6pIF)NKkDGoJj_Vki}N}Eb0w*1sPw8^{muxR@Ask-JxH#9J-;s{rR>ODP=SE%c-^AC8Ph| z@TUHO`Q{a$hTKK|;F|TZp~2?pjm{r!?Q4(2*3`I^4Kyp*-%U=}4Ov#OUlx(1zesw# z%isIJFZofW+`XHOuccRo_P|@U%YOQ9rtsmzdk6(1Zg~^bk2Z(K%A5At2d*PW9kdkL zwKvhbndcMuoZJ8;2EwYW2d_-T2L-Xtc%&eq;iHkNjXyA%y#|cGD3A`Ay=&LH1v{G* zd5=#U-a(z>Qgp8YqI!5%msqBSG(|v1O7OmnW{+F|vPtrlohN6*Mr~=(rX@Qz=NjM) zT6s2T@%AN<+}Zk0D@Rs|G)YTCu4ZG9$-7iasveA882O$w9&9%M9tdHAFC~RiVZ-N8;f9W)WY#VH|29ohONuhyMPL- znj~}rVsZ|VQxxMQ`UG)1X^ax~DqUgZ-dVDDdF-SJ9axZrVj+ z`@p3SSQE@M*auMbx?~<5nKS(qYqCFToF|*G{%-il&FGPvziXV(78r9_rxw}{qv7kj zNkjT`4??!fIIaw}7e7%lS2NE^*vio1&$mFYG4(@jVyY%e(@R%&O`^ZYP~i*2L_M>h z1=PrU=-Lbjtl}C#cP_z=n+z012L@l{eJb$((r>zOcxa>?Gid1Szza$w_2CEj6Xy}| zt%#{eVS&geaoN_)ozosQvf8s?JzyV0zbyLmpf|@bv4W$J!jEO+wJZmAzB#OHz!z5z zlIY2%(!t`r2DMu6vR+^G+ZHdWr@Bpkh(g{6lb-3LnHJMBQ;g;zsU~yPvbt)$xTzq* z37*aA!xx%b)h{4@1xTSQ3TtlshHV7IY5BLTr=D~#<`9UGq-J|E zXDHxcE}25jUj8ij#X$nZ43}a0(Qg*8Y_Q5!tXf;sVm{Bes@+%OqK%epZK;gUpYt&% zjqH74-g+ng8n9;b2+M+U>yA&2J7^@COAYH#@+OTe)PFg}`%%>cn73~GvL^0$tAgt& z;&EoWb#j0cX|c=w>UoAA(8*-xuaCoLAKJ#4JnJQ9Bv)yg#NNZ$Zi1q$IXTE8l|igWs7zCB_S}EmT+z2AN<2fy!TpIzP_vTZ9XS@q zC~3Q&oGC+mgZR*3C=lg`WscY%vN%6a$%n0R_B5DbEUi29574HkV$kXzU&js@)sn>q z9;Q&1+os2W%!5TxUBxKIakC}+M%FxzJWN?^o~~a^P`g0FU3Yux;q43$h2fK$mkiA+ zfp~NbGaUp{?}Ly}YoSC#JbVj>jpRP7W>|sG&t0E=HaQWi)Ix7DDFL`0QskFGF=~*g z%y#5l?^1q~{$Xi1kYl46CR$<(Hlz`MOJF_+#6=NSfEX-m!c&Y0j z4dxT^1}KGtv~a_~26*WA?uO%-4kpp`AFilMYu6?EU-sDCm`%#oaRX23#4+k+4db;Kux`tIO_?F} zV=MG1K0M)i7rm7i@V1tOHssMyDCeq++tDo@*gI-34dED5!@EY2y~LggNFYY&H#R4~ zFZGhB7MB!=-eAV)tD`0(eT)1vHRrIZMQd)SXNM*W;%+~oy-UIFl+EnMF?Y zu>IsO*na5o7i=@4L0H#RjQw#0@Jtg2#3yzn@Wl#4mEFjes520evs{}{%$Xag|3a+h znD5DKwIOt!`@2=MW|;7H&U=`bSzhTkiIfe34&bGhKdB8F208>@<2~YQ({GrZ9%ml? zRFkC0B~9yfcR1ldSz@zVzBiP8HW*X{txie(3{|&vaIN~z8^KS(K{${>SkBI$cTcwL z`R@TB&klsDgQ?oTVW0)&lFOR@>bI$>R2t!zlrRXBWZ#z*^Y;W98o||<%GkRLAQ%0_ znb6s8#xsR83}4HoM3}O?ANi^1D|xn*3lH;r@A}BJ!rv13@>1ahkwFg-I6wC1Z+Ko# zsViLt9xNRuwUt!F!&7wPc*PKJD@@Wq6N(iJ1p$aSkW``w9+qz@&8S-dNY68`;FrkG>YpDrK{05kU!t#O z4nyM=sgEVM6yZu1IH%Y|`vGS{DOEcQWvl3TuPd;5C|V*>MFgYPuQ4x%)rB24Te$8q zkmz|Eq-)1O*YEaeiSeqY-8F96HqAZpSk4?a0Z~F;PSNdh+-aG|iSPXm%t)ox9z5D! zSl_cJ-J{=xC&+4luXz)lBDJPHH4SQ(AJ9=@!i|9#gSGf7tyg!vpo5|T$r=+qtf*Gv z3_yml!l<&{{r&z>lHk|K+5^NTrN7XlnHnYw)L~cdqMQm{3`p9bb#XgG3+&jec}kcV z>ozewA`hV_n}fVaU8#JEFGV5lFUCY~ei%|**vg%3;eQOYKM^jE^}k$YU}jXY8XVi= z%71!Q=(g34Awh|gKOGhAVxOO32yEaq2N0oZ@uA8HvvpP9OX^_76m~?GuHQU7hoS$* z$31y*mav^SZOwF!WQ8o}(Vo_F7+&N)+@zAV41Ns2M=mYi-c58qmhI$#p4i7p-%V1E z8@TP{-J&qg^kWGR@2EfF1Nw0re*^jg2N2AH#Vo{8KN3n>=~S_sPpM2-=4$dxV4`}v zELIerOJNYnAGd!)c&vxMCxV>Vv}DGH7Bj(#qZB~71>bSt=sviD-8Xk!lzmZ<%II3h zs50(x^WF)Id5d?t>_WvJ9B;0`zUDuj_0eZDb8VY{&8H-oSNB{?I{9t@OAYmxB#wX(cdwFKEYd~IMPsr&Bf0AL_Zic~Lkl?M)4)i*`{4L!%S z0HGJefgOsmNm%nTIG9F?yx*0@BoAcSkrng~;e+~2hDhxD;- zkjZlMXrF_RStpt$gc-I=KJwT_WjqeB;Ug0;%Oh-{6Pm`;*O*+7!))Y|HHN~&u1u>~ zy<8umluG+pXs)ou|M462N$`+tt~q-h$EV(>-=4Bqv>!wJbd)784MN94B{LRv&Ms}} zUGsn$4+aec=c^WPc&X)iB|ShWX(R6OtX-;NJPc9UJ^Jw$q{$2)Oc#QsE0$LtmXZ9* zT6~z~wD#UK9M@;VtW1Rbg;quiW>)zZYa$PEsU#E4C8c|&b(U)uYl%6zW?Rv5zFr5~ zhEnQ;1S3;38?;!r0K`7knsKAZCpHb2F_&jHSt&m+0Av^HtMxJA<_&db*&;CxYHt#O z^f(TTC44IS7xFksMnrVm8F?K-7?iYdvx{TYlLWQ+9 zZF~)En6OS?F~3k_tMHb-`*!`)E6#a*iw9>{WJYz(SqfD$53?t}b+)#?n0a(^YbcQt z^q%{(XhNZ1$h(4_H!AGYXNN%D7R&qc`YkE5i)$44S1*64`tc(PzBL5Rb^30>T$ki76aNR+9cf#wY?wo z!$4%p_h28ukq}QiDxHwf9@37EcS+eyJOusPhe=z}lv1A7nfOA?r|aguB2|ea=&B7psCFg_Aum4(4(zO|L7X`4FI9g0;<1)PC?mMRPZG+i zT;$r&nL(vCgTI#7d(d-(tu>gnNA+9unyP#^BaMPtHo2AXa4OOVNVS9Nu+WUR^(b8# z7Rh#qxUs0vYd6Yk-shvC%}XK5x$ayu9nU9Xa``Is+&h6W~_huAHY|QLT8p zC_zN}39>7>cvouo4ToNGR?cl(fp<;yT2x0jUKIeiQs}rAR+SX+0u*z5kpf*LHY5ts+Gi-3 zt5S}9rvFU%fUiI{6(upWWJA{>gdpJjGIoeFwaK zj1h9`uQu)PCXv;r!fIe3RW3N*_QjfDjW6SHZWUnNl&|uKXQP6eE;qE8?duF0KROkH z9A<2Y@Wj=*3i=CeIL%KDXhDU1{>%e|S__iF`%h}yl<(uqS5?CTuW zl>Jqfi$k8%Uu88&^8f&hI%l=sH?vi_yj?X7NXhvyV z?pX`6#tT+>UA|s=BLAKKHsIzP2MuoK+oMBZ6$C6htOo1aC7#`9@ytKj!7?&bY+m|% zx0e&qwu>pzt0XFFYKCx~f?#?iTXct|e0*an#cuAKZz3J}t}S8W!=CXxvX^xY5q?qt zOK*1}A&>%IyJ}TFR%&y-d2FrpyV7{FYSc1wKE?1nEgoF3B9r~wAl@pXxbCT%ICZ=B zpM>(-aus$=5~jU}gSJt|Tv>_cyhxukM~eW0-19ZWlEkM@_B? zbRXmwYyMdSC5j>*)54*L->}R}t2|`WrO1|u4p8xP?To21d^3fY4(po+EsjDyWmvkU zkAVh@rQw|D`3Lr@+QXY&4e#AD)_=-o$aBBOrxin7WIBb%AAU_3f6~zMwLXf0yQxZ- z%b8*nzj58;N9`Mo7w*pOP4CsapzB><54}t{FMKA&J85jg8Fo*ZD8)tWj7DnCv~A(V zTs80f(K|ypT7kte#|TjPgXTNlcJ*y-@I3b60oEL4r-|(D#~15uB>EoG`zPwpcc@mn zWEqURLj&EVH0Y%yasKi-tm3o^BZgB885>>2^my9my>gG&k>EDql-zwAso3d*zr^GScsI7%rgP1o#$Ow=<=%paJZF8oai%}`FUe*#VeiAxu` z!wU5w9!Tk-{!>3D_=Z1^`o-&le6Okrw!RDb80dE6C&6J|c~Ks3hgWHTs-(x=h&;DW zLi8-=8^`ZE4uM53wI!;4a@x0iOSVrQelC@!3bc?}lbX`3iy7;irQ%f3Ts}N3HbbZ` zQ5FEmW;2autD4#=UNvzl1zp|=W3;q-Sg#4=3NsETOQTbH>k??36>rOu^~uS@)`9$% z64)$DVVVigegR%Oh{cX2bS_3vMFo3nzC+q0FxTW8^VdBK@zOtod4)vrH`5TG+G7@b zguulbthPs`E|9sdlv@P^gb7yCyzuGsp??M_} zY@w(Zzo>S=5#OwjuZEQTY4=8QNE(l+i@xmT8fUfGie(i$c|aWQ66%7>v$TH@rBQyp zc|!1OwsKE}edat!1gvx=JcOQHSkx9f63fuubRZVFm8OOihnlg9h8 z#59S0uCVh{4z+*%i1l{NrbEOysoP?O1?Xg*|(d^dsT=JNLvXF2T^y^sc>oex)iLvez|ZSAC|HQ zS5D32^m)eE3LEdJ;H3>st06;&FK9;MGnY?FSKqAogAH4iPLl+xlBZf&Hi5`T`21&W z488-vgIF&o_{s!)sAilN!Th1Z&Z?CN@Yy+FivKi;;Jg}N{fH0nxP@$8m9C4V3aZM4 zx{@vVLw z8i*#dxw>(_zrmP45D%lHrz0EY$`cN{V>kQ#dm@*gXo+2V3%0}{&WrBpXTREnF7{x> zO!KQI+%4=qWNCXPzK51ZS$eZmd}9E$Vm;=tSiAN(!SSP=fY} zBM@c1AtLB7jBg06+RtcFrjz4pdhHYI=FKdhXZd$>(s639wE<4fzu3vPff#T79*+xh z3|>s6Y4|1zAo6E^*v1(HDj!F46JOaF2-=(g5p?hHAwXCT)oZ}Wc{dD*;a}>di_Mdt z4mPj@#UFb#f|orG56`JE4lMzEuXnhK`MkEMlaiKJ&J2v2tl0FI+_E+dzc$a`G&MI7 zX*DsX?e-1Bhu!T=oolCTFv2At{Evq>8a(1(n)ECOT6 zO%odZPksLVwxJ5`dsB%lLswpv;aK$88>y-_;CfQ?3J$C-BpZC0GlEUrQ+5#|N4ZFS zX#OKMC^xzm9;AKL#p!R^4=rsEagy!PKIc}wMde1FK>jBA=?^&~fW5Q!JymO`OHM48 zipte{WjZ({+4MJ$Y+eZ8WPJmQx@s{nB$8C}o~Dw0dhsoNl?PVpwBfyC{Yb9AOvS#L=mbdBz zH!^gDWa+T?%3$(W#KBH@46P0N!;|{Is_{~*CzNs)$K@}ghOCLFXqlCk zP&jiPz#)!Zh$}-saP1#97{SR24yrhM*^;1?nB3(v5~ln?lg)GQwF3L@vwu{ov#>NZ z%9+eqt`4NBGLj<_1Src3Ufd=M10Yz$f~)alP7yWh&xe*m^@+5t?>nw)Ha%1xnS0#6 zguCJ|BdU=+ww}3E304MCbdmZ~^`1Ov{;en%@8aUk(Q1p1jt@qpY2V8XfFbe}YE}Qk zDd4x#|J(Rxlh8#H3HR%lVD;DhHGbl|Cj9G(*zK{xEWrnBbZR}3%L#w9a1>&Q#AG|P zV;j=36n@{Smt$=`Q?@ushxrxG>j-gq^0*lHE&tKw%YRLQiA7V=Ae|7Y!&6~~M=8S( z7uf~^nIEeTCeK!^w)#S=-KOol<<$oRH?T~XxW`kQT36xtB7e>MA!IiEkY43r`AVxD z8gr zCOV83Zt$u^2+f8D=KlYR*lk zSe3aq4-3<*6dQ^?lcYM=y2nSq^XEyC?U4MV1paUT9t%qAP}+^{;P}!pSP1j8$Pz;9 zpAPI*5zdmmr7-XjI>F~Xg#5f^$2$IF33`6Afn|;l)~X8q-V(}yY|aU)*z3BxC@RB% z=Jd-cNYRN(aLtT={;eI{2V}pgmVC7u74|ZUNyv;*o znu3NwmM4MNUFkG(_MR^r^-Uk4rm4@^N?`ficZrsYd6^PvI6XLr+^ALB3lDL*A$E zQ?7eEH9+`AGFBa5bUjtMqr#dv0AFOU5zlhddzC?sP`gZI_FCz^VJrl#?{>^j$i4<} z;)wmFhb=yR>dJ@Im{V1_xyc6@WE|XWk5}m7)(dp|w*>zs#QSb+hXR)`gZVI$^jW|9 zaSYxF4;ErWWJDxu+K2+6PC)Ahl9avEEhpPEu`26&7&vBBZrC|7k6g=zjZ6U{T>z>rr>b0l+A9E)Q9?;b4&Qy z{vDZ+X=na%+tP=XkJ|1>UduC?{WAC2MX`SmVs1HdFPh9XrDDpW=hAm%*w*a-;bX`6 zpW))E8W-S_k@W$6>Ik2mjCB{{>^6K_S8B1fBDBp00S>fz4uS@(i)o&Wm_NB7Cnf{l(L<({d%!X z&BkM`vn7?)nHkDexPD6i1-#P+#A;Em;3XW+t!_5=36Ed4v? z{|J30|0i$Vi+Q>~MAfz?Y@5F&{fPAGWjlIYbM-sl-&L(WoF!`bps9evwm3fcPdsR= z+T-}&OmV=Z(7s*^N9uqT=-Qn>&VI~y{vrS2dHBb=y^3bn0v~Z(?40%M>5jHrq72g} zxgT1=yw8t8rPBRP_6PIGAN7kW`X90PJ(mBlrA{GEHaa?ttM0H|^oh+u_H8B#@^$tt zQoqcw))q*D>skM9woku(zW+XFOP$P|%=-d+%**9=KCJbXa90t(F!$8F^w3C#+jANu zl;w9u|7Y0rpW*oF_*?Q1L;E|V?wafuytO+b`EYI}X_5T*a#wU&F|1g?z*;I2J_FPn&Htbd9HJD> z+^76ecG>3Y)i0+ry*dal>r8$)SJ?lO$?k|ZC1>sKS$juEvrZ|XzoT7Umb3tFNNCYG+fA9wqpgvuj}cWR~mlPUvv%R`WyFM76O`NREf zdve!R6o+3gnNjNfp6{;dyD8UIXX@s0z5U!$c_W5@*BMUdQxhuJO+!kZu)KlRa7s+A>36%hLzZqm0w2mUx88OdW>tuca8%Xo^1NWAzE}OX` m`#Z1`7`m&`Q1{7`P9Bi7d;u!p384M|Zvp^ZcDPFb literal 0 HcmV?d00001 diff --git a/resources/images/f1.jpg b/resources/images/f1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9abcf4d9903361cb53e6c6690dded1be411e9de3 GIT binary patch literal 35605 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 JAp5iSe*ouXPeuR$ literal 0 HcmV?d00001 diff --git a/resources/images/f1tex.jpg b/resources/images/f1tex.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44b2deebcf131a17dc9df168051fc38735ab76fb GIT binary patch literal 3312 zcmchZc{tSV8pogCEXGK~$i8QYL>jV0nn8?G8OoLx8QWwlk$BULB_UoRyn3^|k*y*n zODoxT#*&b16{50FV&;tAb2^>(?OfMcu5+H}`rUs#zvud0_vgO9_kI7^y=)fXwlO$B zQirjJ0RLW-JthExAmG5+fZY#_0RK8(3@;BqW<5p#%fCTXNnBJ|SQL*_kW$js(BHX3 zLr0rvdgK6cw~ev34%ySf=D4G)o9nLqrvpwoojc;}N?H2|gcT4F6%thw7gwVg>KIb~ z?ZvJDSZWB`DW9Bvz`wTtHxG*v0Tm5s^{x z30D)7l7C6Lb|W+EW_C_)UjDuN#ScnK%gP@M0(Ii_ z208U$Zb8Gi--;^HI1S5BLXJKiJi_wZhZSbl(7uxWYhWS&5!pAezjO5gUO2=_9vlk@ zV4g<_+@SxLCOApsws0~i3}PX&^>tS&|NTl$w27pVmaMkkQo z21`0fdcFSHU{P#n=Dqj6o~JMKj!u;F2Z$t12bu-^XY z^}A-bvPw!-yFx0U=r1{)Ty(v?|CBxR_C%F6Bd3UZc;hzkFgh-TZ$1O zjOM?LdN?XMT7J7lqbhEKwcFEQWwGb>u|W|l2rWN0GbepcKNs#31(Y&ie=^F~mrH*2 z)G#`od)P>Mbu8Z5TIw^R9YO2wBdj7lXrDF`YGbFTWmq941SWs_C=s=|7|R9*_A)En z<};aJej>3!#+_IeLXp`Htv<W8e@=QW$f7ri_}SNR&j zLn1awC2ry$-iiudhi|!vn#(|zmX|(?Z7xaMoY|^vG8}&4M)vovKK?SIcE)(h>G&+-`z&z0j-}5-I8au((~=AU!Z<*l8<5K2fUv+TDl@9j#`CN*x>1}D{g=d z!i0O&1|4!c759Qa`JAj#ZkE+GuM71DdvoCwXBYnMbcS) zA(D?9oNq5fA^ngi%^uond$FX{1wqUjHqh@+Z(dH*J^2q};n8hP=DMHVsc6 zi%W)twmSj(x0eR7Ggw{>)7~QjgUDkceE1l2{lMDU^@fdG9=X2ey;XhyZ~eQf;hVj^ zHPHjqw0&ng@J46UMFh4Dg^^8&II*^4DK##=%xjaA0mYT>5+~amDGoQo3`}SN*PWn> zI!n`qA;^~v1kAOgoI0FmbGUPSJE|#tRq@;G?&-PyOw+*J%3>zX*@+}A=>{63xkj(QzYkP;~#@a4Blc6x~`D8fbm;L_V^+tRo>EVW-6in_-B#ns{cAnS+Uwb^x*Jr>V+~@-RGwUnwm{J78sK_Tyt*_^ zU<1ir-ajzRMaMHjW$b#02@2t=7-deJUEY-{lzR8` z!6ZknqmL3k5=C+|VD}eNE%mq7*PDDE)02(xi#MtOL2j_+F{J?m4=dX$+UAyUj1-io#Z9v!?-E*_^zvU?ZxF=``%1BQte8$NW4LN=M`TI zLYYU7M+=y_OFY}AvecK=Y*;ywjC&WpjuWXU}FCQ@Ujve zzaLL;&byEJbxiM1&ktpOAT-i7 z3Rnt_4VU$IVDB$wU%9(NmubDlG%kEh8cBTCr9e&U@Sok5Z_WcG`Hr6_qq4s$+eWSM z+n;jHJ!Th!YX5QPm0S4f201#8RoTG?<3gPNN}pf}(i}K6^E^dtP{FBE z9zeM3OIt?TvcZrp?V?PtE@2gRoAybH@SM&!B_+cOwk9w!>BH8l9-b

&$Fbt4943 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%0AI9we$2`zA#$jw2~(I`}_ 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 literal 0 HcmV?d00001 diff --git a/resources/images/f81.jpg b/resources/images/f81.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75e1b25061dacdb0d1da412f1752a8085cf3b20c GIT binary patch literal 43534 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 M|3BXb_n)PI1F%~p@&Et; literal 0 HcmV?d00001 diff --git a/resources/images/f85.jpg b/resources/images/f85.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0587d8ed3ca31beb38f8e50dde497f7f4ddb0069 GIT binary patch literal 38474 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≤Qib5&7t$&d;?uFd~FC% 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 literal 0 HcmV?d00001 diff --git a/resources/images/grie100.jpg b/resources/images/grie100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..484278e2338256c4dcbaf46fcab81931e0a7bdbd GIT binary patch literal 31658 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 literal 0 HcmV?d00001 diff --git a/resources/images/rastrigin20.jpg b/resources/images/rastrigin20.jpg new file mode 100644 index 0000000000000000000000000000000000000000..322658aa2dbd4289609e9bee5d1dd44ea61246ba GIT binary patch literal 45324 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 VRv_npErk95um2C9%dJ1>{tJBR)Bpeg literal 0 HcmV?d00001 diff --git a/resources/images/rastrigin5.jpg b/resources/images/rastrigin5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c7fb261613e55bbc0f9b0549d0201e18996fcd4 GIT binary patch literal 41352 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

    `qoN`3V4p*{@gTg$S%^>0CJht(Gq$Ph>64k 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 XYh<_N{yjYY)%X7vH~-g7pr-x}wts~@ literal 0 HcmV?d00001 diff --git a/resources/images/rosenbrocktex.jpg b/resources/images/rosenbrocktex.jpg new file mode 100644 index 0000000000000000000000000000000000000000..540cec5413e070098e45bf426bca958b2eb50d2f GIT binary patch literal 6620 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 I2NNd#0uzIHEC2ui literal 0 HcmV?d00001 diff --git a/resources/images/schwefelsymmetrie.jpg b/resources/images/schwefelsymmetrie.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f6018b0d47560cd676953aa49b1f76bed455900 GIT binary patch literal 13112 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 X8j~57?g+T67yHfH{>K}i+lhYzK!Rnd literal 0 HcmV?d00001 diff --git a/resources/images/step5.jpg b/resources/images/step5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78b591f7c0496f8371aa2aa35cb52ca01dd73017 GIT binary patch literal 42789 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 Ug8jd9%l`R?;s4{@tAEY^3jit+aR2}S literal 0 HcmV?d00001 diff --git a/resources/images/stepopt.jpg b/resources/images/stepopt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46869d703eca3787a3cac9e02836342a5931f3c6 GIT binary patch literal 43103 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

    FY~|R8te9u^DFk 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%0Drj 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 JY=pr0{vXFJ&cXly literal 0 HcmV?d00001 diff --git a/resources/rvm.html b/resources/rvm.html new file mode 100644 index 00000000..5d2b98ea --- /dev/null +++ b/resources/rvm.html @@ -0,0 +1,13 @@ + + +RVM model + + +  +

    RVM model

    +
    +

    +Please read the JavaEvA manual for a detailed description. +
+ + \ No newline at end of file diff --git a/src/jalopy.format.convention.xml b/src/jalopy.format.convention.xml new file mode 100644 index 00000000..f871f8ab --- /dev/null +++ b/src/jalopy.format.convention.xml @@ -0,0 +1,398 @@ + + + + + 1 + + + + + false + + + [A-Z][a-zA-Z0-9]+ + [A-Z][a-zA-Z0-9]+ + + + [a-z][\w]+ + [a-z][\w]+ + [a-zA-Z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-zA-Z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-zA-Z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-zA-Z][\w]+ + + [A-Z][a-zA-Z0-9]+ + \w+ + + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + + [a-z]+(?:\.[a-z]+)* + + [a-z][\w]+ + [a-z][\w]+ + + [a-z][\w]* + + + false + false + false + false + false + false + false + false + false + false + false + false + false + false + false + false + false + false + false + + + + 6 + + + + 30000 + 30000 + 30000 + 30000 + 30000 + 30000 + + true + + + 1 + + + + true + false + true + false + false + + + bak + 0 + + + + 1 + 1 + 1 + 0 +
1
+
0
+ 1 + 2 + 1 + 1 +
+ + 1 + 0 + 1 + + 1 + 1 + 1 + + 1 + 1 +
0
+
0
+
+ 1 +
+ + + false + false + + + true + true + true + true + + + true + false + false + false + false + + + false + false + + + + true + true + + + + false + + + + false + false + false + + true + + 1 + 0 + 0 + 0 + + false + + + + + + + */ + * @throws $exceptionType$ DOCUMENT ME! + * @param $paramType$ DOCUMENT ME! + * @return DOCUMENT ME! + /**| * DOCUMENT ME! + + + + + false + false + false + + + / + true + false + + Inner Classes + Constructors + Instance fields + Instance initializers + Inner Interfaces + Methods + Static fields/initializers + + + + +
+ + 5 + /////////////////////////////////////////////////////////////////////////////// +// END OF FILE. +/////////////////////////////////////////////////////////////////////////////// + true +
+ + +
+ JavaEVA header + 5 + /////////////////////////////////////////////////////////////////////////////// +// Filename: $RCSfile$ +// Language: Java +// Compiler: JDK 1.4 +// Authors: Holger Ulmer, Felix Streichert, Hannes Planatscher +// Version: $Revision: 10 $ +// $Date: 2006-01-18 11:02:22 +0100 (Wed, 18 Jan 2006) $ +// $Author: streiche $ +// +// Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany +/////////////////////////////////////////////////////////////////////////////// + false +
+ + disabled + + + + 3 + *:1|gnu:2|java:2|javax:2|org:2|com:2|net:2|joelib:2 + + expand + true + + + + false + + true + false + + true + + + false + + + 1 + 0 + 0 + 1 + 4 + 55 + -1 + 4 + -1 + 0 + 8 + -1 + 1 + + + false + false + + + + false + true + true + true + true + false + + + + false + true + false + false + false + static|field|initializer|constructor|method|interface|class + true + + + false + public|protected|private|abstract|static|final|synchronized|transient|volatile|native|strictfp + + + + + + true + true + true + + + false + false + false + false + + false + + + false + false + true + + + + false + false + + true + true + true + true + true + true + + false + false + + + + + + 0 + true + false + false + + false + + false + false + + false + + + false + false + false + false + + + false + false + false + + + + false + true + 80 + + + + false + false + false + + false + false + false + + + + false + + false + + +
+
+ + diff --git a/src/javaeva/client/AppExitAction.java b/src/javaeva/client/AppExitAction.java new file mode 100644 index 00000000..cb142afc --- /dev/null +++ b/src/javaeva/client/AppExitAction.java @@ -0,0 +1,35 @@ +package javaeva.client; + +import javaeva.gui.ExtAction; + +import javax.swing.*; +import java.awt.event.WindowListener; +import java.awt.event.ActionEvent; +import java.awt.event.WindowEvent; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 12.05.2003 + * Time: 18:28:54 + * To change this template use Options | File Templates. + */ +/** + * + */ +class AppExitAction extends ExtAction implements WindowListener{ + public AppExitAction(String s, String toolTip, KeyStroke key){ + super(s, toolTip, key); + } + private void exit(){ + System.exit(1); + } + public void actionPerformed(ActionEvent e){exit();} + public void windowOpened(WindowEvent e){} + public void windowClosed(WindowEvent e){} + public void windowIconified(WindowEvent e){ } + public void windowDeiconified(WindowEvent e){ } + public void windowActivated(WindowEvent e){ } + public void windowDeactivated(WindowEvent e){ } + public void windowClosing(WindowEvent e){exit();} +} diff --git a/src/javaeva/client/EvAClient.java b/src/javaeva/client/EvAClient.java new file mode 100644 index 00000000..8461d73b --- /dev/null +++ b/src/javaeva/client/EvAClient.java @@ -0,0 +1,726 @@ +package javaeva.client; + +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 322 $ + * $Date: 2007-12-11 17:24:07 +0100 (Tue, 11 Dec 2007) $ + * $Author: mkron $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Event; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.Serializable; +import java.util.Properties; + +import javaeva.gui.ExtAction; +import javaeva.gui.JEFrame; +import javaeva.gui.JEFrameRegister; +import javaeva.gui.JExtMenu; +import javaeva.gui.JTabbedModuleFrame; +import javaeva.gui.LogPanel; +import javaeva.server.EvAServer; +import javaeva.server.modules.ModuleAdapter; +import javaeva.tools.EVAERROR; +import javaeva.tools.EVAHELP; +import javaeva.tools.Serializer; + +import javax.swing.ButtonGroup; +import javax.swing.ImageIcon; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.JRadioButtonMenuItem; +import javax.swing.JWindow; +import javax.swing.KeyStroke; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.event.MenuEvent; +import javax.swing.event.MenuListener; + +import wsi.ra.jproxy.RemoteStateListener; +import wsi.ra.tool.BasicResourceLoader; + +/** +///////////////////////////////// +// -Xrunhprof:cpu=samples +///////////////////////////////////////////////// + /*==========================================================================* + * CLASS DECLARATION + *==========================================================================*/ +/** + * + */ +public class EvAClient implements RemoteStateListener, Serializable { + public static final String EVA_PROPERTY_FILE = "resources/JavaEvA.props"; + private static Properties EVA_PROPERTIES; + public static final String iconLocation = "resources/images/JavaEvAIcon_3.gif"; + + public static boolean TRACE = false; + private static String m_ProductName = "JavaEvA"; +// private int PREFERRED_WIDTH = 680; +// private int PREFERRED_HEIGHT = 550; + private JWindow m_splashScreen; + public JEFrame m_Frame; + + private EvAComAdapter m_ComAdapter; +// private JExtDesktopPane m_Desktop; + private transient JMenuBar m_barMenu; + private transient JExtMenu m_mnuAbout; + private transient JExtMenu m_mnuSelHosts; + private transient JExtMenu m_mnuModule; + private transient JExtMenu m_mnuWindow; + private transient JExtMenu m_mnuOptions; + private transient JProgressBar m_ProgressBar; + +// public ArrayList m_ModulGUIContainer = new ArrayList(); + // LogPanel + private LogPanel m_LogPanel; + + // Module: + private ExtAction m_actModuleLoad; + // GUI: + + // Hosts: + private ExtAction m_actHost; + private ExtAction m_actAvailableHost; + private ExtAction m_actKillHost; + private ExtAction m_actKillAllHosts; +// private ArrayList m_ModuleAdapterList = new ArrayList(); + // About: + private ExtAction m_actAbout; + +// private JPanel m_panelTool; +// private FrameCloseListener m_frameCloseListener; +// private JFileChooser m_FileChooser; + +// if not null, the module is loaded automatically and no other can be selected + private String useDefaultModule = null;//"Genetic_Optimization"; + private boolean showLoadModules = false; + private boolean localMode = false; + // This variable says whether, if running locally, a local server should be addressed by RMI. + // False should be preferred here to avoid overhead + private boolean useLocalRMI = false; + // measuring optimization runtime + private long startTime = 0; + // remember the module in use + private transient String currentModule = null; + + public static String getProperty(String key) { + String myVal = EVA_PROPERTIES.getProperty(key); + return myVal; + } + + public static Properties getProperties() { + return EVA_PROPERTIES; + } + + public static void setProperty(String key, String value) { + EVA_PROPERTIES.setProperty(key, value); + } + + /** + * Statically loading Properties. + */ + static { + try { + EVA_PROPERTIES = BasicResourceLoader.readProperties(EVA_PROPERTY_FILE); + } catch (Exception ex) { + System.err.println("Could not read the configuration file "+ EVA_PROPERTY_FILE); + ex.printStackTrace(); + } + } + + /** + * Constructor of GUI of JavaEva. + * Works as client for the JavaEva server. + * + */ + public EvAClient(String hostName) { + createSplashScreen(); + currentModule = null; + + m_ComAdapter = EvAComAdapter.getInstance(); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + if (m_splashScreen != null) m_splashScreen.setVisible(true); + } + }); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + //init(); + try { + Thread.sleep(6000); + } catch (Exception e) { + System.out.println("error" + e.getMessage()); + } + if (m_splashScreen != null) m_splashScreen.setVisible(false); + m_splashScreen = null; + } + }); + init(hostName); + + } + + /** + * + */ + private void init(String hostName) { + //EVA_EDITOR_PROPERTIES + useDefaultModule = getProperty("DefaultModule"); + + if (useDefaultModule != null) { + useDefaultModule = useDefaultModule.trim(); + if (useDefaultModule.length() < 1) useDefaultModule = null; + } + + + m_Frame = new JEFrame(); + BasicResourceLoader loader = BasicResourceLoader.instance(); + byte[] bytes = loader.getBytesFromResourceLocation(iconLocation); + try { + m_Frame.setIconImage(Toolkit.getDefaultToolkit().createImage(bytes)); + } catch (java.lang.NullPointerException e) { + System.out.println("Could not find JavaEvA icon, please move rescoure folder to working directory!"); + } + m_Frame.setTitle("JavaEvA workbench"); + + try { + Thread.sleep(200); + } catch (Exception e) { + System.out.println("Error" + e.getMessage()); + } + + m_Frame.getContentPane().setLayout(new BorderLayout()); + m_LogPanel = new LogPanel(); + m_Frame.getContentPane().add(m_LogPanel, BorderLayout.CENTER); + m_ProgressBar = new JProgressBar(); + m_Frame.getContentPane().add(m_ProgressBar, BorderLayout.SOUTH); + + if (getProperty("ShowModules") != null) showLoadModules = true; + else showLoadModules = false; // may be set to true again if default module couldnt be loaded + + createActions(); + + if (useDefaultModule != null) { + loadModuleFromServer(useDefaultModule);//loadSpecificModule + } + + buildMenu(); + + m_Frame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + System.out.println("Closing JavaEvA Client. Bye!"); + System.exit(1); + } + }); + + if (m_ComAdapter != null) { + if (hostName != null) selectHost(hostName); + m_ComAdapter.setLogPanel(m_LogPanel); + logMessage("Selected Host: " + m_ComAdapter.getHostName()); + } +// m_mnuModule.setText("Select module"); +// m_mnuModule.repaint(); + + m_LogPanel.logMessage("Class path is: " + System.getProperty("java.class.path",".")); + + if (!(m_Frame.isVisible())) { + m_Frame.pack(); + m_Frame.setVisible(true); + } + } + + /** + * Create the JavaEvA splash screen. + */ + public void createSplashScreen() { + BasicResourceLoader loader = BasicResourceLoader.instance(); + byte[] bytes = loader.getBytesFromResourceLocation("resources/images/JavaEvaSplashScreen.png"); + try { + ImageIcon ii = new ImageIcon(Toolkit.getDefaultToolkit().createImage(bytes)); + JLabel splashLabel = new JLabel(ii); + m_splashScreen = new JWindow(); + m_splashScreen.getContentPane().add(splashLabel); + m_splashScreen.pack(); + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + //splashScreen.setSize(screenSize); + m_splashScreen.setLocation(screenSize.width / 2 - m_splashScreen.getSize().width / 2, screenSize.height / 2 - m_splashScreen.getSize().height / 2); + } catch (java.lang.NullPointerException e) { + System.err.println("Could not find JavaEvA splash screen, please move rescoure folder to working directory!"); + } + + } + + /** + * The one and only main of the client programm. + * + * @param args command line parameters + */ + public static void main(String[] args) { + if (TRACE) { + System.out.println(EVAHELP.getSystemPropertyString()); + } + EvAClient Client = new EvAClient((args.length == 1) ? args[0] : null); + } + +// /** +// * +// */ +// public void addInternalFrame(JInternalFrame newFrame) { +// m_Desktop.add(newFrame); +// newFrame.toFront(); +// } + + /** + * + */ + private void createActions() { + ////////////////////////////////////////////////////////////// + // Module: + ///////////////////////////////////////////////////////////// + m_actModuleLoad = new ExtAction("&Load", "Load Module", + KeyStroke.getKeyStroke(KeyEvent.VK_L, Event.CTRL_MASK)) { + public void actionPerformed(ActionEvent e) { + loadModuleFromServer(null); + } + }; + + m_actAbout = new ExtAction("&About...", "Product Information", + KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK)) { + public void actionPerformed(ActionEvent e) { + logMessage(e.getActionCommand()); + showAboutDialog(); + } + }; + m_actHost = new ExtAction("&List of all servers", "All servers in list", + KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK)) { + public void actionPerformed(ActionEvent e) { + logMessage(e.getActionCommand()); + selectAvailableHost(m_ComAdapter.getHostNameList()); + } + }; + m_actAvailableHost = new ExtAction("Available &Server", "Available server", + KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.CTRL_MASK)) { + public void actionPerformed(ActionEvent e) { + logMessage(e.getActionCommand()); + showPleaseWaitDialog(); + Thread xx = new Thread() { + public void run() { + selectAvailableHost(m_ComAdapter.getAvailableHostNameList()); + } + }; + xx.start(); + } + }; + m_actKillHost = new ExtAction("&Kill server", "Kill server process on selected host", + KeyStroke.getKeyStroke(KeyEvent.VK_K, Event.CTRL_MASK)) { + public void actionPerformed(ActionEvent e) { + logMessage(e.getActionCommand()); + showPleaseWaitDialog(); + Thread xx = new Thread() { + public void run() { + selectAvailableHostToKill(m_ComAdapter.getAvailableHostNameList()); + } + }; + xx.start(); + } + }; + m_actKillAllHosts = new ExtAction("Kill &all server", "Kill all server", + KeyStroke.getKeyStroke(KeyEvent.VK_K, Event.CTRL_MASK)) { + public void actionPerformed(ActionEvent e) { + logMessage(e.getActionCommand()); + showPleaseWaitDialog(); + Thread xx = new Thread() { + public void run() { + selectAllAvailableHostToKill(m_ComAdapter.getAvailableHostNameList()); + } + }; + xx.start(); + } + }; + /* m_actStartServerManager = new ExtAction("Start &Server Manager", "Start &Server Manager", + KeyStroke.getKeyStroke(KeyEvent.VK_S, Event.CTRL_MASK)){ + public void actionPerformed(ActionEvent e){ + m_LogPanel.logMessage(e.getActionCommand()); + ServerStartFrame sm = new ServerStartFrame(m_ComAdapter.getHostNameList()); + } + }; + */ + } + + /** + * + */ + private void buildMenu() { + m_barMenu = new JMenuBar(); + m_Frame.setJMenuBar(m_barMenu); + //////////////////////////////////////////////////////////////////////////// + JExtMenu mnuLookAndFeel = new JExtMenu("&Look and Feel"); + ButtonGroup grpLookAndFeel = new ButtonGroup(); + UIManager.LookAndFeelInfo laf[] = UIManager.getInstalledLookAndFeels(); +// if (TRACE) { +// for (int i=0;i<3;i++) +// System.out.println(laf[i].getName()); +// System.out.println ("->"+UIManager.getLookAndFeel().getClass().getName()); +// } + + String LAF = Serializer.loadString("LookAndFeel.ser"); + + boolean lafSelected = false; + for (int i = 0; i < laf.length; i++) { + JRadioButtonMenuItem mnuItem = new JRadioButtonMenuItem(laf[i].getName()); + mnuItem.setActionCommand(laf[i].getClassName()); + if (!lafSelected && laf[i].getClassName().equals(UIManager.getLookAndFeel().getClass().getName())) { +// if (!lafSelected && laf[i].getClassName().equals(UIManager.getSystemLookAndFeelClassName())) { +// if (LAF==null) {// do this only if no older selection one could be loaded +// LAF = laf[i].getClassName(); // set for later selection +// } // this causes problems with my gnome! + if (LAF == null) { + lafSelected = true; + mnuItem.setSelected(true); + } + } + mnuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + UIManager.setLookAndFeel(e.getActionCommand()); + SwingUtilities.updateComponentTreeUI(m_Frame); + // hier noch reinhacken dass alle frame geupdated werden. + m_Frame.pack(); +// m_Frame.setSize(new Dimension(900, 700)); +// m_Frame.setVisible(true); + Serializer.storeString("LookAndFeel.ser", e.getActionCommand()); + } catch (ClassNotFoundException exc) {} catch (InstantiationException exc) {} catch (UnsupportedLookAndFeelException exc) {} catch ( + IllegalAccessException exc) {} + } + }); + mnuLookAndFeel.add(mnuItem); + grpLookAndFeel.add(mnuItem); + } + if (LAF != null) { + try { + UIManager.setLookAndFeel(LAF); + SwingUtilities.updateComponentTreeUI(m_Frame); + m_Frame.pack(); +// m_Frame.setSize(new Dimension(900, 700)); +// m_Frame.setVisible(true); + } catch (ClassNotFoundException exc) {} catch (InstantiationException exc) {} catch (UnsupportedLookAndFeelException exc) {} catch ( + IllegalAccessException exc) {} + } + m_mnuModule = new JExtMenu("Select &module"); + m_mnuModule.add(m_actModuleLoad); + + //////////////////////////////////////////////////////////////// + + m_mnuWindow = new JExtMenu("&Window"); + m_mnuWindow.addMenuListener(new MenuListener() { + public void menuSelected(MenuEvent e) { +// System.out.println("Selected"); + m_mnuWindow.removeAll(); + Object[] framelist = JEFrameRegister.getFrameList(); + for (int i = 0; i < framelist.length; i++) { + JMenuItem act = new JMenuItem((i + 1) + ". " + ((JEFrame) framelist[i]).getTitle()); + final JFrame x = ((JEFrame) framelist[i]); + act.addActionListener((new ActionListener() { + public void actionPerformed(ActionEvent e) { + x.setExtendedState(JFrame.NORMAL); + x.toFront(); + } + } + ) + ); + m_mnuWindow.add(act); + } + + } + + public void menuCanceled(MenuEvent e) { + + } + + public void menuDeselected(MenuEvent e) { + + } + } + ); + + //////////////////////////////////////////////////////////////// + m_mnuSelHosts = new JExtMenu("&Select Hosts"); + m_mnuSelHosts.setToolTipText("Select a host for the server application"); + //if (EvAClient.LITE_VERSION == false) + m_mnuSelHosts.add(m_actHost); + m_mnuSelHosts.add(m_actAvailableHost); + m_mnuSelHosts.addSeparator(); + m_mnuSelHosts.add(m_actKillHost); + m_mnuSelHosts.add(m_actKillAllHosts); +// m_mnuOptions.add(m_actStartServerManager); + //////////////////////////////////////////////////////////////// + m_mnuAbout = new JExtMenu("&About"); + m_mnuAbout.add(m_actAbout); + ////////////////////////////////////////////////////////////// + // m_barMenu.add(m_Desktop.getWindowMenu()); + + m_mnuOptions = new JExtMenu("&Options"); + m_mnuOptions.add(mnuLookAndFeel); + m_mnuOptions.add(m_mnuSelHosts); + //m_barMenu.add(m_mnuSelHosts); + // this is accessible if no default module is given + if (showLoadModules) { + m_barMenu.add(m_mnuModule); + } + + m_barMenu.add(m_mnuOptions); + m_barMenu.add(m_mnuWindow); + m_barMenu.add(m_mnuAbout); + + } + + protected void logMessage(String msg) { + if (TRACE || m_LogPanel == null) System.out.println(msg); + if (m_LogPanel != null) m_LogPanel.logMessage(msg); + } + + /** + * + */ + private void loadModuleFromServer(String selectedModule) { + if (m_ComAdapter.getHostName() == null) { + System.err.println("error in loadModuleFromServer!"); + return; + } + if (m_ComAdapter.getHostName().equals("localhost")) { + localMode = true; + if (useLocalRMI) { + EvAServer Server = new EvAServer(true, false); + m_ComAdapter.setLocalRMIServer(Server.getRMIServer()); + logMessage("Local EvAServer started"); + m_ComAdapter.setRunLocally(false); // this is not quite true but should have the desired effect + } else { + logMessage("Working locally"); + m_ComAdapter.setLocalRMIServer(null); + m_ComAdapter.setRunLocally(true); + } + } else { + localMode = false; + if (TRACE) logMessage("Using RMI on m_ComAdapter.getHostName()"); + m_ComAdapter.setRunLocally(false); + } + if (selectedModule == null) { // show a dialog and ask for a module + String[] ModuleNameList = m_ComAdapter.getModuleNameList(); + if (ModuleNameList == null) { + JOptionPane.showMessageDialog(m_Frame.getContentPane(), "No modules available on " + m_ComAdapter.getHostName(), "JavaEvA Information", 1); + } else { + String LastModuleName = Serializer.loadString("lastmodule.ser"); + if (LastModuleName == null) LastModuleName = ModuleNameList[0]; + selectedModule = (String) JOptionPane.showInputDialog(m_Frame.getContentPane(), + "Which module do you want \n to load on host: " + m_ComAdapter.getHostName() + " ?", "Load optimization module on host", + JOptionPane.QUESTION_MESSAGE, + null, + ModuleNameList, + LastModuleName); + } + } + if (selectedModule == null) { + System.err.println("not loading any module"); + } else { + Serializer.storeString("lastmodule.ser", selectedModule); + + loadSpecificModule(selectedModule); + + m_actHost.setEnabled(true); + m_actAvailableHost.setEnabled(true); + logMessage("Selected Module: " + selectedModule); +// m_LogPanel.statusMessage("Selected Module: " + selectedModule); + } + } + + private void loadSpecificModule(String selectedModule) { + ModuleAdapter newModuleAdapter = null; + // + try { + newModuleAdapter = m_ComAdapter.getModuleAdapter(selectedModule); + } catch (Exception e) { + logMessage("Error while m_ComAdapter.GetModuleAdapter Host: " + e.getMessage()); + e.printStackTrace(); + EVAERROR.EXIT("Error while m_ComAdapter.GetModuleAdapter Host: " + e.getMessage()); + } + if (newModuleAdapter == null) showLoadModules = true; + else { + newModuleAdapter.setConnection(!localMode); + if (m_ComAdapter.isRunLocally()) { + // TODO in rmi-mode this doesnt work yet! + newModuleAdapter.addRemoteStateListener((RemoteStateListener)this); + } + try { + // this (or rather: JModuleGeneralPanel) is where the start button etc come from! + JTabbedModuleFrame Temp = newModuleAdapter.getModuleFrame(); +// newModuleAdapter.setLogPanel(m_LogPanel); + + JPanel moduleContainer = Temp.createContentPane(); // MK the frame is actually painted in here + // m_Frame.setLayout(new BorderLayout()); + m_Frame.setVisible(false); + m_Frame.getContentPane().removeAll(); + + // nested info-panel so that we can stay with simple borderlayouts + JPanel infoPanel = new JPanel(); + infoPanel.setLayout(new BorderLayout()); + infoPanel.add(m_ProgressBar, BorderLayout.SOUTH); + infoPanel.add(m_LogPanel, BorderLayout.NORTH); + + m_Frame.add(Temp.getToolBar(), BorderLayout.NORTH); + m_Frame.add(moduleContainer, BorderLayout.CENTER); + //m_Frame.add(m_ProgressBar, BorderLayout.CENTER); + //m_Frame.add(m_LogPanel, BorderLayout.SOUTH); + m_Frame.add(infoPanel, BorderLayout.SOUTH); + + m_Frame.pack(); + m_Frame.setVisible(true); + + currentModule = selectedModule; + // m_ModulGUIContainer.add(Temp); + } catch (Exception e) { + currentModule = null; + e.printStackTrace(); + logMessage("Error while newModulAdapter.getModulFrame(): " + e.getMessage()); + EVAERROR.EXIT("Error while newModulAdapter.getModulFrame(): " + e.getMessage()); + } +// try { TODO whats this? +// newModuleAdapter.setConnection(true); +// } catch (Exception e) { +// e.printStackTrace(); +// m_LogPanel.logMessage("Error while m_ComAdapter.AddRMIPlotListener Host: " + e.getMessage()); +// EVAERROR.EXIT("Error while m_ComAdapter.AddRMIPlotListener: " + e.getMessage()); +// } + // set mode (rmi or not) + + // ModuladapterListe adden +// m_ModuleAdapterList.add(newModuleAdapter); + } + } + + /** + * + */ + private void selectAvailableHost(String[] HostNames) { + if (TRACE) System.out.println("SelectAvailableHost"); + if (HostNames == null || HostNames.length == 0) { + showNoHostFoundDialog(); + } else { + String HostName = (String) JOptionPane.showInputDialog(m_Frame.getContentPane(), + "Which active host do you want to connect to?", "Host", JOptionPane.QUESTION_MESSAGE, null, + HostNames, m_ComAdapter.getHostName()); + if (HostName != null) selectHost(HostName); + } + } + + private void selectHost(String hostName) { + m_ComAdapter.setHostName(hostName); + logMessage("Selected Host: " + hostName); + if (currentModule != null) { + logMessage("Reloading module from server..."); + loadModuleFromServer(currentModule); + } + +// m_mnuModule.setText("Select module"); +// m_mnuModule.repaint(); + // System.out.println(HostName + " selected"); + } + + private void showPleaseWaitDialog() { + JOptionPane.showMessageDialog(m_Frame.getContentPane(), "Please wait one moment.", "JavaEvA Information", 1); + } + + private void showAboutDialog() { + JOptionPane.showMessageDialog + (m_Frame, + m_ProductName + + "\n University of Tuebingen\n Computer Architecture\n Holger Ulmer & Felix Streichert & Hannes Planatscher \n Prof. Dr. Andreas Zell \n (c) 2007 \n Version " + + EvAServer.Version + " \n http://www-ra.informatik.uni-tuebingen.de/software/JavaEvA/", "JavaEvA Information", 1); + } + + private void showNoHostFoundDialog() { + JOptionPane.showMessageDialog(m_Frame.getContentPane(), "No host with running EVASERVER found. Please start one or \nadd the correct address to the properties list.", "JavaEvA Information", 1); + } + + /** + * + */ + private void selectAvailableHostToKill(String[] HostNames) { + if (TRACE) System.out.println("SelectAvailableHostToKill"); + if (HostNames == null || HostNames.length == 0) { + showNoHostFoundDialog(); + return; + } + String HostName = (String) JOptionPane.showInputDialog(m_Frame.getContentPane(), + "Which server do you want to be killed ?", "Host", JOptionPane.QUESTION_MESSAGE, null, + HostNames, m_ComAdapter.getHostName()); + if (HostName == null) + return; + logMessage("Kill host process on = " + HostName); + m_ComAdapter.killServer(HostName); +// m_LogPanel.statusMessage(""); + } + + /** + * + */ + private void selectAllAvailableHostToKill(String[] HostNames) { + System.out.println("SelectAllAvailableHostToKill"); + if (HostNames == null || HostNames.length == 0) { + System.out.println("no host is running"); + return; + } + m_ComAdapter.killAllServers(); + } + + public void performedRestart(String infoString) { + logMessage("Restarted " + infoString); + startTime = System.currentTimeMillis(); + } + + public void performedStart(String infoString) { + logMessage("Started " + infoString); + startTime = System.currentTimeMillis(); + } + + public void performedStop() { + long t = (System.currentTimeMillis() - startTime); + logMessage(String.format("Stopped after %1$d.%2$tL s", (t / 1000), (t % 1000))); + } + + /** + * When the worker needs to update the GUI we do so by queuing + * a Runnable for the event dispatching thread with + * SwingUtilities.invokeLater(). In this case we're just + * changing the progress bars value. + */ + public void updateProgress(final int percent) { + if (this.m_ProgressBar != null) { + Runnable doSetProgressBarValue = new Runnable() { + public void run() { + m_ProgressBar.setValue(percent); + } + }; + SwingUtilities.invokeLater(doSetProgressBarValue); + } + } +} diff --git a/src/javaeva/client/EvAComAdapter.java b/src/javaeva/client/EvAComAdapter.java new file mode 100644 index 00000000..28917b6b --- /dev/null +++ b/src/javaeva/client/EvAComAdapter.java @@ -0,0 +1,137 @@ +package javaeva.client; + +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 320 $ + * $Date: 2007-12-06 16:05:11 +0100 (Thu, 06 Dec 2007) $ + * $Author: mkron $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ + +import java.rmi.RemoteException; +import java.rmi.registry.Registry; +import java.util.ArrayList; +import javaeva.gui.LogPanel; +import javaeva.server.EvAMainAdapter; +import javaeva.server.EvAMainAdapterImpl; +import javaeva.server.RMIServerEvA; +import javaeva.server.modules.ModuleAdapter; + +import wsi.ra.jproxy.ComAdapter; +import wsi.ra.jproxy.MainAdapter; +import wsi.ra.jproxy.MainAdapterClient; +import wsi.ra.jproxy.MainAdapterClientImpl; +import wsi.ra.jproxy.RMIConnection; +import wsi.ra.jproxy.RMIInvocationHandler; +import wsi.ra.jproxy.RMIProxyLocal; +/*==========================================================================* + * CLASS DECLARATION + *==========================================================================*/ +/** + * + */ +public class EvAComAdapter extends ComAdapter { + private LogPanel m_LogPanel; + private EvAMainAdapterImpl localMainAdapter; + private boolean runLocally = false; + + /** + * + */ + public void setLogPanel(LogPanel OutputFrame) { + m_LogPanel = OutputFrame; + } + /** + * + */ + public static EvAComAdapter getInstance() { + if (m_instance==null) { + m_instance = new EvAComAdapter(); + m_instance.addServersFromProperties(EvAClient.getProperties()); + } + return (EvAComAdapter)m_instance; + } + + /** + * Creates the ModulAdapters RMI Object on the server + * @return + */ + public ModuleAdapter getModuleAdapter(String str) { + ModuleAdapter newModuleAdapter; + if ((m_RMIServer == null) && isRunLocally()) { + //ret = evaAdapter.getModuleAdapter(Modul, hostAdd, this.m_MainAdapterClient); + newModuleAdapter = getLocalMainAdapter().getModuleAdapter(str, true, getHostName(), null); + } else { + newModuleAdapter = ((RMIConnectionEvA)getConnection(getHostName())).getModuleAdapter(str); + if (newModuleAdapter == null) System.err.println("RMI Error for getting ModuleAdapterObject : " + str); + } + return newModuleAdapter; + } + + private EvAMainAdapter getLocalMainAdapter() { + if (localMainAdapter == null) localMainAdapter = new EvAMainAdapterImpl(); + return localMainAdapter; + } + + /** + * Returns a list of modules available on the server. + * @return + */ + public String[] getModuleNameList() { + String[] list; + if (TRACE) System.out.println("ComAdapter.GetModuleNameList()"); + + if ((m_RMIServer == null) && isRunLocally()) { + list = getLocalMainAdapter().getModuleNameList(); + } else { + RMIConnectionEvA Connection = (RMIConnectionEvA)getConnection(getHostName()); + if (Connection == null) { + System.err.println("Couldnt create RMIConnection in EvAComAdapter.getModuleNameList"); + return null; + } + list = ((EvAMainAdapter)Connection.getMainAdapter()).getModuleNameList(); + } + if (m_LogPanel != null) + m_LogPanel.logMessage("List of modules on server:"); + if (list != null) + for (int i = 0; i < list.length; i++) { + if ( (String) list[i] != null && m_LogPanel != null) + m_LogPanel.logMessage( (String) list[i]); + } + return list; + } + + protected MainAdapter getMainAdapter(RMIInvocationHandler invocHandler) throws RemoteException { + return (EvAMainAdapter) invocHandler.getWrapper(); + } + + protected void logInfo(String msg) { + if (m_LogPanel != null) { + m_LogPanel.logMessage(msg); + } else super.logInfo(msg); + } + + protected RMIConnection createRMIConnection(String Host, MainAdapter mainRemoteObject, MainAdapterClient client) { + return new RMIConnectionEvA(Host, mainRemoteObject, client); + } + /** + * @return the runLocally + */ + public boolean isRunLocally() { + return runLocally; + } + /** + * @param runLocally the runLocally to set + */ + public void setRunLocally(boolean runLocally) { + this.runLocally = runLocally; + } +} +// + diff --git a/src/javaeva/client/RMIConnectionEvA.java b/src/javaeva/client/RMIConnectionEvA.java new file mode 100644 index 00000000..98bb7dde --- /dev/null +++ b/src/javaeva/client/RMIConnectionEvA.java @@ -0,0 +1,53 @@ +package javaeva.client; + +import java.lang.reflect.InvocationHandler; +import java.net.InetAddress; +import java.net.UnknownHostException; + +import javaeva.server.EvAMainAdapter; +import javaeva.server.modules.ModuleAdapter; +import wsi.ra.jproxy.MainAdapter; +import wsi.ra.jproxy.MainAdapterClient; +import wsi.ra.jproxy.RMIConnection; + +/** + * + */ +class RMIConnectionEvA extends RMIConnection { + /** + * + */ + public RMIConnectionEvA(String HostName, MainAdapter Adapter, + MainAdapterClient AdapterClient) { + super(HostName, Adapter, AdapterClient); + } + /** + * + */ + public ModuleAdapter getModuleAdapter(String Modul) { + if (m_MainAdapter instanceof EvAMainAdapter) { + EvAMainAdapter evaAdapter = (EvAMainAdapter)m_MainAdapter; + ModuleAdapter ret = null; + if (TRACE) System.out.println("ComAdapter.getModuleAdapter(" + Modul + ")"); + String hostAdd = ""; + try { + hostAdd = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + hostAdd = "unknown host"; + } + if (TRACE) { + System.out.println(" Client is = " + hostAdd); + } + m_MainAdapter.setBuf("Test_1"); + + ret = evaAdapter.getModuleAdapter(Modul, false, hostAdd, this.m_MainAdapterClient); + + return ret; + } else { + System.err.println("error, couldnt get module adapter in EvAComAdapter.getModuleAdapter. Main adapter is not of type EvAMainAdapter!"); + return null; + } + + } + +} diff --git a/src/javaeva/gui/BeanTest.java b/src/javaeva/gui/BeanTest.java new file mode 100644 index 00000000..2a4f47e3 --- /dev/null +++ b/src/javaeva/gui/BeanTest.java @@ -0,0 +1,309 @@ +package javaeva.gui; +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 202 $ + * $Date: 2007-10-25 16:12:49 +0200 (Thu, 25 Oct 2007) $ + * $Author: mkron $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ +import java.beans.*; +import java.lang.reflect.Method; +//import javaeva.server.oa.es.mutation.*; +import javaeva.tools.*; +import javaeva.server.EvAServer; +/* + * ==========================================================================* + * CLASS DECLARATION + * ========================================================================== + */ +public class BeanTest { + public static boolean TRACE = false; + + public static int step = 0; + public static String check(String s) { + + s=s.replace('$','_'); + s=s.replace(';','_'); +// String ret = null; +// try { +// RE r = new RE("\\["); +// ret = r.subst(s,""); +// //ret.substring(); +// //ret +// } catch (Exception e) {e.getMessage();}; +// System.out.println("s="+s+" ret"+ret); + if (s.equals("[D")) return "Double_Array"; + if (s.startsWith("[D")) return s.substring(2); + if (s.startsWith("[L")) return s.substring(2); + + return s; + } + + public static boolean equalProperties(Object Target_1, Object Target_2) { + if (Target_1 == null || Target_2 == null) { + System.out.println(""); + return false; + } + System.out.println("equalProperties: " + Target_1.getClass().getName() + " " + Target_2.getClass().getName()); + if (Target_1.getClass().getName().equals(Target_2.getClass().getName()) == false) { + System.out.println(""); + return false; + } + // compare each of the properties !! + BeanInfo Info_1 = null; + BeanInfo Info_2 = null; + PropertyDescriptor[] Properties_1 = null; + PropertyDescriptor[] Properties_2 = null; + MethodDescriptor[] Methods_1 = null; + MethodDescriptor[] Methods_2 = null; + try { + + Info_1 = Introspector.getBeanInfo(Target_1.getClass()); + Info_2 = Introspector.getBeanInfo(Target_2.getClass()); + Properties_1 = Info_1.getPropertyDescriptors(); + Properties_2 = Info_2.getPropertyDescriptors(); + Methods_1 = Info_1.getMethodDescriptors(); + } catch (IntrospectionException ex) { + System.out.println("BeanTest: Couldn't introspect !!!!!!!!!"); + return false; + } + boolean BeansInside = false; + boolean BeansEqual = true; + for (int i = 0; i < Properties_1.length; i++) { + if (Properties_1[i].isHidden() || Properties_1[i].isExpert()) { + continue; + } + //String name = Properties_1[i].getDisplayName(); //System.out.println("name = "+name ); + //Class type = Properties_1[i].getPropertyType(); //System.out.println("type = "+type.getName() ); + Method getter_1 = Properties_1[i].getReadMethod(); + Method getter_2 = Properties_2[i].getReadMethod(); + Method setter_1 = Properties_1[i].getWriteMethod(); + // Only display read/write properties. + if (getter_1 == null || setter_1 == null) { + continue; + } + System.out.println("getter_1 = " + getter_1.getName() + " getter_2 = " + getter_2.getName()); + //System.out.println("type = "+type.getName() ); + Object args_1[] = {}; + Object args_2[] = {}; + //System.out.println("m_Target"+m_Target.toString()); + try { + Object value_1 = getter_1.invoke(Target_1, args_1); + Object value_2 = getter_2.invoke(Target_2, args_2); + BeansInside = true; + if (BeanTest.equalProperties(value_1, value_2) == false) { + BeansEqual = false; + } + } catch (Exception e) { + System.out.println(" BeanTest.equalProperties " + e.getMessage()); + } + } + if (BeansInside == true) { + return BeansEqual; + } + // here we have Integer or Double ... + if (Target_1 instanceof Integer || + Target_1 instanceof Boolean || + Target_1 instanceof Float || + Target_1 instanceof Double || + Target_1 instanceof Long || + Target_1 instanceof String) { + return Target_1.equals(Target_2); + } + + System.out.println(" Attention no match !!!"); + return true; + } + + + /** + *@param Target Description of the Parameter + *@return Description of the Return Value + */ + public static String toString(Object Target) { + String ret = ""; + // object itself + try { + Method[] methods = Target.getClass().getDeclaredMethods(); + for (int ii = 0; ii < methods.length; ii++) { + if (methods[ii].getName().equals("toString") == true) { + ret = (String) methods[ii].invoke(Target, (Object[])null); + //System.out.println("calling to String off: "+Target.getClass().getName()+"=="+s); + } + } + } catch (Exception e) { + //System.out.println(" ERROR +"+ e.getMessage()); + } + // then the properties + BeanInfo Info = null; + PropertyDescriptor[] Properties = null; + MethodDescriptor[] Methods = null; + try { + Info = Introspector.getBeanInfo(Target.getClass()); + Properties = Info.getPropertyDescriptors(); + Methods = Info.getMethodDescriptors(); + } catch (IntrospectionException ex) { + System.out.println("BeanTest: Couldn't introspect"); + return ret; + } + for (int i = 0; i < Methods.length; i++) { + String name = Methods[i].getDisplayName(); + Method meth = Methods[i].getMethod(); + } + for (int i = 0; i < Properties.length; i++) { + if (Properties[i].isHidden() || Properties[i].isExpert()) { + continue; + } + String name = Properties[i].getDisplayName(); + //System.out.println("name = "+name ); + Class type = Properties[i].getPropertyType(); + //System.out.println("type = "+type.getName() ); + Method getter = Properties[i].getReadMethod(); + Method setter = Properties[i].getWriteMethod(); + // Only display read/write properties. + if (getter == null || setter == null) { + continue; + } + //System.out.println("name = "+name ); + //System.out.println("type = "+type.getName() ); + Object args[] = {}; + //System.out.println("m_Target"+m_Target.toString()); + + try { + Object value = getter.invoke(Target, args); + ret = ret + toString(value); + } catch (Exception e) { + //System.out.println("BeanTest ERROR +"+ e.getMessage()); + return ret; + } + } + return ret; + } + + + /** + *@param Target Description of the Parameter + */ + public static void showInfo(Object Target) { + System.out.println("Inspecting " + Target.getClass().getName()); + // object itself + try { + if (Target instanceof java.lang.Integer) { + System.out.println(" Prop = Integer" + Target.toString()); + } + if (Target instanceof java.lang.Boolean) { + System.out.println(" Prop = Boolean" + Target.toString()); + } + if (Target instanceof java.lang.Long) { + System.out.println(" Prop = Long" + Target.toString()); + } + if (Target instanceof java.lang.Double) { + System.out.println(" Prop = Long" + Target.toString()); + } + } catch (Exception e) { + //System.out.println(" ERROR +"+ e.getMessage()); + } + // then the properties + BeanInfo Info = null; + PropertyDescriptor[] Properties = null; + MethodDescriptor[] Methods = null; + try { + Info = Introspector.getBeanInfo(Target.getClass()); + Properties = Info.getPropertyDescriptors(); + Methods = Info.getMethodDescriptors(); + } catch (IntrospectionException ex) { + System.err.println("BeanTest: Couldn't introspect"); + return; + } + for (int i = 0; i < Methods.length; i++) { + String name = Methods[i].getDisplayName(); + Method meth = Methods[i].getMethod(); + } + for (int i = 0; i < Properties.length; i++) { + if (Properties[i].isHidden() || Properties[i].isExpert()) { + continue; + } + String name = Properties[i].getDisplayName(); + //System.out.println("name = "+name ); + Class type = Properties[i].getPropertyType(); + //System.out.println("type = "+type.getName() ); + Method getter = Properties[i].getReadMethod(); + Method setter = Properties[i].getWriteMethod(); + // Only display read/write properties. + if (getter == null || setter == null) { + continue; + } + //System.out.println("name = "+name ); + //System.out.println("type = "+type.getName() ); + Object args[] = {}; + //System.out.println("m_Target"+m_Target.toString()); + try { + Object value = getter.invoke(Target, args); + System.out.println("Inspecting name = " + name); + if (value instanceof Integer) { + Object args2[] = {new Integer(999)}; + setter.invoke(Target, args2); + } + showInfo(value); + } catch (Exception e) { + System.out.println("BeanTest ERROR +" + e.getMessage()); + } + } + } + + + /** + *@param args The command line arguments + */ +// public static void main(String[] args) { +// Tag t= new Tag(); +// System.out.println("name ========"+t.getClass().getName()); +// System.setProperty("java.security.policy","server.policy"); +// ESPopulation x = new ESPopulation(); +// x.add(new ESIndividual()); +// x.add(new ESIndividual()); +// x.add(new ESIndividual()); +// x.add(new ESIndividual()); +// x.add(new ESIndividual()); +// +// ESPopulation y = new ESPopulation(); +// ESIndividual es = new ESIndividual(); +// MutationCMA ca = new MutationCMA(); +// es.setMutation(ca); +// ca.setConstraints(true); +// y.setIndividualTemplate(es); +// System.out.println("***********"); +// //BeanTest.showInfo(x); +// EvAServer xxx = new EvAServer(false,false); +// //ObjectTOXML test = new ObjectTOXML(); +//// Element el = test.getXML(xxx,xxx.getClass(),false); +//// Document doc = new Document(el); +//// HTEFile f = HTEFile.getInstance(); +//// f.writeXMLFile(doc); +//// System.out.println("***********"); +//// try{ +//// XMLEncoder e = new XMLEncoder( +//// new BufferedOutputStream( +//// new FileOutputStream("Test.xml"))); +//// e.writeObject(x); +//// e.close(); +//// } catch (Exception ee ) {} +// +// //StandardESPopulation x = BeanTest.getRandomInstance(Class.forName("javaeva.server.oa.es.StandardESPopulation")); +// //System.out.println("equal ??" + BeanTest.equalProperties(x, y)); +// } +} + +class mySecurityManager extends SecurityManager { + public void checkMemberAccess( Class c, int which ) { +System.out.println("KAKA") ; }// This is called only for + // getDeclaredFields() and not for Field.get( ) + + public void checkPackageAccess( String p ) {} + } diff --git a/src/javaeva/gui/BigStringEditor.java b/src/javaeva/gui/BigStringEditor.java new file mode 100644 index 00000000..43fd7430 --- /dev/null +++ b/src/javaeva/gui/BigStringEditor.java @@ -0,0 +1,210 @@ +package javaeva.gui; +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 194 $ + * $Date: 2007-10-23 13:43:24 +0200 (Tue, 23 Oct 2007) $ + * $Author: mkron $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ +import java.beans.*; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +/*==========================================================================* + * CLASS DECLARATION + *==========================================================================*/ +public class BigStringEditor implements PropertyEditor { + private PropertyChangeSupport m_Support = new PropertyChangeSupport(this); + private PropertyEditor m_ElementEditor; + private JTextArea m_TextArea; + private JScrollPane m_ScrollPane; + private JPanel m_Panel; +// private Source m_Source; + private JButton m_SetButton; + static private boolean m_finished = false; + /** + * + */ + public static void editSource (String file) { + + try { + m_finished=false; + BigStringEditor editor = new BigStringEditor(); + //Source so = new Source ("\\javaeva\\server\\problems\\bench\\Problem_f1.java"); +// Source so = new Source (file); +// editor.setValue(so); + PropertyDialog frame = new PropertyDialog(editor,file, 50, 50); + //frame.setSize(200, 200); + frame.addWindowListener(new WindowAdapter() { + public void windowClosing (WindowEvent e) { + m_finished=true; + } + }); + while (m_finished==false) { + try {Thread.sleep(1000);} + catch (Exception e) { + System.out.println("e+"+e.getMessage()); + } + } + + + } catch (Exception e) { + e.printStackTrace(); + System.out.println(e.getMessage()); + } + } + /** + * + */ + public BigStringEditor () { + super(); +// m_TextArea = new JEditTextArea(); +// m_TextArea.setTokenMarker(new JavaTokenMarker()); + m_TextArea = new JTextArea(60,60); + m_TextArea.setEditable(true); + m_TextArea.setBorder(BorderFactory.createEmptyBorder(4,4,4,4)); + m_ScrollPane = new JScrollPane(m_TextArea); + m_Panel = new JPanel(); + m_Panel.setBorder(BorderFactory.createTitledBorder("Sourcecode")); + m_Panel.setLayout(new BorderLayout()); + m_SetButton = new JButton("SET"); + m_SetButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + setValue(m_TextArea.getText()); + } + }); + m_Panel.add(m_ScrollPane, BorderLayout.CENTER); + m_Panel.add(m_SetButton, BorderLayout.SOUTH); + } + /** + * + */ + public void setValue (Object value) { + m_ElementEditor = null; + if (value instanceof String) { +// m_Source.setString((String)value); + m_TextArea.setText((String)value); + + } +/* if (value instanceof Source) { + // m_Source = (Source) value; + m_TextArea.setText(((Source)value).getString()); + }*/ + m_Support.firePropertyChange("", null, null); + } + /** + * + */ + public Object getValue () { + // m_Source.setString(m_TextArea.getText()); + return null; + } + /** + * + */ + public String getJavaInitializationString () { + return "null"; + } + + /** + * Returns true to indicate that we can paint a representation of the + * string array + * + * @return true + */ + public boolean isPaintable () { + return true; + } + + /** + * Paints a representation of the current classifier. + * + * @param gfx the graphics context to use + * @param box the area we are allowed to paint into + */ + public void paintValue (Graphics gfx, Rectangle box) { + FontMetrics fm = gfx.getFontMetrics(); + int vpad = (box.height - fm.getAscent())/2; + //String rep = EVAHELP.cutClassName(m_ElementClass.getName()); + gfx.drawString("BigStringEditor", 2, fm.getHeight() + vpad - 3); + } + + /** + * + */ + public String getAsText () { + return null; + } + + /** + * + */ + public void setAsText (String text) throws IllegalArgumentException { + throw new IllegalArgumentException(text); + } + + /** + * + */ + public String[] getTags () { + return null; + } + + /** + * + */ + public boolean supportsCustomEditor () { + return true; + } + /** + * + */ + public Component getCustomEditor () { + return m_Panel; + } + + /** + * + */ + public void addPropertyChangeListener (PropertyChangeListener l) { + m_Support.addPropertyChangeListener(l); + } + /** + * + */ + public void removePropertyChangeListener (PropertyChangeListener l) { + m_Support.removePropertyChangeListener(l); + } + + /** + * + */ + public static void main (String[] args) { + try { + BigStringEditor editor = new BigStringEditor(); +// Source so = new Source ("\\javaeva\\server\\problems\\bench\\Problem_f1.java"); +// editor.setValue(so); + PropertyDialog frame = new PropertyDialog(editor, "test", 50, 50); + frame.setSize(200, 200); + frame.addWindowListener(new WindowAdapter() { + public void windowClosing (WindowEvent e) { + System.exit(0); + } + }); +// editor.setValue(so); + } catch (Exception e) { + e.printStackTrace(); + System.out.println(e.getMessage()); + } + } +} + + + diff --git a/src/javaeva/gui/Chart2DDPointContentSelectable.java b/src/javaeva/gui/Chart2DDPointContentSelectable.java new file mode 100644 index 00000000..55b0f412 --- /dev/null +++ b/src/javaeva/gui/Chart2DDPointContentSelectable.java @@ -0,0 +1,123 @@ +package javaeva.gui; + +import wsi.ra.chart2d.DPointIcon; +import wsi.ra.chart2d.DBorder; +import javaeva.server.go.individuals.AbstractEAIndividual; +import javaeva.server.go.mocco.paretofrontviewer.InterfaceRefSolutionListener; +import javaeva.server.go.problems.InterfaceOptimizationProblem; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 08.09.2005 + * Time: 10:15:30 + * To change this template use File | Settings | File Templates. + */ +public class Chart2DDPointContentSelectable implements InterfaceDPointWithContent, InterfaceSelectablePointIcon, DPointIcon { + + AbstractEAIndividual m_Indy; + InterfaceOptimizationProblem m_Problem; + private InterfaceRefSolutionListener m_Listener; + private Color m_Border = Color.BLACK; + private Color m_Fill = null; + private int m_Size = 4; + + /** this method has to be overridden to paint the icon. The point itself lies + * at coordinates (0, 0) + */ + public void paint( Graphics g ){ + Color prev = g.getColor(); + if (this.m_Indy.isMarked()) this.m_Fill = Color.RED; + else this.m_Fill = Color.LIGHT_GRAY; + g.setColor(m_Fill); + g.fillOval(-this.m_Size, -this.m_Size, 2*this.m_Size +1, 2*this.m_Size +1); + if (this.m_Border != null) g.setColor(m_Border); + g.drawOval(-this.m_Size, -this.m_Size, 2*this.m_Size, 2*this.m_Size); + g.setColor(prev); + } + + /** the border which is necessary to be paint around the DPoint that the whole + * icon is visible + * @return the border + */ + public DBorder getDBorder() { + return new DBorder(4, 4, 4, 4); + } + + public void setBorderColor(Color c) { + this.m_Border = c; + } + public void setFillColor(Color c) { + this.m_Fill = c; + } + public void setSize(int d) { + this.m_Size = d; + } + + /********************************************************************************************* + * The InterfaceSelectablePointIcon + */ + + /** This method allows to add a selection listner to the PointIcon + * it should need more than one listener to this abstruse event + * @param a The selection listener + */ + public void addSelectionListener(InterfaceRefSolutionListener a) { + this.m_Listener = a; + } + + /** This method returns the selection listner to the PointIcon + * @return InterfaceSelectionListener + */ + public InterfaceRefSolutionListener getSelectionListener() { + return this.m_Listener; + } + + /** This method allows to remove the selection listner to the PointIcon + */ + public void removeSelectionListeners() { + this.m_Listener = null; + } + + /** This method allows you to set the according individual + * @param indy AbstractEAIndividual + */ + public void setEAIndividual(AbstractEAIndividual indy) { + this.m_Indy = indy; + } + public AbstractEAIndividual getEAIndividual() { + return this.m_Indy; + } + + /** This method allows you to set the according optimization problem + * @param problem InterfaceOptimizationProblem + */ + public void setProblem(InterfaceOptimizationProblem problem) { + this.m_Problem = problem; + } + public InterfaceOptimizationProblem getProblem() { + return this.m_Problem; + } + + /** This method allows you to draw additional data of the individual + */ + public void showIndividual() { + JFrame newFrame = new JFrame(); + newFrame.setTitle(this.m_Indy.getName()+": "+this.m_Indy); + newFrame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent ev) { + System.gc(); + } + }); + newFrame.getContentPane().add(this.m_Problem.drawIndividual(this.m_Indy)); + newFrame.setSize(200, 300); + newFrame.pack(); + newFrame.validate(); + newFrame.setVisible(true); + } +} \ No newline at end of file diff --git a/src/javaeva/gui/Chart2DDPointIconCircle.java b/src/javaeva/gui/Chart2DDPointIconCircle.java new file mode 100644 index 00000000..279dbc84 --- /dev/null +++ b/src/javaeva/gui/Chart2DDPointIconCircle.java @@ -0,0 +1,55 @@ +package javaeva.gui; + +import wsi.ra.chart2d.DPointIcon; +import wsi.ra.chart2d.DBorder; +import java.awt.*; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 01.04.2004 + * Time: 09:55:30 + * To change this template use File | Settings | File Templates. + */ +public class Chart2DDPointIconCircle implements DPointIcon { + + private Color m_Border = Color.BLACK; + private Color m_Fill = null; + private int m_Size = 4; + + /** + * this method has to be overridden to paint the icon. The point itself lies + * at coordinates (0, 0) + */ + public void paint( Graphics g ){ + Color prev = g.getColor(); + if (m_Fill != null) { + g.setColor(m_Fill); + g.fillOval(-this.m_Size, -this.m_Size, 2*this.m_Size +1, 2*this.m_Size +1); + } + if (this.m_Border != null) g.setColor(m_Border); + g.drawOval(-this.m_Size, -this.m_Size, 2*this.m_Size, 2*this.m_Size); + g.setColor(prev); + } + + /** + * the border which is necessary to be paint around the DPoint that the whole + * icon is visible + * + * @return the border + */ + public DBorder getDBorder() { + return new DBorder(4, 4, 4, 4); + } + + public void setBorderColor(Color c) { + this.m_Border = c; + } + public void setFillColor(Color c) { + this.m_Fill = c; + } + public void setSize(int d) { + this.m_Size = d; + } + +} diff --git a/src/javaeva/gui/Chart2DDPointIconContent.java b/src/javaeva/gui/Chart2DDPointIconContent.java new file mode 100644 index 00000000..a9ac9d97 --- /dev/null +++ b/src/javaeva/gui/Chart2DDPointIconContent.java @@ -0,0 +1,88 @@ +package javaeva.gui; + +import wsi.ra.chart2d.DBorder; +import wsi.ra.chart2d.DPointIcon; + +import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +import javaeva.server.go.individuals.AbstractEAIndividual; +import javaeva.server.go.problems.InterfaceOptimizationProblem; + +import javax.swing.*; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 13.04.2004 + * Time: 13:31:48 + * To change this template use File | Settings | File Templates. + */ +public class Chart2DDPointIconContent implements InterfaceDPointWithContent, DPointIcon { + + AbstractEAIndividual m_Indy; + InterfaceOptimizationProblem m_Problem; + + /** + * this method has to be overridden to paint the icon. The point itself lies + * at coordinates (0, 0) + */ + public void paint( Graphics g ){ + g.drawOval(-4, -4, 8, 8); + g.drawLine(-2, 2, 2,-2); + g.drawLine(-2,-2, 2, 2); + } + + /** + * the border which is necessary to be paint around the DPoint that the whole + * icon is visible + * + * @return the border + */ + public DBorder getDBorder() { + return new DBorder(4, 4, 4, 4); + } + + /** This method allows you to set the according individual + * @param indy AbstractEAIndividual + */ + public void setEAIndividual(AbstractEAIndividual indy) { + this.m_Indy = indy; + } + public AbstractEAIndividual getEAIndividual() { + return this.m_Indy; + } + + /** This method allows you to set the according optimization problem + * @param problem InterfaceOptimizationProblem + */ + public void setProblem(InterfaceOptimizationProblem problem) { + this.m_Problem = problem; + } + public InterfaceOptimizationProblem getProblem() { + return this.m_Problem; + } + + /** This method allows you to draw additional data of the individual + */ + public void showIndividual() { + JFrame newFrame = new JFrame(); + if (this.m_Indy == null) { + System.out.println("No individual!"); + return; + } + newFrame.setTitle(this.m_Indy.getName()+": "+this.m_Indy); + newFrame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent ev) { + System.gc(); + } + }); + newFrame.getContentPane().add(this.m_Problem.drawIndividual(this.m_Indy)); + newFrame.setSize(200, 300); + newFrame.pack(); + newFrame.validate(); + newFrame.setVisible(true); + newFrame.show(); + } +} \ No newline at end of file diff --git a/src/javaeva/gui/Chart2DDPointIconCross.java b/src/javaeva/gui/Chart2DDPointIconCross.java new file mode 100644 index 00000000..5ef211fd --- /dev/null +++ b/src/javaeva/gui/Chart2DDPointIconCross.java @@ -0,0 +1,44 @@ +package javaeva.gui; + +import wsi.ra.chart2d.DBorder; +import wsi.ra.chart2d.DPointIcon; + +import java.awt.*; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 01.04.2004 + * Time: 10:00:50 + * To change this template use File | Settings | File Templates. + */ +public class Chart2DDPointIconCross implements DPointIcon { + + private Color m_Color; + + /** + * this method has to be overridden to paint the icon. The point itself lies + * at coordinates (0, 0) + */ + public void paint( Graphics g ){ + Color prev = g.getColor(); + g.setColor(this.m_Color); + g.drawLine(-1, 1, 1,-1); + g.drawLine(-1,-1, 1, 1); + g.setColor(prev); + } + + /** + * the border which is necessary to be paint around the DPoint that the whole + * icon is visible + * + * @return the border + */ + public DBorder getDBorder() { + return new DBorder(4, 4, 4, 4); + } + + public void setColor(Color c) { + this.m_Color = c; + } +} diff --git a/src/javaeva/gui/Chart2DDPointIconPoint.java b/src/javaeva/gui/Chart2DDPointIconPoint.java new file mode 100644 index 00000000..6be2683c --- /dev/null +++ b/src/javaeva/gui/Chart2DDPointIconPoint.java @@ -0,0 +1,56 @@ +package javaeva.gui; + +import wsi.ra.chart2d.DPointIcon; +import wsi.ra.chart2d.DBorder; + +import java.awt.*; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 17.08.2005 + * Time: 16:52:34 + * To change this template use File | Settings | File Templates. + */ +public class Chart2DDPointIconPoint implements DPointIcon { + + private Color m_Border = Color.BLACK; + private Color m_Fill = Color.BLACK; + private int m_Size = 2; + + /** + * this method has to be overridden to paint the icon. The point itself lies + * at coordinates (0, 0) + */ + public void paint( Graphics g ){ + Color prev = g.getColor(); + if (m_Fill != null) { + g.setColor(m_Fill); + g.fillOval(-this.m_Size, -this.m_Size, 2*this.m_Size, 2*this.m_Size); + } + if (this.m_Border != null) g.setColor(m_Border); + g.drawOval(-this.m_Size, -this.m_Size, (2*this.m_Size)-1, (2*this.m_Size)-1); + g.setColor(prev); + } + + /** + * the border which is necessary to be paint around the DPoint that the whole + * icon is visible + * + * @return the border + */ + public DBorder getDBorder() { + return new DBorder(4, 4, 4, 4); + } + + public void setBorderColor(Color c) { + this.m_Border = c; + } + public void setFillColor(Color c) { + this.m_Fill = c; + } + public void setSize(int d) { + this.m_Size = d; + } + +} diff --git a/src/javaeva/gui/Chart2DDPointIconText.java b/src/javaeva/gui/Chart2DDPointIconText.java new file mode 100644 index 00000000..0777aa3e --- /dev/null +++ b/src/javaeva/gui/Chart2DDPointIconText.java @@ -0,0 +1,49 @@ +package javaeva.gui; + +import wsi.ra.chart2d.DPointIcon; +import wsi.ra.chart2d.DBorder; + +import java.awt.*; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 01.04.2004 + * Time: 16:08:15 + * To change this template use File | Settings | File Templates. + */ +public class Chart2DDPointIconText implements DPointIcon { + + private DPointIcon m_Icon = new Chart2DDPointIconCross(); + private String m_Text = " "; + + public Chart2DDPointIconText(String s) { + m_Text = s; + } + + /** This method allows you to set an icon + * @param icon The new icon + */ + public void setIcon(DPointIcon icon) { + this.m_Icon = icon; + } + + /** + * this method has to be overridden to paint the icon. The point itself lies + * at coordinates (0, 0) + */ + public void paint( Graphics g ){ + this.m_Icon.paint(g); + g.drawString(this.m_Text, 4, 4); + } + + /** + * the border which is necessary to be paint around the DPoint that the whole + * icon is visible + * + * @return the border + */ + public DBorder getDBorder() { + return new DBorder(4, 4, 4, 4); + } +} \ No newline at end of file diff --git a/src/javaeva/gui/ComponentFilter.java b/src/javaeva/gui/ComponentFilter.java new file mode 100644 index 00000000..545039c9 --- /dev/null +++ b/src/javaeva/gui/ComponentFilter.java @@ -0,0 +1,17 @@ +package javaeva.gui; +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 10 $ + * $Date: 2006-01-18 11:02:22 +0100 (Wed, 18 Jan 2006) $ + * $Author: streiche $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ +public interface ComponentFilter{ + public boolean accept(java.awt.Component c); +} diff --git a/src/javaeva/gui/DPointSetMultiIcon.java b/src/javaeva/gui/DPointSetMultiIcon.java new file mode 100644 index 00000000..d51bfe9f --- /dev/null +++ b/src/javaeva/gui/DPointSetMultiIcon.java @@ -0,0 +1,504 @@ +package javaeva.gui; + +import wsi.ra.chart2d.*; + +import wsi.ra.tool.IntegerArrayList; + +import java.awt.*; + +import java.util.ArrayList; + + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 01.04.2004 + * Time: 16:17:35 + * To change this template use File | Settings | File Templates. + */ +public class DPointSetMultiIcon extends DComponent +{ + //~ Instance fields //////////////////////////////////////////////////////// + + protected ArrayList m_IconsMI = new ArrayList(); + protected DIntDoubleMap xMI; + protected DIntDoubleMap yMI; + protected DPointIcon iconMI = null; + protected DPointSetMultiIcon.JumpManager jumperMI = new DPointSetMultiIcon.JumpManager(); + protected Stroke strokeMI = new BasicStroke(); + protected boolean connectedMI; + + //~ Constructors /////////////////////////////////////////////////////////// + + public DPointSetMultiIcon() + { + this(10, 2); + } + + public DPointSetMultiIcon(int initial_capacity) + { + this(initial_capacity, 2); + } + + public DPointSetMultiIcon(int initial_capacity, int length_multiplier) + { + this(new DArray(initial_capacity, length_multiplier), + new DArray(initial_capacity, length_multiplier)); + } + + public DPointSetMultiIcon(DIntDoubleMap x_values, DIntDoubleMap y_values) + { + if (x_values.getSize() != y_values.getSize()) + { + throw new IllegalArgumentException( + "The number of x-values has to be the same than the number of y-values"); + } + + xMI = x_values; + yMI = y_values; + restore(); + setDBorder(new DBorder(1, 1, 1, 1)); + } + + //~ Methods //////////////////////////////////////////////////////////////// + + public void setConnected(boolean aFlag) + { + boolean changed = !(aFlag == connectedMI); + connectedMI = aFlag; + + if (changed) + { + repaint(); + } + } + + /** + * method puts the given DPoint at the given position in the set + * + * @param index the index of the point + * @param p the point to insert + */ + public void setDPoint(int index, DPoint p) + { + if (index >= xMI.getSize()) + { + throw new ArrayIndexOutOfBoundsException(index); + } + + rectangle.insert(p); + xMI.setImage(index, p.x); + yMI.setImage(index, p.y); + m_IconsMI.set(index, p.getIcon()); + restore(); + repaint(); + } + + /** + * method returns the DPoint at the given index + * + * @param index the index of the DPoint + * @return the DPoint at the given index + */ + public DPoint getDPoint(int index) + { + if (index >= xMI.getSize()) + { + throw new ArrayIndexOutOfBoundsException(index); + } + + DPoint p = new DPoint(xMI.getImage(index), yMI.getImage(index)); + p.setIcon(iconMI); + p.setColor(color); + + return p; + } + + public DPointSet getDPointSet() + { + return new DPointSet(xMI, yMI); + } + + public ArrayList getIconsMI() { + return this.m_IconsMI; + } + + /** + * method sets an icon for a better displaying of the point set + * + * @param icon the DPointIcon + */ + public void setIcon(DPointIcon icon) + { + this.iconMI = icon; + + if (icon == null) + { + setDBorder(new DBorder(1, 1, 1, 1)); + } + else + { + setDBorder(icon.getDBorder()); + } + } + + /** + * method returns the current icon of the point set + * + * @return the DPointIcon + */ + public DPointIcon getIcon() + { + return iconMI; + } + + /** + * method returns the nearest DPoint in this DPointSet. + * + * @return the nearest DPoint + */ + public DPoint getNearestDPoint(DPoint point) + { + int minIndex = getNearestDPointIndex(point); + + if (minIndex == -1) + { + return null; + } + else + { + DPoint result = new DPoint(xMI.getImage(minIndex), + yMI.getImage(minIndex)); + result.setIcon((DPointIcon) this.m_IconsMI.get(minIndex)); + + return result; + } + } + + /** method returns the index to the nearest DPoint in this DPointSet. + * @return the index to the nearest DPoint. -1 if no nearest DPoint was found. + */ + public int getNearestDPointIndex(DPoint point) + { + double minValue = Double.MAX_VALUE; + int minIndex = -1; + + for (int i = 0; i < xMI.getSize(); i++) + { + double dx = point.x - xMI.getImage(i); + double dy = point.y - yMI.getImage(i); + double dummy = (dx * dx) + (dy * dy); + + if (dummy < minValue) + { + minValue = dummy; + minIndex = i; + } + } + + return minIndex; + } + + public int getSize() + { + int size = Math.min(xMI.getSize(), yMI.getSize()); + + // int size = x.getSize(); + // if( size != y.getSize() ) throw + // new ArrayStoreException( + // "The number of x-values is not equal to the number of y-values.\n" + // +"The size of the DPointSet isn�t clear." + // ); + return size; + } + + /** + * method sets the stroke of the line + * if the points were not connected, they now will be connected + * + * @param s the new stroke + */ + public void setStroke(Stroke s) + { + if (s == null) + { + s = new BasicStroke(); + } + + strokeMI = s; + repaint(); + } + + /** + * method returns the current stroke of the line + * + * @return the stroke + */ + public Stroke getStroke() + { + return strokeMI; + } + + public void addDPoint(DPoint p) + { + xMI.addImage(p.x); + yMI.addImage(p.y); + m_IconsMI.add(p.getIcon()); + rectangle.insert(p); + repaint(); + } + + public void addDPoint(double x, double y) + { + addDPoint(new DPoint(x, y)); + } + + /** + * This method causes the DPointSet to interupt the connected painting at the + * current position. + */ + public void jump() + { + jumperMI.addJump(); + } + + public void paint(DMeasures m) + { + try + { + Graphics2D g = (Graphics2D) m.getGraphics(); + g.setStroke(strokeMI); + + if (color != null) + { + g.setColor(color); + } + + int size = getSize(); + + if (connectedMI && (size > 1)) + { + jumperMI.restore(); + + while (jumperMI.hasMoreIntervals()) + { + int[] interval = jumperMI.nextInterval(); + Point p1 = null; + Point p2; + + for (int i = interval[0]; i < interval[1]; i++) + { + p2 = m.getPoint(xMI.getImage(i), yMI.getImage(i)); + + if (p1 != null) + { + try + { + g.drawLine(p1.x, p1.y, p2.x, p2.y); + } + catch (java.lang.NullPointerException e) + { + // pff + } + } + + if ((i < this.m_IconsMI.size()) && (this.m_IconsMI.get(i) != null)) + { + g.setStroke(new BasicStroke()); + g.translate(p2.x, p2.y); + ((DPointIcon) this.m_IconsMI.get(i)).paint(g); + g.translate(-p2.x, -p2.y); + g.setStroke(strokeMI); + } + else + { + if (iconMI != null) + { + g.setStroke(new BasicStroke()); + g.translate(p2.x, p2.y); + iconMI.paint(g); + g.translate(-p2.x, -p2.y); + g.setStroke(strokeMI); + } + } + + p1 = p2; + } + } + } + else + { + Point p; + + //for (int i = 0; i < size; i++) + // @todo Streiche: Mal wieder eine index out of bounds exception, dass ist einfach mist... + for (int i = 0; i < this.m_IconsMI.size(); i++) + { + try + { + p = m.getPoint(xMI.getImage(i), yMI.getImage(i)); + + if (this.m_IconsMI.get(i) != null) + { + g.setStroke(new BasicStroke()); + g.translate(p.x, p.y); + ((DPointIcon) this.m_IconsMI.get(i)).paint(g); + g.translate(-p.x, -p.y); + g.setStroke(strokeMI); + } + else + { + if (iconMI == null) + { + g.drawLine(p.x - 1, p.y - 1, p.x + 1, p.y + 1); + g.drawLine(p.x + 1, p.y - 1, p.x - 1, p.y + 1); + } + else + { + g.setStroke(new BasicStroke()); + g.translate(p.x, p.y); + iconMI.paint(g); + g.translate(-p.x, -p.y); + } + } + } + catch (java.lang.IllegalArgumentException e) + { + System.out.println( + "The rectangle lies not in the currently painted rectangle."); + } + } + } + + g.setStroke(new BasicStroke()); + } + catch (java.lang.ArrayIndexOutOfBoundsException e) + { + // *pff* + } + } + + public void removeAllPoints() + { + if (xMI.getSize() == 0) + { + return; + } + + xMI.reset(); + yMI.reset(); + jumperMI.reset(); + repaint(); + rectangle = DRectangle.getEmpty(); + } + + /** + * method removes all jump positions + * if the DPointSet is connected, all points will be painted connected to + * their following point + */ + public void removeJumps() + { + jumperMI.reset(); + } + + public String toString() + { + String text = "wsi.ra.chart2d.DPointSet[size:" + getSize(); + + for (int i = 0; i < xMI.getSize(); i++) + { + text += (",(" + xMI.getImage(i) + "," + yMI.getImage(i) + ")"); + } + + text += "]"; + + return text; + } + + protected void restore() + { + if (getSize() == 0) + { + rectangle = DRectangle.getEmpty(); + + return; + } + + double min_x = xMI.getMinImageValue(); + double max_x = xMI.getMaxImageValue(); + double min_y = yMI.getMinImageValue(); + double max_y = yMI.getMaxImageValue(); + rectangle = new DRectangle(min_x, min_y, max_x - min_x, max_y - min_y); + } + + //~ Inner Classes ////////////////////////////////////////////////////////// + + /** + * this class stores the jump positions (see this.jump) + */ + class JumpManager + { + protected IntegerArrayList jumps = new IntegerArrayList(); + protected int index = -1; + + public void addJump() + { + jumps.add(getSize()); + } + + public boolean hasMoreIntervals() + { + return index < jumps.size(); + } + + public int[] nextInterval() + { + int no_jumps = jumps.size(); + + if (index >= no_jumps) + { + throw new ArrayIndexOutOfBoundsException( + "No more intervals in JumpManager"); + } + + int[] inter = new int[2]; + + if (index == -1) + { + inter[0] = 0; + } + else + { + inter[0] = jumps.get(index); + } + + index++; + + if (index < no_jumps) + { + inter[1] = jumps.get(index); + } + else + { + inter[1] = getSize(); + } + + return inter; + } + + public void reset() + { + index = -1; + jumps.clear(); + } + + public void restore() + { + index = -1; + } + } +} +/////////////////////////////////////////////////////////////////////////////// +// END OF FILE. +/////////////////////////////////////////////////////////////////////////////// diff --git a/src/javaeva/gui/DataViewer.java b/src/javaeva/gui/DataViewer.java new file mode 100644 index 00000000..449ef7ac --- /dev/null +++ b/src/javaeva/gui/DataViewer.java @@ -0,0 +1,145 @@ +package javaeva.gui; +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 320 $ + * $Date: 2007-12-06 16:05:11 +0100 (Thu, 06 Dec 2007) $ + * $Author: mkron $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ +import java.net.InetAddress; +import java.util.ArrayList; + +import wsi.ra.jproxy.MainAdapterClient; +import wsi.ra.jproxy.RMIProxyRemote; +/*==========================================================================* + * CLASS DECLARATION + *==========================================================================*/ +/** + * It represents one plot window in the client GUI. + */ +public class DataViewer implements DataViewerInterface { + public static boolean TRACE = false; + + static private int m_GraphCounter = -1; + static private ViewContainer m_ViewContainer; + private MainAdapterClient m_MainAdapterClient; + private static String m_MyHostName; + private PlotInterface m_Plotter; + private String m_Name; + private Plot m_Plot; + /** + * + */ + public static DataViewerInterface getInstance (MainAdapterClient client,String GraphWindowName) { + if (m_ViewContainer == null) + m_ViewContainer = new ViewContainer(); + DataViewerInterface ret =null; + try { + if (!m_ViewContainer.containsName(GraphWindowName)) { + //////////////////////////////////////////////// + try { + m_MyHostName = InetAddress.getLocalHost().getHostName(); + } catch (Exception e) { + System.out.println("InetAddress.getLocalHost().getHostAddress() --> ERROR" + e.getMessage()); + e.printStackTrace(); + } + if (client != null && client.getHostName().equals(m_MyHostName)== true) { + if (TRACE) System.out.println("no RMI"); + ret = new DataViewer(GraphWindowName,true); + } + else { + ret = (DataViewerInterface) RMIProxyRemote.newInstance(new DataViewer(GraphWindowName,false), client); + ret.init(); + if (TRACE) System.out.println("with RMI"); + } + + + //////////////////////////////////// + m_ViewContainer.add(ret); + } + else { + ret = m_ViewContainer.getPlot(GraphWindowName); + } + } catch (Exception ee) { + System.out.println("GraphWindow ERROR : "+ee.getMessage()); + ee.printStackTrace(); + } + return ret; + } + /** + * + */ + private DataViewer(String PlotName,boolean initflag){ + if (TRACE) System.out.println("Constructor DataViewer"); + m_Name = PlotName; + if(initflag) + this.init(); + } + /** + * + */ + public String getName () { + return m_Name; + } + /** + * + */ + public Graph getNewGraph(String InfoString) { + m_GraphCounter++; + if (TRACE) System.out.println("Graph.getNewGraph No:"+m_GraphCounter); + return new Graph (InfoString,m_Plot,m_GraphCounter); + } + /** + * + */ + public void init() { + m_Plot = new Plot(m_Name,"x","y", true); + } + +} +/** + * + */ +class ViewContainer extends ArrayList { + private DataViewer m_actualPlot; + /** + * + */ + public ViewContainer() {} + /** + * + */ + public boolean containsName (String name) { + DataViewer temp = null; + for (int i=0;i 0; } + public double getImageOf( double source ){ return Math.exp( source ); } + public double getSourceOf( double target ){ + if( target <= 0 ) { throw + new IllegalArgumentException( + "Can not calculate log on values smaller than or equal 0 --> target = "+target + ); + } + return Math.log( target ); + } +} + diff --git a/src/javaeva/gui/ExtAction.java b/src/javaeva/gui/ExtAction.java new file mode 100644 index 00000000..0a9a7e4f --- /dev/null +++ b/src/javaeva/gui/ExtAction.java @@ -0,0 +1,69 @@ +package javaeva.gui; +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 10 $ + * $Date: 2006-01-18 11:02:22 +0100 (Wed, 18 Jan 2006) $ + * $Author: streiche $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ +import javax.swing.AbstractAction; +import javax.swing.Icon; +import javax.swing.KeyStroke; +import javax.swing.Action; +/** + * + */ +public abstract class ExtAction extends AbstractAction { + public final static String CAPTION = "Caption"; + public final static String MNEMONIC = "Mnemonic"; + public final static String TOOLTIP = "ToolTip"; + public final static String KEYSTROKE = "KeyStroke"; + /** + * + */ + private void setValues(String s, String toolTip){ + Mnemonic m = new Mnemonic(s); + putValue(MNEMONIC, new Character(m.getMnemonic())); + putValue(Action.NAME, m.getText()); + putValue(TOOLTIP, toolTip); + } + /** + * + */ + public ExtAction(String s, Icon i, String toolTip, KeyStroke key){ + this(s, i, toolTip); + if (i==null) + System.out.println("Icon == null"); + putValue(KEYSTROKE, key); + } + /** + * + */ + public ExtAction(String s, Icon i, String toolTip){ + super(null, i); + if (i==null) + System.out.println("Icon == null"); + setValues(s, toolTip); + } + /** + * + */ + public ExtAction(String s, String toolTip, KeyStroke key){ + this(s, toolTip); + putValue(KEYSTROKE, key); + } + /** + * + */ + public ExtAction(String s, String toolTip){ + super(); + setValues(s, toolTip); + } +} + diff --git a/src/javaeva/gui/ExtActionChangedListener.java b/src/javaeva/gui/ExtActionChangedListener.java new file mode 100644 index 00000000..d1a4fc37 --- /dev/null +++ b/src/javaeva/gui/ExtActionChangedListener.java @@ -0,0 +1,40 @@ +package javaeva.gui; +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 10 $ + * $Date: 2006-01-18 11:02:22 +0100 (Wed, 18 Jan 2006) $ + * $Author: streiche $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeEvent; +import javax.swing.JComponent; +/** + * + */ +public abstract class ExtActionChangedListener implements PropertyChangeListener{ + protected JComponent component; + /** + * + */ + ExtActionChangedListener(JComponent c){ + super(); + setTarget(c); + } + /** + * + */ + public abstract void propertyChange(PropertyChangeEvent e); + /** + * + */ + public void setTarget(JComponent c){ + component = c; + } +} diff --git a/src/javaeva/gui/ExtDesktopManager.java b/src/javaeva/gui/ExtDesktopManager.java new file mode 100644 index 00000000..e3f38e5a --- /dev/null +++ b/src/javaeva/gui/ExtDesktopManager.java @@ -0,0 +1,70 @@ +package javaeva.gui; +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 10 $ + * $Date: 2006-01-18 11:02:22 +0100 (Wed, 18 Jan 2006) $ + * $Author: streiche $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ +import javax.swing.*; +import java.awt.*; +/** + * + */ +public class ExtDesktopManager extends DefaultDesktopManager{ + int WINDOW_LIST_START; + public final static String INDEX = "Index"; + public final static String FRAME = "Frame"; + private JInternalFrame activeFrame = null; + private JExtDesktopPane desktop; + public ExtDesktopManager(JExtDesktopPane desktop){ + this.desktop = desktop; + } + public void activateFrame(JInternalFrame f){ + super.activateFrame(f); + activeFrame = f; + } + public void deactivateFrame(JInternalFrame f){ + super.deactivateFrame(f); + if(activeFrame == f) activeFrame = null; + } + public JInternalFrame getActiveFrame(){ + return activeFrame; + } + public void closeFrame(JInternalFrame f){ + System.out.println("closed internalframe called"); + super.closeFrame(f); + int index = ((Integer)f.getClientProperty(INDEX)).intValue() + WINDOW_LIST_START - 1; + int i; + desktop.m_mnuWindow.remove(index); + for(i = index; i < Math.min(WINDOW_LIST_START + 9, desktop.m_mnuWindow.getItemCount()); i++){ + JMenuItem m = desktop.m_mnuWindow.getItem(i); + JInternalFrame frame = (JInternalFrame)m.getClientProperty(FRAME); + frame.putClientProperty(INDEX, new Integer(((Integer)frame.getClientProperty(INDEX)).intValue() - 1)); + int winIndex = i - WINDOW_LIST_START + 1; + m.setText((winIndex) + " " + frame.getTitle()); + m.setMnemonic((char)(0x30 + winIndex)); + m.setAccelerator(KeyStroke.getKeyStroke(0x30 + winIndex, Event.ALT_MASK)); + } + + if(f.isSelected()){ + Component tmp = null; + boolean found = false; + for(i = 0; i < desktop.getComponentCount() && !found; i++){ + tmp = desktop.getComponent(i); + if(tmp instanceof JInternalFrame) found = true; + } + + if(found) desktop.selectFrame((JInternalFrame)tmp); + else activeFrame = null; + } + } +} + + diff --git a/src/javaeva/gui/FunctionArea.java b/src/javaeva/gui/FunctionArea.java new file mode 100644 index 00000000..a3a11b4a --- /dev/null +++ b/src/javaeva/gui/FunctionArea.java @@ -0,0 +1,702 @@ +package javaeva.gui; + +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 306 $ + * $Date: 2007-12-04 14:22:52 +0100 (Tue, 04 Dec 2007) $ + * $Author: mkron $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.PrintWriter; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.text.SimpleDateFormat; + +import javax.swing.JFileChooser; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JPopupMenu; + +import wsi.ra.chart2d.DArea; +import wsi.ra.chart2d.DBorder; +import wsi.ra.chart2d.DPoint; +import wsi.ra.chart2d.DPointIcon; +import wsi.ra.chart2d.DPointSet; +import wsi.ra.chart2d.ScaledBorder; +import javaeva.server.go.individuals.AbstractEAIndividual; +import javaeva.server.go.mocco.paretofrontviewer.InterfaceRefPointListener; + +/*==========================================================================* + * CLASS DECLARATION + *==========================================================================*/ +/** + * + */ +public class FunctionArea extends DArea implements Serializable { + private InterfaceRefPointListener m_RefPointListener; + private JFileChooser m_FileChooser; + private ArrayList m_PointSetContainer; + private ScaledBorder m_Border; + private boolean m_log = false; + private boolean notifyNegLog = true; + private int m_x; + private int m_y; + + private DPointIcon m_CurrentPointIcon; + /** + * + */ + public FunctionArea() {} + + /** + * + */ + public FunctionArea(String xname, String yname) { + super(); + setPreferredSize(new Dimension(600, 500)); + setVisibleRectangle(1, 1, 100000, 1000); + setAutoFocus(true); + setMinRectangle(0, 0, 1, 1); + //setAutoFocus(true); + m_Border = new ScaledBorder(); + m_Border.x_label = xname; //"App. " + Name + " func. calls"; + m_Border.y_label = yname; //"fitness"; + setBorder(m_Border); + setAutoGrid(true); + setGridVisible(true); + m_PointSetContainer = new ArrayList(20); + //new DMouseZoom( this ); + addPopup(); + repaint(); + notifyNegLog = true; + } + + /** + * + */ + public String getGraphInfo(int x, int y) { + String ret = ""; + if ((m_PointSetContainer == null) || (m_PointSetContainer.size() == 0)) + return ret; + int minindex = getNearestGraphIndex(x, y); + ret = ((GraphPointSet) (m_PointSetContainer.get(minindex))).getInfoString(); + return ret; + } + + /** + * + */ + public boolean isStatisticsGraph(int x, int y) { + boolean ret = false; + if ((m_PointSetContainer == null) || (m_PointSetContainer.size() == 0)) + return ret; + int minindex = getNearestGraphIndex(x, y); + ret = ((GraphPointSet) (m_PointSetContainer.get(minindex))).isStatisticsGraph(); + return ret; + } + + + /** + * + */ + private int getNearestGraphIndex(int x, int y) { + // get index of nearest Graph + double distmin = 10000000; + int minindex = -1; + DPoint point1 = getDMeasures().getDPoint(x, y); + DPoint point2 = null; + double dist = 0; + for (int i = 0; i < m_PointSetContainer.size(); i++) { + if (m_PointSetContainer.get(i)instanceof GraphPointSet) { + GraphPointSet pointset = (GraphPointSet) (m_PointSetContainer.get(i)); + point2 = pointset.getNearestDPoint(point1); + if (point2 == null) + continue; + if (point1 == null) + System.err.println("point1 == null"); + + dist = (point1.x - point2.x) * (point1.x - point2.x) + (point1.y - point2.y) * (point1.y - point2.y); + //System.out.println("dist="+dist+"i="+i); + if (dist < distmin) { + distmin = dist; + minindex = i; + } + } + } + return minindex; + } + + /** + * + */ + private DPoint getNearestDPoint(int x, int y) { + // get index of nearest Graph + double distmin = 10000000; + DPoint ret = null; + DPoint point1 = getDMeasures().getDPoint(x, y); + DPoint point2 = null; + double dist = 0; + for (int i = 0; i < m_PointSetContainer.size(); i++) { + if (m_PointSetContainer.get(i)instanceof GraphPointSet) { + GraphPointSet pointset = (GraphPointSet) (m_PointSetContainer.get(i)); + point2 = pointset.getNearestDPoint(point1); + if (point2 == null) + continue; + dist = (point1.x - point2.x) * (point1.x - point2.x) + (point1.y - point2.y) * (point1.y - point2.y); + //System.out.println("dist="+dist+"i="+i); + if (dist < distmin) { + distmin = dist; + ret = point2; + } + if ((dist == distmin) && !(ret.getIcon()instanceof Chart2DDPointIconContent) && !(ret.getIcon()instanceof InterfaceSelectablePointIcon)) { + distmin = dist; + ret = point2; + } + } + } + return ret; + } + + /** + * + */ + public void exportToAscii() { + String[] s = null; + for (int i = 0; i < m_PointSetContainer.size(); i++) { + if (m_PointSetContainer.get(i)instanceof GraphPointSet) { + GraphPointSet set = (GraphPointSet) m_PointSetContainer.get(i); + String info = set.getInfoString(); + DPointSet pset = set.getConnectedPointSet(); + if (s == null) { + s = new String[pset.getSize() + 1]; + s[0] = "calls"; + } + s[0] = s[0] + " " + info; + for (int j = 1; j < s.length; j++) { + if (i == 0) + s[j] = "" + pset.getDPoint(j - 1).x; + try { + s[j] = s[j] + " " + pset.getDPoint(j - 1).y; + } catch (Exception e) { + s[j] += " "; + } + } + } + } + for (int j = 0; j < s.length; j++) { + System.out.println("s=" + s[j]); + } + // todo: Steichert hat einfach einen default namen genommen + SimpleDateFormat formatter = new SimpleDateFormat("E'_'yyyy.MM.dd'_'HH.mm.ss"); + String fname = "PlotExport_"+formatter.format(new Date()); +// System.out.println("Filename ??"); +// String fname = null; +// BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); +// try { +// fname = in.readLine(); +// } catch (Exception e) { +// System.out.println("" + e.getMessage()); +// } + try { + File f = new File(fname + ".txt"); + f.createNewFile(); + PrintWriter Out = new PrintWriter(new FileOutputStream(f)); + for (int j = 0; j < s.length; j++) + Out.println(s[j]); + Out.flush(); + Out.close(); + } catch (Exception e) { + System.err.println("Error:" + e.getMessage()); + } + + } + + /** + * + */ + public void setConnectedPoint(double x, double y, int GraphLabel) { + if (m_log == true && y <= 0.0) { + y = 1; +// y = Double.MIN_VALUE; + if (notifyNegLog) { + System.err.println("Warning: trying to plot value (" + x + "/" + y + ") with y < 0 in logarithmic mode! Setting y to " + y); + notifyNegLog = false; + } + } + getGraphPointSet(GraphLabel).addDPoint(x, y); + + } + + public void addGraphPointSet(GraphPointSet d) { + this.m_PointSetContainer.add(d); + } + + + /** + * + */ + public void addGraph(int GraphLabel_1, int GraphLabel_2, boolean forceAdd) { + getGraphPointSet(GraphLabel_1).addGraph(getGraphPointSet(GraphLabel_2), this.getDMeasures(), forceAdd); + notifyNegLog = true; + } + + /** + * + */ + public void clearGraph(int GraphLabel) { + getGraphPointSet(GraphLabel).removeAllPoints(); + m_PointSetContainer.remove(getGraphPointSet(GraphLabel)); + repaint(); + notifyNegLog = true; + } + + /** + * + */ + public void changeColorGraph(int GraphLabel) { + Color col = getGraphPointSet(GraphLabel).getColor(); + if (col == Color.black) + col = Color.red; + else + if (col == Color.red) + col = Color.blue; + else + if (col == Color.blue) + col = Color.red; + else + if (col == Color.red) + col = Color.black; + getGraphPointSet(GraphLabel).setColor(col); + repaint(); + } + + /** + * + */ + public void clearGraph(int x, int y) { + int index = getNearestGraphIndex(x, y); + if (index == -1) + return; + int GraphLabel = ((GraphPointSet) (this.m_PointSetContainer.get(index))).getGraphLabel(); + clearGraph(GraphLabel); + } + + /** + * + */ + public void changeColorGraph(int x, int y) { + int index = getNearestGraphIndex(x, y); + if (index == -1) + return; + int GraphLabel = ((GraphPointSet) (this.m_PointSetContainer.get(index))).getGraphLabel(); + changeColorGraph(GraphLabel); + } + + /** + * + */ + public void removePoint(int x, int y) { + DPoint point = getNearestDPoint(x, y); + int index = getNearestGraphIndex(x, y); + if (index == -1 || point == null) + return; + GraphPointSet pointset = (GraphPointSet) (this.m_PointSetContainer.get(index)); + pointset.removePoint(point); + } + + /** + * + */ + public void setInfoString(int GraphLabel, String Info, float stroke) { + getGraphPointSet(GraphLabel).setInfoString(Info, stroke); + } + + /** + * + */ + public void clearAll() { + this.removeAllDElements(); + for (int i = 0; i < m_PointSetContainer.size(); i++) + ((GraphPointSet) (m_PointSetContainer.get(i))).removeAllPoints(); + m_PointSetContainer.clear(); + notifyNegLog = true; + } + + /** + * + */ + private GraphPointSet getGraphPointSet(int GraphLabel) { +// System.out.println("looping through " + m_PointSetContainer.size() + " point sets..."); + for (int i = 0; i < m_PointSetContainer.size(); i++) { + if (m_PointSetContainer.get(i) instanceof GraphPointSet) { + GraphPointSet xx = (GraphPointSet) (m_PointSetContainer.get(i)); +// System.out.println("looking at "+xx.getGraphLabel()); + if (xx.getGraphLabel() == GraphLabel) { +// System.out.println("match!"); + return xx; + } + } + } + // create new GraphPointSet + GraphPointSet NewPointSet = new GraphPointSet(GraphLabel, this); +// System.out.println("adding new point set " + GraphLabel); + //NewPointSet.setStroke(new BasicStroke( (float)1.0 )); + //addGraphPointSet(NewPointSet); already done within GraphPointSet!!! + return NewPointSet; + } + + /** + * + */ + public void setUnconnectedPoint(double x, double y, int GraphLabel) { + if (m_log == true && y <= 0.0) { + if (notifyNegLog) { + System.err.println("Warning: trying to plot value (" + x + "/" + y + ") with y < 0 in logarithmic mode! Setting y to " + y ); + notifyNegLog = false; + } + y = 1; + } + this.getGraphPointSet(GraphLabel).addDPoint(x, y); + this.getGraphPointSet(GraphLabel).setConnectedMode(false); + repaint(); + } + + Color[] Colors = new Color[] {Color.black, Color.red, Color.blue, Color.green,Color.magenta, Color.orange, Color.pink, Color.yellow}; + + public void setGraphColor(int GraphLabel,int colorindex) { + this.getGraphPointSet(GraphLabel).setColor(Colors[colorindex%Colors.length]); + } + + /** + * Returns the number of points within the graph of the given label. + * + * @param index + * @return + */ + public int getPointCount(int label) { + return getGraphPointSet(label).getPointCount(); + } + + /** + * + */ + public int getContainerSize() { + return m_PointSetContainer.size(); + } + + /** + * + */ + public DPointSet[] printPoints() { + DPointSet[] ret = new DPointSet[m_PointSetContainer.size()]; + for (int i = 0; i < m_PointSetContainer.size(); i++) { + System.out.println(""); + System.out.println("GraphPointSet No " + i); + + ret[i] = ((GraphPointSet) m_PointSetContainer.get(i)).printPoints(); + } + return ret; + + } + + public DPointSet printPoints(int i) { + //for (int i = 0; i < m_PointSetContainer.size();i++) { + System.out.println(""); + System.out.println("GraphPointSet No " + i); + + return ((GraphPointSet) m_PointSetContainer.get(i)).printPoints(); + //} + } + + /** + * + */ + public void toggleLog() { + //System.out.println("ToggleLog log was: "+m_log); + if (m_log == false) { + setMinRectangle(0.001, 0.001, 1, 1); + //setVisibleRectangle( 0.001, 0.001, 100000, 1000 ); + setYScale(new Exp()); + m_Border.setSrcdY(Math.log(10)); + ((java.text.DecimalFormat) m_Border.format_y).applyPattern("0.###E0"); + m_log = true; + } else { + m_log = false; + setYScale(null); + ScaledBorder buffer = m_Border; + m_Border = new ScaledBorder(); + m_Border.x_label = buffer.x_label; //"App. " + Name + " func. calls"; + m_Border.y_label = buffer.y_label; //"fitness"; + setBorder(m_Border); + } + repaint(); + } + + /** + * Causes all PointSets to interupt the connected painting at the + * current position. + */ + public void jump() { + for (int i = 0; i < m_PointSetContainer.size(); i++) + ((GraphPointSet) (m_PointSetContainer.get(i))).jump(); + } + + /** + */ + public Object openObject() { + if (m_FileChooser == null) + createFileChooser(); + int returnVal = m_FileChooser.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + File selected = m_FileChooser.getSelectedFile(); + try { + ObjectInputStream oi = new ObjectInputStream(new BufferedInputStream(new FileInputStream(selected))); + Object obj = oi.readObject(); + oi.close(); + + Object[] objects = (Object[]) obj; + for (int i = 0; i < objects.length; i++) { + GraphPointSet xx = ((GraphPointSet.SerPointSet) objects[i]).getGraphPointSet(); + xx.initGraph(this); + addGraphPointSet(xx); + } + repaint(); + return obj; + } catch (Exception ex) { + JOptionPane.showMessageDialog(this, + "Couldn't read object: " + + selected.getName() + + "\n" + ex.getMessage(), + "Open object file", + JOptionPane.ERROR_MESSAGE); + } + } + return null; + } + + /** + * + */ + public void saveObject() { + Object[] object = new Object[m_PointSetContainer.size()]; + for (int i = 0; i < m_PointSetContainer.size(); i++) { + object[i] = ((GraphPointSet) m_PointSetContainer.get(i)).getSerPointSet(); + } + if (m_FileChooser == null) + createFileChooser(); + int returnVal = m_FileChooser.showSaveDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + File sFile = m_FileChooser.getSelectedFile(); + try { + ObjectOutputStream oo = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(sFile))); + oo.writeObject(object); + oo.close(); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, + "Couldn't write to file: " + + sFile.getName() + + "\n" + ex.getMessage(), + "Save object", + JOptionPane.ERROR_MESSAGE); + } + } + } + + /** + * + */ + protected void createFileChooser() { + m_FileChooser = new JFileChooser(new File("/resources")); + m_FileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + } + + /** Add a popup menu for displaying certain information. + */ + private void addPopup() { + addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + if ((e.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) { + // do nothing + } else { + JPopupMenu GraphMenu = new JPopupMenu(); + m_x = e.getX(); + m_y = e.getY(); + + // The first info element + JMenuItem Info = new JMenuItem("Graph Info: " + getGraphInfo(e.getX(), e.getY())); + Info.addActionListener(new ActionListener() { + // + public void actionPerformed(ActionEvent ee) { + DPoint temp = FunctionArea.this.getDMeasures().getDPoint(FunctionArea.this.m_x, FunctionArea.this.m_y); + DPointIcon icon1 = new DPointIcon() { + public void paint(Graphics g) { + g.drawLine( -2, 0, 2, 0); + g.drawLine(0, 0, 0, 4); + } + + public DBorder getDBorder() { + return new DBorder(4, 4, 4, 4); + } + }; + temp.setIcon(icon1); + FunctionArea.this.addDElement(temp); + } + }); + GraphMenu.add(Info); + if (m_RefPointListener != null) { + DPoint temp = getDMeasures().getDPoint(m_x, m_y); + JMenuItem refPoint = new JMenuItem("Reference Point:("+temp.x+"/"+temp.y+")"); + refPoint.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ee) { + DPoint temp = getDMeasures().getDPoint(m_x, m_y); + double[] point = new double[2]; + point[0] = temp.x; + point[1] = temp.y; + m_RefPointListener.refPointGiven(point); + } + }); + GraphMenu.add(refPoint); + } + + // darn this point is an empty copy !! + DPoint point = getNearestDPoint(e.getX(), e.getY()); + + if (point != null) { + JMenuItem InfoXY = new JMenuItem("(" + point.x + "/" + point.y+")"); + Info.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ee) { + } + }); + GraphMenu.add(InfoXY); + + if (point.getIcon()instanceof InterfaceSelectablePointIcon) { + m_CurrentPointIcon = point.getIcon(); + if (((InterfaceSelectablePointIcon)m_CurrentPointIcon).getSelectionListener() != null) { + JMenuItem select; + AbstractEAIndividual indy = ((InterfaceSelectablePointIcon)m_CurrentPointIcon).getEAIndividual(); + if (indy.isMarked()) select = new JMenuItem("Deselect individual"); + else select = new JMenuItem("Select individual"); + select.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ee) { + ((InterfaceSelectablePointIcon)m_CurrentPointIcon).getSelectionListener().individualSelected(((InterfaceSelectablePointIcon)m_CurrentPointIcon).getEAIndividual()); + } + }); + GraphMenu.add(select); + } + } + + if (point.getIcon()instanceof InterfaceDPointWithContent) { + m_CurrentPointIcon = point.getIcon(); + JMenuItem drawIndy = new JMenuItem("Show individual"); + drawIndy.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ee) { + ((InterfaceDPointWithContent)m_CurrentPointIcon).showIndividual(); + } + }); + GraphMenu.add(drawIndy); + } + + } + if (FunctionArea.this.m_PointSetContainer.size() > 0) { + JMenuItem removeGraph = new JMenuItem("Remove graph"); + removeGraph.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ee) { + clearGraph(FunctionArea.this.m_x, FunctionArea.this.m_y); + } + }); + GraphMenu.add(removeGraph); + } + if (FunctionArea.this.m_PointSetContainer.size() > 0) { + JMenuItem changecolorGraph = new JMenuItem("Change color"); + changecolorGraph.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ee) { + changeColorGraph(FunctionArea.this.m_x, FunctionArea.this.m_y); + } + }); + GraphMenu.add(changecolorGraph); + } + if (FunctionArea.this.m_PointSetContainer.size() > 0) { + JMenuItem removePoint = new JMenuItem("Remove point"); + removePoint.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ee) { + removePoint(FunctionArea.this.m_x, FunctionArea.this.m_y); + } + }); + GraphMenu.add(removePoint); + } +// if (isStatisticsGraph(e.getX(),e.getY())==true) { +// if (getVar(e.getX(),e.getY())==false) { +// JMenuItem showVar = new JMenuItem("Show varianz "); +// showVar.addActionListener(new ActionListener() { +// // +// public void actionPerformed(ActionEvent ee) { +// setVar(m_x,m_y,true); +// } +// }); +// GraphMenu.add(showVar); +// +// } +// else { +// JMenuItem hideVar = new JMenuItem("Hide varianz "); +// hideVar.addActionListener(new ActionListener() { +// // +// public void actionPerformed(ActionEvent ee) { +// setVar(m_x,m_y,false); +// } +// }); +// GraphMenu.add(hideVar); +// } +// } + GraphMenu.show(FunctionArea.this, e.getX(), e.getY()); + } + } + }); + } + + /** This method allows to add a selection listner to the PointIcon + * it should need more than one listener to this abstruse event + * @param a The selection listener + */ + public void addRefPointSelectionListener(InterfaceRefPointListener a) { + this.m_RefPointListener = a; + } + + /** This method returns the selection listner to the PointIcon + * @return InterfaceSelectionListener + */ + public InterfaceRefPointListener getRefPointSelectionListener() { + return this.m_RefPointListener; + } + + /** This method allows to remove the selection listner to the PointIcon + */ + public void removeRefPointSelectionListeners() { + this.m_RefPointListener = null; + } + +} diff --git a/src/javaeva/gui/GenericAreaEditor.java b/src/javaeva/gui/GenericAreaEditor.java new file mode 100644 index 00000000..8d90ca00 --- /dev/null +++ b/src/javaeva/gui/GenericAreaEditor.java @@ -0,0 +1,168 @@ +package javaeva.gui; + +import javaeva.tools.EVAHELP; +import javaeva.server.go.individuals.codings.gp.AbstractGPNode; +import javaeva.server.go.individuals.codings.gp.GPArea; + +import javax.swing.*; +import java.beans.PropertyEditorSupport; +import java.beans.PropertyEditor; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.awt.*; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; +import java.lang.reflect.Array; +import java.util.ArrayList; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 27.06.2003 + * Time: 11:41:01 + * To change this template use Options | File Templates. + */ +public class GenericAreaEditor extends JPanel implements PropertyEditor { + + /** Handles property change notification */ + private PropertyChangeSupport m_Support = new PropertyChangeSupport(this); + /** The label for when we can't edit that type */ + private JLabel m_Label = new JLabel("Can't edit", SwingConstants.CENTER); + /** The GPArea that is to be edited*/ + private GPArea m_AreaObject; + + /** The gaphix stuff */ + private JPanel m_CustomEditor, m_NodePanel; + private JCheckBox[] m_BlackCheck; + + public GenericAreaEditor() { + // compiled code + } + + /** This method will init the CustomEditor Panel + */ + private void initCustomEditor() { + this.m_CustomEditor = new JPanel(); + this.m_CustomEditor.setLayout(new BorderLayout()); + this.m_CustomEditor.add(new JLabel("Choose the area:"), BorderLayout.NORTH); + this.m_NodePanel = new JPanel(); + this.m_CustomEditor.add(new JScrollPane(this.m_NodePanel), BorderLayout.CENTER); + this.updateEditor(); + } + + /** The object may have changed update the editor. + */ + private void updateEditor() { + if (this.m_NodePanel != null) { + + ArrayList GPNodes = this.m_AreaObject.getCompleteList(); + ArrayList Allowed = this.m_AreaObject.getBlackList(); + this.m_NodePanel.removeAll(); + this.m_NodePanel.setLayout(new GridLayout(GPNodes.size(), 1)); + this.m_BlackCheck = new JCheckBox[GPNodes.size()]; + for (int i = 0; i < GPNodes.size(); i++) { + this.m_BlackCheck[i] = new JCheckBox((((AbstractGPNode)GPNodes.get(i))).getName(), ((Boolean)Allowed.get(i)).booleanValue()); + this.m_BlackCheck[i].addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ev) { + makeNodeList(); + } + }); + this.m_NodePanel.add(this.m_BlackCheck[i]); + } + } + } + + /** This method checks the current BlackList and compiles it + * to a new ReducedList. + */ + private void makeNodeList() { + for (int i = 0; i < this.m_BlackCheck.length; i++) { + this.m_AreaObject.setBlackListElement(i, this.m_BlackCheck[i].isSelected()); + } + this.m_AreaObject.compileReducedList(); + } + + /** This method will set the value of object that is to be edited. + * @param o an object that must be an array. + */ + public void setValue(Object o) { + if (o instanceof GPArea) { + this.m_AreaObject = (GPArea) o; + this.updateEditor(); + } + } + + /** Retruns the current object. + * @return the current object + */ + public Object getValue() { + return this.m_AreaObject; + } + + public String getJavaInitializationString() { + return "TEST"; + } + + /** + * + */ + public String getAsText() { + return null; + } + /** + * + */ + public void setAsText(String text) throws IllegalArgumentException { + throw new IllegalArgumentException(text); + } + /** + * + */ + public String[] getTags() { + return null; + } + /** + * + */ + public void addPropertyChangeListener(PropertyChangeListener l) { + m_Support.addPropertyChangeListener(l); + } + /** + * + */ + public void removePropertyChangeListener(PropertyChangeListener l) { + m_Support.removePropertyChangeListener(l); + } + /** Returns true since the Object can be shown + * @return true + */ + public boolean isPaintable() { + return true; + } + /** + * Paints a representation of the current classifier. + * + * @param gfx the graphics context to use + * @param box the area we are allowed to paint into + */ + public void paintValue(Graphics gfx, Rectangle box) { + FontMetrics fm = gfx.getFontMetrics(); + int vpad = (box.height - fm.getAscent()) / 2; + String rep = "Select from available GPNodes"; + gfx.drawString(rep, 2, fm.getHeight() + vpad - 3 ); + } + /** Returns true because we do support a custom editor. + * @return true + */ + public boolean supportsCustomEditor() { + return true; + } + + /** Returns the array editing component. + * @return a value of type 'java.awt.Component' + */ + public Component getCustomEditor() { + if (this.m_CustomEditor == null) this.initCustomEditor(); + return m_CustomEditor; + } +} \ No newline at end of file diff --git a/src/javaeva/gui/GenericArrayEditor.java b/src/javaeva/gui/GenericArrayEditor.java new file mode 100644 index 00000000..5b79316e --- /dev/null +++ b/src/javaeva/gui/GenericArrayEditor.java @@ -0,0 +1,434 @@ +package javaeva.gui; +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 235 $ + * $Date: 2007-11-08 13:53:51 +0100 (Thu, 08 Nov 2007) $ + * $Author: mkron $ + */ +/*==========================================================================* + * IMPORTS + *==========================================================================*/ + +import javaeva.tools.EVAHELP; +import javaeva.tools.SelectedTag; + +import java.awt.*; +import java.awt.event.*; +import javax.swing.JPanel; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JButton; +import javax.swing.event.ListSelectionListener; + +import javax.swing.ListCellRenderer; +import javax.swing.event.ListSelectionEvent; +import javax.swing.SwingConstants; +import javax.swing.JOptionPane; +import javax.swing.DefaultListModel; +import javax.swing.JScrollPane; +import javax.swing.DefaultListCellRenderer; +import java.beans.PropertyEditor; +import java.beans.PropertyChangeSupport; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyEditorManager; +import java.lang.reflect.Array; +/*==========================================================================* + * CLASS DECLARATION + *==========================================================================*/ +public class GenericArrayEditor extends JPanel +implements PropertyEditor { + /** Handles property change notification */ + private PropertyChangeSupport m_Support = new PropertyChangeSupport(this); + /** The label for when we can't edit that type */ + private JLabel m_Label = new JLabel("Can't edit", SwingConstants.CENTER); + /** The list component displaying current values */ + private JList m_ElementList = new JList(); + /** The class of objects allowed in the array */ + private Class m_ElementClass = String.class; + /** The defaultlistmodel holding our data */ + private DefaultListModel m_ListModel; + /** The property editor for the class we are editing */ + private PropertyEditor m_ElementEditor; + /** Click this to delete the selected array values */ + private JButton m_DeleteBut = new JButton("Delete"); + /** Click to add the current object configuration to the array */ + private JButton m_AddBut = new JButton("Add"); + /** Listens to buttons being pressed and taking the appropriate action */ + private ActionListener m_InnerActionListener = + new ActionListener() { + // + public void actionPerformed(ActionEvent e) { + if (e.getSource() == m_DeleteBut) { + int [] selected = m_ElementList.getSelectedIndices(); + if (selected != null) { + for (int i = 0; i < selected.length; i++) { + int current = selected[i]; + m_ListModel.removeElementAt(current); + if (m_ListModel.size() > current) { + m_ElementList.setSelectedIndex(current); + } + } + m_Support.firePropertyChange("", null, null); + } + if (m_ElementList.getSelectedIndex() == -1) { + m_DeleteBut.setEnabled(false); + } + } else if (e.getSource() == m_AddBut) { + int selected = m_ElementList.getSelectedIndex(); + Object addObj = m_ElementEditor.getValue(); + + // Make a full copy of the object using serialization + try { + SerializedObject so = new SerializedObject(addObj); + addObj = so.getObject(); + if (selected != -1) { + m_ListModel.insertElementAt(addObj, selected); + } else { + m_ListModel.addElement(addObj); + } + m_Support.firePropertyChange("", null, null); + } catch (Exception ex) { + JOptionPane.showMessageDialog(GenericArrayEditor.this,"Could not create an object copy",null,JOptionPane.ERROR_MESSAGE); + } + } + } + }; + + /** Listens to list items being selected and takes appropriate action */ + private ListSelectionListener m_InnerSelectionListener = + new ListSelectionListener() { + // + public void valueChanged(ListSelectionEvent e) { + + if (e.getSource() == m_ElementList) { + // Enable the delete button + //System.out.println("m_ElementList.getSelectedIndex()"+m_ElementList.getSelectedIndex()); + if (m_ElementList.getSelectedIndex() != -1) { + m_DeleteBut.setEnabled(true); + } + } + } + }; + + + /** + * Sets up the array editor. + */ + public GenericArrayEditor() { + setLayout(new BorderLayout()); + add(m_Label, BorderLayout.CENTER); + m_DeleteBut.addActionListener(m_InnerActionListener); + m_AddBut.addActionListener(m_InnerActionListener); + m_ElementList.addListSelectionListener(m_InnerSelectionListener); + m_AddBut.setToolTipText("Add the current item to the list"); + m_DeleteBut.setToolTipText("Delete the selected list item"); + } + + /* This class handles the creation of list cell renderers from the + * property editors. + */ + private class EditorListCellRenderer implements ListCellRenderer { + /** The class of the property editor for array objects */ + private Class m_EditorClass; + /** The class of the array values */ + private Class m_ValueClass; + /** + * Creates the list cell renderer. + * + * @param editorClass The class of the property editor for array objects + * @param valueClass The class of the array values + */ + public EditorListCellRenderer(Class editorClass, Class valueClass) { + m_EditorClass = editorClass; + m_ValueClass = valueClass; + } + /** + * Creates a cell rendering component. + * + * @param JList the list that will be rendered in + * @param Object the cell value + * @param int which element of the list to render + * @param boolean true if the cell is selected + * @param boolean true if the cell has the focus + * @return the rendering component + */ + public Component getListCellRendererComponent(final JList list, + final Object value, + final int index, + final boolean isSelected, + final boolean cellHasFocus) { + try { + final PropertyEditor e = (PropertyEditor)m_EditorClass.newInstance(); + if (e instanceof GenericObjectEditor) { + // ((GenericObjectEditor) e).setDisplayOnly(true); + ((GenericObjectEditor) e).setClassType(m_ValueClass); + } + e.setValue(value); + return new JPanel() { + /** + * + */ + public void paintComponent(Graphics g) { + Insets i = this.getInsets(); + Rectangle box = new Rectangle(i.left,i.top, + this.getWidth(), //- i.right, + this.getHeight() );//- i.bottom +20); + g.setColor(isSelected ? list.getSelectionBackground() : list.getBackground()); + g.fillRect(0, 0, this.getWidth(), this.getHeight()); + g.setColor(isSelected ? list.getSelectionForeground(): list.getForeground()); + e.paintValue(g, box); + } + /** + * + */ + public Dimension getPreferredSize() { +// Dimension newPref = getPreferredSize(); +// newPref.height = getFontMetrics(getFont()).getHeight() * 6 / 4; //6 / 4; +// newPref.width = newPref.height * 6; //5 +// setPreferredSize(newPref); + + +// Font f = this.getFont(); +// FontMetrics fm = this.getFontMetrics(f); +// return new Dimension(0, fm.getHeight()); + + Font f = this.getFont(); + FontMetrics fm = this.getFontMetrics(f); + Dimension newPref = new Dimension(0, fm.getHeight()); + newPref.height = getFontMetrics(getFont()).getHeight() * 6 / 4; //6 / 4; + newPref.width = newPref.height * 6; //5 + return newPref; + } + }; + } catch (Exception ex) { + return null; + } + } + } + + /** + * Updates the type of object being edited, so attempts to find an + * appropriate propertyeditor. + * + * @param o a value of type 'Object' + */ + private void updateEditorType(Object o) { + + // Determine if the current object is an array + m_ElementEditor = null; m_ListModel = null; + removeAll(); + + if ((o != null) && (o.getClass().isArray())) { + Class elementClass = o.getClass().getComponentType(); + PropertyEditor editor = PropertyEditorProvider.findEditor(elementClass); + Component view = null; + ListCellRenderer lcr = new DefaultListCellRenderer(); + if (editor != null) { + if (editor instanceof GenericObjectEditor) { + ((GenericObjectEditor) editor).setClassType(elementClass); + } + if (editor.isPaintable() && editor.supportsCustomEditor()) { + view = new PropertyPanel(editor); + lcr = new EditorListCellRenderer(editor.getClass(), elementClass); + } else if (editor.getTags() != null) { + view = new PropertyValueSelector(editor); + } else if (editor.getAsText() != null) { + view = new PropertyText(editor); + } + } + if (view == null) { + System.err.println("No property editor for class: " + + elementClass.getName()); + } else { + m_ElementEditor = editor; + + // Create the ListModel and populate it + m_ListModel = new DefaultListModel(); + m_ElementClass = elementClass; + for (int i = 0; i < Array.getLength(o); i++) { + m_ListModel.addElement(Array.get(o,i)); + } + m_ElementList.setCellRenderer(lcr); + m_ElementList.setModel(m_ListModel); + if (m_ListModel.getSize() > 0) { + m_ElementList.setSelectedIndex(0); + m_DeleteBut.setEnabled(true); + } else { + m_DeleteBut.setEnabled(false); + } + + try { + if (m_ListModel.getSize() > 0) { + m_ElementEditor.setValue(m_ListModel.getElementAt(0)); + } else { + if (m_ElementEditor instanceof GenericObjectEditor) { + ((GenericObjectEditor)m_ElementEditor).setDefaultValue(); + } else { + m_ElementEditor.setValue(m_ElementClass.newInstance()); + } + } + + JPanel panel = new JPanel(); + panel.setLayout(new BorderLayout()); + panel.add(view, BorderLayout.CENTER); + panel.add(m_AddBut, BorderLayout.EAST); + add(panel, BorderLayout.NORTH); + add(new JScrollPane(m_ElementList), BorderLayout.CENTER); + add(m_DeleteBut, BorderLayout.SOUTH); + m_ElementEditor.addPropertyChangeListener(new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent e) { + repaint(); + } + }); + } catch (Exception ex) { + System.err.println(ex.getMessage()); + m_ElementEditor = null; + } + } + } + if (m_ElementEditor == null) { + add(m_Label, BorderLayout.CENTER); + } + m_Support.firePropertyChange("", null, null); + validate(); + } + /** + * Sets the current object array. + * + * @param o an object that must be an array. + */ + public void setValue(Object o) { + // Create a new list model, put it in the list and resize? + updateEditorType(o); + } + + /** + * Gets the current object array. + * + * @return the current object array + */ + public Object getValue() { + + if (m_ListModel == null) { + return null; + } + // Convert the listmodel to an array of strings and return it. + int length = m_ListModel.getSize(); + Object result = Array.newInstance(m_ElementClass, length); + for (int i = 0; i < length; i++) { + Array.set(result, i, m_ListModel.elementAt(i)); + } + return result; + } + + /** + * Supposedly returns an initialization string to create a classifier + * identical to the current one, including it's state, but this doesn't + * appear possible given that the initialization string isn't supposed to + * contain multiple statements. + * + * @return the java source code initialisation string + */ + public String getJavaInitializationString() { + return "null"; + } + + /** + * Returns true to indicate that we can paint a representation of the + * string array + * + * @return true + */ + public boolean isPaintable() { + return true; + } + + /** + * Paints a representation of the current classifier. + * + * @param gfx the graphics context to use + * @param box the area we are allowed to paint into + */ + public void paintValue(Graphics gfx, Rectangle box) { + FontMetrics fm = gfx.getFontMetrics(); + int vpad = (box.height - fm.getAscent()) / 2; +// System.out.println(m_ListModel + " --- " + m_ElementClass); + String rep = m_ListModel.getSize() + " " + EVAHELP.cutClassName(m_ElementClass.getName()); + gfx.drawString(rep, 2, fm.getHeight() + vpad - 3 ); + } + /** + * + */ + public String getAsText() { + return null; + } + /** + * + */ + public void setAsText(String text) throws IllegalArgumentException { + throw new IllegalArgumentException(text); + } + /** + * + */ + public String[] getTags() { + return null; + } + /** + * + */ + public boolean supportsCustomEditor() { + return true; + } + /** + * + */ + public Component getCustomEditor() { + return this; + } + /** + * + */ + public void addPropertyChangeListener(PropertyChangeListener l) { + m_Support.addPropertyChangeListener(l); + } + /** + * + */ + public void removePropertyChangeListener(PropertyChangeListener l) { + m_Support.removePropertyChangeListener(l); + } + + /** + * + */ + public static void main(String [] args) { + try { + java.beans.PropertyEditorManager.registerEditor(SelectedTag.class,TagEditor.class); + java.beans.PropertyEditorManager.registerEditor(String [].class,GenericArrayEditor.class); + java.beans.PropertyEditorManager.registerEditor(double [].class,GenericArrayEditor.class); + GenericArrayEditor editor = new GenericArrayEditor(); + + double [] initial = { 1, 2, 34,656,46 }; + PropertyDialog pd = new PropertyDialog(editor,EVAHELP.cutClassName(editor.getClass().getName()) + , 100, 100); + pd.setSize(200,200); + pd.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + System.exit(0); + } + }); + editor.setValue(initial); + //ce.validate(); + } catch (Exception ex) { + ex.printStackTrace(); + System.err.println(ex.getMessage()); + } + } +} + diff --git a/src/javaeva/gui/GenericDoubleArrayEditor.java b/src/javaeva/gui/GenericDoubleArrayEditor.java new file mode 100644 index 00000000..1af18b82 --- /dev/null +++ b/src/javaeva/gui/GenericDoubleArrayEditor.java @@ -0,0 +1,279 @@ +package javaeva.gui; + +import javax.swing.*; +import java.beans.PropertyEditor; +import java.beans.PropertyChangeSupport; +import java.beans.PropertyChangeListener; +import java.awt.*; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; +import java.awt.event.KeyListener; +import java.awt.event.KeyEvent; +import java.io.File; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 05.03.2004 + * Time: 13:51:14 + * To change this template use File | Settings | File Templates. + */ +public class GenericDoubleArrayEditor extends JPanel implements PropertyEditor { + + /** Handles property change notification */ + private PropertyChangeSupport m_Support = new PropertyChangeSupport(this); + /** The label for when we can't edit that type */ + private JLabel m_Label = new JLabel("Can't edit", SwingConstants.CENTER); + /** The FilePath that is to be edited*/ + private PropertyDoubleArray m_DoubleArray; + + /** The gaphix stuff */ + private JPanel m_CustomEditor, m_DataPanel, m_ButtonPanel; + private JTextField[] m_InputTextField; + private JButton m_OKButton, m_AddButton, m_DeleteButton, m_NormalizeButton; + + public GenericDoubleArrayEditor() { + // compiled code + } + + /** This method will init the CustomEditor Panel + */ + private void initCustomEditor() { + this.m_CustomEditor = new JPanel(); + this.m_CustomEditor.setLayout(new BorderLayout()); + + this.m_CustomEditor.add(new JLabel("Current Double Array:"), BorderLayout.NORTH); + + // init data panel + this.m_DataPanel = new JPanel(); + this.updateDataPanel(); + this.m_CustomEditor.add(this.m_DataPanel, BorderLayout.CENTER); + + // init button panel + this.m_ButtonPanel = new JPanel(); + this.m_AddButton = new JButton("Add"); + this.m_AddButton.addActionListener(this.addAction); + this.m_DeleteButton = new JButton("Delete"); + this.m_DeleteButton.addActionListener(this.deleteAction); + this.m_NormalizeButton = new JButton("Normalize"); + this.m_NormalizeButton.addActionListener(this.mormalizeAction); + this.m_OKButton = new JButton("OK"); + this.m_OKButton.setEnabled(true); + this.m_OKButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + //m_Backup = copyObject(m_Object); + if ((m_CustomEditor.getTopLevelAncestor() != null) && (m_CustomEditor.getTopLevelAncestor() instanceof Window)) { + Window w = (Window) m_CustomEditor.getTopLevelAncestor(); + w.dispose(); + } + } + }); + this.m_ButtonPanel.add(this.m_AddButton); + this.m_ButtonPanel.add(this.m_DeleteButton); + this.m_ButtonPanel.add(this.m_NormalizeButton); + this.m_ButtonPanel.add(this.m_OKButton); + this.m_CustomEditor.add(this.m_ButtonPanel, BorderLayout.SOUTH); + this.updateEditor(); + } + + /** This action listener adds an element to DoubleArray + */ + ActionListener addAction = new ActionListener() { + public void actionPerformed(ActionEvent event) { + double[] tmpD = m_DoubleArray.getDoubleArray(); + double[] newD = new double[tmpD.length+1]; + + for (int i = 0; i < newD.length; i++) newD[i] = 1.0; + for (int i = 0; i < tmpD.length; i++) newD[i] = tmpD[i]; + m_DoubleArray.setDoubleArray(newD); + updateEditor(); + } + }; + /** This action listener removes an element to DoubleArray + */ + ActionListener deleteAction = new ActionListener() { + public void actionPerformed(ActionEvent event) { + double[] tmpD = m_DoubleArray.getDoubleArray(); + double[] newD = new double[tmpD.length-1]; + + for (int i = 0; i < newD.length; i++) newD[i] = tmpD[i]; + m_DoubleArray.setDoubleArray(newD); + updateEditor(); + } + }; + /** This action listener nomalizes the values of the DoubleArray + */ + ActionListener mormalizeAction = new ActionListener() { + public void actionPerformed(ActionEvent event) { + double[] tmpD = m_DoubleArray.getDoubleArray(); + double sum = 0; + + for (int i = 0; i < tmpD.length; i++) sum += tmpD[i]; + if (sum == 0) return; + for (int i = 0; i < tmpD.length; i++) tmpD[i] = tmpD[i]/sum; + m_DoubleArray.setDoubleArray(tmpD); + updateEditor(); + } + }; + + /** This action listener reads all values + */ + KeyListener readDoubleArrayAction = new KeyListener() { + public void keyPressed(KeyEvent event) { + } + public void keyTyped(KeyEvent event) { + } + + public void keyReleased(KeyEvent event) { + double[] tmpD = new double[m_InputTextField.length]; + + for (int i = 0; i < tmpD.length; i++) { + + try { + double d = 0; + d = new Double(m_InputTextField[i].getText()).doubleValue(); + tmpD[i] = d; + } catch (Exception e) { + + } + //tmpD[i] = new Double(m_InputTextField[i].getText()).doubleValue(); + } + + m_DoubleArray.setDoubleArray(tmpD); + //updateEditor(); + } + }; + + /** The object may have changed update the editor. + */ + private void updateEditor() { + if (this.m_CustomEditor != null) { + this.updateDataPanel(); + this.m_CustomEditor.validate(); + this.m_CustomEditor.repaint(); + } + } + + /** This method updates the data panel + */ + private void updateDataPanel() { + double[] tmpD = this.m_DoubleArray.getDoubleArray(); + + this.m_DataPanel.removeAll(); + this.m_DataPanel.setLayout(new GridLayout(tmpD.length, 2)); + this.m_InputTextField = new JTextField[tmpD.length]; + for (int i = 0; i < tmpD.length; i++) { + JLabel label = new JLabel("Value X"+i+": "); + this.m_DataPanel.add(label); + this.m_InputTextField[i] = new JTextField(); + this.m_InputTextField[i].setText(""+tmpD[i]); + this.m_InputTextField[i].addKeyListener(this.readDoubleArrayAction); + this.m_DataPanel.add(this.m_InputTextField[i]); + } + } + + + /** This method will set the value of object that is to be edited. + * @param o an object that must be an array. + */ + public void setValue(Object o) { + if (o instanceof PropertyDoubleArray) { + this.m_DoubleArray = (PropertyDoubleArray) o; + this.updateEditor(); + } + } + + /** Returns the current object. + * @return the current object + */ + public Object getValue() { + return this.m_DoubleArray; + } + + public String getJavaInitializationString() { + return "TEST"; + } + + /** + * + */ + public String getAsText() { + return null; + } + + /** + * + */ + public void setAsText(String text) throws IllegalArgumentException { + throw new IllegalArgumentException(text); + } + + /** + * + */ + public String[] getTags() { + return null; + } + + /** + * + */ + public void addPropertyChangeListener(PropertyChangeListener l) { + m_Support.addPropertyChangeListener(l); + } + + /** + * + */ + public void removePropertyChangeListener(PropertyChangeListener l) { + m_Support.removePropertyChangeListener(l); + } + + /** This is used to hook an action listener to the ok button + * @param a The action listener. + */ + public void addOkListener(ActionListener a) { + m_OKButton.addActionListener(a); + } + + /** This is used to remove an action listener from the ok button + * @param a The action listener + */ + public void removeOkListener(ActionListener a) { + m_OKButton.removeActionListener(a); + } + + /** Returns true since the Object can be shown + * @return true + */ + public boolean isPaintable() { + return true; + } + + /** Paints a representation of the current classifier. + * + * @param gfx the graphics context to use + * @param box the area we are allowed to paint into + */ + public void paintValue(Graphics gfx, Rectangle box) { + FontMetrics fm = gfx.getFontMetrics(); + int vpad = (box.height - fm.getAscent()) / 2; + String rep = "Edit double[]"; + gfx.drawString(rep, 2, fm.getHeight() + vpad - 3 ); + } + + /** Returns true because we do support a custom editor. + * @return true + */ + public boolean supportsCustomEditor() { + return true; + } + + /** Returns the array editing component. + * @return a value of type 'java.awt.Component' + */ + public Component getCustomEditor() { + if (this.m_CustomEditor == null) this.initCustomEditor(); + return m_CustomEditor; + } +} \ No newline at end of file diff --git a/src/javaeva/gui/GenericEpsilonConstraintEditor.java b/src/javaeva/gui/GenericEpsilonConstraintEditor.java new file mode 100644 index 00000000..cbffd159 --- /dev/null +++ b/src/javaeva/gui/GenericEpsilonConstraintEditor.java @@ -0,0 +1,246 @@ +package javaeva.gui; + +import javax.swing.*; +import java.beans.PropertyEditor; +import java.beans.PropertyChangeSupport; +import java.beans.PropertyChangeListener; +import java.awt.*; +import java.awt.event.*; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 14.07.2005 + * Time: 16:33:45 + * To change this template use File | Settings | File Templates. + */ +public class GenericEpsilonConstraintEditor extends JPanel implements PropertyEditor { + + /** Handles property change notification */ + private PropertyChangeSupport m_Support = new PropertyChangeSupport(this); + /** The label for when we can't edit that type */ + private JLabel m_Label = new JLabel("Can't edit", SwingConstants.CENTER); + /** The FilePath that is to be edited*/ + private PropertyEpsilonConstraint m_EpsilonConstraint; + + /** The gaphix stuff */ + private JPanel m_CustomEditor, m_DataPanel, m_ButtonPanel, m_TargetPanel; + private JTextField[] m_TargetTextField; + private JComboBox m_Objective; + private JButton m_OKButton; + + public GenericEpsilonConstraintEditor() { + // compiled code + } + + /** This method will init the CustomEditor Panel + */ + private void initCustomEditor() { + this.m_CustomEditor = new JPanel(); + this.m_CustomEditor.setLayout(new BorderLayout()); + + // target panel + this.m_TargetPanel = new JPanel(); + this.m_TargetPanel.setLayout(new GridLayout(1, 2)); + this.m_TargetPanel.add(new JLabel("Optimize:")); + this.m_Objective = new JComboBox(); + for (int i = 0; i < this.m_EpsilonConstraint.m_TargetValue.length; i++) this.m_Objective.addItem("Objective "+i); + this.m_TargetPanel.add(this.m_Objective); + this.m_Objective.addItemListener(this.objectiveAction); + this.m_CustomEditor.add(this.m_TargetPanel, BorderLayout.NORTH); + + // init data panel + this.m_DataPanel = new JPanel(); + this.updateDataPanel(); + this.m_CustomEditor.add(this.m_DataPanel, BorderLayout.CENTER); + + // init button panel + this.m_ButtonPanel = new JPanel(); + this.m_OKButton = new JButton("OK"); + this.m_OKButton.setEnabled(true); + this.m_OKButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + //m_Backup = copyObject(m_Object); + if ((m_CustomEditor.getTopLevelAncestor() != null) && (m_CustomEditor.getTopLevelAncestor() instanceof Window)) { + Window w = (Window) m_CustomEditor.getTopLevelAncestor(); + w.dispose(); + } + } + }); + this.m_ButtonPanel.add(this.m_OKButton); + this.m_CustomEditor.add(this.m_ButtonPanel, BorderLayout.SOUTH); + this.updateEditor(); + } + + /** This action listener adds an element to DoubleArray + */ + ItemListener objectiveAction = new ItemListener() { + public void itemStateChanged(ItemEvent event) { + m_EpsilonConstraint.m_OptimizeObjective = m_Objective.getSelectedIndex(); + updateEditor(); + } + }; + + /** This action listener reads all values + */ + KeyListener readDoubleArrayAction = new KeyListener() { + public void keyPressed(KeyEvent event) { + } + public void keyTyped(KeyEvent event) { + } + + public void keyReleased(KeyEvent event) { + double[] tmpT = m_EpsilonConstraint.m_TargetValue; + + for (int i = 0; i < tmpT.length; i++) { + + try { + double d = 0; + d = new Double(m_TargetTextField[i].getText()).doubleValue(); + tmpT[i] = d; + } catch (Exception e) { + + } + } + + m_EpsilonConstraint.m_TargetValue = tmpT; + } + }; + + /** The object may have changed update the editor. + */ + private void updateEditor() { + if (this.m_CustomEditor != null) { + this.updateDataPanel(); + this.m_CustomEditor.validate(); + this.m_CustomEditor.repaint(); + } + } + + /** This method updates the data panel + */ + private void updateDataPanel() { + double[] tmpT = this.m_EpsilonConstraint.m_TargetValue; + int obj = this.m_EpsilonConstraint.m_OptimizeObjective; + + this.m_DataPanel.removeAll(); + this.m_DataPanel.setLayout(new GridLayout(tmpT.length+1, 2)); + this.m_DataPanel.add(new JLabel()); + this.m_DataPanel.add(new JLabel("Target Value")); + this.m_TargetTextField = new JTextField[tmpT.length]; + for (int i = 0; i < tmpT.length; i++) { + JLabel label = new JLabel("Objective "+i+": "); + this.m_DataPanel.add(label); + this.m_TargetTextField[i] = new JTextField(); + this.m_TargetTextField[i].setText(""+tmpT[i]); + this.m_TargetTextField[i].addKeyListener(this.readDoubleArrayAction); + this.m_DataPanel.add(this.m_TargetTextField[i]); + } + this.m_TargetTextField[obj].setEditable(false); + } + + + /** This method will set the value of object that is to be edited. + * @param o an object that must be an array. + */ + public void setValue(Object o) { + if (o instanceof PropertyEpsilonConstraint) { + this.m_EpsilonConstraint = (PropertyEpsilonConstraint) o; + this.updateEditor(); + } + } + + /** Returns the current object. + * @return the current object + */ + public Object getValue() { + return this.m_EpsilonConstraint; + } + + public String getJavaInitializationString() { + return "TEST"; + } + + /** + * + */ + public String getAsText() { + return null; + } + + /** + * + */ + public void setAsText(String text) throws IllegalArgumentException { + throw new IllegalArgumentException(text); + } + + /** + * + */ + public String[] getTags() { + return null; + } + + /** + * + */ + public void addPropertyChangeListener(PropertyChangeListener l) { + m_Support.addPropertyChangeListener(l); + } + + /** + * + */ + public void removePropertyChangeListener(PropertyChangeListener l) { + m_Support.removePropertyChangeListener(l); + } + + /** This is used to hook an action listener to the ok button + * @param a The action listener. + */ + public void addOkListener(ActionListener a) { + m_OKButton.addActionListener(a); + } + + /** This is used to remove an action listener from the ok button + * @param a The action listener + */ + public void removeOkListener(ActionListener a) { + m_OKButton.removeActionListener(a); + } + + /** Returns true since the Object can be shown + * @return true + */ + public boolean isPaintable() { + return true; + } + + /** Paints a representation of the current classifier. + * + * @param gfx the graphics context to use + * @param box the area we are allowed to paint into + */ + public void paintValue(Graphics gfx, Rectangle box) { + FontMetrics fm = gfx.getFontMetrics(); + int vpad = (box.height - fm.getAscent()) / 2; + String rep = "Edit Epsilon Constraint"; + gfx.drawString(rep, 2, fm.getHeight() + vpad - 3 ); + } + + /** Returns true because we do support a custom editor. + * @return true + */ + public boolean supportsCustomEditor() { + return true; + } + + /** Returns the array editing component. + * @return a value of type 'java.awt.Component' + */ + public Component getCustomEditor() { + if (this.m_CustomEditor == null) this.initCustomEditor(); + return m_CustomEditor; + } +} \ No newline at end of file diff --git a/src/javaeva/gui/GenericEpsilonThresholdEditor.java b/src/javaeva/gui/GenericEpsilonThresholdEditor.java new file mode 100644 index 00000000..a2d1eb86 --- /dev/null +++ b/src/javaeva/gui/GenericEpsilonThresholdEditor.java @@ -0,0 +1,263 @@ +package javaeva.gui; + +import javax.swing.*; +import java.beans.PropertyEditor; +import java.beans.PropertyChangeSupport; +import java.beans.PropertyChangeListener; +import java.awt.*; +import java.awt.event.*; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 05.03.2004 + * Time: 15:17:09 + * To change this template use File | Settings | File Templates. + */ +public class GenericEpsilonThresholdEditor extends JPanel implements PropertyEditor { + + /** Handles property change notification */ + private PropertyChangeSupport m_Support = new PropertyChangeSupport(this); + /** The label for when we can't edit that type */ + private JLabel m_Label = new JLabel("Can't edit", SwingConstants.CENTER); + /** The FilePath that is to be edited*/ + private PropertyEpsilonThreshold m_EpsilonThreshhold; + + /** The gaphix stuff */ + private JPanel m_CustomEditor, m_DataPanel, m_ButtonPanel, m_TargetPanel; + private JTextField[] m_TargetTextField, m_PunishTextField; + private JComboBox m_Objective; + private JButton m_OKButton; + + public GenericEpsilonThresholdEditor() { + // compiled code + } + + /** This method will init the CustomEditor Panel + */ + private void initCustomEditor() { + this.m_CustomEditor = new JPanel(); + this.m_CustomEditor.setLayout(new BorderLayout()); + + // target panel + this.m_TargetPanel = new JPanel(); + this.m_TargetPanel.setLayout(new GridLayout(1, 2)); + this.m_TargetPanel.add(new JLabel("Optimize:")); + this.m_Objective = new JComboBox(); + for (int i = 0; i < this.m_EpsilonThreshhold.m_TargetValue.length; i++) this.m_Objective.addItem("Objective "+i); + this.m_TargetPanel.add(this.m_Objective); + this.m_Objective.addItemListener(this.objectiveAction); + this.m_CustomEditor.add(this.m_TargetPanel, BorderLayout.NORTH); + + // init data panel + this.m_DataPanel = new JPanel(); + this.updateDataPanel(); + this.m_CustomEditor.add(this.m_DataPanel, BorderLayout.CENTER); + + // init button panel + this.m_ButtonPanel = new JPanel(); + this.m_OKButton = new JButton("OK"); + this.m_OKButton.setEnabled(true); + this.m_OKButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + //m_Backup = copyObject(m_Object); + if ((m_CustomEditor.getTopLevelAncestor() != null) && (m_CustomEditor.getTopLevelAncestor() instanceof Window)) { + Window w = (Window) m_CustomEditor.getTopLevelAncestor(); + w.dispose(); + } + } + }); + this.m_ButtonPanel.add(this.m_OKButton); + this.m_CustomEditor.add(this.m_ButtonPanel, BorderLayout.SOUTH); + this.updateEditor(); + } + + /** This action listener adds an element to DoubleArray + */ + ItemListener objectiveAction = new ItemListener() { + public void itemStateChanged(ItemEvent event) { + m_EpsilonThreshhold.m_OptimizeObjective = m_Objective.getSelectedIndex(); + updateEditor(); + } + }; + + /** This action listener reads all values + */ + KeyListener readDoubleArrayAction = new KeyListener() { + public void keyPressed(KeyEvent event) { + } + public void keyTyped(KeyEvent event) { + } + + public void keyReleased(KeyEvent event) { + double[] tmpT = m_EpsilonThreshhold.m_TargetValue; + double[] tmpP = m_EpsilonThreshhold.m_Punishment; + + for (int i = 0; i < tmpT.length; i++) { + + try { + double d = 0; + d = new Double(m_TargetTextField[i].getText()).doubleValue(); + tmpT[i] = d; + } catch (Exception e) { + + } + try { + double d = 0; + d = new Double(m_PunishTextField[i].getText()).doubleValue(); + tmpP[i] = d; + } catch (Exception e) { + + } + } + + m_EpsilonThreshhold.m_TargetValue = tmpT; + m_EpsilonThreshhold.m_Punishment = tmpP; + } + }; + + /** The object may have changed update the editor. + */ + private void updateEditor() { + if (this.m_CustomEditor != null) { + this.updateDataPanel(); + this.m_CustomEditor.validate(); + this.m_CustomEditor.repaint(); + } + } + + /** This method updates the data panel + */ + private void updateDataPanel() { + double[] tmpT = this.m_EpsilonThreshhold.m_TargetValue; + double[] tmpP = this.m_EpsilonThreshhold.m_Punishment; + int obj = this.m_EpsilonThreshhold.m_OptimizeObjective; + + this.m_DataPanel.removeAll(); + this.m_DataPanel.setLayout(new GridLayout(tmpT.length+1, 3)); + this.m_DataPanel.add(new JLabel()); + this.m_DataPanel.add(new JLabel("Target Value")); + this.m_DataPanel.add(new JLabel("Punishment")); + this.m_TargetTextField = new JTextField[tmpT.length]; + this.m_PunishTextField = new JTextField[tmpT.length]; + for (int i = 0; i < tmpT.length; i++) { + JLabel label = new JLabel("Objective "+i+": "); + this.m_DataPanel.add(label); + this.m_TargetTextField[i] = new JTextField(); + this.m_TargetTextField[i].setText(""+tmpT[i]); + this.m_TargetTextField[i].addKeyListener(this.readDoubleArrayAction); + this.m_DataPanel.add(this.m_TargetTextField[i]); + this.m_PunishTextField[i] = new JTextField(); + this.m_PunishTextField[i].setText(""+tmpP[i]); + this.m_PunishTextField[i].addKeyListener(this.readDoubleArrayAction); + this.m_DataPanel.add(this.m_PunishTextField[i]); + } + this.m_TargetTextField[obj].setEditable(false); + this.m_PunishTextField[obj].setEditable(false); + } + + + /** This method will set the value of object that is to be edited. + * @param o an object that must be an array. + */ + public void setValue(Object o) { + if (o instanceof PropertyEpsilonThreshold) { + this.m_EpsilonThreshhold = (PropertyEpsilonThreshold) o; + this.updateEditor(); + } + } + + /** Returns the current object. + * @return the current object + */ + public Object getValue() { + return this.m_EpsilonThreshhold; + } + + public String getJavaInitializationString() { + return "TEST"; + } + + /** + * + */ + public String getAsText() { + return null; + } + + /** + * + */ + public void setAsText(String text) throws IllegalArgumentException { + throw new IllegalArgumentException(text); + } + + /** + * + */ + public String[] getTags() { + return null; + } + + /** + * + */ + public void addPropertyChangeListener(PropertyChangeListener l) { + m_Support.addPropertyChangeListener(l); + } + + /** + * + */ + public void removePropertyChangeListener(PropertyChangeListener l) { + m_Support.removePropertyChangeListener(l); + } + + /** This is used to hook an action listener to the ok button + * @param a The action listener. + */ + public void addOkListener(ActionListener a) { + m_OKButton.addActionListener(a); + } + + /** This is used to remove an action listener from the ok button + * @param a The action listener + */ + public void removeOkListener(ActionListener a) { + m_OKButton.removeActionListener(a); + } + + /** Returns true since the Object can be shown + * @return true + */ + public boolean isPaintable() { + return true; + } + + /** Paints a representation of the current classifier. + * + * @param gfx the graphics context to use + * @param box the area we are allowed to paint into + */ + public void paintValue(Graphics gfx, Rectangle box) { + FontMetrics fm = gfx.getFontMetrics(); + int vpad = (box.height - fm.getAscent()) / 2; + String rep = "Edit Epsilon Threshhold"; + gfx.drawString(rep, 2, fm.getHeight() + vpad - 3 ); + } + + /** Returns true because we do support a custom editor. + * @return true + */ + public boolean supportsCustomEditor() { + return true; + } + + /** Returns the array editing component. + * @return a value of type 'java.awt.Component' + */ + public Component getCustomEditor() { + if (this.m_CustomEditor == null) this.initCustomEditor(); + return m_CustomEditor; + } +} \ No newline at end of file diff --git a/src/javaeva/gui/GenericFilePathEditor.java b/src/javaeva/gui/GenericFilePathEditor.java new file mode 100644 index 00000000..5539a981 --- /dev/null +++ b/src/javaeva/gui/GenericFilePathEditor.java @@ -0,0 +1,154 @@ +package javaeva.gui; + +import javax.swing.*; +import java.beans.PropertyEditor; +import java.beans.PropertyChangeSupport; +import java.beans.PropertyChangeListener; +import java.awt.*; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; +import java.awt.event.ComponentListener; +import java.io.File; +import java.beans.PropertyChangeEvent; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 28.08.2003 + * Time: 11:11:59 + * To change this template use Options | File Templates. + */ +public class GenericFilePathEditor extends JPanel implements PropertyEditor { + + /** Handles property change notification */ + private PropertyChangeSupport m_Support = new PropertyChangeSupport(this); + /** The label for when we can't edit that type */ + private JLabel m_Label = new JLabel("Can't edit", SwingConstants.CENTER); + /** The FilePath that is to be edited*/ + private PropertyFilePath m_FilePath; + + /** The gaphix stuff */ + private JFileChooser m_FileChooser; + private JPanel m_Panel; + + public GenericFilePathEditor() { + // compiled code + } + + /** This method will set the value of object that is to be edited. + * @param o an object that must be an array. + */ + public void setValue(Object o) { + if (o instanceof PropertyFilePath) { + this.m_FilePath = (PropertyFilePath) o; + } + } + + /** Returns the current object. + * @return the current object + */ + public Object getValue() { + return this.m_FilePath; + } + + public String getJavaInitializationString() { + return "TEST"; + } + + /** + * + */ + public String getAsText() { + return null; + } + + /** + * + */ + public void setAsText(String text) throws IllegalArgumentException { + throw new IllegalArgumentException(text); + } + + /** + * + */ + public String[] getTags() { + return null; + } + + /** + * + */ + public void addPropertyChangeListener(PropertyChangeListener l) { + m_Support.addPropertyChangeListener(l); + } + + /** + * + */ + public void removePropertyChangeListener(PropertyChangeListener l) { + m_Support.removePropertyChangeListener(l); + } + + /** Returns true since the Object can be shown + * @return true + */ + public boolean isPaintable() { + return true; + } + + /** Paints a representation of the current classifier. + * + * @param gfx the graphics context to use + * @param box the area we are allowed to paint into + */ + public void paintValue(Graphics gfx, Rectangle box) { + FontMetrics fm = gfx.getFontMetrics(); + int vpad = (box.height - fm.getAscent()) / 2; + String rep = this.m_FilePath.FileName; + gfx.drawString(rep, 2, fm.getHeight() + vpad - 3 ); + } + + /** Returns true because we do support a custom editor. + * @return true + */ + public boolean supportsCustomEditor() { + return true; + } + + /** Returns the array editing component. + * @return a value of type 'java.awt.Component' + */ + public Component getCustomEditor() { + this.m_Panel = new JPanel(); + this.m_FileChooser = new JFileChooser(); + File file = new File(this.m_FilePath.getCompleteFilePath()); + this.m_FileChooser.setSelectedFile(file); + this.m_FileChooser.setMultiSelectionEnabled(false); + this.m_Panel.add(this.m_FileChooser); + this.m_FileChooser.addActionListener(this.fileChooserAction); + return this.m_Panel; + } + + /** This action listener, called by the "train" button, causes + * the SOM to recalculate the mapping. + */ + ActionListener fileChooserAction = new ActionListener() { + public void actionPerformed(ActionEvent event) { + if (event.getActionCommand() == "ApproveSelection") { + m_FilePath.setCompleteFilePath(m_FileChooser.getSelectedFile().getAbsolutePath()); + m_Support.firePropertyChange("", m_FilePath, null); + Window w = (Window) m_FileChooser.getTopLevelAncestor(); + w.dispose(); + m_Panel = null; + } + if (event.getActionCommand() == "CancelSelection") { + m_FilePath.setCompleteFilePath(m_FileChooser.getSelectedFile().getAbsolutePath()); + m_Support.firePropertyChange("", m_FilePath, null); + Window w = (Window) m_FileChooser.getTopLevelAncestor(); + if (w != null) w.dispose(); + m_Panel = null; + } + } + }; +} diff --git a/src/javaeva/gui/GenericIntArrayEditor.java b/src/javaeva/gui/GenericIntArrayEditor.java new file mode 100644 index 00000000..ba35b9a6 --- /dev/null +++ b/src/javaeva/gui/GenericIntArrayEditor.java @@ -0,0 +1,225 @@ +package javaeva.gui; + +import javax.swing.*; +import java.beans.PropertyEditor; +import java.beans.PropertyChangeSupport; +import java.beans.PropertyChangeListener; +import java.awt.*; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; +import java.awt.event.KeyListener; +import java.awt.event.KeyEvent; + +/** + * Created by IntelliJ IDEA. + * User: streiche + * Date: 12.09.2005 + * Time: 10:20:30 + * To change this template use File | Settings | File Templates. + */ +public class GenericIntArrayEditor extends JPanel implements PropertyEditor { + + /** Handles property change notification */ + private PropertyChangeSupport m_Support = new PropertyChangeSupport(this); + /** The label for when we can't edit that type */ + private JLabel m_Label = new JLabel("Can't edit", SwingConstants.CENTER); + /** The FilePath that is to be edited*/ + private PropertyIntArray m_IntArray; + + /** The gaphix stuff */ + private JPanel m_CustomEditor, m_DataPanel, m_ButtonPanel; + private JTextField[] m_InputTextField; + private JButton m_OKButton; + + public GenericIntArrayEditor() { + // compiled code + } + + /** This method will init the CustomEditor Panel + */ + private void initCustomEditor() { + this.m_CustomEditor = new JPanel(); + this.m_CustomEditor.setLayout(new BorderLayout()); + + this.m_CustomEditor.add(new JLabel("Current Int Array:"), BorderLayout.NORTH); + + // init data panel + this.m_DataPanel = new JPanel(); + this.updateDataPanel(); + this.m_CustomEditor.add(this.m_DataPanel, BorderLayout.CENTER); + + // init button panel + this.m_ButtonPanel = new JPanel(); + this.m_OKButton = new JButton("OK"); + this.m_OKButton.setEnabled(true); + this.m_OKButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + //m_Backup = copyObject(m_Object); + if ((m_CustomEditor.getTopLevelAncestor() != null) && (m_CustomEditor.getTopLevelAncestor() instanceof Window)) { + Window w = (Window) m_CustomEditor.getTopLevelAncestor(); + w.dispose(); + } + } + }); + this.m_ButtonPanel.add(this.m_OKButton); + this.m_CustomEditor.add(this.m_ButtonPanel, BorderLayout.SOUTH); + this.updateEditor(); + } + + /** This action listener reads all values + */ + KeyListener readIntArrayAction = new KeyListener() { + public void keyPressed(KeyEvent event) { + } + public void keyTyped(KeyEvent event) { + } + + public void keyReleased(KeyEvent event) { + int[] tmpD = new int[m_InputTextField.length]; + + for (int i = 0; i < tmpD.length; i++) { + try { + int d = 0; + d = new Integer(m_InputTextField[i].getText()).intValue(); + tmpD[i] = d; + } catch (Exception e) { + + } + } + m_IntArray.setIntArray(tmpD); + } + }; + + /** The object may have changed update the editor. + */ + private void updateEditor() { + if (this.m_CustomEditor != null) { + this.updateDataPanel(); + this.m_CustomEditor.validate(); + this.m_CustomEditor.repaint(); + } + } + + /** This method updates the data panel + */ + private void updateDataPanel() { + int[] tmpD = this.m_IntArray.getIntArray(); + + this.m_DataPanel.removeAll(); + this.m_DataPanel.setLayout(new GridLayout(tmpD.length, 2)); + this.m_InputTextField = new JTextField[tmpD.length]; + for (int i = 0; i < tmpD.length; i++) { + JLabel label = new JLabel("Value X"+i+": "); + this.m_DataPanel.add(label); + this.m_InputTextField[i] = new JTextField(); + this.m_InputTextField[i].setText(""+tmpD[i]); + this.m_InputTextField[i].addKeyListener(this.readIntArrayAction); + this.m_DataPanel.add(this.m_InputTextField[i]); + } + } + + + /** This method will set the value of object that is to be edited. + * @param o an object that must be an array. + */ + public void setValue(Object o) { + if (o instanceof PropertyIntArray) { + this.m_IntArray = (PropertyIntArray) o; + this.updateEditor(); + } + } + + /** Returns the current object. + * @return the current object + */ + public Object getValue() { + return this.m_IntArray; + } + + public String getJavaInitializationString() { + return "TEST"; + } + + /** + * + */ + public String getAsText() { + return null; + } + + /** + * + */ + public void setAsText(String text) throws IllegalArgumentException { + throw new IllegalArgumentException(text); + } + + /** + * + */ + public String[] getTags() { + return null; + } + + /** + * + */ + public void addPropertyChangeListener(PropertyChangeListener l) { + m_Support.addPropertyChangeListener(l); + } + + /** + * + */ + public void removePropertyChangeListener(PropertyChangeListener l) { + m_Support.removePropertyChangeListener(l); + } + + /** This is used to hook an action listener to the ok button + * @param a The action listener. + */ + public void addOkListener(ActionListener a) { + m_OKButton.addActionListener(a); + } + + /** This is used to remove an action listener from the ok button + * @param a The action listener + */ + public void removeOkListener(ActionListener a) { + m_OKButton.removeActionListener(a); + } + + /** Returns true since the Object can be shown + * @return true + */ + public boolean isPaintable() { + return true; + } + + /** Paints a representation of the current classifier. + * + * @param gfx the graphics context to use + * @param box the area we are allowed to paint into + */ + public void paintValue(Graphics gfx, Rectangle box) { + FontMetrics fm = gfx.getFontMetrics(); + int vpad = (box.height - fm.getAscent()) / 2; + String rep = "Edit int[]"; + gfx.drawString(rep, 2, fm.getHeight() + vpad - 3 ); + } + + /** Returns true because we do support a custom editor. + * @return true + */ + public boolean supportsCustomEditor() { + return true; + } + + /** Returns the array editing component. + * @return a value of type 'java.awt.Component' + */ + public Component getCustomEditor() { + if (this.m_CustomEditor == null) this.initCustomEditor(); + return m_CustomEditor; + } +} \ No newline at end of file diff --git a/src/javaeva/gui/GenericObjectEditor.java b/src/javaeva/gui/GenericObjectEditor.java new file mode 100644 index 00000000..7e35016f --- /dev/null +++ b/src/javaeva/gui/GenericObjectEditor.java @@ -0,0 +1,871 @@ +package javaeva.gui; +/* + * Title: JavaEvA + * Description: + * Copyright: Copyright (c) 2003 + * Company: University of Tuebingen, Computer Architecture + * @author Holger Ulmer, Felix Streichert, Hannes Planatscher + * @version: $Revision: 266 $ + * $Date: 2007-11-20 14:33:48 +0100 (Tue, 20 Nov 2007) $ + * $Author: mkron $ + */ + + +import java.beans.BeanInfo; +import java.beans.IntrospectionException; +import java.beans.Introspector; +import java.beans.MethodDescriptor; +import java.beans.PropertyDescriptor; + +import java.awt.*; +import java.awt.event.*; +import java.beans.PropertyEditor; +import java.beans.PropertyChangeSupport; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyEditorManager; +import java.io.File; +import java.io.ObjectInputStream; +import java.io.BufferedInputStream; +import java.io.ObjectOutputStream; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.BufferedOutputStream; +import java.lang.reflect.Modifier; +import java.lang.reflect.Proxy; +import java.util.*; +import javax.swing.*; +import javax.swing.border.LineBorder; + +import wsi.ra.jproxy.RMIProxyLocal; + +//import wsi.ra.tool.DummyCategory; + +import javaeva.client.EvAClient; +import javaeva.tools.CompileAndLoad; +import javaeva.tools.EVAHELP; +import javaeva.tools.ReflectPackage; +import javaeva.tools.Tag; +import javaeva.tools.SelectedTag; +import javaeva.tools.Serializer; +import javaeva.server.stat.StatisticsParameter; +import javaeva.server.stat.StatisticsParameterImpl; + + +/*==========================================================================* + * CLASS DECLARATION + *==========================================================================*/ +public class GenericObjectEditor implements PropertyEditor { + static final public boolean TRACE = false; + + private Object m_Object; + private Object m_Backup; + private PropertyChangeSupport m_Support = new PropertyChangeSupport(this); + private Class m_ClassType; + private GOEPanel m_EditorComponent; + private boolean m_Enabled = true; + /** + * + */ + public class GOEPanel extends JPanel implements ItemListener { + /** The chooser component */ + private JComboBox m_ObjectChooser; + /** The component that performs classifier customization */ + private PropertySheetPanel m_ChildPropertySheet; + /** The model containing the list of names to select from */ + private DefaultComboBoxModel m_ObjectNames; + /** Open object from disk */ + private JButton m_OpenBut; + /** Save object to disk */ + private JButton m_SaveBut; + /** ok button */ + public JButton m_okBut; + /** cancel button */ + private JButton m_cancelBut; + /** edit source button */ +// private JButton m_editSourceBut; + /** The filechooser for opening and saving object files */ + private JFileChooser m_FileChooser; + /** Creates the GUI editor component */ + private Vector m_ClassesLongName; +// private String[] m_ClassesShortName; +// private SourceCodeEditor m_SourceCodeEditor; +// private PropertyDialog m_SourceCodeEditorFrame; + + /** + * + */ + public GOEPanel() { + //System.out.println("GOEPanel.Constructor !!"); + if (!(Proxy.isProxyClass(m_Object.getClass()))) m_Backup = copyObject(m_Object); + m_ObjectNames = new DefaultComboBoxModel(new String [0]); + m_ObjectChooser = new JComboBox(m_ObjectNames); + m_ObjectChooser.setEditable(false); + m_ChildPropertySheet = new PropertySheetPanel(); + m_ChildPropertySheet.addPropertyChangeListener( + new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + m_Support.firePropertyChange("", m_Backup, m_Object); + } + }); + m_OpenBut = new JButton("Open..."); + m_OpenBut.setToolTipText("Load a configured object"); + m_OpenBut.setEnabled(true); + m_OpenBut.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + Object object = openObject(); + if (object != null) { + // setValue takes care of: Making sure obj is of right type, + // and firing property change. + setValue(object); + // Need a second setValue to get property values filled in OK. + // Not sure why. + setValue(object); // <- Hannes ?!?!? + } + } + }); + + m_SaveBut = new JButton("Save..."); + m_SaveBut.setToolTipText("Save the current configured object"); + m_SaveBut.setEnabled(true); + m_SaveBut.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + saveObject(m_Object); + } + }); +// +// m_editSourceBut = new JButton("Edit Source"); +// m_editSourceBut.setToolTipText("Edit the Source"); +// m_editSourceBut.setEnabled(false); +// m_editSourceBut.addActionListener(new ActionListener() { +// public void actionPerformed(ActionEvent e) { +// m_editSourceBut.setEnabled(false); +// m_SourceCodeEditor = new SourceCodeEditor(); +// String className = m_Object.getClass().getName(); +// m_SourceCodeEditor.editSource(EvAClient.DYNAMICCLASSES_PROPERTIES.getProperty(className)); +// m_SourceCodeEditorFrame = new PropertyDialog(m_SourceCodeEditor, "test", 50, 50); +// m_SourceCodeEditorFrame.pack(); +// m_SourceCodeEditorFrame.addWindowListener(new WindowAdapter() { +// public void windowClosing (WindowEvent e) { +// m_SourceCodeEditor = null; +// m_editSourceBut.setEnabled(true); +// } +// }); +// m_SourceCodeEditor.addPropertyChangeListener(new +// PropertyChangeListener() { +// public void propertyChange(PropertyChangeEvent evt) { +// sourceChanged(); +// } +// } +// ); +// } +// }); + + m_okBut = new JButton("OK"); + m_okBut.setEnabled(true); + m_okBut.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + m_Backup = copyObject(m_Object); + if ((getTopLevelAncestor() != null) && (getTopLevelAncestor() instanceof Window)) { + Window w = (Window) getTopLevelAncestor(); + w.dispose(); + } + } + }); + + m_cancelBut = new JButton("Cancel"); + m_cancelBut.setEnabled(false); + m_cancelBut.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (m_Backup != null) { + m_Object = copyObject(m_Backup); + setObject(m_Object); + updateClassType(); + updateChooser(); + updateChildPropertySheet(); + } + if ((getTopLevelAncestor() != null) + && (getTopLevelAncestor() instanceof Window)) { + Window w = (Window) getTopLevelAncestor(); + w.dispose(); + } + } + }); + + setLayout(new BorderLayout()); + add(m_ObjectChooser, BorderLayout.NORTH); // important + add(m_ChildPropertySheet, BorderLayout.CENTER); + // Since we resize to the size of the property sheet, a scrollpane isn't + // typically needed + // add(new JScrollPane(m_ChildPropertySheet), BorderLayout.CENTER); + + JPanel okcButs = new JPanel(); + okcButs.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + okcButs.setLayout(new GridLayout(1, 4, 5, 5)); + okcButs.add(m_OpenBut); + okcButs.add(m_SaveBut); + okcButs.add(m_okBut); +// okcButs.add(m_editSourceBut); + //okcButs.add(m_cancelBut); + add(okcButs, BorderLayout.SOUTH); + + if (m_ClassType != null) { + updateClassType(); + updateChooser(); + updateChildPropertySheet(); + } + m_ObjectChooser.addItemListener(this); + } + + /** + * Opens an object from a file selected by the user. + * + * @return the loaded object, or null if the operation was cancelled + */ + protected Object openObject() { + if (m_FileChooser == null) { + createFileChooser(); + } + int returnVal = m_FileChooser.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + File selected = m_FileChooser.getSelectedFile(); + try { + ObjectInputStream oi = new ObjectInputStream(new BufferedInputStream(new FileInputStream(selected))); + Object obj = oi.readObject(); + oi.close(); + if (!m_ClassType.isAssignableFrom(obj.getClass())) { + throw new Exception("Object not of type: " + m_ClassType.getName()); + } + return obj; + } catch (Exception ex) { + JOptionPane.showMessageDialog(this, + "Couldn't read object: " + + selected.getName() + + "\n" + ex.getMessage(), + "Open object file", + JOptionPane.ERROR_MESSAGE); + } + } + return null; + } + + /** Saves the current object to a file selected by the user. + * @param object The object to save. + */ + protected void saveObject(Object object) { + + if (m_FileChooser == null) { + createFileChooser(); + } + int returnVal = m_FileChooser.showSaveDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + File sFile = m_FileChooser.getSelectedFile(); + try { + ObjectOutputStream oo = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(sFile))); + oo.writeObject(object); + oo.close(); + } catch (Exception ex) { + JOptionPane.showMessageDialog(this, + "Couldn't write to file: " + + sFile.getName() + + "\n" + ex.getMessage(), + "Save object", + JOptionPane.ERROR_MESSAGE); + } + } + } + protected void createFileChooser() { + m_FileChooser = new JFileChooser(new File("/resources")); + m_FileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + } + + /** + * Makes a copy of an object using serialization + * @param source the object to copy + * @return a copy of the source object + */ + protected Object copyObject(Object source) { + Object result = null; + try { + SerializedObject so = new SerializedObject(source); + result = so.getObject(); + } catch (Exception ex) { + System.err.println("GenericObjectEditor: Problem making backup object"); + System.err.println(source.getClass().getName()); + ex.printStackTrace(); + } + return result; + } + + /** + * This is used to hook an action listener to the ok button + * @param a The action listener. + */ + public void addOkListener(ActionListener a) { + m_okBut.addActionListener(a); + } + + /** + * This is used to hook an action listener to the cancel button + * @param a The action listener. + */ + public void addCancelListener(ActionListener a) { + m_cancelBut.addActionListener(a); + } + + /** + * This is used to remove an action listener from the ok button + * @param a The action listener + */ + public void removeOkListener(ActionListener a) { + m_okBut.removeActionListener(a); + } + + /** + * This is used to remove an action listener from the cancel button + * @param a The action listener + */ + public void removeCancelListener(ActionListener a) { + m_cancelBut.removeActionListener(a); + } + /** + * + */ + protected void updateClassType() { + if (TRACE) System.out.println("# updating class "+m_ClassType.getName()); + + if (Proxy.isProxyClass(m_ClassType)) { + if (TRACE) System.out.println("PROXY! original was " + ((RMIProxyLocal)Proxy.getInvocationHandler(((Proxy)m_Object))).getOriginalClass().getName()); + m_ClassesLongName = new Vector(getClassesFromProperties(((RMIProxyLocal)Proxy.getInvocationHandler(((Proxy)m_Object))).getOriginalClass().getName())); + } else { + m_ClassesLongName = new Vector(getClassesFromProperties(m_ClassType.getName())); + } + m_ObjectChooser.setModel(new DefaultComboBoxModel(m_ClassesLongName)); + if (m_ClassesLongName.size() > 1) // testhu + add(m_ObjectChooser, BorderLayout.NORTH); + else + remove(m_ObjectChooser); + if (TRACE) System.out.println("# done updating class "+m_ClassType.getName()); + } + + protected void updateChooser() { + String objectName = /*EVAHELP.cutClassName*/ (m_Object.getClass().getName()); + boolean found = false; + for (int i = 0; i < m_ObjectNames.getSize(); i++) { + if (TRACE) System.out.println("in updateChooser: looking at "+(String)m_ObjectNames.getElementAt(i)); + if (objectName.equals((String)m_ObjectNames.getElementAt(i))) { + found = true; + break; + } + } + if (!found) + m_ObjectNames.addElement(objectName); + m_ObjectChooser.getModel().setSelectedItem(objectName); + } + + + /** Updates the child property sheet, and creates if needed */ + public void updateChildPropertySheet() { + //System.err.println("GOE::updateChildPropertySheet()"); + // Set the object as the target of the propertysheet + m_ChildPropertySheet.setTarget(m_Object); + // Adjust size of containing window if possible + if ((getTopLevelAncestor() != null) + && (getTopLevelAncestor() instanceof Window)) { + ((Window) getTopLevelAncestor()).pack(); + } + } + +// +// public void sourceChanged() { +// +// //System.out.println("SOURCESTATECHANGED!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! "); +// String className = (String) m_ObjectChooser.getSelectedItem(); +// +//// @todohannes: hack! ausbessern +// className = (String) m_ObjectChooser.getSelectedItem(); +// try { +// if (m_userdefclasses == true) { +// className = m_Object.getClass().getName(); +// Object[] para = new Object[] {}; +// Object n = (Object) CompileAndLoad.getInstanceFull( +// EvAClient.DYNAMICCLASSES_PROPERTIES.getProperty(className), +// className, +// para); +// setObject(n); +// } +// else { +// System.out.println("m_userdefclasses == false!!!!!"); +// } +// } +// catch (Exception ex) { +// } +// +// } + + + /** + * When the chooser selection is changed, ensures that the Object + * is changed appropriately. + * + * @param e a value of type 'ItemEvent' + */ + + public void itemStateChanged(ItemEvent e) { + String className = (String)m_ObjectChooser.getSelectedItem(); +// m_editSourceBut.setEnabled(false); +// @todohannes: hack! ausbessern +// try { +// if (EvAClient.DYNAMICCLASSES_PROPERTIES.containsKey(className) && m_userdefclasses) { +// m_editSourceBut.setEnabled(true); +// } +// } catch (Exception e1) { +// System.out.println("Fehler !!! " + e1); +// } + +// @todohannes: hack! ausbessern +// +// if (this.m_SourceCodeEditorFrame != null) { +// m_SourceCodeEditorFrame.setVisible(false); +// m_SourceCodeEditorFrame = null; +// m_SourceCodeEditor = null; +// } + + if (TRACE) System.out.println("Event-Quelle: " + e.getSource().toString()); + if ((e.getSource() == m_ObjectChooser) && (e.getStateChange() == ItemEvent.SELECTED)){ + className = (String)m_ObjectChooser.getSelectedItem(); + try { +// if (EvAClient.DYNAMICCLASSES_PROPERTIES.containsKey(className) && m_userdefclasses) { +// Object[] para = new Object[] {}; +// String source = EvAClient.DYNAMICCLASSES_PROPERTIES.getProperty(className); +// Object dummy = CompileAndLoad.getInstanceFull(source,className,para); +// setObject(dummy); +// } else { + if (TRACE) System.out.println(className); + Object n = (Object)Class.forName(className, true, ClassLoader.getSystemClassLoader()).newInstance(); + n = (Object)Class.forName(className).newInstance(); + setObject(n); +// } + } catch (Exception ex) { + System.out.println("Exeption in itemStateChanged "+ex.getMessage()); + ex.printStackTrace(); + m_ObjectChooser.hidePopup(); + m_ObjectChooser.setSelectedIndex(0); + JOptionPane.showMessageDialog(this, + "Could not create an example of\n" + + className + "\n" + + "from the current classpath. Is it abstract? Is the default constructor missing?", + "GenericObjectEditor", + JOptionPane.ERROR_MESSAGE); + EVAHELP.getSystemPropertyString(); + } + } + } + } // end of inner class + + /** + * Read the classes available for user selection from the properties or the classpath respectively + */ + public static ArrayList getClassesFromProperties(String className) { + if (TRACE) System.out.println("getClassesFromProperties - requesting className: "+className); + + // Try to read the predefined classes from the props file. + String typeOptions = EvAClient.getProperty(className); + if (typeOptions == null) { + // If none are defined, all assignable classes are searched the hard way, using the ReflectPackage + return getClassesFromClassPath(className); + } else { + StringTokenizer st = new StringTokenizer(typeOptions, ", "); + ArrayList classes = new ArrayList(); + while (st.hasMoreTokens()) { + String current = st.nextToken().trim(); + //System.out.println("current ="+current); + try { + Class.forName(current); // test for instantiability + classes.add(current); + } catch (Exception ex) { + System.err.println("Couldn't load class with name: " + current); + System.err.println("ex:"+ex.getMessage()); + ex.printStackTrace(); + } + } + return classes; + } + } + + public static ArrayList getClassesFromClassPath(String className) { + ArrayList classes = new ArrayList(); + int dotIndex = className.lastIndexOf('.'); + if (dotIndex <= 0) { + System.err.println("warning: " + className + " is not a package!"); + } else { + String pckg = className.substring(0, className.lastIndexOf('.')); + Class[] clsArr; + try { + clsArr = ReflectPackage.getAssignableClassesInPackage(pckg, Class.forName(className), true, true); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + clsArr = null; + } + if (clsArr == null) { + System.out.println("Warning: No configuration property found in: " + +EvAClient.EVA_PROPERTY_FILE + " "+"for "+className); + classes.add(className); + } else { + for (Class class1 : clsArr) { + int m = class1.getModifiers(); + if (!Modifier.isAbstract(m) && !class1.isInterface()) { // dont take abstract classes or interfaces + try { + Class[] params = new Class[0]; + class1.getConstructor(params); + classes.add(class1.getName()); + } catch (NoSuchMethodException e) { + System.err.println("GOE warning: Class " + class1.getName() + " has no default constructor, skipping..."); + } + } + } + } + } + return classes; + } + + /** + * Hide or show the editable property of a class, this makes sense for classes + * which are represented visually using the GenericObjectEditor. + * Returns false, if an error occurs, else true. + * An instance may call this statically on itself by means of this.getClass(). + * Actually this only sets the hidden property of the java bean which is checked in the + * wasModified method of PropertySheetPanel. + * + * @param cls class the property belongs to + * @param property string name of the property + * @param hide desired value to set, true for hidden, false for visible + * @return false, if an error occurs, else true + */ + public static boolean setExpertProperty(Class cls, String property, boolean expertValue) { + try { + BeanInfo bi = Introspector.getBeanInfo(cls); + PropertyDescriptor[] props = bi.getPropertyDescriptors(); + for (int i=0; i