Added more syscalls
authorAndrew Waterman <waterman@ubuntu.(none)>
Sun, 3 Jan 2010 00:42:39 +0000 (16:42 -0800)
committerAndrew Waterman <waterman@ubuntu.(none)>
Sun, 3 Jan 2010 00:42:39 +0000 (16:42 -0800)
Also some ABI changes (TLS, argv, etc)

33 files changed:
user/apps/Makefrag
user/apps/parlib/Makefrag
user/apps/parlib/matrix.c
user/apps/parlib/pthread/Makefrag [deleted file]
user/apps/parlib/pthread/blackscholes.c [deleted file]
user/apps/parlib/pthread/optionData.txt [deleted file]
user/apps/parlib/pthread/pthread_test.c [deleted file]
user/apps/parlib/readline.c
user/apps/parlib/run_binary.c
user/parlib/inc/parlib.h
user/parlib/ivy/Makefrag
user/parlib/src/Makefrag
user/parlib/src/i386/entry.S
user/parlib/src/i386/newlib_backend.c
user/parlib/src/newlib_backend.c
user/parlib/src/parlibmain.c
user/parlib/src/sparc/entry.S
user/parlib/src/sparc/newlib_backend.c
user/parlib/src/sparc/syscall.c
user/parlib/src/syscall.c
usrbin/sparc/blackscholes [deleted file]
usrbin/sparc/bodytrack [deleted file]
usrbin/sparc/bodytrackslow [deleted file]
usrbin/sparc/condtest [deleted file]
usrbin/sparc/cpptest [deleted file]
usrbin/sparc/fluidanimate [deleted file]
usrbin/sparc/memlatency [deleted file]
usrbin/sparc/streamcluster [deleted file]
usrbin/sparc/swaptions [deleted file]
usrbin/sparc/synthetic_procobv_cacheobv_offbwobv [deleted file]
usrbin/sparc/synthetic_procplus_cacheplus_offbwplus [deleted file]
usrbin/sparc/tlstest [deleted file]
usrbin/sparc/x264 [deleted file]

index 13c5c44..a3aa56a 100644 (file)
@@ -1,11 +1,5 @@
 USER_APPS_DIR = $(USER_DIR)/apps\r
 \r
-USER_APPS_USR_DIR := $(USER_APPS_DIR)/usr\r
-\r
-$(OBJDIR)/$(USER_APPS_USR_DIR)/%: usrbin/$(TARGET_ARCH)/%\r
-       @mkdir -p $(OBJDIR)/$(USER_APPS_USR_DIR)\r
-       @cp $< $@\r
-\r
 include $(USER_APPS_DIR)/roslib/Makefrag\r
 include $(USER_APPS_DIR)/parlib/Makefrag\r
 \r
index 6e64bab..96bd853 100644 (file)
@@ -2,18 +2,17 @@ USER_APPS_PARLIB_DIR = $(USER_APPS_DIR)/parlib
 OBJDIRS += $(USER_APPS_PARLIB_DIR)
 
 USER_APPS_PARLIB_CFLAGS    := $(USER_CFLAGS)  \
-                              -I$(USER_PARLIB_DIR)/inc \
-                              -I$(USER_PARLIB_NEWLIB_DIR)/include
+                              -I$(USER_PARLIB_DIR)/inc
+                              -I$(USER_PARLIB_NEWLIB_DIR)/include
 ifeq ($(COMPILER),IVY)
        PATCHFILE = $(OBJDIR)/$(USER_PARLIB_DIR)/libc_patch.i
        USER_APPS_PARLIB_CFLAGS    += --nodeputy --nopatch #--patch=$(PATCHFILE) 
 endif
 
-USER_APPS_PARLIB_LDFLAGS   := $(USER_LDFLAGS) -static \
+USER_APPS_PARLIB_LDFLAGS   := -static \
                               -T $(USER_APPS_PARLIB_DIR)/apps_$(TARGET_ARCH).ld
 
-USER_APPS_PARLIB_LDDIRS    := -L$(OBJDIR)/$(USER_PARLIB_DIR) \
-                              -L$(USER_PARLIB_NEWLIB_DIR)/lib/$(TARGET_ARCH)
+USER_APPS_PARLIB_LDDIRS    := -L$(OBJDIR)/$(USER_PARLIB_DIR)
 
 USER_APPS_PARLIB_LDLIBS    := --start-group -lc -lm -lg -lparlib -lpthread \
                               -livyparlib --end-group
@@ -34,13 +33,12 @@ USER_APPS_PARLIB_LDOBJS    := \
 
 USER_APPS_PARLIB_LDDEPENDS := $(USER_APPS_PARLIB_LDOBJS) \
                               $(OBJDIR)/$(USER_PARLIB_DIR)/libparlib.a \
+                              $(OBJDIR)/$(USER_PARLIB_DIR)/libpthread.a \
                               $(OBJDIR)/$(USER_PARLIB_DIR)/libivyparlib.a \
                               $(OBJDIR)/$(USER_APPS_PARLIB_DIR)/%.o
 
 USER_APPS_PARLIB_GCC_LIB   := $(GCC_LIB)
 
-include $(USER_APPS_PARLIB_DIR)/pthread/Makefrag
-
 $(OBJDIR)/$(USER_APPS_PARLIB_DIR)/%.o: $(USER_APPS_PARLIB_DIR)/%.c $(PATCHFILE)
        @echo + cc [APPS PARLIB] $<
        @mkdir -p $(@D)
index c86470e..701268b 100644 (file)
@@ -3,6 +3,7 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <parlib.h>
+#include <arch/arch.h>
 #include <ros/common.h>
 #include <sys/stat.h>
 
@@ -13,6 +14,7 @@ extern void change_user();
 extern void set_default_user();
 extern void file_io();
 extern void file_error();
+extern int  shell_exec(const char* cmdline);
 extern void run_binary(size_t colors);
 extern int  run_binary_filename(const char* fn, size_t colors);
 extern void run_binary_colored();
@@ -23,7 +25,10 @@ void help() {
           "  draw_nanwan:      Draw a picture of Nanwan, our mascot giraffe\n"
           "  clear_screen:     Clear the Screen\n"
           "  change_user:      Change Username\n"
+          "  monitor:          Execute a breakpoint trap to run the monitor\n"
+          "  date:             Get time and date\n"
           "  reboot:           Hopefully you can figure this one out...\n"
+          "  exit:             Hopefully you can figure this one out...\n"
           "  file_io:          Run File Related IO Tests\n"
           "  file_error:       Run File Error Related Tests\n"
           "  run_binary:       Load and run a binary located on the remote server\n"
@@ -31,6 +36,14 @@ void help() {
              );
 }
 
+void date()
+{
+       time_t t;
+       time(&t);
+       struct tm* tt = gmtime(&t);
+       puts(asctime(tt));
+}
+
 int main(int argc, char** argv)
 {      
        set_default_user();
@@ -44,13 +57,19 @@ int main(int argc, char** argv)
                        continue;
 
                if(strcmp(s, "draw_nanwan") == 0)
-                       draw_nanwan();          
+                       draw_nanwan();
                else if(strcmp(s, "clear_screen") == 0)
                        clrscrn(0);             
                else if (strcmp(s, "change_user") == 0)
                        change_user();
+               else if (strcmp(s, "monitor") == 0)
+                       breakpoint();
+               else if (strcmp(s, "date") == 0)
+                       date();
                else if (strcmp(s, "reboot") == 0)
                        sys_reboot();
+               else if (strcmp(s, "exit") == 0)
+                       exit(0);
                else if (strcmp(s, "file_io") == 0)
                        file_io();
                else if (strcmp(s, "file_error") == 0)
@@ -59,7 +78,7 @@ int main(int argc, char** argv)
                        run_binary(0);
                else if (strcmp(s, "run_binary_colored") == 0)
                        run_binary_colored();
-               else if (run_binary_filename(s,0) == 0)
+               else if (shell_exec(s) == 0)
                        ;
                else
                        help(); 
diff --git a/user/apps/parlib/pthread/Makefrag b/user/apps/parlib/pthread/Makefrag
deleted file mode 100644 (file)
index 52a1304..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-USER_APPS_PARLIB_PTHREAD_DIR := $(USER_APPS_PARLIB_DIR)/pthread
-
-USER_APPS_PARLIB_PTHREAD_LDLIBS := $(USER_APPS_PARLIB_LDLIBS)
-
-USER_APPS_PARLIB_PTHREAD_LDDEPENDS := $(OBJDIR)/$(USER_APPS_PARLIB_PTHREAD_DIR)/%.o \
-                                      $(USER_APPS_PARLIB_LDOBJS) \
-                                      $(OBJDIR)/$(USER_PARLIB_DIR)/libparlib.a \
-                                      $(OBJDIR)/$(USER_PARLIB_DIR)/libpthread.a \
-                                      $(OBJDIR)/$(USER_PARLIB_DIR)/libivyparlib.a
-
-$(OBJDIR)/$(USER_APPS_PARLIB_PTHREAD_DIR)/%: $(USER_APPS_PARLIB_PTHREAD_LDDEPENDS)
-       @echo + ld [APPS PARLIB PTHREAD] $@
-       $(V)$(LD) -o $@ $(USER_APPS_PARLIB_LDFLAGS) $@.o \
-                    $(USER_APPS_PARLIB_LDOBJS) $(USER_APPS_PARLIB_LDDIRS) \
-                    $(USER_APPS_PARLIB_PTHREAD_LDLIBS) \
-                    $(USER_APPS_PARLIB_GCC_LIB)
-       $(V)$(OBJDUMP) -S $@ > $@.asm
-       $(V)$(NM) -n $@ > $@.sym
diff --git a/user/apps/parlib/pthread/blackscholes.c b/user/apps/parlib/pthread/blackscholes.c
deleted file mode 100644 (file)
index e91a262..0000000
+++ /dev/null
@@ -1,539 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Copyright (c) 2007 Intel Corp.
-
-// Black-Scholes
-// Analytical method for calculating European Options
-//
-// 
-// Reference Source: Options, Futures, and Other Derivatives, 3rd Edition, Prentice 
-// Hall, John C. Hull,
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-
-#define ENABLE_THREADS
-
-#ifdef ENABLE_PARSEC_HOOKS
-#include <hooks.h>
-#endif
-
-// Multi-threaded pthreads header
-#ifdef ENABLE_THREADS
-#define MAX_THREADS 128
-// Add the following line so that icc 9.0 is compatible with pthread lib.
-#define __thread __threadp  
-
-#ifdef _XOPEN_SOURCE
-#undef _XOPEN_SOURCE
-#define _XOPEN_SOURCE 700
-#endif
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#ifndef __USE_XOPEN2K
-#define __USE_XOPEN2K
-#endif
-#ifndef __USE_UNIX98
-#define __USE_UNIX98
-#endif
-#include <pthread.h>
-#include <time.h>
-
-pthread_t _M4_threadsTable[MAX_THREADS];
-pthread_mutexattr_t _M4_normalMutexAttr;
-int _M4_numThreads = MAX_THREADS;
-
-#undef __thread
-pthread_barrier_t barrier;;
-#endif
-
-// Multi-threaded OpenMP header
-#ifdef ENABLE_OPENMP
-#include <omp.h>
-#endif
-
-// Multi-threaded header for Windows
-#ifdef WIN32
-#pragma warning(disable : 4305)
-#pragma warning(disable : 4244)
-#include <windows.h>
-#define MAX_THREADS 128
-#endif
-
-//Precision to use for calculations
-#define fptype float
-
-#define NUM_RUNS 100
-
-typedef struct OptionData_ {
-        fptype s;          // spot price
-        fptype strike;     // strike price
-        fptype r;          // risk-free interest rate
-        fptype divq;       // dividend rate
-        fptype v;          // volatility
-        fptype t;          // time to maturity or option expiration in years 
-                           //     (1yr = 1.0, 6mos = 0.5, 3mos = 0.25, ..., etc)  
-        const char *OptionType;  // Option type.  "P"=PUT, "C"=CALL
-        fptype divs;       // dividend vals (not used in this test)
-        fptype DGrefval;   // DerivaGem Reference Value
-} OptionData;
-
-//++  modified by xiongww
-
-OptionData data_init[] = {
-    #include "optionData.txt"
-};
-
-OptionData *data;
-fptype *prices;
-int numOptions;
-
-//--
-
-int    * otype;
-fptype * sptprice;
-fptype * strike;
-fptype * rate;
-fptype * volatility;
-fptype * otime;
-int numError = 0;
-int nThreads;
-
-////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
-// Cumulative Normal Distribution Function
-// See Hull, Section 11.8, P.243-244
-#define inv_sqrt_2xPI 0.39894228040143270286
-
-fptype CNDF ( fptype InputX ) 
-{
-    int sign;
-
-    fptype OutputX;
-    fptype xInput;
-    fptype xNPrimeofX;
-    fptype expValues;
-    fptype xK2;
-    fptype xK2_2, xK2_3;
-    fptype xK2_4, xK2_5;
-    fptype xLocal, xLocal_1;
-    fptype xLocal_2, xLocal_3;
-
-    // Check for negative value of InputX
-    if (InputX < 0.0) {
-        InputX = -InputX;
-        sign = 1;
-    } else 
-        sign = 0;
-
-    xInput = InputX;
-    // Compute NPrimeX term common to both four & six decimal accuracy calcs
-    expValues = exp(-0.5f * InputX * InputX);
-    xNPrimeofX = expValues;
-    xNPrimeofX = xNPrimeofX * inv_sqrt_2xPI;
-
-    xK2 = 0.2316419 * xInput;
-    xK2 = 1.0 + xK2;
-    xK2 = 1.0 / xK2;
-    xK2_2 = xK2 * xK2;
-    xK2_3 = xK2_2 * xK2;
-    xK2_4 = xK2_3 * xK2;
-    xK2_5 = xK2_4 * xK2;
-    
-    xLocal_1 = xK2 * 0.319381530;
-    xLocal_2 = xK2_2 * (-0.356563782);
-    xLocal_3 = xK2_3 * 1.781477937;
-    xLocal_2 = xLocal_2 + xLocal_3;
-    xLocal_3 = xK2_4 * (-1.821255978);
-    xLocal_2 = xLocal_2 + xLocal_3;
-    xLocal_3 = xK2_5 * 1.330274429;
-    xLocal_2 = xLocal_2 + xLocal_3;
-
-    xLocal_1 = xLocal_2 + xLocal_1;
-    xLocal   = xLocal_1 * xNPrimeofX;
-    xLocal   = 1.0 - xLocal;
-
-    OutputX  = xLocal;
-    
-    if (sign) {
-        OutputX = 1.0 - OutputX;
-    }
-    
-    return OutputX;
-} 
-
-// For debugging
-void print_xmm(fptype in, char* s) {
-    printf("%s: %f\n", s, in);
-}
-
-//////////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////////
-fptype BlkSchlsEqEuroNoDiv( fptype sptprice,
-                            fptype strike, fptype rate, fptype volatility,
-                            fptype time, int otype, float timet )    
-{
-    fptype OptionPrice;
-
-    // local private working variables for the calculation
-    fptype xStockPrice;
-    fptype xStrikePrice;
-    fptype xRiskFreeRate;
-    fptype xVolatility;
-    fptype xTime;
-    fptype xSqrtTime;
-
-    fptype logValues;
-    fptype xLogTerm;
-    fptype xD1; 
-    fptype xD2;
-    fptype xPowerTerm;
-    fptype xDen;
-    fptype d1;
-    fptype d2;
-    fptype FutureValueX;
-    fptype NofXd1;
-    fptype NofXd2;
-    fptype NegNofXd1;
-    fptype NegNofXd2;    
-    
-    xStockPrice = sptprice;
-    xStrikePrice = strike;
-    xRiskFreeRate = rate;
-    xVolatility = volatility;
-
-    xTime = time;
-    xSqrtTime = sqrt(xTime);
-
-    logValues = log( sptprice / strike );
-        
-    xLogTerm = logValues;
-        
-    
-    xPowerTerm = xVolatility * xVolatility;
-    xPowerTerm = xPowerTerm * 0.5;
-        
-    xD1 = xRiskFreeRate + xPowerTerm;
-    xD1 = xD1 * xTime;
-    xD1 = xD1 + xLogTerm;
-
-    xDen = xVolatility * xSqrtTime;
-    xD1 = xD1 / xDen;
-    xD2 = xD1 -  xDen;
-
-    d1 = xD1;
-    d2 = xD2;
-    
-    NofXd1 = CNDF( d1 );
-    NofXd2 = CNDF( d2 );
-
-    FutureValueX = strike * ( exp( -(rate)*(time) ) );        
-    if (otype == 0) {            
-        OptionPrice = (sptprice * NofXd1) - (FutureValueX * NofXd2);
-    } else { 
-        NegNofXd1 = (1.0 - NofXd1);
-        NegNofXd2 = (1.0 - NofXd2);
-        OptionPrice = (FutureValueX * NegNofXd2) - (sptprice * NegNofXd1);
-    }
-    
-    return OptionPrice;
-}
-
-//////////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////////
-#ifdef WIN32
-DWORD WINAPI bs_thread(LPVOID tid_ptr){
-#else
-int bs_thread(void *tid_ptr) {
-#endif
-    int i, j;
-    fptype price;
-    fptype priceDelta;
-    int tid = *(int *)tid_ptr;
-    int start = tid * (numOptions / nThreads);
-    int end = start + (numOptions / nThreads);
-
-//printf("Thread %d at barrier.\n", tid);
-
-#ifdef ENABLE_THREADS
-    pthread_barrier_wait(&(barrier));
-#endif
-
-
-    for (j=0; j<NUM_RUNS; j++) {
-#ifdef ENABLE_OPENMP
-#pragma omp parallel for
-        for (i=0; i<numOptions; i++) {
-#else  //ENABLE_OPENMP
-        for (i=start; i<end; i++) {
-#endif //ENABLE_OPENMP
-            /* Calling main function to calculate option value based on 
-             * Black & Sholes's equation.
-             */
-//printf("Thread %d performing computation.( %d, %d ) \n", tid,j,i);
-
-            price = BlkSchlsEqEuroNoDiv( sptprice[i], strike[i],
-                                         rate[i], volatility[i], otime[i], 
-                                         otype[i], 0);
-            prices[i] = price;
-            
-#ifdef ERR_CHK   
-            priceDelta = data[i].DGrefval - price;
-            if( fabs(priceDelta) >= 1e-4 ){
-                printf("Error on %d. Computed=%.5f, Ref=%.5f, Delta=%.5f\n",
-                       i, price, data[i].DGrefval, priceDelta);
-                numError ++;
-            }
-#endif
-        }
-    }
-
-    return 0;
-}
-
-int main (int argc, char **argv)
-{
-    int i;
-    int loopnum;
-    fptype * buffer;
-    int * buffer2;
-    int initOptionNum;
-#ifdef PARSEC_VERSION
-#define __PARSEC_STRING(x) #x
-#define __PARSEC_XSTRING(x) __PARSEC_STRING(x)
-        printf("PARSEC Benchmark Suite Version "__PARSEC_XSTRING(PARSEC_VERSION)"\n");
-       fflush(NULL);
-#else
-        printf("PARSEC Benchmark Suite\n");
-       fflush(NULL);
-#endif //PARSEC_VERSION
-#ifdef ENABLE_PARSEC_HOOKS
-   __parsec_bench_begin(__parsec_blackscholes);
-#endif
-
-   if (argc != 3)
-        {
-                printf("Usage:\n\t%s <nthreads> <numOptions>\n", argv[0]);
-                exit(1);
-        }
-    nThreads = atoi(argv[1]);
-    numOptions = atoi(argv[2]);
-
-    if(nThreads > numOptions) {
-      printf("WARNING: Not enough work, reducing number of threads to match number of options.");
-      nThreads = numOptions;
-    }
-
-#if !defined(ENABLE_THREADS) && !defined(ENABLE_OPENMP)
-    if(nThreads != 1) {
-        printf("Error: <nthreads> must be 1 (serial version)\n");
-        exit(1);
-    }
-#endif
-
-    // alloc spaces for the option data
-    data = (OptionData*)malloc(numOptions*sizeof(OptionData));
-    prices = (fptype*)malloc(numOptions*sizeof(fptype));
-    // initialize the data array
-    initOptionNum =  ( (sizeof(data_init)) / sizeof(OptionData) );
-    for ( loopnum = 0; loopnum < numOptions; ++ loopnum )   
-    {
-       OptionData *temp = data_init + loopnum%initOptionNum;
-       data[loopnum].OptionType = (const char*)malloc(strlen(temp->OptionType)+1);
-        strcpy((char *)(data[loopnum].OptionType), temp->OptionType);
-       data[loopnum].s = temp->s;
-       data[loopnum].strike = temp->strike;
-       data[loopnum].r = temp->r;
-       data[loopnum].divq = temp->divq;
-       data[loopnum].v = temp->v;
-       data[loopnum].t = temp->t;
-       data[loopnum].divs = temp->divs;
-       data[loopnum].DGrefval = temp->DGrefval;
-    }
-#ifdef ENABLE_THREADS
-    
-    pthread_mutexattr_init( &_M4_normalMutexAttr);
-//    pthread_mutexattr_settype( &_M4_normalMutexAttr, PTHREAD_MUTEX_NORMAL);
-    _M4_numThreads = nThreads;
-    {
-        int _M4_i;
-        for ( _M4_i = 0; _M4_i < MAX_THREADS; _M4_i++) {
-            _M4_threadsTable[_M4_i] = pthread_self();
-        }
-    }
-;
-    pthread_barrier_init(&(barrier),NULL,_M4_numThreads);;
-#endif
-    printf("Num of Options: %d\n", numOptions);
-    printf("Num of Runs: %d\n", NUM_RUNS);
-
-#define PAD 256
-#define LINESIZE 64
-   
-    buffer = (fptype *) malloc(5 * numOptions * sizeof(fptype) + PAD);
-    sptprice = (fptype *) (((unsigned long)buffer + PAD) & ~(LINESIZE - 1));
-    strike = sptprice + numOptions;
-    rate = strike + numOptions;
-    volatility = rate + numOptions;
-    otime = volatility + numOptions;
-    
-    buffer2 = (int *) malloc(numOptions * sizeof(fptype) + PAD);
-    otype = (int *) (((unsigned long)buffer2 + PAD) & ~(LINESIZE - 1));
-    
-    for (i=0; i<numOptions; i++) {
-        otype[i]      = (data[i].OptionType[0] == 'P') ? 1 : 0;
-        sptprice[i]   = data[i].s;
-        strike[i]     = data[i].strike;
-        rate[i]       = data[i].r;
-        volatility[i] = data[i].v;    
-        otime[i]      = data[i].t;
-    }
-    
-    printf("Size of data: %d\n", numOptions * (sizeof(OptionData) + sizeof(int)));
-
-#ifdef ENABLE_PARSEC_HOOKS
-    __parsec_roi_begin();
-#endif
-#ifdef ENABLE_THREADS
-    int tids[nThreads];
-    for(i=0; i<nThreads-1; i++) {
-//printf("Creating thread %d of %d\n", i, nThreads);
-        tids[i]=i;
-        
-    {
-        int _M4_i;
-        printf("create with arg\n");
-        for ( _M4_i = 0; _M4_i < MAX_THREADS; _M4_i++) {
-            if ( _M4_threadsTable[_M4_i] == pthread_self())    break;
-        }
-                printf("tid=%d %d\n", _M4_i, _M4_threadsTable[_M4_i]);
-        pthread_create(&_M4_threadsTable[_M4_i],NULL,(void *(*)(void *))bs_thread,(void *)&tids[i]);
-    }
-;
-    }
-    tids[nThreads-1] = nThreads-1;
-    bs_thread(&tids[nThreads-1]);
-    
-    {
-        int _M4_i;
-        void *_M4_ret;
-        for ( _M4_i = 0; _M4_i < MAX_THREADS;_M4_i++) {
-            printf("tid=%d %d\n", _M4_i, _M4_threadsTable[_M4_i]);
-            if ( _M4_threadsTable[_M4_i] == pthread_self())    break;
-            pthread_join( _M4_threadsTable[_M4_i], &_M4_ret);
-        }
-    }
-;
-#else//ENABLE_THREADS
-#ifdef ENABLE_OPENMP
-    {
-        int tid=0;
-        omp_set_num_threads(nThreads);
-        bs_thread(&tid);
-    }
-#else //ENABLE_OPENMP
-#ifdef WIN32 
-    if (nThreads > 1)
-    {
-        HANDLE threads[MAX_THREADS];
-                int nums[MAX_THREADS];
-                for(i=0; i<nThreads; i++) {
-                        nums[i] = i;
-                        threads[i] = CreateThread(0, 0, bs_thread, &nums[i], 0, 0);
-                }
-                WaitForMultipleObjects(nThreads, threads, TRUE, INFINITE);
-    } else
-#endif
-    {
-        int tid=0;
-        bs_thread(&tid);
-    }
-#endif //ENABLE_OPENMP
-#endif //ENABLE_THREADS
-#ifdef ENABLE_PARSEC_HOOKS
-    __parsec_roi_end();
-#endif
-
-#ifdef ERR_CHK
-    printf("Num Errors: %d\n", numError);
-#endif
-    for (loopnum = 0; loopnum < numOptions; ++ loopnum)
-    {
-       free((void *)(data[loopnum].OptionType));
-    }
-    free(data);
-    free(prices);
-
-#ifdef ENABLE_PARSEC_HOOKS
-    __parsec_bench_end();
-#endif
-
-    return 0;
-}
-
diff --git a/user/apps/parlib/pthread/optionData.txt b/user/apps/parlib/pthread/optionData.txt
deleted file mode 100644 (file)
index b713ce3..0000000
+++ /dev/null
@@ -1,1004 +0,0 @@
-//    #include file of test data inpout params and DerivaGem control reference value
-//
-// S,     K,      r,        q,      vol,    T,     P/C,    Divs,        DG RefValue
-
-{42.00,   40.00,  0.1000,   0.00,   0.20,   0.50,   "C",   0.00,   4.759423036851750000},
-{42.00,   40.00,  0.1000,   0.00,   0.20,   0.50,   "P",   0.00,   0.808600016880314000},
-{100.00,   100.00,  0.0500,   0.00,   0.15,   1.00,   "P",   0.00,   3.714602051381290000},
-{100.00,   100.00,  0.0500,   0.00,   0.15,   1.00,   "C",   0.00,   8.591659601309890000},
-{60.00,   65.00,  0.0800,   0.00,   0.30,   0.25,   "C",   0.00,   2.133371966735750000},
-{100.00,   90.00,  0.1000,   0.00,   0.10,   0.10,   "C",   0.00,   10.895610714794000000},
-{100.00,   90.00,  0.1000,   0.00,   0.10,   0.50,   "C",   0.00,   14.421570828843300000},
-{100.00,   90.00,  0.1000,   0.00,   0.10,   1.00,   "C",   0.00,   18.630859120667500000},
-{100.00,   100.00,  0.1000,   0.00,   0.10,   0.10,   "C",   0.00,   1.814984118378420000},
-{100.00,   100.00,  0.1000,   0.00,   0.10,   0.50,   "C",   0.00,   5.850273604284980000},
-{100.00,   100.00,  0.1000,   0.00,   0.10,   1.00,   "C",   0.00,   10.308147243666800000},
-{100.00,   110.00,  0.1000,   0.00,   0.10,   0.10,   "C",   0.00,   0.003523074865584340},
-{100.00,   110.00,  0.1000,   0.00,   0.10,   0.50,   "C",   0.00,   1.140722843827410000},
-{100.00,   110.00,  0.1000,   0.00,   0.10,   1.00,   "C",   0.00,   4.216747020308850000},
-{100.00,   90.00,  0.1000,   0.00,   0.25,   0.10,   "C",   0.00,   11.135244618346700000},
-{100.00,   90.00,  0.1000,   0.00,   0.25,   0.50,   "C",   0.00,   16.092638844092300000},
-{100.00,   90.00,  0.1000,   0.00,   0.25,   1.00,   "C",   0.00,   21.163454658480100000},
-{100.00,   100.00,  0.1000,   0.00,   0.25,   0.10,   "C",   0.00,   3.659962660310000000},
-{100.00,   100.00,  0.1000,   0.00,   0.25,   0.50,   "C",   0.00,   9.582231441086730000},
-{100.00,   100.00,  0.1000,   0.00,   0.25,   1.00,   "C",   0.00,   14.975798441718900000},
-{100.00,   110.00,  0.1000,   0.00,   0.25,   0.10,   "C",   0.00,   0.589613262035413000},
-{100.00,   110.00,  0.1000,   0.00,   0.25,   0.50,   "C",   0.00,   5.123575416865320000},
-{100.00,   110.00,  0.1000,   0.00,   0.25,   1.00,   "C",   0.00,   10.160055944516600000},
-{100.00,   90.00,  0.1000,   0.00,   0.50,   0.10,   "C",   0.00,   12.919509619564700000},
-{100.00,   90.00,  0.1000,   0.00,   0.50,   0.50,   "C",   0.00,   21.438280655724400000},
-{100.00,   90.00,  0.1000,   0.00,   0.50,   1.00,   "C",   0.00,   28.643647264488200000},
-{100.00,   100.00,  0.1000,   0.00,   0.50,   0.10,   "C",   0.00,   6.779936664291260000},
-{100.00,   100.00,  0.1000,   0.00,   0.50,   0.50,   "C",   0.00,   16.263193147074300000},
-{100.00,   100.00,  0.1000,   0.00,   0.50,   1.00,   "C",   0.00,   23.926745214162700000},
-{100.00,   110.00,  0.1000,   0.00,   0.50,   0.10,   "C",   0.00,   3.061909566605540000},
-{100.00,   110.00,  0.1000,   0.00,   0.50,   0.50,   "C",   0.00,   12.155688815568700000},
-{100.00,   110.00,  0.1000,   0.00,   0.50,   1.00,   "C",   0.00,   19.929858372066300000},
-{100.00,   90.00,  0.1000,   0.00,   0.10,   0.10,   "P",   0.00,   0.000095752219082624},
-{100.00,   90.00,  0.1000,   0.00,   0.10,   0.50,   "P",   0.00,   0.032219033907538300},
-{100.00,   90.00,  0.1000,   0.00,   0.10,   1.00,   "P",   0.00,   0.066226743903883000},
-{100.00,   100.00,  0.1000,   0.00,   0.10,   0.10,   "P",   0.00,   0.819967493295226000},
-{100.00,   100.00,  0.1000,   0.00,   0.10,   0.50,   "P",   0.00,   0.973216054356396000},
-{100.00,   100.00,  0.1000,   0.00,   0.10,   1.00,   "P",   0.00,   0.791889047262800000},
-{100.00,   110.00,  0.1000,   0.00,   0.10,   0.10,   "P",   0.00,   8.909004787274070000},
-{100.00,   110.00,  0.1000,   0.00,   0.10,   0.50,   "P",   0.00,   5.775959538905960000},
-{100.00,   110.00,  0.1000,   0.00,   0.10,   1.00,   "P",   0.00,   3.748863004264400000},
-{100.00,   90.00,  0.1000,   0.00,   0.25,   0.10,   "P",   0.00,   0.239729655771796000},
-{100.00,   90.00,  0.1000,   0.00,   0.25,   0.50,   "P",   0.00,   1.703287049156570000},
-{100.00,   90.00,  0.1000,   0.00,   0.25,   1.00,   "P",   0.00,   2.598822281716470000},
-{100.00,   100.00,  0.1000,   0.00,   0.25,   0.10,   "P",   0.00,   2.664946035226810000},
-{100.00,   100.00,  0.1000,   0.00,   0.25,   0.50,   "P",   0.00,   4.705173891158130000},
-{100.00,   100.00,  0.1000,   0.00,   0.25,   1.00,   "P",   0.00,   5.459540245314840000},
-{100.00,   110.00,  0.1000,   0.00,   0.25,   0.10,   "P",   0.00,   9.495094974443900000},
-{100.00,   110.00,  0.1000,   0.00,   0.25,   0.50,   "P",   0.00,   9.758812111943870000},
-{100.00,   110.00,  0.1000,   0.00,   0.25,   1.00,   "P",   0.00,   9.692171928472170000},
-{100.00,   90.00,  0.1000,   0.00,   0.50,   0.10,   "P",   0.00,   2.023994656989830000},
-{100.00,   90.00,  0.1000,   0.00,   0.50,   0.50,   "P",   0.00,   7.048928860788620000},
-{100.00,   90.00,  0.1000,   0.00,   0.50,   1.00,   "P",   0.00,   10.079014887724600000},
-{100.00,   100.00,  0.1000,   0.00,   0.50,   0.10,   "P",   0.00,   5.784920039208060000},
-{100.00,   100.00,  0.1000,   0.00,   0.50,   0.50,   "P",   0.00,   11.386135597145700000},
-{100.00,   100.00,  0.1000,   0.00,   0.50,   1.00,   "P",   0.00,   14.410487017758700000},
-{100.00,   110.00,  0.1000,   0.00,   0.50,   0.10,   "P",   0.00,   11.967391279014000000},
-{100.00,   110.00,  0.1000,   0.00,   0.50,   0.50,   "P",   0.00,   16.790925510647200000},
-{100.00,   110.00,  0.1000,   0.00,   0.50,   1.00,   "P",   0.00,   19.461974356021900000},
-{50.00,   41.25,  0.1000,   0.00,   0.10,   0.10,   "C",   0.00,   9.160444357863210000},
-{50.00,   41.25,  0.1000,   0.00,   0.10,   0.50,   "C",   0.00,   10.762029464848100000},
-{50.00,   41.25,  0.1000,   0.00,   0.10,   1.00,   "C",   0.00,   12.677609097740100000},
-{50.00,   50.00,  0.1000,   0.00,   0.10,   0.10,   "C",   0.00,   0.907492059189209000},
-{50.00,   50.00,  0.1000,   0.00,   0.10,   0.50,   "C",   0.00,   2.925136802142490000},
-{50.00,   50.00,  0.1000,   0.00,   0.10,   1.00,   "C",   0.00,   5.154073621833420000},
-{50.00,   60.75,  0.1000,   0.00,   0.10,   0.10,   "C",   0.00,   0.000000000717454849},
-{50.00,   60.75,  0.1000,   0.00,   0.10,   0.50,   "C",   0.00,   0.028414779953288100},
-{50.00,   60.75,  0.1000,   0.00,   0.10,   1.00,   "C",   0.00,   0.481908128709845000},
-{50.00,   41.25,  0.1000,   0.00,   0.25,   0.10,   "C",   0.00,   9.166378741739160000},
-{50.00,   41.25,  0.1000,   0.00,   0.25,   0.50,   "C",   0.00,   11.066856943917300000},
-{50.00,   41.25,  0.1000,   0.00,   0.25,   1.00,   "C",   0.00,   13.316909764810900000},
-{50.00,   50.00,  0.1000,   0.00,   0.25,   0.10,   "C",   0.00,   1.829981330155000000},
-{50.00,   50.00,  0.1000,   0.00,   0.25,   0.50,   "C",   0.00,   4.791115720543370000},
-{50.00,   50.00,  0.1000,   0.00,   0.25,   1.00,   "C",   0.00,   7.487899220859440000},
-{50.00,   60.75,  0.1000,   0.00,   0.25,   0.10,   "C",   0.00,   0.014232371738726200},
-{50.00,   60.75,  0.1000,   0.00,   0.25,   0.50,   "C",   0.00,   1.102318710852480000},
-{50.00,   60.75,  0.1000,   0.00,   0.25,   1.00,   "C",   0.00,   3.104764376468200000},
-{50.00,   41.25,  0.1000,   0.00,   0.50,   0.10,   "C",   0.00,   9.499149830045080000},
-{50.00,   41.25,  0.1000,   0.00,   0.50,   0.50,   "C",   0.00,   13.034624930353100000},
-{50.00,   41.25,  0.1000,   0.00,   0.50,   1.00,   "C",   0.00,   16.348279176395100000},
-{50.00,   50.00,  0.1000,   0.00,   0.50,   0.10,   "C",   0.00,   3.389968332145630000},
-{50.00,   50.00,  0.1000,   0.00,   0.50,   0.50,   "C",   0.00,   8.131596573537150000},
-{50.00,   50.00,  0.1000,   0.00,   0.50,   1.00,   "C",   0.00,   11.963372607081400000},
-{50.00,   60.75,  0.1000,   0.00,   0.50,   0.10,   "C",   0.00,   0.517721140543361000},
-{50.00,   60.75,  0.1000,   0.00,   0.50,   0.50,   "C",   0.00,   4.285755504631100000},
-{50.00,   60.75,  0.1000,   0.00,   0.50,   1.00,   "C",   0.00,   8.058110917563740000},
-{50.00,   41.25,  0.1000,   0.00,   0.10,   0.10,   "P",   0.00,   0.000000000016396475},
-{50.00,   41.25,  0.1000,   0.00,   0.10,   0.50,   "P",   0.00,   0.000243225502595658},
-{50.00,   41.25,  0.1000,   0.00,   0.10,   1.00,   "P",   0.00,   0.002152591723420370},
-{50.00,   50.00,  0.1000,   0.00,   0.10,   0.10,   "P",   0.00,   0.409983746647613000},
-{50.00,   50.00,  0.1000,   0.00,   0.10,   0.50,   "P",   0.00,   0.486608027178198000},
-{50.00,   50.00,  0.1000,   0.00,   0.10,   1.00,   "P",   0.00,   0.395944523631400000},
-{50.00,   60.75,  0.1000,   0.00,   0.10,   0.10,   "P",   0.00,   10.145527400979400000},
-{50.00,   60.75,  0.1000,   0.00,   0.10,   0.50,   "P",   0.00,   7.815602318371660000},
-{50.00,   60.75,  0.1000,   0.00,   0.10,   1.00,   "P",   0.00,   5.450781274394380000},
-{50.00,   41.25,  0.1000,   0.00,   0.25,   0.10,   "P",   0.00,   0.005934383892338090},
-{50.00,   41.25,  0.1000,   0.00,   0.25,   0.50,   "P",   0.00,   0.305070704571745000},
-{50.00,   41.25,  0.1000,   0.00,   0.25,   1.00,   "P",   0.00,   0.641453258794187000},
-{50.00,   50.00,  0.1000,   0.00,   0.25,   0.10,   "P",   0.00,   1.332473017613400000},
-{50.00,   50.00,  0.1000,   0.00,   0.25,   0.50,   "P",   0.00,   2.352586945579070000},
-{50.00,   50.00,  0.1000,   0.00,   0.25,   1.00,   "P",   0.00,   2.729770122657420000},
-{50.00,   60.75,  0.1000,   0.00,   0.25,   0.10,   "P",   0.00,   10.159759772000700000},
-{50.00,   60.75,  0.1000,   0.00,   0.25,   0.50,   "P",   0.00,   8.889506249270860000},
-{50.00,   60.75,  0.1000,   0.00,   0.25,   1.00,   "P",   0.00,   8.073637522152740000},
-{50.00,   41.25,  0.1000,   0.00,   0.50,   0.10,   "P",   0.00,   0.338705472198261000},
-{50.00,   41.25,  0.1000,   0.00,   0.50,   0.50,   "P",   0.00,   2.272838691007510000},
-{50.00,   41.25,  0.1000,   0.00,   0.50,   1.00,   "P",   0.00,   3.672822670378400000},
-{50.00,   50.00,  0.1000,   0.00,   0.50,   0.10,   "P",   0.00,   2.892460019604030000},
-{50.00,   50.00,  0.1000,   0.00,   0.50,   0.50,   "P",   0.00,   5.693067798572860000},
-{50.00,   50.00,  0.1000,   0.00,   0.50,   1.00,   "P",   0.00,   7.205243508879350000},
-{50.00,   60.75,  0.1000,   0.00,   0.50,   0.10,   "P",   0.00,   10.663248540805300000},
-{50.00,   60.75,  0.1000,   0.00,   0.50,   0.50,   "P",   0.00,   12.072943043049500000},
-{50.00,   60.75,  0.1000,   0.00,   0.50,   1.00,   "P",   0.00,   13.026984063248300000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.10,   "C",   0.00,   10.247401000886400000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.50,   "C",   0.00,   11.355496680087600000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   1.00,   "C",   0.00,   12.841685844358700000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.10,   "C",   0.00,   1.401851512188630000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.50,   "C",   0.00,   3.536661968725870000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   1.00,   "C",   0.00,   5.437616879373150000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.10,   "C",   0.00,   0.001633213370202900},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.50,   "C",   0.00,   0.454070380213948000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   1.00,   "C",   0.00,   1.532588879532600000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.10,   "C",   0.00,   10.541889432392700000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.50,   "C",   0.00,   13.710780949068900000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   1.00,   "C",   0.00,   16.827677195009300000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.10,   "C",   0.00,   3.287983325881400000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.50,   "C",   0.00,   7.698994752653710000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   1.00,   "C",   0.00,   11.227983057006400000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.10,   "C",   0.00,   0.492789615196492000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.50,   "C",   0.00,   3.858921644731480000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   1.00,   "C",   0.00,   7.162832542185690000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.10,   "C",   0.00,   12.443070129340600000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.50,   "C",   0.00,   19.594067641915700000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   1.00,   "C",   0.00,   25.369048485340600000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.10,   "C",   0.00,   6.430883891711170000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.50,   "C",   0.00,   14.629031944250100000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   1.00,   "C",   0.00,   20.858610524946800000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.10,   "C",   0.00,   2.855401894418240000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.50,   "C",   0.00,   10.762095702746800000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   1.00,   "C",   0.00,   17.109364250968300000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.10,   "P",   0.00,   0.000241001647596191},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.50,   "P",   0.00,   0.126465632121558000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   1.00,   "P",   0.00,   0.400407274169526000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.10,   "P",   0.00,   1.127229290812220000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.50,   "P",   0.00,   2.171071915430270000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   1.00,   "P",   0.00,   2.725085134718540000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.10,   "P",   0.00,   9.699548769856150000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.50,   "P",   0.00,   8.951921321588780000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   1.00,   "P",   0.00,   8.548803960412530000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.10,   "P",   0.00,   0.294729433153974000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.50,   "P",   0.00,   2.481749901102830000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   1.00,   "P",   0.00,   4.386398624820130000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.10,   "P",   0.00,   3.013361104504980000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.50,   "P",   0.00,   6.333404699358100000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   1.00,   "P",   0.00,   8.515451312351790000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.10,   "P",   0.00,   10.190705171682400000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.50,   "P",   0.00,   12.356772586106300000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   1.00,   "P",   0.00,   14.179047623065600000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.10,   "P",   0.00,   2.195910130101800000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.50,   "P",   0.00,   8.365036593949600000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   1.00,   "P",   0.00,   12.927769915151500000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.10,   "P",   0.00,   6.156261670334750000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.50,   "P",   0.00,   13.263441890954500000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   1.00,   "P",   0.00,   18.146078780292200000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.10,   "P",   0.00,   12.553317450904200000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.50,   "P",   0.00,   19.259946644121600000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   1.00,   "P",   0.00,   24.125579331848300000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.10,   "C",   0.00,   8.863281666392300000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.50,   "C",   0.00,   9.314944657044040000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   1.00,   "C",   0.00,   9.890867970305360000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.10,   "C",   0.00,   0.700925756094317000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.50,   "C",   0.00,   1.768330984362940000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   1.00,   "C",   0.00,   2.718808439686570000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.10,   "C",   0.00,   0.000000000170861147},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.50,   "C",   0.00,   0.006433878180657690},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   1.00,   "C",   0.00,   0.106190314866700000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.10,   "C",   0.00,   8.871203986520360000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.50,   "C",   0.00,   9.791475497647290000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   1.00,   "C",   0.00,   11.030984382704700000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.10,   "C",   0.00,   1.643991662940700000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.50,   "C",   0.00,   3.849497376326850000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   1.00,   "C",   0.00,   5.613991528503190000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.10,   "C",   0.00,   0.010849363947345100},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.50,   "C",   0.00,   0.768274495718033000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   1.00,   "C",   0.00,   2.036957925438520000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.10,   "C",   0.00,   9.237479294160510000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.50,   "C",   0.00,   12.055228107416700000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   1.00,   "C",   0.00,   14.655915985561400000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.10,   "C",   0.00,   3.215441945855580000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.50,   "C",   0.00,   7.314515972125060000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   1.00,   "C",   0.00,   10.429305262473400000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.10,   "C",   0.00,   0.473089228156817000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.50,   "C",   0.00,   3.727049105818880000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   1.00,   "C",   0.00,   6.800854032435260000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.10,   "P",   0.00,   0.000000000074528552},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.50,   "P",   0.00,   0.001638760059608080},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   1.00,   "P",   0.00,   0.021948625635337300},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.10,   "P",   0.00,   0.563614645406109000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.50,   "P",   0.00,   1.085535957715130000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   1.00,   "P",   0.00,   1.362542567359270000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.10,   "P",   0.00,   10.583167000684700000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.50,   "P",   0.00,   9.926837920803580000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   1.00,   "P",   0.00,   9.208327279989030000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.10,   "P",   0.00,   0.007922320202584000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.50,   "P",   0.00,   0.478169600662851000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   1.00,   "P",   0.00,   1.162065038034680000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.10,   "P",   0.00,   1.506680552252490000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.50,   "P",   0.00,   3.166702349679050000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   1.00,   "P",   0.00,   4.257725656175890000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.10,   "P",   0.00,   10.594016364461200000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.50,   "P",   0.00,   10.688678538341000000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   1.00,   "P",   0.00,   11.139094890560900000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.10,   "P",   0.00,   0.374197627842735000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.50,   "P",   0.00,   2.741922210432270000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   1.00,   "P",   0.00,   4.786996640891410000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.10,   "P",   0.00,   3.078130835167380000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.50,   "P",   0.00,   6.631720945477260000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   1.00,   "P",   0.00,   9.073039390146110000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.10,   "P",   0.00,   11.056256228670600000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.50,   "P",   0.00,   13.647453148441800000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   1.00,   "P",   0.00,   15.902990997557600000},
-{100.00,   90.00,  0.0500,   0.00,   0.10,   0.10,   "C",   0.00,   10.449058766801200000},
-{100.00,   90.00,  0.0500,   0.00,   0.10,   0.50,   "C",   0.00,   12.306754042912400000},
-{100.00,   90.00,  0.0500,   0.00,   0.10,   1.00,   "C",   0.00,   14.628840237721800000},
-{100.00,   100.00,  0.0500,   0.00,   0.10,   0.10,   "C",   0.00,   1.523436713687610000},
-{100.00,   100.00,  0.0500,   0.00,   0.10,   0.50,   "C",   0.00,   4.192271110733870000},
-{100.00,   100.00,  0.0500,   0.00,   0.10,   1.00,   "C",   0.00,   6.804962968028710000},
-{100.00,   110.00,  0.0500,   0.00,   0.10,   0.10,   "C",   0.00,   0.002083505050676660},
-{100.00,   110.00,  0.0500,   0.00,   0.10,   0.50,   "C",   0.00,   0.616571484986525000},
-{100.00,   110.00,  0.0500,   0.00,   0.10,   1.00,   "C",   0.00,   2.173950441155820000},
-{100.00,   90.00,  0.0500,   0.00,   0.25,   0.10,   "C",   0.00,   10.725497846854800000},
-{100.00,   90.00,  0.0500,   0.00,   0.25,   0.50,   "C",   0.00,   14.437116290052900000},
-{100.00,   90.00,  0.0500,   0.00,   0.25,   1.00,   "C",   0.00,   18.140770068154800000},
-{100.00,   100.00,  0.0500,   0.00,   0.25,   0.10,   "C",   0.00,   3.400893835697680000},
-{100.00,   100.00,  0.0500,   0.00,   0.25,   0.50,   "C",   0.00,   8.260004605682270000},
-{100.00,   100.00,  0.0500,   0.00,   0.25,   1.00,   "C",   0.00,   12.335986235067200000},
-{100.00,   110.00,  0.0500,   0.00,   0.25,   0.10,   "C",   0.00,   0.521347622182002000},
-{100.00,   110.00,  0.0500,   0.00,   0.25,   0.50,   "C",   0.00,   4.225788960901320000},
-{100.00,   110.00,  0.0500,   0.00,   0.25,   1.00,   "C",   0.00,   8.026371324891460000},
-{100.00,   90.00,  0.0500,   0.00,   0.50,   0.10,   "C",   0.00,   12.590255331551100000},
-{100.00,   90.00,  0.0500,   0.00,   0.50,   0.50,   "C",   0.00,   20.159976068200700000},
-{100.00,   90.00,  0.0500,   0.00,   0.50,   1.00,   "C",   0.00,   26.372713127990200000},
-{100.00,   100.00,  0.0500,   0.00,   0.50,   0.10,   "C",   0.00,   6.538072233170310000},
-{100.00,   100.00,  0.0500,   0.00,   0.50,   0.50,   "C",   0.00,   15.127170180011800000},
-{100.00,   100.00,  0.0500,   0.00,   0.50,   1.00,   "C",   0.00,   21.792596179591700000},
-{100.00,   110.00,  0.0500,   0.00,   0.50,   0.10,   "C",   0.00,   2.918389335831480000},
-{100.00,   110.00,  0.0500,   0.00,   0.50,   0.50,   "C",   0.00,   11.184108264097900000},
-{100.00,   110.00,  0.0500,   0.00,   0.50,   1.00,   "C",   0.00,   17.962314921602000000},
-{100.00,   90.00,  0.0500,   0.00,   0.10,   0.10,   "P",   0.00,   0.000181894142655793},
-{100.00,   90.00,  0.0500,   0.00,   0.10,   0.50,   "P",   0.00,   0.084646125462351500},
-{100.00,   90.00,  0.0500,   0.00,   0.10,   1.00,   "P",   0.00,   0.239488442786030000},
-{100.00,   100.00,  0.0500,   0.00,   0.10,   0.10,   "P",   0.00,   1.024684632955850000},
-{100.00,   100.00,  0.0500,   0.00,   0.10,   0.50,   "P",   0.00,   1.723262313567130000},
-{100.00,   100.00,  0.0500,   0.00,   0.10,   1.00,   "P",   0.00,   1.927905418100120000},
-{100.00,   110.00,  0.0500,   0.00,   0.10,   0.10,   "P",   0.00,   9.453456216245730000},
-{100.00,   110.00,  0.0500,   0.00,   0.10,   0.50,   "P",   0.00,   7.900661808103120000},
-{100.00,   110.00,  0.0500,   0.00,   0.10,   1.00,   "P",   0.00,   6.809187136234370000},
-{100.00,   90.00,  0.0500,   0.00,   0.25,   0.10,   "P",   0.00,   0.276620974196225000},
-{100.00,   90.00,  0.0500,   0.00,   0.25,   0.50,   "P",   0.00,   2.215008372602800000},
-{100.00,   90.00,  0.0500,   0.00,   0.25,   1.00,   "P",   0.00,   3.751418273219090000},
-{100.00,   100.00,  0.0500,   0.00,   0.25,   0.10,   "P",   0.00,   2.902141754965910000},
-{100.00,   100.00,  0.0500,   0.00,   0.25,   0.50,   "P",   0.00,   5.790995808515530000},
-{100.00,   100.00,  0.0500,   0.00,   0.25,   1.00,   "P",   0.00,   7.458928685138570000},
-{100.00,   110.00,  0.0500,   0.00,   0.25,   0.10,   "P",   0.00,   9.972720333377050000},
-{100.00,   110.00,  0.0500,   0.00,   0.25,   0.50,   "P",   0.00,   11.509879284017900000},
-{100.00,   110.00,  0.0500,   0.00,   0.25,   1.00,   "P",   0.00,   12.661608019970000000},
-{100.00,   90.00,  0.0500,   0.00,   0.50,   0.10,   "P",   0.00,   2.141378458892470000},
-{100.00,   90.00,  0.0500,   0.00,   0.50,   0.50,   "P",   0.00,   7.937868150750600000},
-{100.00,   90.00,  0.0500,   0.00,   0.50,   1.00,   "P",   0.00,   11.983361333054400000},
-{100.00,   100.00,  0.0500,   0.00,   0.50,   0.10,   "P",   0.00,   6.039320152438550000},
-{100.00,   100.00,  0.0500,   0.00,   0.50,   0.50,   "P",   0.00,   12.658161382845000000},
-{100.00,   100.00,  0.0500,   0.00,   0.50,   1.00,   "P",   0.00,   16.915538629663100000},
-{100.00,   110.00,  0.0500,   0.00,   0.50,   0.10,   "P",   0.00,   12.369762047026500000},
-{100.00,   110.00,  0.0500,   0.00,   0.50,   0.50,   "P",   0.00,   18.468198587214500000},
-{100.00,   110.00,  0.0500,   0.00,   0.50,   1.00,   "P",   0.00,   22.597551616680500000},
-{50.00,   41.25,  0.0500,   0.00,   0.10,   0.10,   "C",   0.00,   8.955735233348690000},
-{50.00,   41.25,  0.0500,   0.00,   0.10,   0.50,   "C",   0.00,   9.769395612888870000},
-{50.00,   41.25,  0.0500,   0.00,   0.10,   1.00,   "C",   0.00,   10.772989650176100000},
-{50.00,   50.00,  0.0500,   0.00,   0.10,   0.10,   "C",   0.00,   0.761718356843806000},
-{50.00,   50.00,  0.0500,   0.00,   0.10,   0.50,   "C",   0.00,   2.096135555366940000},
-{50.00,   50.00,  0.0500,   0.00,   0.10,   1.00,   "C",   0.00,   3.402481484014360000},
-{50.00,   60.75,  0.0500,   0.00,   0.10,   0.10,   "C",   0.00,   0.000000000268144541},
-{50.00,   60.75,  0.0500,   0.00,   0.10,   0.50,   "C",   0.00,   0.010446869804788600},
-{50.00,   60.75,  0.0500,   0.00,   0.10,   1.00,   "C",   0.00,   0.177236149710853000},
-{50.00,   41.25,  0.0500,   0.00,   0.25,   0.10,   "C",   0.00,   8.962983694922850000},
-{50.00,   41.25,  0.0500,   0.00,   0.25,   0.50,   "C",   0.00,   10.185792986779500000},
-{50.00,   41.25,  0.0500,   0.00,   0.25,   1.00,   "C",   0.00,   11.734445815449900000},
-{50.00,   50.00,  0.0500,   0.00,   0.25,   0.10,   "C",   0.00,   1.700446917848840000},
-{50.00,   50.00,  0.0500,   0.00,   0.25,   0.50,   "C",   0.00,   4.130002302841130000},
-{50.00,   50.00,  0.0500,   0.00,   0.25,   1.00,   "C",   0.00,   6.167993117533580000},
-{50.00,   60.75,  0.0500,   0.00,   0.25,   0.10,   "C",   0.00,   0.011811829287480400},
-{50.00,   60.75,  0.0500,   0.00,   0.25,   0.50,   "C",   0.00,   0.862122715911549000},
-{50.00,   60.75,  0.0500,   0.00,   0.25,   1.00,   "C",   0.00,   2.335403007584940000},
-{50.00,   41.25,  0.0500,   0.00,   0.50,   0.10,   "C",   0.00,   9.318598550815250000},
-{50.00,   41.25,  0.0500,   0.00,   0.50,   0.50,   "C",   0.00,   12.357234669808300000},
-{50.00,   41.25,  0.0500,   0.00,   0.50,   1.00,   "C",   0.00,   15.177352941362300000},
-{50.00,   50.00,  0.0500,   0.00,   0.50,   0.10,   "C",   0.00,   3.269036116585160000},
-{50.00,   50.00,  0.0500,   0.00,   0.50,   0.50,   "C",   0.00,   7.563585090005880000},
-{50.00,   50.00,  0.0500,   0.00,   0.50,   1.00,   "C",   0.00,   10.896298089795900000},
-{50.00,   60.75,  0.0500,   0.00,   0.50,   0.10,   "C",   0.00,   0.486593922457358000},
-{50.00,   60.75,  0.0500,   0.00,   0.50,   0.50,   "C",   0.00,   3.894991411685940000},
-{50.00,   60.75,  0.0500,   0.00,   0.50,   1.00,   "C",   0.00,   7.178308554843690000},
-{50.00,   41.25,  0.0500,   0.00,   0.10,   0.10,   "P",   0.00,   0.000000000046837154},
-{50.00,   41.25,  0.0500,   0.00,   0.10,   0.50,   "P",   0.00,   0.000929484057595751},
-{50.00,   41.25,  0.0500,   0.00,   0.10,   1.00,   "P",   0.00,   0.011203410830535000},
-{50.00,   50.00,  0.0500,   0.00,   0.10,   0.10,   "P",   0.00,   0.512342316477927000},
-{50.00,   50.00,  0.0500,   0.00,   0.10,   0.50,   "P",   0.00,   0.861631156783567000},
-{50.00,   50.00,  0.0500,   0.00,   0.10,   1.00,   "P",   0.00,   0.963952709050059000},
-{50.00,   60.75,  0.0500,   0.00,   0.10,   0.10,   "P",   0.00,   10.447008111223600000},
-{50.00,   60.75,  0.0500,   0.00,   0.10,   0.50,   "P",   0.00,   9.260524025526000000},
-{50.00,   60.75,  0.0500,   0.00,   0.10,   1.00,   "P",   0.00,   7.964423688129230000},
-{50.00,   41.25,  0.0500,   0.00,   0.25,   0.10,   "P",   0.00,   0.007248461621002290},
-{50.00,   41.25,  0.0500,   0.00,   0.25,   0.50,   "P",   0.00,   0.417326857948239000},
-{50.00,   41.25,  0.0500,   0.00,   0.25,   1.00,   "P",   0.00,   0.972659576104396000},
-{50.00,   50.00,  0.0500,   0.00,   0.25,   0.10,   "P",   0.00,   1.451070877482950000},
-{50.00,   50.00,  0.0500,   0.00,   0.25,   0.50,   "P",   0.00,   2.895497904257770000},
-{50.00,   50.00,  0.0500,   0.00,   0.25,   1.00,   "P",   0.00,   3.729464342569280000},
-{50.00,   60.75,  0.0500,   0.00,   0.25,   0.10,   "P",   0.00,   10.458819940242900000},
-{50.00,   60.75,  0.0500,   0.00,   0.25,   0.50,   "P",   0.00,   10.112199871632800000},
-{50.00,   60.75,  0.0500,   0.00,   0.25,   1.00,   "P",   0.00,   10.122590546003300000},
-{50.00,   41.25,  0.0500,   0.00,   0.50,   0.10,   "P",   0.00,   0.362863317513402000},
-{50.00,   41.25,  0.0500,   0.00,   0.50,   0.50,   "P",   0.00,   2.588768540977020000},
-{50.00,   41.25,  0.0500,   0.00,   0.50,   1.00,   "P",   0.00,   4.415566702016710000},
-{50.00,   50.00,  0.0500,   0.00,   0.50,   0.10,   "P",   0.00,   3.019660076219270000},
-{50.00,   50.00,  0.0500,   0.00,   0.50,   0.50,   "P",   0.00,   6.329080691422510000},
-{50.00,   50.00,  0.0500,   0.00,   0.50,   1.00,   "P",   0.00,   8.457769314831570000},
-{50.00,   60.75,  0.0500,   0.00,   0.50,   0.10,   "P",   0.00,   10.933602033412800000},
-{50.00,   60.75,  0.0500,   0.00,   0.50,   0.50,   "P",   0.00,   13.145068567407200000},
-{50.00,   60.75,  0.0500,   0.00,   0.50,   1.00,   "P",   0.00,   14.965496093262100000},
-{100.00,   90.00,  0.0725,   0.00,   0.10,   0.10,   "C",   0.00,   10.650277050805100000},
-{100.00,   90.00,  0.0725,   0.00,   0.10,   0.50,   "C",   0.00,   13.259583405256500000},
-{100.00,   90.00,  0.0725,   0.00,   0.10,   1.00,   "C",   0.00,   16.431763683443700000},
-{100.00,   100.00,  0.0725,   0.00,   0.10,   0.10,   "C",   0.00,   1.651032126473450000},
-{100.00,   100.00,  0.0725,   0.00,   0.10,   0.50,   "C",   0.00,   4.906253570587790000},
-{100.00,   100.00,  0.0725,   0.00,   0.10,   1.00,   "C",   0.00,   8.313008388939790000},
-{100.00,   110.00,  0.0725,   0.00,   0.10,   0.10,   "C",   0.00,   0.002646197663476990},
-{100.00,   110.00,  0.0725,   0.00,   0.10,   0.50,   "C",   0.00,   0.822087720719597000},
-{100.00,   110.00,  0.0725,   0.00,   0.10,   1.00,   "C",   0.00,   2.984536842326120000},
-{100.00,   90.00,  0.0725,   0.00,   0.25,   0.10,   "C",   0.00,   10.909604363485600000},
-{100.00,   90.00,  0.0725,   0.00,   0.25,   0.50,   "C",   0.00,   15.175519060709600000},
-{100.00,   90.00,  0.0725,   0.00,   0.25,   1.00,   "C",   0.00,   19.485080840813400000},
-{100.00,   100.00,  0.0725,   0.00,   0.25,   0.10,   "C",   0.00,   3.516086538379690000},
-{100.00,   100.00,  0.0725,   0.00,   0.25,   0.50,   "C",   0.00,   8.842399982947430000},
-{100.00,   100.00,  0.0725,   0.00,   0.25,   1.00,   "C",   0.00,   13.495077753475700000},
-{100.00,   110.00,  0.0725,   0.00,   0.25,   0.10,   "C",   0.00,   0.551230670113858000},
-{100.00,   110.00,  0.0725,   0.00,   0.25,   0.50,   "C",   0.00,   4.615616936834760000},
-{100.00,   110.00,  0.0725,   0.00,   0.25,   1.00,   "C",   0.00,   8.950419705313610000},
-{100.00,   90.00,  0.0725,   0.00,   0.50,   0.10,   "C",   0.00,   12.738053154952400000},
-{100.00,   90.00,  0.0725,   0.00,   0.50,   0.50,   "C",   0.00,   20.731790057083300000},
-{100.00,   90.00,  0.0725,   0.00,   0.50,   1.00,   "C",   0.00,   27.388177501336400000},
-{100.00,   100.00,  0.0725,   0.00,   0.50,   0.10,   "C",   0.00,   6.646286959643460000},
-{100.00,   100.00,  0.0725,   0.00,   0.50,   0.50,   "C",   0.00,   15.633506954311800000},
-{100.00,   100.00,  0.0725,   0.00,   0.50,   1.00,   "C",   0.00,   22.743364795607100000},
-{100.00,   110.00,  0.0725,   0.00,   0.50,   0.10,   "C",   0.00,   2.982365532654810000},
-{100.00,   110.00,  0.0725,   0.00,   0.50,   0.50,   "C",   0.00,   11.615595844329000000},
-{100.00,   110.00,  0.0725,   0.00,   0.50,   1.00,   "C",   0.00,   18.835720450407000000},
-{100.00,   90.00,  0.0725,   0.00,   0.10,   0.10,   "P",   0.00,   0.000136657478829508},
-{100.00,   90.00,  0.0725,   0.00,   0.10,   0.50,   "P",   0.00,   0.055508124958985000},
-{100.00,   90.00,  0.0725,   0.00,   0.10,   1.00,   "P",   0.00,   0.137680882868775000},
-{100.00,   100.00,  0.0725,   0.00,   0.10,   0.10,   "P",   0.00,   0.928653911666424000},
-{100.00,   100.00,  0.0725,   0.00,   0.10,   0.50,   "P",   0.00,   1.346169925812750000},
-{100.00,   100.00,  0.0725,   0.00,   0.10,   1.00,   "P",   0.00,   1.319583054967650000},
-{100.00,   110.00,  0.0725,   0.00,   0.10,   0.10,   "P",   0.00,   9.208030161375750000},
-{100.00,   110.00,  0.0725,   0.00,   0.10,   0.50,   "P",   0.00,   6.905995711467040000},
-{100.00,   110.00,  0.0725,   0.00,   0.10,   1.00,   "P",   0.00,   5.291768974956740000},
-{100.00,   90.00,  0.0725,   0.00,   0.25,   0.10,   "P",   0.00,   0.259463970159300000},
-{100.00,   90.00,  0.0725,   0.00,   0.25,   0.50,   "P",   0.00,   1.971443780412030000},
-{100.00,   90.00,  0.0725,   0.00,   0.25,   1.00,   "P",   0.00,   3.190998040238420000},
-{100.00,   100.00,  0.0725,   0.00,   0.25,   0.10,   "P",   0.00,   2.793708323572660000},
-{100.00,   100.00,  0.0725,   0.00,   0.25,   0.50,   "P",   0.00,   5.282316338172380000},
-{100.00,   100.00,  0.0725,   0.00,   0.25,   1.00,   "P",   0.00,   6.501652419503520000},
-{100.00,   110.00,  0.0725,   0.00,   0.25,   0.10,   "P",   0.00,   9.756614633826140000},
-{100.00,   110.00,  0.0725,   0.00,   0.25,   0.50,   "P",   0.00,   10.699524927582200000},
-{100.00,   110.00,  0.0725,   0.00,   0.25,   1.00,   "P",   0.00,   11.257651837944200000},
-{100.00,   90.00,  0.0725,   0.00,   0.50,   0.10,   "P",   0.00,   2.087912761626100000},
-{100.00,   90.00,  0.0725,   0.00,   0.50,   0.50,   "P",   0.00,   7.527714776785730000},
-{100.00,   90.00,  0.0725,   0.00,   0.50,   1.00,   "P",   0.00,   11.094094700761500000},
-{100.00,   100.00,  0.0725,   0.00,   0.50,   0.10,   "P",   0.00,   5.923908744836440000},
-{100.00,   100.00,  0.0725,   0.00,   0.50,   0.50,   "P",   0.00,   12.073423309536700000},
-{100.00,   100.00,  0.0725,   0.00,   0.50,   1.00,   "P",   0.00,   15.749939461634900000},
-{100.00,   110.00,  0.0725,   0.00,   0.50,   0.10,   "P",   0.00,   12.187749496367100000},
-{100.00,   110.00,  0.0725,   0.00,   0.50,   0.50,   "P",   0.00,   17.699503835076500000},
-{100.00,   110.00,  0.0725,   0.00,   0.50,   1.00,   "P",   0.00,   21.142952583037700000},
-{50.00,   41.25,  0.0725,   0.00,   0.10,   0.10,   "C",   0.00,   9.047981013637180000},
-{50.00,   41.25,  0.0725,   0.00,   0.10,   0.50,   "C",   0.00,   10.219050011000600000},
-{50.00,   41.25,  0.0725,   0.00,   0.10,   1.00,   "C",   0.00,   11.640265602712700000},
-{50.00,   50.00,  0.0725,   0.00,   0.10,   0.10,   "C",   0.00,   0.825516063236724000},
-{50.00,   50.00,  0.0725,   0.00,   0.10,   0.50,   "C",   0.00,   2.453126785293900000},
-{50.00,   50.00,  0.0725,   0.00,   0.10,   1.00,   "C",   0.00,   4.156504194469900000},
-{50.00,   60.75,  0.0725,   0.00,   0.10,   0.10,   "C",   0.00,   0.000000000418787169},
-{50.00,   60.75,  0.0725,   0.00,   0.10,   0.50,   "C",   0.00,   0.016602183429001500},
-{50.00,   60.75,  0.0725,   0.00,   0.10,   1.00,   "C",   0.00,   0.284483121731959000},
-{50.00,   41.25,  0.0725,   0.00,   0.25,   0.10,   "C",   0.00,   9.054608341813460000},
-{50.00,   41.25,  0.0725,   0.00,   0.25,   0.50,   "C",   0.00,   10.581658197115100000},
-{50.00,   41.25,  0.0725,   0.00,   0.25,   1.00,   "C",   0.00,   12.444199535517000000},
-{50.00,   50.00,  0.0725,   0.00,   0.25,   0.10,   "C",   0.00,   1.758043269189840000},
-{50.00,   50.00,  0.0725,   0.00,   0.25,   0.50,   "C",   0.00,   4.421199991473710000},
-{50.00,   50.00,  0.0725,   0.00,   0.25,   1.00,   "C",   0.00,   6.747538876737840000},
-{50.00,   60.75,  0.0725,   0.00,   0.25,   0.10,   "C",   0.00,   0.012850834682157100},
-{50.00,   60.75,  0.0725,   0.00,   0.25,   0.50,   "C",   0.00,   0.964632352153436000},
-{50.00,   60.75,  0.0725,   0.00,   0.25,   1.00,   "C",   0.00,   2.663220686150450000},
-{50.00,   41.25,  0.0725,   0.00,   0.50,   0.10,   "C",   0.00,   9.399799864285060000},
-{50.00,   41.25,  0.0725,   0.00,   0.50,   0.50,   "C",   0.00,   12.661052853996300000},
-{50.00,   41.25,  0.0725,   0.00,   0.50,   1.00,   "C",   0.00,   15.702432182518300000},
-{50.00,   50.00,  0.0725,   0.00,   0.50,   0.10,   "C",   0.00,   3.323143479821730000},
-{50.00,   50.00,  0.0725,   0.00,   0.50,   0.50,   "C",   0.00,   7.816753477155890000},
-{50.00,   50.00,  0.0725,   0.00,   0.50,   1.00,   "C",   0.00,   11.371682397803500000},
-{50.00,   60.75,  0.0725,   0.00,   0.50,   0.10,   "C",   0.00,   0.500408614730964000},
-{50.00,   60.75,  0.0725,   0.00,   0.50,   0.50,   "C",   0.00,   4.067835234635260000},
-{50.00,   60.75,  0.0725,   0.00,   0.50,   1.00,   "C",   0.00,   7.567318237821570000},
-{50.00,   41.25,  0.0725,   0.00,   0.10,   0.10,   "P",   0.00,   0.000000000029292149},
-{50.00,   41.25,  0.0725,   0.00,   0.10,   0.50,   "P",   0.00,   0.000515507530913631},
-{50.00,   41.25,  0.0725,   0.00,   0.10,   1.00,   "P",   0.00,   0.005477652449141430},
-{50.00,   50.00,  0.0725,   0.00,   0.10,   0.10,   "P",   0.00,   0.464326955833212000},
-{50.00,   50.00,  0.0725,   0.00,   0.10,   0.50,   "P",   0.00,   0.673084962906374000},
-{50.00,   50.00,  0.0725,   0.00,   0.10,   1.00,   "P",   0.00,   0.659791527483823000},
-{50.00,   60.75,  0.0725,   0.00,   0.10,   0.10,   "P",   0.00,   10.311155234923500000},
-{50.00,   60.75,  0.0725,   0.00,   0.10,   0.50,   "P",   0.00,   8.603851369228160000},
-{50.00,   60.75,  0.0725,   0.00,   0.10,   1.00,   "P",   0.00,   6.785977231343880000},
-{50.00,   41.25,  0.0725,   0.00,   0.25,   0.10,   "P",   0.00,   0.006627328205560570},
-{50.00,   41.25,  0.0725,   0.00,   0.25,   0.50,   "P",   0.00,   0.363123693645393000},
-{50.00,   41.25,  0.0725,   0.00,   0.25,   1.00,   "P",   0.00,   0.809411585253518000},
-{50.00,   50.00,  0.0725,   0.00,   0.25,   0.10,   "P",   0.00,   1.396854161786330000},
-{50.00,   50.00,  0.0725,   0.00,   0.25,   0.50,   "P",   0.00,   2.641158169086190000},
-{50.00,   50.00,  0.0725,   0.00,   0.25,   1.00,   "P",   0.00,   3.250826209751760000},
-{50.00,   60.75,  0.0725,   0.00,   0.25,   0.10,   "P",   0.00,   10.324006069186900000},
-{50.00,   60.75,  0.0725,   0.00,   0.25,   0.50,   "P",   0.00,   9.551881537952600000},
-{50.00,   60.75,  0.0725,   0.00,   0.25,   1.00,   "P",   0.00,   9.164714795762360000},
-{50.00,   41.25,  0.0725,   0.00,   0.50,   0.10,   "P",   0.00,   0.351818850677170000},
-{50.00,   41.25,  0.0725,   0.00,   0.50,   0.50,   "P",   0.00,   2.442518350526630000},
-{50.00,   41.25,  0.0725,   0.00,   0.50,   1.00,   "P",   0.00,   4.067644232254740000},
-{50.00,   50.00,  0.0725,   0.00,   0.50,   0.10,   "P",   0.00,   2.961954372418220000},
-{50.00,   50.00,  0.0725,   0.00,   0.50,   0.50,   "P",   0.00,   6.036711654768370000},
-{50.00,   50.00,  0.0725,   0.00,   0.50,   1.00,   "P",   0.00,   7.874969730817450000},
-{50.00,   60.75,  0.0725,   0.00,   0.50,   0.10,   "P",   0.00,   10.811563849235700000},
-{50.00,   60.75,  0.0725,   0.00,   0.50,   0.50,   "P",   0.00,   12.655084420434400000},
-{50.00,   60.75,  0.0725,   0.00,   0.50,   1.00,   "P",   0.00,   14.068812347433500000},
-{100.00,   90.00,  0.0825,   0.00,   0.10,   0.10,   "C",   0.00,   10.739565764427600000},
-{100.00,   90.00,  0.0825,   0.00,   0.10,   0.50,   "C",   0.00,   13.682682955061700000},
-{100.00,   90.00,  0.0825,   0.00,   0.10,   1.00,   "C",   0.00,   17.233234434950200000},
-{100.00,   100.00,  0.0825,   0.00,   0.10,   0.10,   "C",   0.00,   1.709643173779020000},
-{100.00,   100.00,  0.0825,   0.00,   0.10,   0.50,   "C",   0.00,   5.240956408279040000},
-{100.00,   100.00,  0.0825,   0.00,   0.10,   1.00,   "C",   0.00,   9.021567470247120000},
-{100.00,   110.00,  0.0825,   0.00,   0.10,   0.10,   "C",   0.00,   0.002938681227336320},
-{100.00,   110.00,  0.0825,   0.00,   0.10,   0.50,   "C",   0.00,   0.928877789383869000},
-{100.00,   110.00,  0.0825,   0.00,   0.10,   1.00,   "C",   0.00,   3.401688909911660000},
-{100.00,   90.00,  0.0825,   0.00,   0.25,   0.10,   "C",   0.00,   10.991579413464500000},
-{100.00,   90.00,  0.0825,   0.00,   0.25,   0.50,   "C",   0.00,   15.507256193857400000},
-{100.00,   90.00,  0.0825,   0.00,   0.25,   1.00,   "C",   0.00,   20.091308227254800000},
-{100.00,   100.00,  0.0825,   0.00,   0.25,   0.10,   "C",   0.00,   3.568013775180880000},
-{100.00,   100.00,  0.0825,   0.00,   0.25,   0.50,   "C",   0.00,   9.107927694355590000},
-{100.00,   100.00,  0.0825,   0.00,   0.25,   1.00,   "C",   0.00,   14.025694755963400000},
-{100.00,   110.00,  0.0825,   0.00,   0.25,   0.10,   "C",   0.00,   0.564947997341128000},
-{100.00,   110.00,  0.0825,   0.00,   0.25,   0.50,   "C",   0.00,   4.796306777823870000},
-{100.00,   110.00,  0.0825,   0.00,   0.25,   1.00,   "C",   0.00,   9.380215666129900000},
-{100.00,   90.00,  0.0825,   0.00,   0.50,   0.10,   "C",   0.00,   12.803934625179900000},
-{100.00,   90.00,  0.0825,   0.00,   0.50,   0.50,   "C",   0.00,   20.987751407192000000},
-{100.00,   90.00,  0.0825,   0.00,   0.50,   1.00,   "C",   0.00,   27.842982610886100000},
-{100.00,   100.00,  0.0825,   0.00,   0.50,   0.10,   "C",   0.00,   6.694710681788890000},
-{100.00,   100.00,  0.0825,   0.00,   0.50,   0.50,   "C",   0.00,   15.861123252603300000},
-{100.00,   100.00,  0.0825,   0.00,   0.50,   1.00,   "C",   0.00,   23.171055823977000000},
-{100.00,   110.00,  0.0825,   0.00,   0.50,   0.10,   "C",   0.00,   3.011118247238870000},
-{100.00,   110.00,  0.0825,   0.00,   0.50,   0.50,   "C",   0.00,   11.810384819288500000},
-{100.00,   110.00,  0.0825,   0.00,   0.50,   1.00,   "C",   0.00,   19.230265826002600000},
-{100.00,   90.00,  0.0825,   0.00,   0.10,   0.10,   "P",   0.00,   0.000120171536473068},
-{100.00,   90.00,  0.0825,   0.00,   0.10,   0.50,   "P",   0.00,   0.045711194234222000},
-{100.00,   90.00,  0.0825,   0.00,   0.10,   1.00,   "P",   0.00,   0.106263842062639000},
-{100.00,   100.00,  0.0825,   0.00,   0.10,   0.10,   "P",   0.00,   0.888036959455578000},
-{100.00,   100.00,  0.0825,   0.00,   0.10,   0.50,   "P",   0.00,   1.199876674026320000},
-{100.00,   100.00,  0.0825,   0.00,   0.10,   1.00,   "P",   0.00,   1.102711255927580000},
-{100.00,   110.00,  0.0825,   0.00,   0.10,   0.10,   "P",   0.00,   9.099171845471530000},
-{100.00,   110.00,  0.0825,   0.00,   0.10,   0.50,   "P",   0.00,   6.483690081705880000},
-{100.00,   110.00,  0.0825,   0.00,   0.10,   1.00,   "P",   0.00,   4.690947074160150000},
-{100.00,   90.00,  0.0825,   0.00,   0.25,   0.10,   "P",   0.00,   0.252133820573404000},
-{100.00,   90.00,  0.0825,   0.00,   0.25,   0.50,   "P",   0.00,   1.870284433029970000},
-{100.00,   90.00,  0.0825,   0.00,   0.25,   1.00,   "P",   0.00,   2.964337634367170000},
-{100.00,   100.00,  0.0825,   0.00,   0.25,   0.10,   "P",   0.00,   2.746407560857420000},
-{100.00,   100.00,  0.0825,   0.00,   0.25,   0.50,   "P",   0.00,   5.066847960102870000},
-{100.00,   100.00,  0.0825,   0.00,   0.25,   1.00,   "P",   0.00,   6.106838541643810000},
-{100.00,   110.00,  0.0825,   0.00,   0.25,   0.10,   "P",   0.00,   9.661181161585320000},
-{100.00,   110.00,  0.0825,   0.00,   0.25,   0.50,   "P",   0.00,   10.351119070145900000},
-{100.00,   110.00,  0.0825,   0.00,   0.25,   1.00,   "P",   0.00,   10.669473830378400000},
-{100.00,   90.00,  0.0825,   0.00,   0.50,   0.10,   "P",   0.00,   2.064489032288790000},
-{100.00,   90.00,  0.0825,   0.00,   0.50,   0.50,   "P",   0.00,   7.350779646364550000},
-{100.00,   90.00,  0.0825,   0.00,   0.50,   1.00,   "P",   0.00,   10.716012017998500000},
-{100.00,   100.00,  0.0825,   0.00,   0.50,   0.10,   "P",   0.00,   5.873104467465440000},
-{100.00,   100.00,  0.0825,   0.00,   0.50,   0.50,   "P",   0.00,   11.820043518350600000},
-{100.00,   100.00,  0.0825,   0.00,   0.50,   1.00,   "P",   0.00,   15.252199609657500000},
-{100.00,   110.00,  0.0825,   0.00,   0.50,   0.10,   "P",   0.00,   12.107351411483100000},
-{100.00,   110.00,  0.0825,   0.00,   0.50,   0.50,   "P",   0.00,   17.365197111610500000},
-{100.00,   110.00,  0.0825,   0.00,   0.50,   1.00,   "P",   0.00,   20.519523990251100000},
-{50.00,   41.25,  0.0825,   0.00,   0.10,   0.10,   "C",   0.00,   9.088912563432170000},
-{50.00,   41.25,  0.0825,   0.00,   0.10,   0.50,   "C",   0.00,   10.417339221247600000},
-{50.00,   41.25,  0.0825,   0.00,   0.10,   1.00,   "C",   0.00,   12.020458260573200000},
-{50.00,   50.00,  0.0825,   0.00,   0.10,   0.10,   "C",   0.00,   0.854821586889512000},
-{50.00,   50.00,  0.0825,   0.00,   0.10,   0.50,   "C",   0.00,   2.620478204139520000},
-{50.00,   50.00,  0.0825,   0.00,   0.10,   1.00,   "C",   0.00,   4.510783735123560000},
-{50.00,   60.75,  0.0825,   0.00,   0.10,   0.10,   "C",   0.00,   0.000000000509770462},
-{50.00,   60.75,  0.0825,   0.00,   0.10,   0.50,   "C",   0.00,   0.020258714482434300},
-{50.00,   60.75,  0.0825,   0.00,   0.10,   1.00,   "C",   0.00,   0.346802700406624000},
-{50.00,   41.25,  0.0825,   0.00,   0.25,   0.10,   "C",   0.00,   9.095279779656780000},
-{50.00,   41.25,  0.0825,   0.00,   0.25,   0.50,   "C",   0.00,   10.757961410313800000},
-{50.00,   41.25,  0.0825,   0.00,   0.25,   1.00,   "C",   0.00,   12.761066081739600000},
-{50.00,   50.00,  0.0825,   0.00,   0.25,   0.10,   "C",   0.00,   1.784006887590440000},
-{50.00,   50.00,  0.0825,   0.00,   0.25,   0.50,   "C",   0.00,   4.553963847177790000},
-{50.00,   50.00,  0.0825,   0.00,   0.25,   1.00,   "C",   0.00,   7.012847377981680000},
-{50.00,   60.75,  0.0825,   0.00,   0.25,   0.10,   "C",   0.00,   0.013338549021010600},
-{50.00,   60.75,  0.0825,   0.00,   0.25,   0.50,   "C",   0.00,   1.013087068903510000},
-{50.00,   60.75,  0.0825,   0.00,   0.25,   1.00,   "C",   0.00,   2.818536762927260000},
-{50.00,   41.25,  0.0825,   0.00,   0.50,   0.10,   "C",   0.00,   9.435914325176720000},
-{50.00,   41.25,  0.0825,   0.00,   0.50,   0.50,   "C",   0.00,   12.796624953351600000},
-{50.00,   41.25,  0.0825,   0.00,   0.50,   1.00,   "C",   0.00,   15.936815099823400000},
-{50.00,   50.00,  0.0825,   0.00,   0.50,   0.10,   "C",   0.00,   3.347355340894440000},
-{50.00,   50.00,  0.0825,   0.00,   0.50,   0.50,   "C",   0.00,   7.930561626301670000},
-{50.00,   50.00,  0.0825,   0.00,   0.50,   1.00,   "C",   0.00,   11.585527911988500000},
-{50.00,   60.75,  0.0825,   0.00,   0.50,   0.10,   "C",   0.00,   0.506649223493164000},
-{50.00,   60.75,  0.0825,   0.00,   0.50,   0.50,   "C",   0.00,   4.146230216819100000},
-{50.00,   60.75,  0.0825,   0.00,   0.50,   1.00,   "C",   0.00,   7.743859322998950000},
-{50.00,   41.25,  0.0825,   0.00,   0.10,   0.10,   "P",   0.00,   0.000000000023739918},
-{50.00,   41.25,  0.0825,   0.00,   0.10,   0.50,   "P",   0.00,   0.000393830868315673},
-{50.00,   41.25,  0.0825,   0.00,   0.10,   1.00,   "P",   0.00,   0.003930072166366200},
-{50.00,   50.00,  0.0825,   0.00,   0.10,   0.10,   "P",   0.00,   0.444018479727789000},
-{50.00,   50.00,  0.0825,   0.00,   0.10,   0.50,   "P",   0.00,   0.599938337013158000},
-{50.00,   50.00,  0.0825,   0.00,   0.10,   1.00,   "P",   0.00,   0.551355627963788000},
-{50.00,   60.75,  0.0825,   0.00,   0.10,   0.10,   "P",   0.00,   10.250874225308300000},
-{50.00,   60.75,  0.0825,   0.00,   0.10,   0.50,   "P",   0.00,   8.315302775923910000},
-{50.00,   60.75,  0.0825,   0.00,   0.10,   1.00,   "P",   0.00,   6.286097550207500000},
-{50.00,   41.25,  0.0825,   0.00,   0.25,   0.10,   "P",   0.00,   0.006367216248349180},
-{50.00,   41.25,  0.0825,   0.00,   0.25,   0.50,   "P",   0.00,   0.341016019934537000},
-{50.00,   41.25,  0.0825,   0.00,   0.25,   1.00,   "P",   0.00,   0.744537893332813000},
-{50.00,   50.00,  0.0825,   0.00,   0.25,   0.10,   "P",   0.00,   1.373203780428710000},
-{50.00,   50.00,  0.0825,   0.00,   0.25,   0.50,   "P",   0.00,   2.533423980051440000},
-{50.00,   50.00,  0.0825,   0.00,   0.25,   1.00,   "P",   0.00,   3.053419270821910000},
-{50.00,   60.75,  0.0825,   0.00,   0.25,   0.10,   "P",   0.00,   10.264212773819500000},
-{50.00,   60.75,  0.0825,   0.00,   0.25,   0.50,   "P",   0.00,   9.308131130344990000},
-{50.00,   60.75,  0.0825,   0.00,   0.25,   1.00,   "P",   0.00,   8.757831612728140000},
-{50.00,   41.25,  0.0825,   0.00,   0.50,   0.10,   "P",   0.00,   0.347001761768287000},
-{50.00,   41.25,  0.0825,   0.00,   0.50,   0.50,   "P",   0.00,   2.379679562972370000},
-{50.00,   41.25,  0.0825,   0.00,   0.50,   1.00,   "P",   0.00,   3.920286911416630000},
-{50.00,   50.00,  0.0825,   0.00,   0.50,   0.10,   "P",   0.00,   2.936552233732720000},
-{50.00,   50.00,  0.0825,   0.00,   0.50,   0.50,   "P",   0.00,   5.910021759175310000},
-{50.00,   50.00,  0.0825,   0.00,   0.50,   1.00,   "P",   0.00,   7.626099804828730000},
-{50.00,   60.75,  0.0825,   0.00,   0.50,   0.10,   "P",   0.00,   10.757523448291700000},
-{50.00,   60.75,  0.0825,   0.00,   0.50,   0.50,   "P",   0.00,   12.441274278260600000},
-{50.00,   60.75,  0.0825,   0.00,   0.50,   1.00,   "P",   0.00,   13.683154172799800000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.05,   "C",   0.00,   10.123665331672000000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.15,   "C",   0.00,   10.373032852188900000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.25,   "C",   0.00,   10.636947537285500000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.35,   "C",   0.00,   10.917165299126100000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.40,   "C",   0.00,   11.061557599916400000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.75,   "C",   0.00,   12.101053829939600000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.05,   "C",   0.00,   0.961818366406236000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.15,   "C",   0.00,   1.756378640433290000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.25,   "C",   0.00,   2.348994210822140000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.35,   "C",   0.00,   2.858468103310000000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.40,   "C",   0.00,   3.093733002160350000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.75,   "C",   0.00,   4.535722066606680000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.05,   "C",   0.00,   0.000006723584199279},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.15,   "C",   0.00,   0.012638573288007100},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.25,   "C",   0.00,   0.080669824623617900},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.35,   "C",   0.00,   0.203313366122133000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.40,   "C",   0.00,   0.279741513989867000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.75,   "C",   0.00,   0.966244057205561000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.05,   "C",   0.00,   10.180826153638800000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.15,   "C",   0.00,   10.961715417709400000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   11.806688555076800000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.35,   "C",   0.00,   12.605623650271500000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.40,   "C",   0.00,   12.985712061767300000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.75,   "C",   0.00,   15.357169521085200000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.05,   "C",   0.00,   2.297712420609210000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.15,   "C",   0.00,   4.062608172250370000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   5.316534629514670000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.35,   "C",   0.00,   6.358166104399040000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.40,   "C",   0.00,   6.828913330585190000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.75,   "C",   0.00,   9.591743416200030000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.05,   "C",   0.00,   0.112351670775873000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.15,   "C",   0.00,   0.941524462753784000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   1.841160573457080000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.35,   "C",   0.00,   2.688576689404750000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.40,   "C",   0.00,   3.091204880502100000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.75,   "C",   0.00,   5.602711897085350000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.05,   "C",   0.00,   11.084709241234900000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.15,   "C",   0.00,   13.632481055133100000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.25,   "C",   0.00,   15.655476595132900000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.35,   "C",   0.00,   17.372974698382700000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.40,   "C",   0.00,   18.152722902532300000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.75,   "C",   0.00,   22.710977121510300000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.05,   "C",   0.00,   4.523973730175930000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.15,   "C",   0.00,   7.905126847046370000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.25,   "C",   0.00,   10.259870456479600000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.35,   "C",   0.00,   12.186764904701600000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.40,   "C",   0.00,   13.049054347704600000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.75,   "C",   0.00,   18.005360351008900000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.05,   "C",   0.00,   1.310314250402410000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.15,   "C",   0.00,   4.184313321977850000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.25,   "C",   0.00,   6.424957663250310000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.35,   "C",   0.00,   8.318451201213970000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.40,   "C",   0.00,   9.176764345625750000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.75,   "C",   0.00,   14.187966555535700000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.05,   "P",   0.00,   0.000000370816316441},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.15,   "P",   0.00,   0.002547503556924290},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.25,   "P",   0.00,   0.020319624509017900},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.35,   "P",   0.00,   0.055070784382573900},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.40,   "P",   0.00,   0.076982689699630000},
-{100.00,   90.00,  0.0275,   0.00,   0.10,   0.75,   "P",   0.00,   0.263815478639822000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.05,   "P",   0.00,   0.824412854344306000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.15,   "P",   0.00,   1.344728253064450000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.25,   "P",   0.00,   1.663852085514990000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.35,   "P",   0.00,   1.900585309150540000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.40,   "P",   0.00,   1.999760879697220000},
-{100.00,   100.00,  0.0275,   0.00,   0.10,   0.75,   "P",   0.00,   2.494346120718070000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.05,   "P",   0.00,   9.848860660316070000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.15,   "P",   0.00,   9.559823147182290000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.25,   "P",   0.00,   9.327013486785750000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.35,   "P",   0.00,   9.149642292546710000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.40,   "P",   0.00,   9.076372179280420000},
-{100.00,   110.00,  0.0275,   0.00,   0.10,   0.75,   "P",   0.00,   8.720730516728090000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.05,   "P",   0.00,   0.057161192783076400},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.15,   "P",   0.00,   0.591230069077490000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   1.190060642300400000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.35,   "P",   0.00,   1.743529135528020000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.40,   "P",   0.00,   2.001137151550470000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.75,   "P",   0.00,   3.519931169785430000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.05,   "P",   0.00,   2.160306908547280000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.15,   "P",   0.00,   3.650957784881540000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   4.631392504207520000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.35,   "P",   0.00,   5.400283310239590000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.40,   "P",   0.00,   5.734941208122060000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.75,   "P",   0.00,   7.550367470311420000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.05,   "P",   0.00,   9.961205607507750000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.15,   "P",   0.00,   10.488709036648100000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   11.087504235619200000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.35,   "P",   0.00,   11.634905615829300000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.40,   "P",   0.00,   11.887835545792700000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.75,   "P",   0.00,   13.357198356607900000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.05,   "P",   0.00,   0.961044280379137000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.15,   "P",   0.00,   3.261995706501170000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.25,   "P",   0.00,   5.038848682356440000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.35,   "P",   0.00,   6.510880183639170000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.40,   "P",   0.00,   7.168147992315500000},
-{100.00,   90.00,  0.0275,   0.00,   0.50,   0.75,   "P",   0.00,   10.873738770210500000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.05,   "P",   0.00,   4.386568218113990000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.15,   "P",   0.00,   7.493476459677530000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.25,   "P",   0.00,   9.574728331172470000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.35,   "P",   0.00,   11.228882110542100000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.40,   "P",   0.00,   11.955082225241500000},
-{100.00,   100.00,  0.0275,   0.00,   0.50,   0.75,   "P",   0.00,   15.963984405120300000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.05,   "P",   0.00,   11.159168187134300000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.15,   "P",   0.00,   13.731497895872100000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.25,   "P",   0.00,   15.671301325412400000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.35,   "P",   0.00,   17.264780127638500000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.40,   "P",   0.00,   17.973395010916300000},
-{100.00,   110.00,  0.0275,   0.00,   0.50,   0.75,   "P",   0.00,   21.942453015058200000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.05,   "C",   0.00,   8.806679773725550000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.15,   "C",   0.00,   8.919805847440340000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.25,   "C",   0.00,   9.032638359465810000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.35,   "C",   0.00,   9.145345404131990000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.40,   "C",   0.00,   9.201762221631910000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.75,   "C",   0.00,   9.600898793029730000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.05,   "C",   0.00,   0.480909183203118000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.15,   "C",   0.00,   0.878189320216645000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.25,   "C",   0.00,   1.174497105411070000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.35,   "C",   0.00,   1.429234051655000000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.40,   "C",   0.00,   1.546866501080180000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.75,   "C",   0.00,   2.267861033303340000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.05,   "C",   0.00,   0.000000000000000000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.15,   "C",   0.00,   0.000000171615412703},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.25,   "C",   0.00,   0.000055860184325600},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.35,   "C",   0.00,   0.000779365099622839},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.40,   "C",   0.00,   0.001842470055799290},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.75,   "C",   0.00,   0.038961694259698300},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.05,   "C",   0.00,   8.806849354517480000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.15,   "C",   0.00,   8.954197588651610000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   9.165798615967480000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.35,   "C",   0.00,   9.408822105130160000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.40,   "C",   0.00,   9.535303750088810000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.75,   "C",   0.00,   10.425117157574200000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.05,   "C",   0.00,   1.148856210304600000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.15,   "C",   0.00,   2.031304086125190000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   2.658267314757330000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.35,   "C",   0.00,   3.179083052199520000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.40,   "C",   0.00,   3.414456665292590000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.75,   "C",   0.00,   4.795871708100020000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.05,   "C",   0.00,   0.000211358987727573},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.15,   "C",   0.00,   0.049106845262957000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   0.199576273789990000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.35,   "C",   0.00,   0.408212274950217000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.40,   "C",   0.00,   0.524134867759744000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.75,   "C",   0.00,   1.404244627370240000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.05,   "C",   0.00,   8.892181952988650000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.15,   "C",   0.00,   9.628643279189300000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.25,   "C",   0.00,   10.393689811168400000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.35,   "C",   0.00,   11.099336802885700000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.40,   "C",   0.00,   11.430472829888300000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.75,   "C",   0.00,   13.444734990729800000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.05,   "C",   0.00,   2.261986865087960000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.15,   "C",   0.00,   3.952563423523180000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.25,   "C",   0.00,   5.129935228239810000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.35,   "C",   0.00,   6.093382452350780000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.40,   "C",   0.00,   6.524527173852300000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.75,   "C",   0.00,   9.002680175504460000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.05,   "C",   0.00,   0.104628872651218000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.15,   "C",   0.00,   0.911420373042769000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.25,   "C",   0.00,   1.788383179217750000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.35,   "C",   0.00,   2.607959513092190000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.40,   "C",   0.00,   2.994691865020780000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.75,   "C",   0.00,   5.365218152828680000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.05,   "P",   0.00,   0.000000000000000000},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.15,   "P",   0.00,   0.000000062650696723},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.25,   "P",   0.00,   0.000017232776604701},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.35,   "P",   0.00,   0.000218751541208349},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.40,   "P",   0.00,   0.000498721115871775},
-{50.00,   41.25,  0.0275,   0.00,   0.10,   0.75,   "P",   0.00,   0.008831215350675280},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.05,   "P",   0.00,   0.412206427172153000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.15,   "P",   0.00,   0.672364126532227000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.25,   "P",   0.00,   0.831926042757495000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.35,   "P",   0.00,   0.950292654575268000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.40,   "P",   0.00,   0.999880439848609000},
-{50.00,   50.00,  0.0275,   0.00,   0.10,   0.75,   "P",   0.00,   1.247173060359030000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.05,   "P",   0.00,   10.666526151422400000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.15,   "P",   0.00,   10.499922561288800000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.25,   "P",   0.00,   10.333832019060200000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.35,   "P",   0.00,   10.168865567647700000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.40,   "P",   0.00,   10.087254405659400000},
-{50.00,   60.75,  0.0275,   0.00,   0.10,   0.75,   "P",   0.00,   9.548825807132360000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.05,   "P",   0.00,   0.000169580791934694},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.15,   "P",   0.00,   0.034391803861966800},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   0.133177489278275000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.35,   "P",   0.00,   0.263695452539379000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.40,   "P",   0.00,   0.334040249572767000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.75,   "P",   0.00,   0.833049579895138000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.05,   "P",   0.00,   1.080153454273640000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.15,   "P",   0.00,   1.825478892440770000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   2.315696252103760000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.35,   "P",   0.00,   2.700141655119790000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.40,   "P",   0.00,   2.867470604061030000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.75,   "P",   0.00,   3.775183735155710000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.05,   "P",   0.00,   10.666737510410100000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.15,   "P",   0.00,   10.549029234936400000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   10.533352432665900000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.35,   "P",   0.00,   10.576298477498300000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.40,   "P",   0.00,   10.609546803363400000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.75,   "P",   0.00,   10.914108740242900000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.05,   "P",   0.00,   0.085502179263094900},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.15,   "P",   0.00,   0.708837494399656000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.25,   "P",   0.00,   1.361068684479170000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.35,   "P",   0.00,   1.954210150294910000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.40,   "P",   0.00,   2.229209329372280000},
-{50.00,   41.25,  0.0275,   0.00,   0.50,   0.75,   "P",   0.00,   3.852667413050720000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.05,   "P",   0.00,   2.193284109057000000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.15,   "P",   0.00,   3.746738229838770000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.25,   "P",   0.00,   4.787364165586240000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.35,   "P",   0.00,   5.614441055271050000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.40,   "P",   0.00,   5.977541112620740000},
-{50.00,   50.00,  0.0275,   0.00,   0.50,   0.75,   "P",   0.00,   7.981992202560150000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.05,   "P",   0.00,   10.771155024073600000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.15,   "P",   0.00,   11.411342762716200000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.25,   "P",   0.00,   12.122159338093700000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.35,   "P",   0.00,   12.776045715640300000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.40,   "P",   0.00,   13.080103800624400000},
-{50.00,   60.75,  0.0275,   0.00,   0.50,   0.75,   "P",   0.00,   14.875082265701300000},
-{100.00,   90.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   10.123664960855700000},
-{100.00,   90.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   10.433739898891000000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   11.806688555076800000},
-{100.00,   90.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   14.395707640825200000},
-{100.00,   90.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   17.061100221173400000},
-{100.00,   90.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   27.276574478179500000},
-{100.00,   100.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.517790662421029000},
-{100.00,   100.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   2.524199969313780000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   5.316534629514670000},
-{100.00,   100.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   8.694162162838850000},
-{100.00,   100.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   11.809330726608000000},
-{100.00,   100.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   22.972890772584900000},
-{100.00,   110.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.000000000000000003},
-{100.00,   110.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   0.151725311664208000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   1.841160573457080000},
-{100.00,   110.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   4.865673300084870000},
-{100.00,   110.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   7.926036867545800000},
-{100.00,   110.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   19.343153241896800000},
-{100.00,   90.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   10.123664960855700000},
-{100.00,   90.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   10.433739898891000000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   11.806688555076800000},
-{100.00,   90.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   14.395707640825200000},
-{100.00,   90.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   17.061100221173400000},
-{100.00,   90.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   27.276574478179500000},
-{100.00,   100.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.517790662421029000},
-{100.00,   100.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   2.524199969313780000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   5.316534629514670000},
-{100.00,   100.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   8.694162162838850000},
-{100.00,   100.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   11.809330726608000000},
-{100.00,   100.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   22.972890772584900000},
-{100.00,   110.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.000000000000000003},
-{100.00,   110.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   0.151725311664208000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   1.841160573457080000},
-{100.00,   110.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   4.865673300084870000},
-{100.00,   110.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   7.926036867545800000},
-{100.00,   110.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   19.343153241896800000},
-{100.00,   90.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   10.123664960855700000},
-{100.00,   90.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   10.433739898891000000},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   11.806688555076800000},
-{100.00,   90.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   14.395707640825200000},
-{100.00,   90.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   17.061100221173400000},
-{100.00,   90.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   27.276574478179500000},
-{100.00,   100.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.517790662421029000},
-{100.00,   100.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   2.524199969313780000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   5.316534629514670000},
-{100.00,   100.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   8.694162162838850000},
-{100.00,   100.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   11.809330726608000000},
-{100.00,   100.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   22.972890772584900000},
-{100.00,   110.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.000000000000000003},
-{100.00,   110.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   0.151725311664208000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   1.841160573457080000},
-{100.00,   110.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   4.865673300084870000},
-{100.00,   110.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   7.926036867545800000},
-{100.00,   110.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   19.343153241896800000},
-{100.00,   90.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.000000000000000000},
-{100.00,   90.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   0.063254550259028900},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   1.190060642300400000},
-{100.00,   90.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   3.533613126081700000},
-{100.00,   90.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   6.076525310956530000},
-{100.00,   90.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   15.439336126879800000},
-{100.00,   100.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.380385150359093000},
-{100.00,   100.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   2.112549581944940000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   4.631392504207520000},
-{100.00,   100.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   7.736279368679390000},
-{100.00,   100.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   10.715358604144900000},
-{100.00,   100.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   20.931514826696300000},
-{100.00,   110.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   9.848853936731870000},
-{100.00,   110.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   9.698909885558490000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   11.087504235619200000},
-{100.00,   110.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   13.812002226509500000},
-{100.00,   110.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   16.722667532836400000},
-{100.00,   110.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   27.097639701419300000},
-{100.00,   90.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.000000000000000000},
-{100.00,   90.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   0.063254550259028900},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   1.190060642300400000},
-{100.00,   90.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   3.533613126081700000},
-{100.00,   90.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   6.076525310956530000},
-{100.00,   90.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   15.439336126879800000},
-{100.00,   100.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.380385150359093000},
-{100.00,   100.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   2.112549581944940000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   4.631392504207520000},
-{100.00,   100.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   7.736279368679390000},
-{100.00,   100.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   10.715358604144900000},
-{100.00,   100.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   20.931514826696300000},
-{100.00,   110.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   9.848853936731870000},
-{100.00,   110.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   9.698909885558490000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   11.087504235619200000},
-{100.00,   110.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   13.812002226509500000},
-{100.00,   110.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   16.722667532836400000},
-{100.00,   110.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   27.097639701419300000},
-{100.00,   90.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.000000000000000000},
-{100.00,   90.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   0.063254550259028900},
-{100.00,   90.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   1.190060642300400000},
-{100.00,   90.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   3.533613126081700000},
-{100.00,   90.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   6.076525310956530000},
-{100.00,   90.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   15.439336126879800000},
-{100.00,   100.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.380385150359093000},
-{100.00,   100.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   2.112549581944940000},
-{100.00,   100.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   4.631392504207520000},
-{100.00,   100.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   7.736279368679390000},
-{100.00,   100.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   10.715358604144900000},
-{100.00,   100.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   20.931514826696300000},
-{100.00,   110.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   9.848853936731870000},
-{100.00,   110.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   9.698909885558490000},
-{100.00,   110.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   11.087504235619200000},
-{100.00,   110.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   13.812002226509500000},
-{100.00,   110.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   16.722667532836400000},
-{100.00,   110.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   27.097639701419300000},
-{50.00,   41.25,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   8.806679773725550000},
-{50.00,   41.25,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   8.920049748791770000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   9.165798615967480000},
-{50.00,   41.25,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   9.959094645483170000},
-{50.00,   41.25,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   10.982693660754800000},
-{50.00,   41.25,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   15.502116628943400000},
-{50.00,   50.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.258895331210514000},
-{50.00,   50.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   1.262099984656890000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   2.658267314757330000},
-{50.00,   50.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   4.347081081419420000},
-{50.00,   50.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   5.904665363304020000},
-{50.00,   50.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   11.486445386292500000},
-{50.00,   60.75,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.000000000000000000},
-{50.00,   60.75,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   0.000436135893052522},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   0.199576273789990000},
-{50.00,   60.75,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   1.149382650832590000},
-{50.00,   60.75,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   2.427873749477470000},
-{50.00,   60.75,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   7.940172715926700000},
-{50.00,   41.25,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   8.806679773725550000},
-{50.00,   41.25,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   8.920049748791770000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   9.165798615967480000},
-{50.00,   41.25,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   9.959094645483170000},
-{50.00,   41.25,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   10.982693660754800000},
-{50.00,   41.25,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   15.502116628943400000},
-{50.00,   50.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.258895331210514000},
-{50.00,   50.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   1.262099984656890000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   2.658267314757330000},
-{50.00,   50.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   4.347081081419420000},
-{50.00,   50.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   5.904665363304020000},
-{50.00,   50.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   11.486445386292500000},
-{50.00,   60.75,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.000000000000000000},
-{50.00,   60.75,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   0.000436135893052522},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   0.199576273789990000},
-{50.00,   60.75,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   1.149382650832590000},
-{50.00,   60.75,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   2.427873749477470000},
-{50.00,   60.75,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   7.940172715926700000},
-{50.00,   41.25,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   8.806679773725550000},
-{50.00,   41.25,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   8.920049748791770000},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   9.165798615967480000},
-{50.00,   41.25,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   9.959094645483170000},
-{50.00,   41.25,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   10.982693660754800000},
-{50.00,   41.25,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   15.502116628943400000},
-{50.00,   50.00,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.258895331210514000},
-{50.00,   50.00,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   1.262099984656890000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   2.658267314757330000},
-{50.00,   50.00,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   4.347081081419420000},
-{50.00,   50.00,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   5.904665363304020000},
-{50.00,   50.00,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   11.486445386292500000},
-{50.00,   60.75,  0.0275,   0.00,   0.05,   0.05,   "C",   0.00,   0.000000000000000000},
-{50.00,   60.75,  0.0275,   0.00,   0.15,   0.15,   "C",   0.00,   0.000436135893052522},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.25,   "C",   0.00,   0.199576273789990000},
-{50.00,   60.75,  0.0275,   0.00,   0.35,   0.35,   "C",   0.00,   1.149382650832590000},
-{50.00,   60.75,  0.0275,   0.00,   0.45,   0.40,   "C",   0.00,   2.427873749477470000},
-{50.00,   60.75,  0.0275,   0.00,   0.65,   0.75,   "C",   0.00,   7.940172715926700000},
-{50.00,   41.25,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.000000000000000000},
-{50.00,   41.25,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   0.000243964002132480},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   0.133177489278275000},
-{50.00,   41.25,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   0.813967992892385000},
-{50.00,   41.25,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   1.781430160238800000},
-{50.00,   41.25,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   5.910049051264370000},
-{50.00,   50.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.190192575179547000},
-{50.00,   50.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   1.056274790972470000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   2.315696252103760000},
-{50.00,   50.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   3.868139684339690000},
-{50.00,   50.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   5.357679302072460000},
-{50.00,   50.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   10.465757413348100000},
-{50.00,   60.75,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   10.666526151422400000},
-{50.00,   60.75,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   10.500358525566500000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   10.533352432665900000},
-{50.00,   60.75,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   11.317468853380700000},
-{50.00,   60.75,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   12.513285685081100000},
-{50.00,   60.75,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   17.450036828799400000},
-{50.00,   41.25,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.000000000000000000},
-{50.00,   41.25,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   0.000243964002132480},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   0.133177489278275000},
-{50.00,   41.25,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   0.813967992892385000},
-{50.00,   41.25,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   1.781430160238800000},
-{50.00,   41.25,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   5.910049051264370000},
-{50.00,   50.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.190192575179547000},
-{50.00,   50.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   1.056274790972470000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   2.315696252103760000},
-{50.00,   50.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   3.868139684339690000},
-{50.00,   50.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   5.357679302072460000},
-{50.00,   50.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   10.465757413348100000},
-{50.00,   60.75,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   10.666526151422400000},
-{50.00,   60.75,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   10.500358525566500000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   10.533352432665900000},
-{50.00,   60.75,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   11.317468853380700000},
-{50.00,   60.75,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   12.513285685081100000},
-{50.00,   60.75,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   17.450036828799400000},
-{50.00,   41.25,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.000000000000000000},
-{50.00,   41.25,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   0.000243964002132480},
-{50.00,   41.25,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   0.133177489278275000},
-{50.00,   41.25,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   0.813967992892385000},
-{50.00,   41.25,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   1.781430160238800000},
-{50.00,   41.25,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   5.910049051264370000},
-{50.00,   50.00,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   0.190192575179547000},
-{50.00,   50.00,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   1.056274790972470000},
-{50.00,   50.00,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   2.315696252103760000},
-{50.00,   50.00,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   3.868139684339690000},
-{50.00,   50.00,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   5.357679302072460000},
-{50.00,   50.00,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   10.465757413348100000},
-{50.00,   60.75,  0.0275,   0.00,   0.05,   0.05,   "P",   0.00,   10.666526151422400000},
-{50.00,   60.75,  0.0275,   0.00,   0.15,   0.15,   "P",   0.00,   10.500358525566500000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   10.533352432665900000},
-{50.00,   60.75,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   11.317468853380700000},
-{50.00,   60.75,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   12.513285685081100000},
-{50.00,   60.75,  0.0275,   0.00,   0.65,   0.75,   "P",   0.00,   17.450036828799400000},
-{50.00,   60.75,  0.0275,   0.00,   0.25,   0.25,   "P",   0.00,   10.533352432665900000},
-{50.00,   60.75,  0.0275,   0.00,   0.35,   0.35,   "P",   0.00,   11.317468853380700000},
-{50.00,   60.75,  0.0275,   0.00,   0.45,   0.40,   "P",   0.00,   12.513285685081100000},
-{100.00,   110.00,  0.1000,   0.00,   0.25,   0.50,   "C",   0.00,   5.123575416865320000},
-{100.00,   110.00,  0.1000,   0.00,   0.25,   1.00,   "C",   0.00,   10.160055944516600000},
-{100.00,   90.00,  0.1000,   0.00,   0.50,   0.10,   "C",   0.00,   12.919509619564700000},
-{100.00,   90.00,  0.1000,   0.00,   0.50,   0.50,   "C",   0.00,   21.438280655724400000},
-{100.00,   90.00,  0.1000,   0.00,   0.50,   1.00,   "C",   0.00,   28.643647264488200000},
-{100.00,   100.00,  0.1000,   0.00,   0.50,   0.10,   "C",   0.00,   6.779936664291260000},
-{100.00,   100.00,  0.1000,   0.00,   0.50,   0.50,   "C",   0.00,   16.263193147074300000},
-{100.00,   100.00,  0.1000,   0.00,   0.50,   1.00,   "C",   0.00,   23.926745214162700000},
-{100.00,   110.00,  0.1000,   0.00,   0.50,   0.10,   "C",   0.00,   3.061909566605540000},
-{100.00,   110.00,  0.1000,   0.00,   0.50,   0.50,   "C",   0.00,   12.155688815568700000},
-{100.00,   110.00,  0.1000,   0.00,   0.50,   1.00,   "C",   0.00,   19.929858372066300000},
-{100.00,   90.00,  0.1000,   0.00,   0.10,   0.10,   "P",   0.00,   0.000095752219082624},
-{100.00,   90.00,  0.1000,   0.00,   0.10,   0.50,   "P",   0.00,   0.032219033907538300},
-{100.00,   90.00,  0.1000,   0.00,   0.10,   1.00,   "P",   0.00,   0.066226743903883000},
-{100.00,   100.00,  0.1000,   0.00,   0.10,   0.10,   "P",   0.00,   0.819967493295226000},
-{100.00,   100.00,  0.1000,   0.00,   0.10,   0.50,   "P",   0.00,   0.973216054356396000},
-{100.00,   100.00,  0.1000,   0.00,   0.10,   1.00,   "P",   0.00,   0.791889047262800000},
-{100.00,   110.00,  0.1000,   0.00,   0.10,   0.10,   "P",   0.00,   8.909004787274070000},
-{100.00,   110.00,  0.1000,   0.00,   0.10,   0.50,   "P",   0.00,   5.775959538905960000},
-{100.00,   110.00,  0.1000,   0.00,   0.10,   1.00,   "P",   0.00,   3.748863004264400000},
diff --git a/user/apps/parlib/pthread/pthread_test.c b/user/apps/parlib/pthread/pthread_test.c
deleted file mode 100644 (file)
index d474931..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <stdlib.h>
-#include <assert.h>
-#include <pthread.h>
-#include <hart.h>
-#include <stdio.h>
-
-void* func(void* arg)
-{
-       int id = (int)arg;
-
-       printf("Hello from pthread %d!\n",id);
-
-       return arg;
-}
-
-int main()
-{
-       int i;
-       pthread_t* t = (pthread_t*)malloc(sizeof(pthread_t)*(hart_max_harts()-1));
-
-       for(i = 0; i < hart_max_harts()-1; i++)
-               pthread_create(&t[i],NULL,&func,(void*)(i+1));
-
-       for(i = 0; i < hart_max_harts()-1; i++)
-       {
-               void* x = 0;
-               pthread_join(t[i],&x);
-               assert((long)x == i+1);
-       }
-
-       printf("Pthreads joined!  Bye...\n");
-       return 0;
-}
index 548eb3d..d562bd8 100644 (file)
@@ -7,11 +7,14 @@ char* readline(const char * prompt)
 {
        int i, read_amt;
        char c;
-       #define BUFLEN 256
+       #define BUFLEN 512
        static char buf[BUFLEN];
 
        if (prompt != NULL)
-               printf("%s", prompt); fflush(stdout);
+       {
+               printf("%s", prompt);
+               fflush(stdout);
+       }
 
        i = 0;
        while (1) {
index 2d882bc..1f8a0ad 100644 (file)
@@ -2,11 +2,98 @@
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/wait.h>
 #include <fcntl.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <parlib.h>
+#include <newlib_backend.h>
+
+int shell_exec(const char* cmdline)
+{
+       #define MY_MAX_ARGV 16
+       char* argv[MY_MAX_ARGV+1] = {0};
+       char* p0 = strdup(cmdline);
+       char* p = p0;
+       for(int i = 0; i < MY_MAX_ARGV; i++)
+       {
+               argv[i] = p;
+               p = strchr(p,' ');
+               if(p)
+                       *p++ = 0;
+               else
+                       break;
+       }
+
+       int ret = fork();
+       if(ret == 0)
+       {
+               char** envp = environ;
+               const char* path = NULL;
+               int nenv;
+               for(nenv = 0; environ[nenv]; nenv++)
+                       if(strncmp(environ[nenv],"PATH=",5) == 0)
+                               path = environ[nenv]+5;
+
+               if(path == NULL)
+               {
+                       envp = (char**)malloc(sizeof(char**)*(nenv+2));
+                       for(int i = 0; i < nenv; i++)
+                               envp[i] = environ[i];
+                       envp[nenv] = "PATH=:/bin:/usr/bin";
+                       path = envp[nenv]+5;
+                       envp[nenv+1] = 0;
+               }
+
+               char* fn = NULL, *buf = NULL;
+               if(argv[0][0] == '/')
+                       fn = argv[0];
+               else
+               {
+                       buf = (char*)malloc(sizeof(char)*(strlen(argv[0])+strlen(path)+2));
+                       while(fn == NULL)
+                       {
+                               const char* end = strchr(path,':');
+                               int len = end ? end-path : strlen(path);
+                               memcpy(buf,path,len);
+                               if(len && buf[len-1] != '/')
+                                       buf[len++] = '/';
+                               strcpy(buf+len,argv[0]);
+
+                               if(access(buf,X_OK) == 0)
+                                       fn = buf;
+                               if(end == NULL)
+                                       break;
+                               path = end+1;
+                       }
+
+                       if(fn == NULL)
+                       {
+                               printf("%s: not found\n",argv[0]);
+                               exit(1);
+                       }
+               }
+
+               execve(fn,argv,envp);
+               free(buf);
+               perror("execvp");
+               exit(1);
+       }
+       else if(ret > 0)
+       {
+               int status;
+               if(wait(&status))
+                       perror("wait");
+               else
+                       debug_in_out("%s returned %d\n",argv[0],status);
+       }
+       else
+               perror("fork");
+
+       free(p0);
+       return 0;
+}
 
 extern char * readline(const char *prompt);
 
@@ -17,21 +104,22 @@ int run_binary_filename(const char* cmdline, size_t colors)
 {
        int ret = 0;
 
+       const char* cmdptr = cmdline;
        char argv_buf[PROCINFO_MAX_ARGV_SIZE] = {0};
-       char* argv_buf_ptr = argv_buf;
-       for(int argc = 0; ; argc++)
+       intreg_t* argv = (intreg_t*)argv_buf;
+       argv[0] = 0;
+       int argc;
+       for(argc = 0; ; argc++)
        {
-               while(*cmdline == ' ')
-                       cmdline++;
-               if(*cmdline == 0)
+               while(*cmdptr == ' ')
+                       cmdptr++;
+               if(*cmdptr == 0)
                        break;
 
-               char* p = strchr(cmdline,' ');
-               int len = p == NULL ? strlen(cmdline) : p-cmdline;
+               char* p = strchr(cmdptr,' ');
+               int len = p == NULL ? 1+strlen(cmdptr) : 1+p-cmdptr;
 
-               memcpy(argv_buf_ptr,cmdline,len);
-               argv_buf_ptr[len] = 0;
-               argv_buf_ptr += len+1;
+               argv[argc+1] = argv[argc]+len;
 
                if(p == NULL)
                {
@@ -39,11 +127,19 @@ int run_binary_filename(const char* cmdline, size_t colors)
                        break;
                }
 
-               cmdline = p;
+               cmdptr = p;
        }
-       
+       for(int i = 0; i < argc; i++)
+       {
+               intreg_t offset = argv[i];
+               argv[i] += (argc+1)*sizeof(char*);
+               memcpy(argv_buf+argv[i],cmdline+offset,argv[i+1]-offset-1);
+               argv_buf[argv[i]+argv[i+1]-offset-1] = 0;
+       }
+       argv[argc] = 0;
 
-       int fd = open(argv_buf, O_RDONLY, 0);
+       char* filename = argv_buf+argv[0];
+       int fd = open(filename, O_RDONLY, 0);
        if(fd < 0)
        {
                printf("open failed\n");
@@ -81,8 +177,8 @@ int run_binary_filename(const char* cmdline, size_t colors)
                }
                if(bytes_read == 0) break;
        }
-       printf("Loading Binary: %s, ROMSIZE: %d\n",argv_buf,total_bytes_read);
-       ret = sys_run_binary(binary_buf, total_bytes_read, argv_buf, PROCINFO_MAX_ARGV_SIZE, colors);
+       //printf("Loading Binary: %s, ROMSIZE: %d\n",filename,total_bytes_read);
+       ret = sys_run_binary(binary_buf, total_bytes_read, argv_buf, colors);
        if(ret < 0)
                fprintf(stderr, "Error: Unable to run remote binary\n");
        else
index 38104a4..b0fc8c4 100644 (file)
@@ -7,6 +7,10 @@
 #ifndef ROS_INC_PARLIB_H
 #define ROS_INC_PARLIB_H 1
 
+#define PARLIB_TLS_SIZE 16384
+
+#ifndef __ASSEMBLER__
+
 #include <ros/common.h>
 #include <ros/memlayout.h>
 #include <ros/syscall.h>
@@ -34,17 +38,19 @@ ssize_t     sys_serial_read(void* buf, size_t len);
 ssize_t     sys_eth_write(void *COUNT(len) buf, size_t len); 
 ssize_t     sys_eth_read(void *COUNT(len) buf, size_t len);
 ssize_t     sys_run_binary(void* binary_buf, size_t len,
-                           void* arg, size_t arglen, 
-                           size_t num_colors);
+                           char arg[PROCINFO_MAX_ARGV_SIZE], size_t num_colors);
 int         sys_getpid(void);
 size_t      sys_getcpuid(void);
 error_t     sys_brk(void* addr);
-error_t     sys_proc_destroy(int pid);
+error_t     sys_proc_destroy(int pid, int exitcode);
 ssize_t     sys_shared_page_alloc(void *COUNT(PGSIZE) *addr, pid_t p2, 
                                   int p1_flags, int p2_flags);
 ssize_t     sys_shared_page_free(void *COUNT(PGSIZE) addr, pid_t p2);
 ssize_t     sys_resource_req(int type, size_t amount, uint32_t flags);
 void        sys_reboot();
+void        sys_yield();
 int         gettimeofday(struct timeval* tp, void* tzp);
 
+#endif // !ASSEMBLER
+
 #endif // !ROS_INC_PARLIB_H
index e44a40a..b4c2655 100644 (file)
@@ -2,8 +2,8 @@ USER_PARLIB_IVY_DIR := $(USER_PARLIB_DIR)/ivy
 OBJDIRS += $(USER_PARLIB_IVY_DIR)
 
 USER_PARLIB_IVY_CFLAGS   := $(USER_CFLAGS) \
-                            -I$(USER_PARLIB_NEWLIB_DIR)/include \
                             -I$(USER_PARLIB_INCLUDE_DIR)
+                            # -I$(USER_PARLIB_NEWLIB_DIR)/include
 ifeq ($(COMPILER),IVY)
 USER_PARLIB_IVY_CFLAGS   += --nodeputy
 endif
index 77b6280..1378539 100644 (file)
@@ -2,8 +2,8 @@ USER_PARLIB_SRC_DIR = $(USER_PARLIB_DIR)/src
 OBJDIRS += $(USER_PARLIB_SRC_DIR)
 
 USER_PARLIB_SRC_CFLAGS   := $(USER_CFLAGS) \
-                            -I$(USER_PARLIB_DIR)/inc \
-                            -I$(USER_PARLIB_NEWLIB_DIR)/include
+                            -I$(USER_PARLIB_DIR)/inc
+                            -I$(USER_PARLIB_NEWLIB_DIR)/include
 ifeq ($(COMPILER),IVY)
 PATCHFILE = $(OBJDIR)/$(USER_PARLIB_DIR)/libc_patch.i
 USER_PARLIB_SRC_CFLAGS   += --nopatch --patch=$(PATCHFILE)
index 43b0068..456f8fa 100644 (file)
@@ -44,9 +44,7 @@ notcore0:
        mov     stack_ptr_array,%edx
        mov     (%edx,%eax,4),%esp
 
-       call    hart_entry
-
-       call    hart_yield
+       call    parlib_unmain
 
        // illegal instruction in case hart_yield accidentally returns
        mov     (0),%eax
index 4de33e7..bb03dde 100644 (file)
@@ -35,7 +35,7 @@ char **environ = __env;
  */
 void _exit(int __status)
 {
-       sys_proc_destroy(sys_getpid()); // TODO: can run getpid and cache it
+       sys_proc_destroy(sys_getpid(),__status); // TODO: can run getpid and cache it
        while(1); //Should never get here...
 }
     
index b453d1d..804ddf0 100644 (file)
@@ -26,6 +26,8 @@ void* sbrk(ptrdiff_t incr)
        uint8_t* prev_heap_end; 
        prev_heap_end = heap_end;
        if (sys_brk(heap_end + incr) < 0) {
+               debug_in_out("\tsys_brk(%p+%d) failed\n",heap_end,incr);
+               hart_lock_unlock(&sbrk_lock);
                errno = ENOMEM;
                return (void*CT(1))TC(-1);
        }
index 3a65d6b..4e091e4 100644 (file)
@@ -1,5 +1,6 @@
 // Called from entry.S to get us going.
 
+#include <sys/reent.h>
 #include <parlib.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -7,6 +8,8 @@
 #include <hart.h>
 #include <assert.h>
 
+char core0_tls[PARLIB_TLS_SIZE];
+
 // call static destructors.
 void parlib_dtors()
 {
@@ -34,40 +37,54 @@ void parlib_ctors()
                ((ctor*)__CTOR_LIST__)[nctor-i-1]();
 }
 
-// build argv from procinfo.argv_buf, which is a packed array
-// of null-terminated strings, terminated by a final null character
-char** parlib_build_argc_argv(int* argc)
+// build argv from procinfo.argv_buf
+char** parlib_build_argc_argv(char* buf, int* argc)
 {
-       char* buf = procinfo.argv_buf;
-       for(*argc = 0; *buf; (*argc)++)
-               buf += strlen(buf)+1;
+       intreg_t* offset = (intreg_t*)buf;
+       for(*argc = 0; offset[*argc]; (*argc)++)
+               ;
 
-       buf = procinfo.argv_buf;
-       char** argv = (char**)malloc(sizeof(char*)*(*argc+1));
+       char** argv = (char**)malloc((*argc+1)*sizeof(char*));
+       assert(argv);
        for(int i = 0; i < *argc; i++)
        {
-               argv[i] = buf;
-               buf += strlen(buf)+1;
+               argv[i] = strdup(buf + offset[i]);
+               assert(argv[i]);
        }
        argv[*argc] = 0;
-
        return argv;
 }
 
 struct timeval timeval_start;
 
-void parlibmain()
+// the first time any thread enters, it calls this function
+void parlib_initthread()
+{
+       // initialize the newlib reentrancy structure
+       extern __thread struct _reent _thread_reent;
+       _REENT_INIT_PTR(&_thread_reent);
+}
+
+// entry point for not-core 0
+void parlib_unmain()
+{
+       parlib_initthread();
+       hart_entry();
+       hart_yield();
+}
+
+// entry point for core 0
+void parlib_main()
 {
        // only core 0 runs parlibmain, but if it yields then
        // is given back, we don't want it to reinit things
        static int initialized = 0;
        if(initialized)
-       {
-               hart_entry();
-               hart_yield();
-       }
+               parlib_unmain();
        initialized = 1;
 
+       parlib_initthread();
+
        // get start time (for times)
        if(gettimeofday(&timeval_start,NULL))
                timeval_start.tv_sec = timeval_start.tv_usec = 0;
@@ -78,13 +95,15 @@ void parlibmain()
        // call static destructors on exit
        atexit(&parlib_dtors);
 
-       // set up argc/argv
-       int argc;
-       char** argv = parlib_build_argc_argv(&argc);
+       // set up argc/argv/envp
+       int argc,envc;
+       char** argv = parlib_build_argc_argv(procinfo.argv_buf,&argc);
+       environ = parlib_build_argc_argv(procinfo.env_buf,&envc);
 
        // call user main routine
-       extern int main(int argc, char * NTS * COUNT(argc) NT argv);
-       int r = main(argc,argv);
+       extern int main(int argc, char * NTS * COUNT(argc) NT argv,
+                                 char * NTS * COUNT(envc) NT envp);
+       int r = main(argc,argv,environ);
 
        // here I'd free(argv), but since we're exiting, it doesn't matter...
 
index 336b60c..2f42114 100644 (file)
@@ -1,6 +1,7 @@
 #include <arch/mmu.h>
 #include <arch/arch.h>
 #include <ros/memlayout.h>
+#include <parlib.h>
 
 .data
 
@@ -26,11 +27,6 @@ stack_ptr_array:
 tls_array:
        .word 0
 
-.align 8
-core0_tls:
-       .skip 1024*1024
-
-
 // Entrypoint - this is where the kernel (or our parent environment)
 // starts us running when we are initially loaded into a new environment.
 .text
@@ -41,9 +37,9 @@ _start:
         nop
 
        // Set up TLS
-       set     core0_tls,%g7
+       set     core0_tls+PARLIB_TLS_SIZE,%g7
 
-       call    parlibmain
+       call    parlib_main
         nop
 
        unimp
@@ -63,10 +59,7 @@ notcore0:
        ld      [%l0], %l0
        ld      [%l0+%l1],%g7
 
-       call    hart_entry
-        nop
-
-       call    hart_yield
+       call    parlib_unmain
         nop
 
        unimp
index ee47d2a..a50a076 100644 (file)
@@ -1,12 +1,15 @@
 /* See COPYRIGHT for copyright information. */
 /* Andrew Waterman <waterman@eecs.bekeley.edu> */
 
+#include <sys/fcntl.h>
+#include <stdio.h>
 #include <arch/arch.h>
 #include <arch/frontend.h>
 #include <parlib.h>
 #include <sys/stat.h>
 #include <sys/unistd.h>
 #include <sys/times.h>
+#include <sys/wait.h>
 #include <sys/time.h>
 #include <debug.h>
 #include <hart.h>
@@ -30,7 +33,7 @@
        char name##_blah[2*PGSIZE] __attribute__((aligned(8))); \
        char* name = (char*)(((uint32_t)name##_blah+PGSIZE)/PGSIZE*PGSIZE)
        
-#define copy_if_off_page(ptr,len) \
+#define memcpy_if_off_page(ptr,len) \
        assert(len <= PGSIZE); \
        char buf##ptr[2*PGSIZE] __attribute__((aligned(8))); \
        if((uint32_t)ptr % sizeof(uint32_t) != 0 || ((uint32_t)ptr)/PGSIZE != ((uint32_t)ptr+len)/PGSIZE) \
                ptr = buf2##ptr; \
        }
 
+#define strcpy_if_off_page(ptr,len) \
+       assert(len <= PGSIZE); \
+       char buf##ptr[2*PGSIZE] __attribute__((aligned(8))); \
+       if((uint32_t)ptr % sizeof(uint32_t) != 0 || ((uint32_t)ptr)/PGSIZE != ((uint32_t)ptr+len)/PGSIZE) \
+       { \
+               char* buf2##ptr = (char*)(((uint32_t)buf##ptr+PGSIZE)/PGSIZE*PGSIZE); \
+               strcpy(buf2##ptr,ptr); \
+               ptr = buf2##ptr; \
+       }
+
 #define buf_if_off_page(ptr,len) \
        assert(len <= PGSIZE); \
-       char buf##ptr [2*PGSIZE]; \
+       char buf##ptr [2*PGSIZE] __attribute__((aligned(8))); \
        char* buf2##ptr = (char*)(((uint32_t)buf##ptr+PGSIZE)/PGSIZE*PGSIZE); \
        void* old##ptr = ptr; \
        if((uint32_t)ptr % sizeof(uint32_t) != 0 || ((uint32_t)ptr)/PGSIZE != ((uint32_t)ptr+len)/PGSIZE) \
@@ -51,7 +64,7 @@
        }
 
 #define copyout_if_off_page(ptr,len) \
-       if((uint32_t)(old##ptr) % sizeof(uint32_t) != 0 || ((uint32_t)(old##ptr))/PGSIZE != ((uint32_t)ptr+len)/PGSIZE) \
+       if((uint32_t)(old##ptr) % sizeof(uint32_t) != 0 || ((uint32_t)(old##ptr))/PGSIZE != ((uint32_t)(old##ptr)+len)/PGSIZE) \
        { \
                memcpy(old##ptr,buf2##ptr,len); \
        }
@@ -67,7 +80,7 @@ uint32_t newcore(void)
 mode_t
 umask (mode_t mask)
 {
-       assert(0);
+       return fe(umask,mask,0,0,0);
 }
 
 int
@@ -77,7 +90,8 @@ chmod (const char *name, mode_t mode)
        if(len > RAMP_MAXPATH)
                return -1;
 
-       assert(0);
+       strcpy_if_off_page(name,RAMP_MAXPATH);
+       return fe(chmod,name,mode,0,IN0);
 }
 
 int
@@ -87,7 +101,8 @@ access (const char *name, int mode)
        if(len > RAMP_MAXPATH)
                return -1;
 
-       assert(0);
+       strcpy_if_off_page(name,RAMP_MAXPATH);
+       return fe(access,name,mode,0,IN0);
 }
 
 char *
@@ -112,11 +127,40 @@ pathconf (const char *pathname, int name)
 int
 utime (const char *name, const struct utimbuf *buf)
 {
+       assert(sizeof(time_t) == sizeof(int));
+       time_t actime = buf == NULL ? time(NULL) : buf->actime;
+       time_t modtime = buf == NULL ? actime : buf->modtime;
+
        int len = strlen(name)+1;
        if(len > RAMP_MAXPATH)
                return -1;
+       strcpy_if_off_page(name,RAMP_MAXPATH);
 
-       assert(0);
+       return fe(utime,name,actime,modtime,IN0);
+}
+
+uid_t
+getuid()
+{
+       return 0;
+}
+
+uid_t
+geteuid()
+{
+       return 0;
+}
+
+gid_t
+getgid()
+{
+       return 0;
+}
+
+gid_t
+getegid()
+{
+       return 0;
 }
 
 int
@@ -153,7 +197,18 @@ rmdir (const char *name)
 long int 
 sysconf (int name)
 {
-       assert(0);
+       switch(name)
+       {
+               case _SC_CLK_TCK:
+                       return procinfo.tsc_freq;
+               case _SC_PAGESIZE:
+                       return PGSIZE;
+               case _SC_PHYS_PAGES:
+                       return 512*1024; // 2GB mem
+               default:
+                       printf("sysconf(%d) not supported!\n",name);
+                       abort();
+       }
 }
 
 typedef struct
@@ -172,7 +227,7 @@ DIR *opendir (const char *name)
        if(len > RAMP_MAXPATH)
                return NULL;
 
-       copy_if_off_page(name,len);
+       strcpy_if_off_page(name,RAMP_MAXPATH);
        dir->fd = fe(opendir,name,0,0,IN0);
        if(dir->fd < 0)
        {
@@ -215,6 +270,11 @@ int pipe (int __fildes[2])
        assert(0);
 }
 
+int dup (int __fildes)
+{
+       return fe(dup,__fildes,0,0,0);
+}
+
 int dup2 (int __fildes, int __fildes2)
 {
        return fe(dup2,__fildes,__fildes2,0,0);
@@ -230,19 +290,67 @@ unsigned alarm(unsigned __secs)
        assert(0);
 }
 
-int execvp(const char *__file, char * const __argv[])
+int execvp(const char *file, char * const argv[])
 {
-       assert(0);
+       if(file[0] == '/')
+               return execv(file,argv);
+
+       // this is technically incorrect, because we need to search PATH
+       const char* path = getenv("PATH");
+       if(path == NULL)
+               path = ":/bin:/usr/bin";
+       char* buf = (char*)malloc((strlen(path)+strlen(file)+2)*sizeof(char));
+
+       char* dir = path;
+       while(1)
+       {
+               char* end = strchr(dir,':');
+               int len = end ? end-dir : strlen(dir);
+               memcpy(buf,dir,len);
+               if(len && buf[len-1] != '/')
+                       buf[len++] = '/';
+               strcpy(buf+len,file);
+       
+               if(access(buf,X_OK) == 0)
+               {
+                       int ret = execv(buf,argv);
+                       free(buf);
+                       return ret;
+               }
+
+               if(!end)
+                       break;
+
+               dir = end+1;
+       }
+
+       free(buf);
+       errno = ENOENT;
+       return -1;
 }
 
 int execv(const char *path, char *const argv[])
 {
-       assert(0);
+       return execve(path,argv,environ);
 }
 
-int fcntl (int fd, int cmd, ...) 
+int fcntl (int fd, int cmd, ...)
 {
-       assert(0);
+       va_list vl;
+       va_start(vl,cmd);
+       int arg = va_arg(vl,int);
+       va_end(vl);
+
+       switch(cmd)
+       {
+               case F_DUPFD:
+               case F_GETFD:
+               case F_SETFD:
+                       return fe(fcntl,fd,cmd,arg,0);
+               default:
+                       printf("fcntl(%d,%d) not supported!\n",fd,cmd);
+                       abort();
+       }
 }
 
 int chdir(const char *name)
@@ -251,11 +359,18 @@ int chdir(const char *name)
        if(len > RAMP_MAXPATH)
                return -1;
 
-       copy_if_off_page(name,len);
+       strcpy_if_off_page(name,RAMP_MAXPATH);
        return fe(chdir,name,0,0,IN0);
 }
 
 int
+getppid(void)
+{
+       assert(0);
+//     return procinfo.ppid;
+}
+
+int
 getpid(void)
 {
        return procinfo.pid;
@@ -264,7 +379,7 @@ getpid(void)
 void
 _exit(int code)
 {
-       sys_proc_destroy(getpid());
+       sys_proc_destroy(getpid(),code);
        while(1);
 }
 
@@ -276,28 +391,176 @@ isatty(int fd)
        return ret < 0 ? -1 : ((s.st_mode & S_IFCHR) ? 1 : 0);
 }
 
+static hart_lock_t child_lock = HART_LOCK_INIT;
+static int* child_list = NULL;
+static int child_list_capacity = 0;
+static int child_list_size = 0;
+
 int
 fork(void)
 {
-       assert(0);
+       hart_lock_lock(&child_lock);
+       if(child_list_size == child_list_capacity)
+       {
+               child_list_capacity++;
+               int* tmp = realloc(child_list,child_list_capacity*sizeof(int));
+               if(tmp == NULL)
+               {
+                       child_list_capacity--;
+                       errno = ENOMEM;
+                       hart_lock_unlock(&child_lock);
+                       return -1;
+               }
+               child_list = tmp;
+       }
+
+       int ret = syscall(SYS_fork,0,0,0,0,0);
+
+       if(ret > 0)
+               child_list[child_list_size++] = ret;
+
+       hart_lock_unlock(&child_lock);
+       return ret;
+}
+
+static int
+pack_argv(const char* const argv[], char* buf, size_t bufsz)
+{
+       int argc = 0, size = sizeof(intreg_t);
+       while(argv[argc])
+       {
+               size += sizeof(intreg_t)+strlen(argv[argc])+1;
+               argc++;
+       }
+
+       if(size > bufsz)
+               return -1;
+
+       intreg_t* offset = (intreg_t*)buf;
+       offset[0] = (argc+1)*sizeof(intreg_t);
+       for(int i = 0; i < argc; i++)
+       {
+               int len = strlen(argv[i])+1;
+               memcpy(buf+offset[i],argv[i],len);
+               offset[i+1] = offset[i]+len;
+       }
+       offset[argc] = 0;
+
+       return 0;
+}
+
+static int
+readfile(const char* filename, void** binary, int* size)
+{
+       int fd = open(filename,O_RDONLY,0);
+       if(fd == -1)
+               return -1;
+
+       *size = 0;
+       *binary = NULL;
+       int bytes_read = 0;
+       int bufsz = 0;
+
+       int READ_SIZE = 1024;
+       int MALLOC_SIZE = 1024*1024;
+
+       while(1)
+       {
+               if(*size+READ_SIZE > bufsz)
+               {
+                       void* temp_buf = realloc(*binary,bufsz+MALLOC_SIZE);
+                       if(temp_buf == NULL)
+                       {
+                               close(fd);
+                               free(*binary);
+                               errno = ENOMEM;
+                               return -1;
+                       }
+
+                       *binary = temp_buf;
+                       bufsz += MALLOC_SIZE;
+               }
+
+               bytes_read = read(fd, *binary+*size, READ_SIZE);
+               *size += bytes_read;
+               if(bytes_read <= 0)
+               {
+                       close(fd);
+                       if(bytes_read < 0)
+                               free(*binary);
+                       return bytes_read;
+               }
+       }
 }
 
 int
 execve(const char* name, char* const argv[], char* const env[])
 {
-       assert(0);
+       char argv_buf[PROCINFO_MAX_ARGV_SIZE],env_buf[PROCINFO_MAX_ENV_SIZE];
+       if(pack_argv(argv,argv_buf,PROCINFO_MAX_ARGV_SIZE) ||
+          pack_argv(env,env_buf,PROCINFO_MAX_ENV_SIZE))
+       {
+               errno = ENOMEM;
+               return -1;
+       }
+
+       void* binary;
+       size_t binarysz;
+       if(readfile(name,&binary,&binarysz))
+               return -1;
+
+       return syscall(SYS_exec,(intreg_t)binary,(intreg_t)binarysz,
+                       (intreg_t)argv_buf,(intreg_t)env_buf,0);
 }
 
 int
 kill(int pid, int sig)
 {
-       assert(0);
+       int ret = sys_proc_destroy(pid,0);
+       return ret < 0 ? -1 : ret;
+}
+
+int
+waitpid(int pid, int* status, int options)
+{
+       assert(options == 0);
+
+       int foo;
+       if(status == NULL)
+               status = &foo;
+
+       hart_lock_lock(&child_lock);
+
+       if(child_list_size) while(1)
+       {
+               for(int i = 0; i < child_list_size; i++)
+               {
+                       if(pid == -1 || child_list[i] == pid)
+                       {
+                               int ret = syscall(SYS_trywait,child_list[i],status,0,0,0);
+
+                               if(ret == 0)
+                               {
+                                       for(int j = i+1; j < child_list_size; j++)
+                                               child_list[j-1] = child_list[j];
+                                       child_list_size--;
+                                       hart_lock_unlock(&child_lock);
+                                       return 0;
+                               }
+                       }
+               }
+               sys_yield();
+       }
+
+       hart_lock_unlock(&child_lock);
+       errno = ECHILD;
+       return -1;
 }
 
 int
 wait(int* status)
 {
-       assert(0);
+       return waitpid(-1,status,0);
 }
 
 int
@@ -307,8 +570,8 @@ link(const char *old, const char *new)
        if(oldlen > RAMP_MAXPATH || newlen > RAMP_MAXPATH)
                return -1;
 
-       copy_if_off_page(old,oldlen);
-       copy_if_off_page(new,oldlen);
+       strcpy_if_off_page(old,RAMP_MAXPATH);
+       strcpy_if_off_page(new,RAMP_MAXPATH);
        return fe(link,old,new,0,IN0 | IN1);
 }
 
@@ -319,7 +582,7 @@ unlink(const char* name)
        if(len > RAMP_MAXPATH)
                return -1;
 
-       copy_if_off_page(name,len);
+       strcpy_if_off_page(name,RAMP_MAXPATH);
        return fe(unlink,name,0,0,IN0);
 }
 
@@ -339,7 +602,7 @@ lstat(const char* name, struct stat* st)
        if(len > RAMP_MAXPATH)
                return -1;
 
-       copy_if_off_page(name,len);
+       strcpy_if_off_page(name,RAMP_MAXPATH);
        buf_if_off_page(st,sizeof(*st));
        int ret = fe(lstat,name,st,0,IN0 | OUT1);
        copyout_if_off_page(st,sizeof(*st));
@@ -353,7 +616,7 @@ stat(const char* name, struct stat* st)
        if(len > RAMP_MAXPATH)
                return -1;
 
-       copy_if_off_page(name,len);
+       strcpy_if_off_page(name,RAMP_MAXPATH);
        buf_if_off_page(st,sizeof(*st));
        int ret = fe(stat,name,st,0,IN0 | OUT1);
        copyout_if_off_page(st,sizeof(*st));
@@ -370,7 +633,7 @@ ssize_t
 write(int fd, const void* ptr, size_t len)
 {
        len = MIN(PGSIZE,len);
-       copy_if_off_page(ptr,len);
+       memcpy_if_off_page(ptr,len);
        return fe(write,fd,ptr,len,IN1);
 }
 
@@ -385,13 +648,18 @@ read(int fd, void* ptr, size_t len)
 }
 
 int
-open(char* name, int flags, int mode)
+open(const char* name, int flags, ...)
 {
+       va_list vl;
+       va_start(vl,flags);
+       int mode = va_arg(vl,int);
+       va_end(vl);
+
        size_t len = strlen(name)+1;
        if(len > RAMP_MAXPATH)
                return -1;
 
-       copy_if_off_page(name,len);
+       strcpy_if_off_page(name,RAMP_MAXPATH);
        return fe(open,name,flags,mode,IN0);
 }
 
@@ -412,9 +680,9 @@ times(struct tms* buf)
        if(gettimeofday(&tp,NULL))
                return (clock_t)-1;
 
-       long long utime = (tp.tv_sec - timeval_start.tv_sec)*1000000;
+       unsigned long long utime = (tp.tv_sec - timeval_start.tv_sec)*1000000;
        utime += tp.tv_usec-timeval_start.tv_usec;
-       buf->tms_utime = buf->tms_cutime = utime*CLK_TCK/1000000;
+       buf->tms_utime = buf->tms_cutime = utime*procinfo.tsc_freq/1000000;
        buf->tms_stime = buf->tms_cstime = 0;
 
        return (clock_t)buf->tms_utime;
index 2528869..89d414f 100644 (file)
@@ -1,10 +1,23 @@
-__asm__ (".global syscall              \n\t"
-         "syscall:                     \n\t"
-         "mov %o0,%g1          \n\t"
-         "mov %o1,%o0          \n\t"
-         "mov %o2,%o1          \n\t"
-         "mov %o3,%o2          \n\t"
-         "mov %o4,%o3          \n\t"
-         "mov %o5,%o4          \n\t"
-         "retl                 \n\t"
-         "ta 8                 \n\t");
+#include <parlib.h>
+#include <errno.h>
+
+intreg_t syscall(uint16_t _num, intreg_t _a1,
+                intreg_t _a2, intreg_t _a3,
+                intreg_t _a4, intreg_t _a5)
+{
+       register intreg_t num asm("g1") = _num;
+       register intreg_t a1 asm("o0") = _a1, a2 asm("o1") = _a2;
+       register intreg_t a3 asm("o2") = _a3, a4 asm("o3") = _a4;
+       register intreg_t a5 asm("o4") = _a5;
+
+       asm volatile("ta 8" : "=r"(a1),"=r"(a2)
+                    : "r"(num),"0"(a1),"1"(a2),"r"(a3),"r"(a4),"r"(a5));
+
+       // move a1, a2 into regular variables so they're volatile across
+       // procedure calls (of which errno is one)
+       intreg_t ret = a1, err = a2;
+       if(err != 0)
+               errno = err;
+
+       return ret;
+}
index d4d6b05..fd371f4 100644 (file)
@@ -2,9 +2,9 @@
 
 #include <parlib.h>
 
-error_t sys_proc_destroy(int pid)
+error_t sys_proc_destroy(int pid, int exitcode)
 {
-       return syscall(SYS_proc_destroy, pid, 0, 0, 0, 0);
+       return syscall(SYS_proc_destroy, pid, exitcode, 0, 0, 0);
 }
 
 error_t sys_brk(void* addr)
@@ -58,12 +58,11 @@ ssize_t sys_serial_read(void* buf, size_t len)
 }
 
 //Run a binary loaded at the specificed address with the specified arguments
-ssize_t sys_run_binary(void* binary_buf, size_t len, void* arg, size_t arglen,
-                                              size_t num_colors) 
+ssize_t sys_run_binary(void* binary_buf, size_t len,
+                       char arg[PROCINFO_MAX_ARGV_SIZE], size_t num_colors) 
 {
        return syscall(SYS_run_binary, (intreg_t)binary_buf, (intreg_t)len,
-                                       (intreg_t)arg, (intreg_t)arglen,
-                                      (intreg_t)num_colors);
+                                       (intreg_t)arg,(intreg_t)num_colors,0);
 }
 
 //Write a buffer over ethernet
@@ -94,3 +93,8 @@ void sys_reboot()
 {
        syscall(SYS_reboot,0,0,0,0,0);
 }
+
+void sys_yield()
+{
+       syscall(SYS_yield,0,0,0,0,0);
+}
diff --git a/usrbin/sparc/blackscholes b/usrbin/sparc/blackscholes
deleted file mode 100755 (executable)
index b3a5237..0000000
Binary files a/usrbin/sparc/blackscholes and /dev/null differ
diff --git a/usrbin/sparc/bodytrack b/usrbin/sparc/bodytrack
deleted file mode 100755 (executable)
index 4daf3fd..0000000
Binary files a/usrbin/sparc/bodytrack and /dev/null differ
diff --git a/usrbin/sparc/bodytrackslow b/usrbin/sparc/bodytrackslow
deleted file mode 100755 (executable)
index 512a5a8..0000000
Binary files a/usrbin/sparc/bodytrackslow and /dev/null differ
diff --git a/usrbin/sparc/condtest b/usrbin/sparc/condtest
deleted file mode 100755 (executable)
index 7fcf2b6..0000000
Binary files a/usrbin/sparc/condtest and /dev/null differ
diff --git a/usrbin/sparc/cpptest b/usrbin/sparc/cpptest
deleted file mode 100755 (executable)
index 535777c..0000000
Binary files a/usrbin/sparc/cpptest and /dev/null differ
diff --git a/usrbin/sparc/fluidanimate b/usrbin/sparc/fluidanimate
deleted file mode 100755 (executable)
index ab9b1f6..0000000
Binary files a/usrbin/sparc/fluidanimate and /dev/null differ
diff --git a/usrbin/sparc/memlatency b/usrbin/sparc/memlatency
deleted file mode 100755 (executable)
index d265603..0000000
Binary files a/usrbin/sparc/memlatency and /dev/null differ
diff --git a/usrbin/sparc/streamcluster b/usrbin/sparc/streamcluster
deleted file mode 100755 (executable)
index 9d3759f..0000000
Binary files a/usrbin/sparc/streamcluster and /dev/null differ
diff --git a/usrbin/sparc/swaptions b/usrbin/sparc/swaptions
deleted file mode 100755 (executable)
index 8df9956..0000000
Binary files a/usrbin/sparc/swaptions and /dev/null differ
diff --git a/usrbin/sparc/synthetic_procobv_cacheobv_offbwobv b/usrbin/sparc/synthetic_procobv_cacheobv_offbwobv
deleted file mode 100755 (executable)
index 80e568d..0000000
Binary files a/usrbin/sparc/synthetic_procobv_cacheobv_offbwobv and /dev/null differ
diff --git a/usrbin/sparc/synthetic_procplus_cacheplus_offbwplus b/usrbin/sparc/synthetic_procplus_cacheplus_offbwplus
deleted file mode 100755 (executable)
index 123354a..0000000
Binary files a/usrbin/sparc/synthetic_procplus_cacheplus_offbwplus and /dev/null differ
diff --git a/usrbin/sparc/tlstest b/usrbin/sparc/tlstest
deleted file mode 100755 (executable)
index c6642a8..0000000
Binary files a/usrbin/sparc/tlstest and /dev/null differ
diff --git a/usrbin/sparc/x264 b/usrbin/sparc/x264
deleted file mode 100755 (executable)
index 7b533cf..0000000
Binary files a/usrbin/sparc/x264 and /dev/null differ