Go to Post Quote from my mentor: "Keep things as complex as necessary, and not a bit more." - Mike [more]
Home
Go Back   Chief Delphi > Technical > Programming
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
Closed Thread
Thread Tools Rate Thread Display Modes
  #1   Spotlight this post!  
Unread 03-02-2016, 20:01
ktrod ktrod is offline
Registered User
FRC #1073
 
Join Date: Feb 2016
Location: Hollis, NH
Posts: 1
ktrod is an unknown quantity at this point
GRIP Issues with RPi2

Following this tutorial for setting up GRIP on a Raspberry Pi 2, I was able to successfully deploy the required libraries and the grip.jar and project.grip into my RPi2 running Ubuntu Mate 15.10.1. However, when attempting to run GRIP with the provided command for running GRIP,
Code:
env LD_LIBRARY_PATH=/home/team1073/vision/grip:LD_LIBRARY_PATH java -jar /home/team1073/vision/grip/grip.jar /home/team1073/vision/grip/project.grip
, I receive the following uncaught exception

Code:
Loading Dependency Injection Framework
Jan 30, 2016 11:46:08 PM java.util.logging.LogManager$RootLogger log
CONFIG: Configuration done.
Jan 30, 2016 11:46:09 PM java.util.logging.LogManager$RootLogger log
CONFIG: GRIP Version: 1.1.1
platform: /Linux/arm/
Jan 30, 2016 11:46:28 PM edu.wpi.grip.core.GRIPCoreModule onThreadException
SEVERE: Uncaught Exception on thread Thread[main,5,main]
com.google.inject.ProvisionException: Unable to provision, see the following errors:

1) Error injecting constructor, java.lang.UnsatisfiedLinkError: /tmp/libNetworkTablesJNI3879377472892182855.so: /tmp/libNetworkTablesJNI3879377472892182855.so: cannot open shared object file: No such file or directory
  at edu.wpi.grip.core.operations.networktables.NTManager.<init>(Unknown Source)
  at edu.wpi.grip.core.operations.networktables.NTManager.class(Unknown Source)
  while locating edu.wpi.grip.core.operations.networktables.NTManager
    for field at edu.wpi.grip.core.Pipeline.ntManager(Unknown Source)
  at edu.wpi.grip.core.Pipeline.class(Unknown Source)
  while locating edu.wpi.grip.core.Pipeline
    for field at edu.wpi.grip.core.serialization.Project.pipeline(Unknown Source)
  at edu.wpi.grip.core.serialization.Project.class(Unknown Source)
  while locating edu.wpi.grip.core.serialization.Project
    for field at edu.wpi.grip.core.Main.project(Unknown Source)
  while locating edu.wpi.grip.core.Main
Caused by: java.lang.UnsatisfiedLinkError: /tmp/libNetworkTablesJNI3879377472892182855.so: /tmp/libNetworkTablesJNI3879377472892182855.so: cannot open shared object file: No such file or directory
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1938)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1821)
	at java.lang.Runtime.load0(Runtime.java:809)
	at java.lang.System.load(System.java:1086)
	at edu.wpi.first.wpilibj.networktables.NetworkTablesJNI.<clinit>(NetworkTablesJNI.java:55)
	at edu.wpi.grip.core.operations.networktables.NTManager.<init>(NTManager.java:50)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
	at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:86)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
	at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)
	at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
	at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)
	at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
	at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)
	at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
	at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051)
	at edu.wpi.grip.core.Main.main(Main.java:41)

2) Error injecting constructor, java.lang.NoClassDefFoundError: Could not initialize class edu.wpi.first.wpilibj.networktables.NetworkTablesJNI
  at edu.wpi.grip.core.operations.networktables.NTManager.<init>(Unknown Source)
  at edu.wpi.grip.core.operations.networktables.NTManager.class(Unknown Source)
  while locating edu.wpi.grip.core.operations.networktables.NTManager
    for field at edu.wpi.grip.core.Pipeline.ntManager(Unknown Source)
  at edu.wpi.grip.core.Pipeline.class(Unknown Source)
  while locating edu.wpi.grip.core.Pipeline
    for field at edu.wpi.grip.core.serialization.StepConverter.pipeline(Unknown Source)
  while locating edu.wpi.grip.core.serialization.StepConverter
    for parameter 0 at edu.wpi.grip.core.serialization.Project.initialize(Unknown Source)
  at edu.wpi.grip.core.serialization.Project.class(Unknown Source)
  while locating edu.wpi.grip.core.serialization.Project
    for field at edu.wpi.grip.core.Main.project(Unknown Source)
  while locating edu.wpi.grip.core.Main
Caused by: java.lang.NoClassDefFoundError: Could not initialize class edu.wpi.first.wpilibj.networktables.NetworkTablesJNI
	at edu.wpi.grip.core.operations.networktables.NTManager.<init>(NTManager.java:50)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
	at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:86)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
	at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)
	at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
	at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)
	at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
	at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
	at com.google.inject.internal.SingleMethodInjector.inject(SingleMethodInjector.java:84)
	at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
	at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)
	at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
	at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051)
	at edu.wpi.grip.core.Main.main(Main.java:41)

3) Error injecting constructor, java.lang.NoClassDefFoundError: Could not initialize class edu.wpi.first.wpilibj.networktables.NetworkTablesJNI
  at edu.wpi.grip.core.operations.networktables.NTManager.<init>(Unknown Source)
  at edu.wpi.grip.core.operations.networktables.NTManager.class(Unknown Source)
  while locating edu.wpi.grip.core.operations.networktables.NTManager
    for field at edu.wpi.grip.core.Pipeline.ntManager(Unknown Source)
  at edu.wpi.grip.core.Pipeline.class(Unknown Source)
  while locating edu.wpi.grip.core.Pipeline
    for field at edu.wpi.grip.core.serialization.SocketConverter.pipeline(Unknown Source)
  while locating edu.wpi.grip.core.serialization.SocketConverter
    for parameter 2 at edu.wpi.grip.core.serialization.Project.initialize(Unknown Source)
  at edu.wpi.grip.core.serialization.Project.class(Unknown Source)
  while locating edu.wpi.grip.core.serialization.Project
    for field at edu.wpi.grip.core.Main.project(Unknown Source)
  while locating edu.wpi.grip.core.Main
Caused by: java.lang.NoClassDefFoundError: Could not initialize class edu.wpi.first.wpilibj.networktables.NetworkTablesJNI
	at edu.wpi.grip.core.operations.networktables.NTManager.<init>(NTManager.java:50)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
	at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:86)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
	at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)
	at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
	at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)
	at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
	at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
	at com.google.inject.internal.SingleMethodInjector.inject(SingleMethodInjector.java:84)
	at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
	at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)
	at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
	at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
	at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051)
	at edu.wpi.grip.core.Main.main(Main.java:41)

3 errors
	at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1025)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051)
	at edu.wpi.grip.core.Main.main(Main.java:41)
From looking at it, it appears as though GRIP is looking for libraries that aren't there. If someone could provide insight as how to fix this, it would be greatly appreciated.
  #2   Spotlight this post!  
Unread 04-02-2016, 09:15
BrianAtlanta's Avatar
BrianAtlanta BrianAtlanta is offline
Registered User
FRC #1261
Team Role: Mentor
 
Join Date: Apr 2014
Rookie Year: 2012
Location: Atlanta, GA
Posts: 70
BrianAtlanta has a spectacular aura aboutBrianAtlanta has a spectacular aura about
Re: GRIP Issues with RPi2

I can't help you with the GRIP problems on the Pi2. Since they were still working on getting it running on the Pi2 when got our Pi, we decided to install OpenCV, with a python server talking pyNetworkTables. If you decide to go that route, let me know and I'll point to some instructions that worked for me. Heads up, the openCV install takes 4-5 hours.

In parallel, we developed GRIP on DS. Since both options use NetworkTables, the code doesn't care where the vision processing is done. So we'll test both and choose.

Brian
  #3   Spotlight this post!  
Unread 04-02-2016, 11:33
xjschwen xjschwen is offline
Registered User
FRC #3668
 
Join Date: Jan 2016
Location: Michigan
Posts: 20
xjschwen is an unknown quantity at this point
Re: GRIP Issues with RPi2

Great open CV on RP2

http://www.pyimagesearch.com/2015/02...ry-pi-2-and-b/
  #4   Spotlight this post!  
Unread 04-02-2016, 12:43
Ubiquity Ubiquity is offline
Registered User
FRC #5027
 
Join Date: Jan 2015
Location: United States
Posts: 30
Ubiquity is an unknown quantity at this point
Re: GRIP Issues with RPi2

I am not sure how well straight OpenCV works on the RPi2 with the RPi2 camera, But ROS Indigo + Ubuntu 14.04 (Robot Operating System, which has OpenCV included) works well on the Pi. In addition I heard there is a Library for MyRio (Labview) That integrates ROS and Labview. Not sure if that will help you in the next three weeks. This is a mountainous learning curve.
__________________
Former mentor: 255(4y), 254(2y), 668(1y), 751(1y),5027
Current mentor 2854, 5905
Volunteer, Ref, Inspector, Judge, FTA
Nat. Champion 2000(255), Nat. Chairman's 2004(254), SVR Champion 2015(5027)
(Botball N. Champ 2001)
  #5   Spotlight this post!  
Unread 04-02-2016, 13:53
BrianAtlanta's Avatar
BrianAtlanta BrianAtlanta is offline
Registered User
FRC #1261
Team Role: Mentor
 
Join Date: Apr 2014
Rookie Year: 2012
Location: Atlanta, GA
Posts: 70
BrianAtlanta has a spectacular aura aboutBrianAtlanta has a spectacular aura about
Re: GRIP Issues with RPi2

Quote:
Originally Posted by xjschwen View Post
This is the generic link I found, and lead to the one that we used. I didn't use this link due to the distribution we had. If you see the update just before Step 0, we used the Raspian Jessie instructions since that's the distro we had.

Important: some of the steps have a paragraph following the command. Sometimes the extra paragraph might make you skip or change a command. So make sure to read everything first and THEN do the install.

Brian
Closed Thread


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -5. The time now is 06:30.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi