Doing Alfresco stuff in NetBeans

We recently completed a project to detail the steps required to use NetBeans 6.x to build Alfresco and to run the Alfresco SDK. The results of this work can be found at the following links:

Creating an Alfresco Build Environment in NetBeans

Running the Alfresco SDK in NetBeans

Give them a try and feel free to add any feedback to this blog entry.

Thanks to Prem Kumar for doing all of the hard work on these docs.

Comments:

Hello,

I am trying to import Eclipse projects in netbeans but I keep on getting this error:

"C:\\Alfresco\\sdk\\samples" doesn't contain a regular Eclipse workspace.

This was done by following this wiki article:
http://wiki.alfresco.com/wiki/Alfresco_SDK_on_NetBeans#NetBeans_Setup

I am using netbeans 6.1 on vista SP1

Thank you,
Luc

Posted by Luc on May 28, 2008 at 07:30 PM BST #

Hi Luc,
Have you created the pseudo eclipse workspace to make use of the “eclipse project importer plugin” in Netbeans. Amanda is working on making the metadata.zip available for donwload on the wiki. Meanwhile, you can create the directory structure yourself. Detailed instructions are mentioned clearly in the blog.

Essentially, we mimic the eclipse workspace by creating the directory structure so that the importer plugin can go ahead and do its job.

Cheers!
Prem

Posted by Prem Kumar L on May 29, 2008 at 02:02 AM BST #

The zip file that Prem referenced is accessible from here: http://blogs.sun.com/mandy/entry/pseudo_eclipse_workspace_files_for

Posted by Mandy Waite on May 29, 2008 at 03:24 AM BST #

Hello again,

Ok maybe it is my reading gain but I finally created my Libraries in Netbeans then I tried to run the "SDK FirstFoundationClient" project and I still get errors. Probably it is my setup.

What I did Is I d/l the Alfresco with WCM repository. It is located in c:\\Alfresco I run the alf_start.bat batch file to start it.

Then in Nebeans I run the "SDK FirstFoundationClient" project and I get this error:

Execution result:
os: Windows Vista
command: imconvert "C:\\Users\\LUCBAR~1\\AppData\\Local\\Temp\\Alfresco\\ImageMagickContentTransformer_init_source_7345.gif" "C:\\Users\\LUCBAR~1\\AppData\\Local\\Temp\\Alfresco\\ImageMagickContentTransformer_init_target_7346.png"
succeeded: false
exit code: 1
out:
err: Cannot run program "imconvert": CreateProcess error=2, The system cannot find the file specified
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverConnector' defined in class path resource [alfresco/core-services-context.xml]: Invocation of init method failed; nested exception is java.io.IOException: Cannot bind to URL [rmi://localhost:50500/alfresco/jmxrmi]: javax.naming.NameAlreadyBoundException: alfresco/jmxrmi [Root exception is java.rmi.AlreadyBoundException: alfresco/jmxrmi]
Caused by: java.io.IOException: Cannot bind to URL [rmi://localhost:50500/alfresco/jmxrmi]: javax.naming.NameAlreadyBoundException: alfresco/jmxrmi [Root exception is java.rmi.AlreadyBoundException: alfresco/jmxrmi]
at javax.management.remote.rmi.RMIConnectorServer.newIOException(RMIConnectorServer.java:804)
at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:417)
at org.springframework.jmx.support.ConnectorServerFactoryBean.afterPropertiesSet(ConnectorServerFactoryBean.java:168)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1118)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1085)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:429)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:250)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:247)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:161)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:270)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:346)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:92)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:77)
at org.alfresco.util.ApplicationContextHelper.getApplicationContext(ApplicationContextHelper.java:55)
at org.alfresco.sample.FirstFoundationClient.main(FirstFoundationClient.java:69)
Caused by: javax.naming.NameAlreadyBoundException: alfresco/jmxrmi [Root exception is java.rmi.AlreadyBoundException: alfresco/jmxrmi]
at com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:122)
at com.sun.jndi.toolkit.url.GenericURLContext.bind(GenericURLContext.java:208)
at javax.naming.InitialContext.bind(InitialContext.java:400)
at javax.management.remote.rmi.RMIConnectorServer.bind(RMIConnectorServer.java:625)
at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:412)
... 14 more
Caused by: java.rmi.AlreadyBoundException: alfresco/jmxrmi
at sun.rmi.registry.RegistryImpl.bind(RegistryImpl.java:123)
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:120)
... 18 more
Java Result: 1

What am I doing wrong?

Thanks again,
Luc

Posted by Luc on May 30, 2008 at 07:22 PM BST #

Hi Luc,
The problem is that your port 50500 is being used by someother process. You might want to use a program like currports(http://www.nirsoft.net/utils/cports.html) to identify and kill the process using 50500. Hope it helps.
Cheers!
Prem

Posted by Prem Kumar L on June 01, 2008 at 11:53 AM BST #

Well,

I see the port is being listen but if I shut down Alfresco then nothing listens to port 50500 and in Netbeans when I run the FirstFoundationClient I get:

Cannot run program "imconvert": CreateProcess error=2, The system cannot find the file specified
20:38:20,802 WARN [remoting.rmi.RmiRegistryFactoryBean] Could not detect RMI registry - creating new one
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dictionaryRepositoryBootstrap' defined in class path resource [alfresco/core-services-context.xml]: Invocation of init method failed; nested exception is org.alfresco.error.AlfrescoRuntimeException: Failure during rollback: org.alfresco.repo.dictionary.DictionaryRepositoryBootstrap$1@121dcac
Caused by: org.alfresco.error.AlfrescoRuntimeException: Failure during rollback: org.alfresco.repo.dictionary.DictionaryRepositoryBootstrap$1@121dcac
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:281)
...

Basically It does not work I Alfresco is either on or off.

Thanks,
Luc

Posted by Luc on June 02, 2008 at 06:42 PM BST #

Hi Luc,
There are 2 scenarios here.
1) Alfresco turned off : This will definitely not work as the foundation client can't connect to an Alfresco runtime. Hence it fails. I guess this is the scenario you tried out.

2) Alfresco turned on: In this case, if port 50500 is not in use, the foundation client runs just fine. If 50500 is being used by alfresco, kill the thread(not the entire alfresco process) that holds this port. This can be easily done through "currports" incase you are using windows. This approach has worked for me in the past. Please try it out and let me know.

Posted by Prem Kumar L on June 02, 2008 at 10:32 PM BST #

Hi,

I did what you told me to do but with no success... Let me describe my config/setup.

- I d/l the alfresco community WCM 2.1
- I put it in c:\\Alfresco
- I did not change the database system
- c:\\Alfresco\\bin is in the path
- my netbeans 6.1 jdk points to version 5
- my eclipse too BTW (I get the same error in Eclipse too)
- the Alfresco SDK is located in c:\\Alfresco\\sdk

I am on Vista SP1 32bit

Thanks for your time again :)
Luc

Posted by Luc on June 03, 2008 at 07:28 PM BST #

Hi Luc,
I guess I have figured out the cause. You seem to be using Alfresco WCM. Hence you are not able to make FirstFoundationClient work in either eclipse or netbeans. The solution is to download and install alfresco community edition. When someone refers to Alfresco, they most often refer to this and not the WCM.

Following are the links:
http://sourceforge.net/project/showfiles.php?group_id=143373&package_id=157460

OR

http://wiki.alfresco.com/wiki/Download_Alfresco_Community_Network

Please let me know if this works on Netbeans.
Cheers!
Prem

Posted by Prem Kumar L on June 03, 2008 at 10:31 PM BST #

Hi,

But at first I did d/l Alfresco Community. Then I just installed on top the Web Content Management extension.

I will try it with just the Alfresco Community.

But if this work what can a person with Alfresco + WCM do?

I will keep you posted.

Thank again for all your help.
Luc

Posted by Luc on June 05, 2008 at 06:52 PM BST #

Hi all!

I also have the same problem with running examples from Alfresco SDK. I've tried to use Alfresco Enterprise 2.1 and Alfresco Community 2.9. But unfortunetly on both Alfresco-installations I get the same problems on running FirstJCRClient, FirstFundationClient, etc in my eclipse IDE(v. 3.3.0):

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverConnector' defined in class path resource [alfresco/core-services-context.xml]: Invocation of init method failed; nested exception is java.io.IOException: Cannot bind to URL [rmi://localhost:50500/alfresco/jmxrmi]: javax.naming.NameAlreadyBoundException: alfresco/jmxrmi [Root exception is java.rmi.AlreadyBoundException: alfresco/jmxrmi]
Caused by: java.io.IOException: Cannot bind to URL [rmi://localhost:50500/alfresco/jmxrmi]: javax.naming.NameAlreadyBoundException: alfresco/jmxrmi [Root exception is java.rmi.AlreadyBoundException: alfresco/jmxrmi]
at javax.management.remote.rmi.RMIConnectorServer.newIOException(Unknown Source)
at javax.management.remote.rmi.RMIConnectorServer.start(Unknown Source)
at org.springframework.jmx.support.ConnectorServerFactoryBean.afterPropertiesSet(ConnectorServerFactoryBean.java:168)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1118)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1085)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:429)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:250)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:247)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:161)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:270)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:346)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:92)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:77)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:68)
at org.alfresco.sample.FirstJCRClient.main(FirstJCRClient.java:64)
Caused by: javax.naming.NameAlreadyBoundException: alfresco/jmxrmi [Root exception is java.rmi.AlreadyBoundException: alfresco/jmxrmi]
at com.sun.jndi.rmi.registry.RegistryContext.bind(Unknown Source)
at com.sun.jndi.toolkit.url.GenericURLContext.bind(Unknown Source)
at javax.naming.InitialContext.bind(Unknown Source)
at javax.management.remote.rmi.RMIConnectorServer.bind(Unknown Source)
... 15 more
Caused by: java.rmi.AlreadyBoundException: alfresco/jmxrmi
at sun.rmi.registry.RegistryImpl.bind(RegistryImpl.java:123)
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
... 19 more

Port 50500 seemed to be used by alfresco. Unfortunetly I have not found the solution. Do You have any suggestions for this issue?

Thanks in advance)

Posted by Nataly on June 06, 2008 at 03:10 AM BST #

Hi Nataly,
The solution is the same. Either restart your system or Kill the process using an application like "currports". Essentially, an alfresco process from the previous trial continues to run as a rogue process.
Prem

Posted by Prem Kumar L on June 06, 2008 at 04:08 AM BST #

Nataly,
Also, this thread is for Netbeans users only. For further questions on eclipse related issues, kindly post on alfresco forums.
Thanks
Prem

Posted by Prem Kumar L on June 06, 2008 at 04:09 AM BST #

Hi Prem

1 small question; how we can kill thread of a process using CurrPorts v1.50. I tried doing the same in CurrPorts v1.50 but didn't got any option like that!

Thanks n regards
Amit

Posted by Amit on October 01, 2008 at 07:00 AM BST #

I'm pretty sure that currports doesn't allow you to kill a specific thread, only an entire process. I say that without having used currports, but killing threads, even if it were possible would likely leave the process in an undetermined state.

Amanda

Posted by Amanda on October 01, 2008 at 07:59 AM BST #

Thanks Amanda! Very much agreed with you on this.

But that leaves me again with the same old issue while executing FirstFoundationClient.java on alfresco’s(3.0) SDK(2.1)..It throws an exception saying “javax.naming.NameAlreadyBoundException”. Any ideas on how to resolve this?

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverConnector' defined in class path resource [alfresco/core-services-context.xml]: Invocation of init method failed; nested exception is java.io.IOException: Cannot bind to URL [rmi://localhost:50500/alfresco/jmxrmi]: javax.naming.NameAlreadyBoundException: alfresco/jmxrmi [Root exception is java.rmi.AlreadyBoundException: alfresco/jmxrmi]
Caused by: java.io.IOException: Cannot bind to URL [rmi://localhost:50500/alfresco/jmxrmi]: javax.naming.NameAlreadyBoundException: alfresco/jmxrmi [Root exception is java.rmi.AlreadyBoundException: alfresco/jmxrmi]
at javax.management.remote.rmi.RMIConnectorServer.newIOException(Unknown Source)
at javax.management.remote.rmi.RMIConnectorServer.start(Unknown Source)

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
Thanks in advance!
Amit.

Posted by Amit on October 03, 2008 at 08:39 AM BST #

What does currports say, can you post the output?

Posted by Amanda on October 03, 2008 at 08:52 AM BST #

hi
im new to alfresco, and i 've been asked to work on
alfresco (as a content management system )recently using Netbeans .
i have configure my netbeans environment by following the Alfresco Developer Guide of "Alfresco SDK on NetBeans" Page :
- im using jdk 1.5
- NetBeans IDE 6.5 RC2
- alfresco-labs-sdk-3a
- MySql database
..............
-add the alfresco bin folder to the system PATH
-already default java compiler level is JDK 5
-Eclipse Project Importer available by default
-i've created a pseudo eclipse workspace as stated (extracting .metadat file to "alfresco-labs-sdk-3a\\samples" dirctory.
-copy the library files server and remote to ..\\samples
-i've created aflresco embedded and remote library.

finally i've exported FirstFoundationClient as a netbean project
and added the created library and Built the project without problems, BUT
when i run the project the following Error appear :
"(Error loading class [org.alfresco.filesys.repo.ContentDiskDriver] for bean with name 'contentDiskDriver' defined in class path resource [alfresco/network-protocol-context.xml]: problem with class file or dependent class)"
franckly i dont know how to solve the problem,
i reviewed my steps and repeat it but the same result appear

here is the full stack trace:
Exception in thread "main" org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.alfresco.filesys.repo.ContentDiskDriver] for bean with name 'contentDiskDriver' defined in class path resource [alfresco/network-protocol-context.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: org/alfresco/jlan/server/filesys/DiskInterface
Caused by: java.lang.NoClassDefFoundError: org/alfresco/jlan/server/filesys/DiskInterface
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:183)
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:317)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1044)
at org.springframework.beans.factory.support.AbstractBeanFactory.isBeanClassMatch(AbstractBeanFactory.java:1072)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:165)
at org.springframework.context.support.AbstractApplicationContext.getBeanNamesForType(AbstractApplicationContext.java:691)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:395)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:328)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:92)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:77)
at org.alfresco.util.ApplicationContextHelper.getApplicationContext(ApplicationContextHelper.java:55)
at org.alfresco.sample.FirstFoundationClient.main(FirstFoundationClient.java:69)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)

i might be missing somethin i dont know,plz i will be gratefull for any help

Posted by Marwan on November 11, 2008 at 04:44 AM GMT #

Can you try it with NetBeans 6? It's likely also that the setup for 3.0 is significantly different to the 2.x setup that these docs describe. If I can find time I'll retest with the latest from the Alfresco SVN, but in the meantime please do try NetBeans 6 and let us know if it fixes it.

Mandy

Posted by Mandy on November 11, 2008 at 05:23 AM GMT #

thanx for reply
"i'm trying to implement this example to know how to program through alfresco in future"

i tried netbeans 6.0 with alfresco lab sdk 3a
but the same result appear

the exception occur at the main method in the class :
...
.....
public class FirstFoundationClient
{

public static void main(String[] args)
{
// initialise app content
ApplicationContext ctx = ApplicationContextHelper.getApplicationContext(); //@@@EXCEPTION REFER TO THIS LINE @@@
.....
...

does this have any relation with context.xml file or the applicatron path maybe!

thanx in advance

Posted by Marwan on November 11, 2008 at 06:10 AM GMT #

sir,
i want to play an audio file in netbeans using jmf i got the exception
Exception in thread "main" java.lang.ExceptionInInitializerError
at javaapplication1.Main.main(Main.java:27)
Caused by: java.lang.RuntimeException: Uncompilable source code - package javax.media does not exist
at javaapplication1.MediaPanel.<clinit>(MediaPanel.java:18)
... 1 more
Java Result: 1
help me

Posted by Gaurav Dhariwal on May 08, 2010 at 08:10 AM BST #

Post a Comment:
  • HTML Syntax: NOT allowed
About

Bloggity, blog

Search

Archives
« April 2014
MonTueWedThuFriSatSun
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
       
Today