From a38987e7af57e8b034ce09a84578bacc922e048b Mon Sep 17 00:00:00 2001 From: "Lyons, Ethan Tyler" Date: Mon, 25 Nov 2019 01:49:17 -0500 Subject: [PATCH] Add files via upload --- .../opencl/BlackScholes/BlackScholes.cl | 101 +++ benchmarks/opencl/BlackScholes/main.cpp | 248 +++++++ .../opencl/BlackScholes/oclBlackScholes.pdf | Bin 0 -> 206856 bytes .../BlackScholes/oclBlackScholes_common.h | 50 ++ .../BlackScholes/oclBlackScholes_gold.cpp | 92 +++ .../BlackScholes/oclBlackScholes_launcher.cpp | 125 ++++ benchmarks/opencl/BlackScholes/oclUtils.h | 198 ++++++ benchmarks/opencl/BlackScholes/shrQATest.h | 238 +++++++ benchmarks/opencl/BlackScholes/shrUtils.h | 642 ++++++++++++++++++ 9 files changed, 1694 insertions(+) create mode 100644 benchmarks/opencl/BlackScholes/BlackScholes.cl create mode 100644 benchmarks/opencl/BlackScholes/main.cpp create mode 100644 benchmarks/opencl/BlackScholes/oclBlackScholes.pdf create mode 100644 benchmarks/opencl/BlackScholes/oclBlackScholes_common.h create mode 100644 benchmarks/opencl/BlackScholes/oclBlackScholes_gold.cpp create mode 100644 benchmarks/opencl/BlackScholes/oclBlackScholes_launcher.cpp create mode 100644 benchmarks/opencl/BlackScholes/oclUtils.h create mode 100644 benchmarks/opencl/BlackScholes/shrQATest.h create mode 100644 benchmarks/opencl/BlackScholes/shrUtils.h diff --git a/benchmarks/opencl/BlackScholes/BlackScholes.cl b/benchmarks/opencl/BlackScholes/BlackScholes.cl new file mode 100644 index 00000000..e094e57e --- /dev/null +++ b/benchmarks/opencl/BlackScholes/BlackScholes.cl @@ -0,0 +1,101 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * Please refer to the NVIDIA end user license agreement (EULA) associated + * with this source code for terms and conditions that govern your use of + * this software. Any use, reproduction, disclosure, or distribution of + * this software and related documentation outside the terms of the EULA + * is strictly prohibited. + * + */ + +#if(0) + #define EXP(a) native_exp(a) + #define LOG(a) native_log(a) + #define SQRT(a) native_sqrt(a) +#else + #define EXP(a) exp(a) + #define LOG(a) log(a) + #define SQRT(a) sqrt(a) +#endif + + +/////////////////////////////////////////////////////////////////////////////// +// Predefine functions to avoid bug in OpenCL compiler on Mac OSX 10.7 systems +/////////////////////////////////////////////////////////////////////////////// +float CND(float d); +void BlackScholesBody(__global float *call, __global float *put, float S, + float X, float T, float R, float V); + +/////////////////////////////////////////////////////////////////////////////// +// Rational approximation of cumulative normal distribution function +/////////////////////////////////////////////////////////////////////////////// +float CND(float d){ + const float A1 = 0.31938153f; + const float A2 = -0.356563782f; + const float A3 = 1.781477937f; + const float A4 = -1.821255978f; + const float A5 = 1.330274429f; + const float RSQRT2PI = 0.39894228040143267793994605993438f; + + float + K = 1.0f / (1.0f + 0.2316419f * fabs(d)); + + float + cnd = RSQRT2PI * EXP(- 0.5f * d * d) * + (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); + + if(d > 0) + cnd = 1.0f - cnd; + + return cnd; +} + + +/////////////////////////////////////////////////////////////////////////////// +// Black-Scholes formula for both call and put +/////////////////////////////////////////////////////////////////////////////// +void BlackScholesBody( + __global float *call, //Call option price + __global float *put, //Put option price + float S, //Current stock price + float X, //Option strike price + float T, //Option years + float R, //Riskless rate of return + float V //Stock volatility +){ + float sqrtT = SQRT(T); + float d1 = (LOG(S / X) + (R + 0.5f * V * V) * T) / (V * sqrtT); + float d2 = d1 - V * sqrtT; + float CNDD1 = CND(d1); + float CNDD2 = CND(d2); + + //Calculate Call and Put simultaneously + float expRT = EXP(- R * T); + *call = (S * CNDD1 - X * expRT * CNDD2); + *put = (X * expRT * (1.0f - CNDD2) - S * (1.0f - CNDD1)); +} + + + +__kernel void BlackScholes( + __global float *d_Call, //Call option price + __global float *d_Put, //Put option price + __global float *d_S, //Current stock price + __global float *d_X, //Option strike price + __global float *d_T, //Option years + float R, //Riskless rate of return + float V, //Stock volatility + unsigned int optN +){ + for(unsigned int opt = get_global_id(0); opt < optN; opt += get_global_size(0)) + BlackScholesBody( + &d_Call[opt], + &d_Put[opt], + d_S[opt], + d_X[opt], + d_T[opt], + R, + V + ); +} diff --git a/benchmarks/opencl/BlackScholes/main.cpp b/benchmarks/opencl/BlackScholes/main.cpp new file mode 100644 index 00000000..0ae600b5 --- /dev/null +++ b/benchmarks/opencl/BlackScholes/main.cpp @@ -0,0 +1,248 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * Please refer to the NVIDIA end user license agreement (EULA) associated + * with this source code for terms and conditions that govern your use of + * this software. Any use, reproduction, disclosure, or distribution of + * this software and related documentation outside the terms of the EULA + * is strictly prohibited. + * + */ + +// standard utilities and systems includes +#include +#include +#include "oclBlackScholes_common.h" + +//////////////////////////////////////////////////////////////////////////////// +// Helper functions +//////////////////////////////////////////////////////////////////////////////// +double executionTime(cl_event &event){ + cl_ulong start, end; + + clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &end, NULL); + clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &start, NULL); + + return (double)1.0e-9 * (end - start); // convert nanoseconds to seconds on return +} + +//////////////////////////////////////////////////////////////////////////////// +// Random float helper +//////////////////////////////////////////////////////////////////////////////// +float randFloat(float low, float high){ + float t = (float)rand() / (float)RAND_MAX; + return (1.0f - t) * low + t * high; +} + +//////////////////////////////////////////////////////////////////////////////// +// Main program +//////////////////////////////////////////////////////////////////////////////// +int main(int argc, char **argv) +{ + cl_platform_id cpPlatform; //OpenCL platform + cl_device_id* cdDevices = NULL; //OpenCL devices list (array) + cl_context cxGPUContext; //OpenCL context + cl_command_queue cqCommandQueue; //OpenCL command que + cl_mem //OpenCL memory buffer objects + d_Call, + d_Put, + d_S, + d_X, + d_T; + + cl_int ciErrNum; + + float + *h_CallCPU, + *h_PutCPU, + *h_CallGPU, + *h_PutGPU, + *h_S, + *h_X, + *h_T; + + const unsigned int optionCount = 4000000; + const float R = 0.02f; + const float V = 0.30f; + + shrQAStart(argc, argv); + + // Get the NVIDIA platform + ciErrNum = oclGetPlatformID(&cpPlatform); + //oclCheckErrorEX(ciErrNum, CL_SUCCESS, NULL); + shrLog("clGetPlatformID...\n"); + + //Get all the devices + cl_uint uiNumDevices = 0; // Number of devices available + cl_uint uiTargetDevice = 0; // Default Device to compute on + cl_uint uiNumComputeUnits; // Number of compute units (SM's on NV GPU) + shrLog("Get the Device info and select Device...\n"); + ciErrNum = clGetDeviceIDs(cpPlatform, CL_DEVICE_TYPE_DEFAULT, 0, NULL, &uiNumDevices); + //oclCheckErrorEX(ciErrNum, CL_SUCCESS, NULL); + cdDevices = (cl_device_id *)malloc(uiNumDevices * sizeof(cl_device_id) ); + ciErrNum = clGetDeviceIDs(cpPlatform, CL_DEVICE_TYPE_DEFAULT, uiNumDevices, cdDevices, NULL); + //oclCheckErrorEX(ciErrNum, CL_SUCCESS, NULL); + + // Get command line device options and config accordingly + shrLog(" # of Devices Available = %u\n", uiNumDevices); + if(shrGetCmdLineArgumentu(argc, (const char**)argv, "device", &uiTargetDevice)== shrTRUE) + { + uiTargetDevice = CLAMP(uiTargetDevice, 0, (uiNumDevices - 1)); + } + shrLog(" Using Device %u: ", uiTargetDevice); + oclPrintDevName(LOGBOTH, cdDevices[uiTargetDevice]); + ciErrNum = clGetDeviceInfo(cdDevices[uiTargetDevice], CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(uiNumComputeUnits), &uiNumComputeUnits, NULL); + //oclCheckErrorEX(ciErrNum, CL_SUCCESS, NULL); + shrLog("\n # of Compute Units = %u\n", uiNumComputeUnits); + + // set logfile name and start logs + shrSetLogFileName ("oclBlackScholes.txt"); + shrLog("%s Starting...\n\n", argv[0]); + + shrLog("Allocating and initializing host memory...\n"); + h_CallCPU = (float *)malloc(optionCount * sizeof(float)); + h_PutCPU = (float *)malloc(optionCount * sizeof(float)); + h_CallGPU = (float *)malloc(optionCount * sizeof(float)); + h_PutGPU = (float *)malloc(optionCount * sizeof(float)); + h_S = (float *)malloc(optionCount * sizeof(float)); + h_X = (float *)malloc(optionCount * sizeof(float)); + h_T = (float *)malloc(optionCount * sizeof(float)); + + srand(2009); + for(unsigned int i = 0; i < optionCount; i++){ + h_CallCPU[i] = -1.0f; + h_PutCPU[i] = -1.0f; + h_S[i] = randFloat(5.0f, 30.0f); + h_X[i] = randFloat(1.0f, 100.0f); + h_T[i] = randFloat(0.25f, 10.0f); + } + + shrLog("Initializing OpenCL...\n"); + // Get the NVIDIA platform + ciErrNum = oclGetPlatformID(&cpPlatform); + //oclCheckError(ciErrNum, CL_SUCCESS); + + // Get a GPU device + ciErrNum = clGetDeviceIDs(cpPlatform, CL_DEVICE_TYPE_DEFAULT, 1, &cdDevices[uiTargetDevice], NULL); + //oclCheckError(ciErrNum, CL_SUCCESS); + + // Create the context + cxGPUContext = clCreateContext(0, 1, &cdDevices[uiTargetDevice], NULL, NULL, &ciErrNum); + //oclCheckError(ciErrNum, CL_SUCCESS); + + //Create a command-queue + cqCommandQueue = clCreateCommandQueue(cxGPUContext, cdDevices[uiTargetDevice], CL_QUEUE_PROFILING_ENABLE, &ciErrNum); + //oclCheckError(ciErrNum, CL_SUCCESS); + + shrLog("Creating OpenCL memory objects...\n"); + d_Call = clCreateBuffer(cxGPUContext, CL_MEM_READ_WRITE, optionCount * sizeof(float), NULL, &ciErrNum); + //oclCheckError(ciErrNum, CL_SUCCESS); + d_Put = clCreateBuffer(cxGPUContext, CL_MEM_READ_WRITE, optionCount * sizeof(float), NULL, &ciErrNum); + //oclCheckError(ciErrNum, CL_SUCCESS); + d_S = clCreateBuffer(cxGPUContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, optionCount * sizeof(float), h_S, &ciErrNum); + //oclCheckError(ciErrNum, CL_SUCCESS); + d_X = clCreateBuffer(cxGPUContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, optionCount * sizeof(float), h_X, &ciErrNum); + //oclCheckError(ciErrNum, CL_SUCCESS); + d_T = clCreateBuffer(cxGPUContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, optionCount * sizeof(float), h_T, &ciErrNum); + //oclCheckError(ciErrNum, CL_SUCCESS); + + shrLog("Starting up BlackScholes...\n"); + initBlackScholes(cxGPUContext, cqCommandQueue, (const char **)argv); + + shrLog("Running OpenCL BlackScholes...\n\n"); + //Just a single run or a warmup iteration + BlackScholes( + NULL, + d_Call, + d_Put, + d_S, + d_X, + d_T, + R, + V, + optionCount + ); + +#ifdef GPU_PROFILING + const int numIterations = 16; + cl_event startMark, endMark; + ciErrNum = clEnqueueMarker(cqCommandQueue, &startMark); + ciErrNum |= clFinish(cqCommandQueue); + shrCheckError(ciErrNum, CL_SUCCESS); + shrDeltaT(0); + + for(int i = 0; i < numIterations; i++){ + BlackScholes( + cqCommandQueue, + d_Call, + d_Put, + d_S, + d_X, + d_T, + R, + V, + optionCount + ); + } + + ciErrNum = clEnqueueMarker(cqCommandQueue, &endMark); + ciErrNum |= clFinish(cqCommandQueue); + shrCheckError(ciErrNum, CL_SUCCESS); + + //Calculate performance metrics by wallclock time + double gpuTime = shrDeltaT(0) / numIterations; + shrLogEx(LOGBOTH | MASTER, 0, "oclBlackScholes, Throughput = %.4f GOptions/s, Time = %.5f s, Size = %u options, NumDevsUsed = %i, Workgroup = %u\n", + (double)(2.0 * optionCount * 1.0e-9)/gpuTime, gpuTime, (2 * optionCount), 1, 0); + + //Get profiling info + cl_ulong startTime = 0, endTime = 0; + ciErrNum = clGetEventProfilingInfo(startMark, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &startTime, NULL); + ciErrNum |= clGetEventProfilingInfo(endMark, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &endTime, NULL); + shrCheckError(ciErrNum, CL_SUCCESS); + shrLog("\nOpenCL time: %.5f s\n\n", 1.0e-9 * ((double)endTime - (double)startTime) / (double)numIterations); +#endif + + shrLog("\nReading back OpenCL BlackScholes results...\n"); + ciErrNum = clEnqueueReadBuffer(cqCommandQueue, d_Call, CL_TRUE, 0, optionCount * sizeof(float), h_CallGPU, 0, NULL, NULL); + //oclCheckError(ciErrNum, CL_SUCCESS); + ciErrNum = clEnqueueReadBuffer(cqCommandQueue, d_Put, CL_TRUE, 0, optionCount * sizeof(float), h_PutGPU, 0, NULL, NULL); + //oclCheckError(ciErrNum, CL_SUCCESS); + + shrLog("Comparing against Host/C++ computation...\n"); + BlackScholesCPU(h_CallCPU, h_PutCPU, h_S, h_X, h_T, R, V, optionCount); + double deltaCall = 0, deltaPut = 0, sumCall = 0, sumPut = 0; + double L1call, L1put; + for(unsigned int i = 0; i < optionCount; i++) + { + sumCall += fabs(h_CallCPU[i]); + sumPut += fabs(h_PutCPU[i]); + deltaCall += fabs(h_CallCPU[i] - h_CallGPU[i]); + deltaPut += fabs(h_PutCPU[i] - h_PutGPU[i]); + } + L1call = deltaCall / sumCall; + L1put = deltaPut / sumPut; + shrLog("Relative L1 (call, put) = (%.3e, %.3e)\n\n", L1call, L1put); + + shrLog("Shutting down...\n"); + closeBlackScholes(); + ciErrNum = clReleaseMemObject(d_T); + ciErrNum |= clReleaseMemObject(d_X); + ciErrNum |= clReleaseMemObject(d_S); + ciErrNum |= clReleaseMemObject(d_Put); + ciErrNum |= clReleaseMemObject(d_Call); + ciErrNum |= clReleaseCommandQueue(cqCommandQueue); + ciErrNum |= clReleaseContext(cxGPUContext); + //oclCheckError(ciErrNum, CL_SUCCESS); + + free(h_T); + free(h_X); + free(h_S); + free(h_PutGPU); + free(h_CallGPU); + free(h_PutCPU); + free(h_CallCPU); + + if(cdDevices)free(cdDevices); + + shrQAFinishExit(argc, (const char **)argv, ((L1call < 1E-6) && (L1put < 1E-6)) ? QA_PASSED : QA_FAILED ); +} diff --git a/benchmarks/opencl/BlackScholes/oclBlackScholes.pdf b/benchmarks/opencl/BlackScholes/oclBlackScholes.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a7b777d75d9c36fb4bd50e5c8147a8a0b102b3c8 GIT binary patch literal 206856 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

$^wH@%W1P>%kVIE+m@6 zmOHAdOsZTyf3eSW95)(Io2bR z4a5~exhrZN0=7?!zGm1u@hqji1aew;I6M6w@f9fcS9^<;KFHb%&N_9aEVM|at+a2A zdP{`n9~-w4O4P3{{2ds#$}BO&i83Y!elSME34d6FelKfKa-8D;!*&D;3ws#i^bSXU zeatfIyAu`JSm>CXp5+2&aYKZ-SqT1TF#$)T_mOKn(>;}ZVU&<711_izGCt<8T~Ny! zVK*P7N*sDLFV+Ya9+E4Etd<$69D>+VFIfV&3`v0b*kpl2m0bgv~(=;+d_XO>>AvN8q0eAQ-TAB}ez+J~D%1QMkbbDNZX&-B5LtgX#wBG^PA(QcaX(?gT-(+|yX^%LuNi zUs!gpHY|iG<@u5g(m}LnHgW$j@|_WmCXpz-edQ90Ms44xk8tj}^gU}faR|tUL{A3v zSr1HNZ~b(+Ye-+Gc3R@s}SxMcAm%N%o&rnJCu8mxZR!a);W7;04P zLR-F!7SKX>H};b!e7Ec*CR{9lm2FPs#nEMC2Hc7h$tZI3acIWRKg_bfXk(uzl{nv4 zI&>oW9CHIny=x{*E33+w&MEwIEL6R`kZ!Uk7!7Y%T>%T{1MqC2a$tVt{2J6mwlbqk zNTYmi?YGWk$BNE(l|QN~HWK7Brrdi8lw>Hab!2R`?-Jl)A`@NI51Q`fbTP{Bg1h=I zT#8djCaQ$Qoa1H}=MP6YLJQgqk&z}gKvWyx!)1K@wXBSHXA#Jzmf70k27f*=uUj_7y?N1RCt=Z5IH;fJ8$7sIqF@H*3^p zbR$CMB<$T$J|<_be{3mL;fCZMc^oGX;5$@jL6>Pm&fQyFp*FArja>1|K5y|er{$=K z`m}=Hf#rnL?WHWqqO+%*c%H|8*=-8e3fAA-Dm=#6Uo6mfNrlIiS((cVsyYw}CQWol zRftB+T#sLb8z(@|>ao*-UXur*Ptqcu2p5}`R7$J~u@C&^Xm#3HLa{l~xX18=4iG|O zwk6f!Qd|&j&^8#dE}qCth47wM<%o_W)(@v}Uvw|J+l09rBww+NJozqZ&r;`D(E5BP}iO@X;VW zaf)NUrDa4$_cv2(a*EHN?}*(ENJtw;J|Snyl0xHwtq}hRBa!QOph+X@uUDYmy@cL* zB3+wI^K&6`YHPz7JlLzqCt$&jy8jF;O>#r7gR2v!?C`;C0N5S}ZRP1FL~mI!m&0>( z9o}VDi;ey{ink>+TxdGv z(g|{?><(OOD#67?p1MiSkSzGS?4dr#=hi-%9nW=Gok&GER!m@l*d|-1fG?~+S(?`5OGVUv=`U>vpC;&Vl(-f(ch1wrS9{AOL9t~oa z%*QubiQ62=g`~jv0Y(v)7FdwTLvAMk>ts^t>)v+2Eo=*nRcCwl(z$kUnqRxyxSg)i zaBd!1GfW9&dmB@HnSQj~J)<)f)#8&q276{hNP0tCaScTRT=CdbrC|YI_YB*W*y41F zcD#u=>OIQ5UWkI9Q?IQQj?F|ENnLySd{B zKxsL{)qu+C?}KU=CwyVmL!4R(g45h#83=pb9A%e%AQS=|r1=NlZ-);phlV_bECM}t z?K7{wfQK4+c{2m46m}(81mJZ5rAxCQhBu1tWvMt3YQ+}*K!1e#R`}71ecMon7F0~Q z+`$u5PO?{8YsKT`%j?>QiHLNd8iUu~1qgy`nNKvEH)_CbUJcc>B*+_pji^##V{B$F_j$7+6lWMa?@)%5~>*2SAFfZBsF_c zbTHr2q|kO?S%wtHL=Cpk0D+Hgmx~-MogQJ!jJ;RvlbLUlyEfZ=#@OnL!_((OxalM4 zBq&q(DadWrCotsp9@+ZGDkZGS3hk5-%z{#Uh}Ljy=CFN*{TLSl3AR8~3E?N1b<44x z4493zMdhA%wu-cJZA;0+bdC{&PRDc#ZQclmZI+Ea!3=t=a<*ym?}d}V=H5-+kr^cm zkuJo9hl+@-EeA4$E#ymIV{;_OE+rc&;RPCuwNRZ^ALM`(bnXF4&P|u2|E?nuCr&=w{|)EvfdABL8Oo z2g(vjO_)e;jY5XQxSFa$D?I*OT}&k=#?KKzyPO1p&F?9#t9!tXOBo-hl1UH{;j`&& z_pJO|32zjkd3yu#2qN+q282=+_NTW8#`_o~sx9cf)b@T9e`*k9Oa1C$M#4(UP{d48 z)3gbUYYG7yECE~7%V3AhMnIebO^2dO1YAnPj)h`d+5aAk?P6-{$>|EOqF;SWL3e0P zB*Ox4m`ar>FlW^5OW*#K@0wO=W>pKmD)y%fgY*_h6>)-Ag&`6O{=GqXyum$N`$71S zXC%-OdaFPQW5G2c2+vo6>3Rj$t zg~1EMx;lLfIk^`RjGFqLst;KZ7PybusE#NkhU=?@p~}F16f)<6^ASpW*vv+J@!!bw zm2_yc+cqKL$HX1RTY6{)r%^jJS8jIuZk!waa`3Tq2GJYWke3Jjn}=r>Pa3ATRSIn$ za6%s$BY(Jjvm43K%WscvW6JY1<*IJp4m_TN49vX~2?T2bmw53$4mQ_{Da(#J8Qf)x z3R@R5r@uxsR>>-gt6{2NVPGQg^TR8;q2mHGf?1OMz+4!pt$mPDP}|wfT{S=Y%?2qC zk4~S-6N;tjzVybxz`&PN%fvoOyA~PyVF!pJ5z`jx1iQjr!dlMN+j?msu=?yV6{_r# zY|zvJm!THRHGWTLmL2i~(Gw<)ZSfp_DHMY3nxE&qZHi^pA?#Le(gb;7qa6>IRvF29 z9*1?KV4x~mA4h}=O>@ILp?ykH3}OmI5Pio{{pN%|nG`R-HmR>3%sWb{=Z(NXbyrQ7 zzO70yLz#SI$+#AE7lDw7sWAgKKWE{(`ImYU&=ZB40%K1Ei7SAeopBDe)#3eHTJ$MP zK0xf*x~?M#xwGmfBJPc+?5^+Huf|Ewj66Qx6u8pD><3Fs6Ui=A4Q-LC8IkLPnd4C$%r#<!1+6+%D;3*|3~g;u0PBfzns1QZ`{v+hrs{SvcX2g_S+x+ z76SiQVEq3@BgfwmgTDgYnYjQKCs8vC2P3;T3)jC&qX;l^*r%$Ycr8@y5BFd!)gkTK zG@ckLp^qfb8V+EqmbNJ`7NJ4VGKqEqh2}gxocsiZ8j3+3>qo?z%(7lzXgD}3mN@Mx z^hsnWs7NIbPmqA)m~mC;9yst&B4=!a!89XaH~ZRi_0)O?!r`R{aR-?}Cw<_$A-)io zkk@I?Gm}{EA621~t~;v7`fLd?Gm;GcWY}duO4PStU2)z{kUk+cbH4%teCht=NC2!u za1L^b<1g~sF}S+$8f-MJUzn4I231D1 zaSF<+T6=>Cu9p8vg10MECJqr*pBv_ft+${{y_gF1vV%n`ZI~DbM5l|vHcQ3>r#FWi z3t?N6u=PDNK3HP}w8&=B_9FsJ2m%b`^FG}%m|O)^*~lUTrb{z=Gs#&rEytO3UIse3 zQ^3$X_e?cyVpZ0A2_WbeRlQpn9wY7;bge+6>rRUk0+>l5%CLi=&DXAfJ;e zMa7OVh7r_miTBbv(dZA_nRJBG%ZF)!TO%ok2m4X=NlOfQY{NZhBgk_b#7!Q=7`~kT zB=!%=9gc;Inb;07@qZpLC*^Y!0vWGibo-`Dapizd2g|dGBLROaQkU&~L@VsQpbn?6 zT@Z#B!49EMa`DcLm#%t?ev~(FN5#WjtzlcX z8-dcv`U7gWfYp6^5{rvgK5~j6Gg2s852|mY9!Z@C|0rY?l!loiH>u@2%h+Nl5wIzv ztWyTw=o$TXq9{~;lLOZffiF9-pcrh}&+B?S>T}ei2ZImJ3RNHGXp?c! zXZ+Xw<6m^+-b*8k!ap%d_*NTag&eoCbxT(U7qwul$f~vY3LjXRUBTZc695# zPWQ==wyuSC6+<(CY?k>$Z&_JtTqn!@frQLyXa&EP_6WPS>_TF~E@VZa$HZRor$WNo zygIrTHHO=Rg*lP|N5pxs3AQ=@v50d*$-;nsI8U9#Gg#YQkTu=O7DT*dkE|T@0Pd`% z4Kn;WQiI~;uPkw>lvnmS*z6$#vHS%G)I;X!sdpdC1<*txG!V57#LWk%(dYZr#5~ka z92Ace16tq{xCfjZM6{K`?`^YO@kBo=EGSzgAQhB$436cf6%+dBZRv}qnY zm_<+GcyT_V{pbEw@+-PbVNA1hHu-a!VJgdp4)c%0VEopDIFj9Z#d;y1b$D={b+G7U z#|O44IP02_W=c2KB*@6inR|t&TKpNMggbkXd7y}!y(cKK8|_5aCQ=^ zrFlZyCA)6^Iug!>+Z%6$gRV&EgRX&l+X7WenyqeMHjh~-^nx*7U3PiL$7Z8>BcB`v z0x~-6)PYx4rRAAV!NTGz8I$oDk65AvM$liY%!6U)3Hq6g<;ON!;-s}Q#XWJ@ zzJIOyy3DF;k?Q?kP(6d;dNOAYUO*#2cY4k(kAkY0X194t$uSCDB@AgQXA$(IE6*_A z7+b}s8DHPjT1c%tjK#OI(12S)R+TlGWKdhm!~e0JK!x&>-m*9v_lL0*?Uc-Coee%q zxqCJ2qd9HGIeei|rm>>$h`6m13g!YPlun-xzp!;g61b$~AiUpfB7aSrJf+gbEo+@S zf*nI%hl`tG(DQZYiofDjhvUg$|Uxxb~&j-b}qNduVoG1(rnxucb!hy+93a=%F6p=7Aeq? zliEO$KdK|YZcPGD2ycSxRBv28C}vdPMqTkc5om4})Cy?oJM^tZHgA9MJGUDG{Bs)& zU_$!yu~W(y{1uN{qQI{tAf>b4wDh?L&E8ka;P&i6!;JC8Pu3++Pz?q>1}=KWR9iSGSPZVe1|#Z1ie zAJ~VD6jT>Q33}o0MXqiW?`GhnF5vrrZZ9f)Sd(zmk`~r=dvq(GALE$4qbRcVNSm;z z${~Moc!tOClHiUrff-S8=YDx?MOfyRfJAU;kL${ayytL8Q)aU$lHOfzne^tQf6A3^ zu!X}Mc5?QAeJnhVwOgrYb2EK;D&%@)sV>XbYP zlP0fTbOo!1TKbyzdcrrT?mbwf$>~U?*~VvV74#LH>FTuQDrg3;?T|#3yuwUy%*mey z))g-zSRI|tbc3d;AE2ZrqzN98*yL*An9np_r0hE^dYG?<4*1~qg^V5|Ejn2A>)}Qq z7HTPaW^16_d37|u*s4tfokFO4LH0uye28RXC(5gl;`;HG7UM<%FMwN|cp$IIny58B zw0+%np%3H+uWl|gkG)<{>X4Ro=e5UbZ?OI=$HNWw{7XUWvYKq_Flvh!rIJWL)Wlb? zl-2KzVpG`VZDKk8Pqy0lIl41v^kdV3mq|DE4}D#wtMi^C3yXVq&$8F$-zpY95*XLU z>7bJ`b_a1ZnqZX3P)y)Vf63i&dEpx`$uAHf3Vw;_st=(jY&oW1`__-eaJ^A>#g7&b z7S@$F<$bEDMfu#REU{6`6X<%mHY(0r4vrTic4(kKJ8{O%sSgLp5ZdYcAbtByO|u5O zq08u!CPqtpSiG`m998<*&JRh>I8G`6F*4@CnJu&v#dBXMr}N5tjuPw<+viSQ@oCi- z_&t)XYKN6+*M5B&bu~yR`n(@pPd#cE_-gGc#*ef$rdgwC7Ts(9d`lR-`WSVblKG=- zs)i=2hCaxR-ln42`C-r&BK?Eiskn;1ndCG>tR4}dgMs#%y65Pa{PRX>?)HRge8Q3o#Q8- z;@|v+-xi3!T~p*^GBq=BBx%0RfoB7Xn_0h0gxZrJZ=||ha_%em#28XQxfMfBGQ%jN z@0~BF_fB`B(sFvQg`Fl9fJC2hgr7JK`G82x!At4BJ0kM;R+qzY4w9)i_CS5>ed03hU! zpLk})u1j_fW|s7^G%B}V@{BD_=KAZ5@vuDls8bYH1Z@5Db zqt7*l;C!`)UYO_57ych-?a|Ud3v{lb`{)nzst=iMGE2W(o%{LP7)Yq7(VX*P1Cb-q z)}^DH4p-NEzj=~KD+U&yP7t$G5K~bzhRGg1!gPrVN)@RhJmCtD)^i6j0zU5ZG!s61 z{hXy9EsfyRqe-prB3?UF*e-J#nXNxU_)FU)-E`M<_8fJJj*v8I*kjUs390mW`^AIXWts1A3KHkgzdvD^wKu*USedAp(#lkg&Dj^alV7Ov%3K23gS5T zlx8REJw_ZiDNQsC6z!sWVD=Yj>>c%PMNF)8(W3uRGS~=(e8DX2P!*fe3WwZ1u%W1k zEZ*CPp{-`%q#P7iStPJ({}lf)I1lqZqu5u+yj4Uyvb@lFl+0!L#shz05q7N;7JlXe zo3V$@s#Nad(uVtaS6GZjR%kR2M-Y7XDX(1SO>$S)vtqk3gSyCZdC2WCO#-wlD^HKo zgn~er5!AqG>R4`RBp5N-p}^~9j0<`$v9W@7CPE{UhA43H;-If}C(z3hGg{<{Q_?4J z1FT!>k|-kq2gjGV*t8FPsT{^lbTrf0Dcb#~=6S;D&$q&`7&@g?>oquc7GX$m9%|dv zxEAvcC%uWz(U^3Pe$@p6gjE|TU4`<>lB{cHmh^G5u2s9StuEt(GeM=Mci&dJt9BF6 zshMaa@<1*qThj5BsD60bw1^U;ji#nY1Ib`3;u5&bCC{;`&OR_5Mt5QiGZs3SrDKc34VC*j zaAssMnphe?V81LBd{UW%JAs41R?6!$p0rq%HEO`e!b{5yiXU!-{;Rc>=(8#Nm zysQD()aVv zYO2MMS97$b?J4VzFf6MDrCA;YFpN_lY6IB_3l)VdEQroC5~XV+wKMvhOp_W7ehU4viW?!lNFUz@sLh5F^zXkeyCAdT7D z)0w*a4~vdHS_pe$la;+RI(@Km(}FHx6ACE0Rl}g#hbZcK*aXhg-9^c@eOe@Ny>cCP z$wtm#MKlT4NC#G7y`IjcHkIdzf*%o}vJj`T`V+xtqZ8(hBUY{-&!K|U#g#zeLlqwb z5U^ju7}Cde$(>4y7QKIRCYf1^uQZ$F`1F=S?yCs&2Akht+U#nPlns z{TO=jnisFJm!SC`mgnG>2qQwly+=hY~Ev@PM>T~!UaSg;cPO)`nbu+*;oDOJ4pEMRE zAGl9>p$r!~;eW8-S>X{yg_(}@>-1vX&ZNB7wpz+zB}nyjy>`)_zB4ZJdgd}2;NXdE zzl^@j{>i^lP zx)9voUF-CoMT9IUhu3526k`~?sCXv;k`~mfYpL?{g=MqVU_zzY^fdzP#p7MRMal&b z-@q$L>xwN>pbyc~9-2FdJL;=c4Cogy{A_+?A{ z#7*zlf7;4sh*w(@qT;t*C@35N5jEF@)JIw2PE zo!-}~ZWnsDM~QlMrPNi1#m-!!`oNlN>p)ht{0=>XRP=|26da60i~H}?tcxef56En4 zYCK{0I1!$uo&C}EAf&b3--51$IEs&ac`O-#A%K9O;;jFL>cjj7L;M}F`CIj2;`kkp z`zyp(#mLT3-%6iO(AvWAmj?6iNB6$f4f`v)m-&zAUPi7zG#?HYK)f#_KP%l8^`nQwh`a{3_YpDNZdVd5j|GU#; zV|<$)U}mfUxZ?lK>HQIVNOzV1DzUy%l5w{N;G_@BPmg8y6QqLH^Z)nTv>x zi*EftTzus}NvHoghXX5zPgOP}p1)v==u@SKX>_z{$Hya1L zHiMwPz0n&<7?c6lT+4qjwwc{uSPDEeOm|L3(n9;ZLy=>^Qfhh?DPKfxKfW<;S(Ccgp#6_ocBUJJ#oI{LzBgKNV5H?rS# zQQx{07h)Ngd&ZDH{zS+VN`A#ruVDINb{O+{2W6hS^(WJvyj{G|3!qR6@QuCqzp8P_ z{D;NruO%-eA^gVKZ@l+gy8R7yAOb9#w;$u5+%F&@AtNe4qvUF7U~K^aZm4Q9v1+oh za%wZN|9W9z{{4xKS(BNKQCphMxP_Hx}a$9{AfTrSzZ3FM!GHZ6bfj zFUEh$FM#;{*B3MU-|Z}1e@le7R#x^m()@QWcFwnF`PUaK$M3tc0jyPTBm9-uf+<{*X%lBbU6f*T0ZVfW>MAs9^c_^oqZB(fYrkY@oz@@o6r9}P|vT-h<_b&{=r~?W%5?&^bK1C zIN~_G&COnu<(JU|J#$t zza_8qzr6Q?ZFXka zI{LY0*!?F&Q2|Yp@nn1B@if=dr@c1!*VDDv$5(gjpRnEhNV$ZHp_S1JLmIT#1`3xh zg|24*lc?*juajpAdYTIz~J48j-w*cUyz}?_4hdK$`Gf7T%nj5frs0h60-3I zX5yugNzt~jHAfqXALW+GH=$4jmIsoux>ZN*hzB=VDLYK+6=z^sDupTEBl!c0P^Q9# z)P>YRF&h%sI%~qu;7el^AS`hR@>F7%-l1Oi0z;wvfIQdbOl$mb`VtG zVf_jf*`ccd>7X49QK4ajV1cI9!eQ}~bs%I-KV2it$HXMKz*)$Xf$QUBeLGGl?tqc7 z4d(A~w>IQ{+BpI&@(P498-W6OKH`G6WuoCwA>WZ{kq=`zH+60jINM=6-=GfH@gAn+7%og5QAk&;bz!s!1kQM8;WTL7q03 zP_zA(2d4t5KLW0?qRyXW^Q~%`>VT287!p5A(T`O+!#_{I`JBI8o|463*bo`(GfWsh zf{rdIK5OTDCr;{E(X1W?7nv^xrL5E%4~Xa9-k{}B%vWcN6yd+o5jsU`}Tg@kvot+OjZ$YvzEAcMho~aL8BUSyZx;sDksg&YmlT!aB|gEpzcn&s>3` z!2W))HF^wLh=BoZ1ARi|5{pny&C=qcg2uDbxx?lZ`nlLFLv(i&J~J~h-o}@KtM8au zb``GTMJgb)CF-%jd#}nRB9rWhORhe<$Y9l|{*&dMbk7#(!o6z=2mTNfd4yIwE$3$= zo4zNL#f;MrJoj)vtXc4wMuB$BU+4DF8~nHxtA8l7=EbQ7t|80bze;VDO%t1%Mr{kc zruC1cU#vIJc!zC`Ty8!edps%Vx^)X}ge+37nDtQ2etfQp(*eq1jFLTY>p2Ou45L<} zVPL(JBd0%;43F0`vmXh&kW(BtupO~V`{5nB-Qqu7ly9Uc{yo-11Y}2iX_&iwHC4%t z1*4ax{_|CxH)mpsVFqQ!VqNNx-m{>fW`RTL!>UPdVnHZAa(}eIklyi4^cNDeORAfh zXrI{ngxw(?5&}<;gW;dWN3e%p%d!OcCm-9kpL{QYrBc)uS_Q9HPCsVmd3hOV4Idys z1PP2mu18@8iPn`iJq#!m@zts;!IraS<9bSIN-k}g%<*Uw&__VII4Qe4ZbjlI+lhs$ zvBEmK&vkEV_82fHNq1zYQ7<3km$_q|elNzwJ!@?bPiD-5@31+vj*@4kK7n?*D+!nX zUZ%2Q_6`o?Tiu>~00adB^F;)PFYC4}3gyl!6&DCTd4#}}DwRZ-!c?`I`Z3t-*xebQ ztYC^S`7OYwKua5k#xI0|BPs15OFhQs1r-S&HDk#%4ypZ5=bBPrC zpg>$TtMW%WnKUdX zUOqL9_JBfIt9(t}jNoshm>JU}f{&+IUyplkNCk$}RSVnwyr$&tq7$~Gy0lc7L{l*4 z{nb(bwDzOp*81lFJ-)~9Vu(>(r6X4OuXgU7&D_-H{TX93g7&IxI&@Dy_9p{3#RJQC z9p%sO^dq+qQ6EXKrCTaQx%f6{y@&~Hmc+^%N`o&qgJ7&6JwY)BybROExG$?XQ|G?1ppr6f%7zXSOGCgw3OjdA4h6A^I~LVqiqGh+;(x8#{LCXY~{cHl3_ zmvM2+gYfe%RrWkf(g0^>wF^K{qRhf~h%Q$?AhL9WmM$6dKYC8Tr$!9h8r-TVZZ@%z zS3p8!TndFM)Q3dmk$*Q}Ge|{3nN8nA1ru%u4mQe}4O@tp0i7MZhY~J`f+mATOmi4o zLetMCEF%n__>nKh1vmc^0$j`K_VK3Txqkg>RN1ku`1Y|arx?7T)0Myr*fgwkMBE4y zq-$niefhF%EEN0&7$#3~Um$?=uGs~$`OxIxAU&E~u1Xb|J3zc^>^q)tcT^y3Ri=Amj z2S^RngTs-w=FT4~LqkKt<=Z8|3P?x8D-ETI)D5W*ogthJ@C(kz=)BtNa^x~h7Ya%))P z;-ix3+AHfyfLV^`pqxsb>RLhsjJ$pI5lES zD#Fi?h`TOo#Ktwv++`^5lOqlmLt4y3k#KWhYS0a088Kh(9iY<_J_}i?mR)xHKpi8Xq2}@XOC* z-z8+4{fS_r58p!LobeI-=yg)?CizYje}i&v~)3cUpz+ zX^c-T1{mI@>^zS{;vM`-FcRcgGaIzn)>38T(!Xzpy>z|gv_s;K#`XS_70_!?ZwNdu`W)tR z27V;p!fDdVYx<_=N!o7BE!-R&1X->Cp1%){fxs8ar--23X{MB^2U9m(XlLFCMNf1%ZIl;_oZx`b9HH4TXabt(WFe=9usI z_IPO*E7A$H~I;ec{$~=Q4*I^q%bvdn;*D>29*RPGb zgGZ}{CgMPyc`X+UEk~(}@au*Pn@*fYeJ3SEbgpU#3J6apbY43*>&LD4=H~P5$Evo= z(_x;Ay$lzM&!#_1(F@ok=jUsVt|*?BBPFUuse zx^8y(n`!C`beOvv#g{Y$Psr3`yIvy{v*Cz595zNbQjH%_t*>@eZRH*CS9EV2!6(-l z)MkF#nh8%;P|6)4LHBz|?Gf85Q4%p?@1vsoXtwn=IeDF7>1L;jyvk5dov>yU9#hmv zMvJBJ=E9S>q{!01Nqi|CH`{e_UQo=^DtPyY=3~ZiM7oq})Xm7@_W6;-V>*Ja_tO4y zbrp|-?ktpZ2pSM#C+2xVp+PsG@Y@=3~OCnx5;}O!# zjHHe!KMS4=D!1G8N!NN7RTv?WPFvef4}AN?p6n_o=}@gTus1gt*4M1*(bc+9Dt)-* zAx~^l!a=<`NpyT{)cE=QZ>#tSBYUtL;meVL(MH7~pbVHS{HrQ4ZaN*trAtAqUG((8 z{Pf{Qi9Sbvp%U(~vP0$Rg59$Lavt;nd&&rVo)}{F5afplv%M~>M3wE)-GIajWLfHV zba=Kur?Ke@ML{^Q0kOIqe}Z825#$6jl83zwp<9$&`u?d((gNw#M}u7t5`bo%qkv-< zqKbSEhFJu@Opy|DutnH+$%t3RAU0cPgR$Ty3Wg%weISsK?@rbqwmT@KTZ>&LW-G|r z9t{R*v*YL@^YG2Ih@bD7<8s{_Rm$Ll6qe5e+ z8L{CPh_VqOD*l^c1?uPtoH*+Zj1>_xAILMLPmyBb%*+TPkz4%6v0S9lPZ`3o!qt9w zBy&5gTvAJesNBg*GY7L#5R<0OzT{IN8Ui$C@NHt=0yHL!;8KQ!Rdy-^<25CvA)r5b?|xFkPRUV``k9IoPzh$xNT3g6+o38PBIzT+=S!KwjD1VpM`(`C_-3;2c;!Dx zx*w7?n(kV4PwP*oFJbZiG0C&rsRl)5Y`oGf(vF4Go8Cur1l`8HDQAVN{Am;fN%FLMou>pgb3Bq5IzV`*zv{@jqo}CL1JxPF3HsPPq zyuugWX+3b|c+ejaF_>}D2Jkeu=19YlKMP3Q%=lq3B{QO0aI!SY7T8k+lhtLhO_Su} z;N_vPr;jl*cF%h`VU8)|V0~qmuUf~dc=(=QPUH2{ed4r@6Z$(jVPwRS34yFQ-Zm-P z#V*-I6+R`oS-YMWKZiFdt-!KgHe*$IBs>$h(mU1oq*}zX6!`@}SqOYRyW+^*j_0|K z=z23a=;47IG4+yA-}xAqJ>K`k2a~lXuRpnN)7$}nRw{0JJD=@wZ|9+IF*2ZUht~5j znVLmjoWK7-yNZ^QQn{;>*h4WSaSl0F=c&0kvfJ!e%DvB#UehPt|X zu=MrDQ>-hx@z z(A2XfEl&69+A`ThO_I^yU_u`j>a!%fP4i1Fi}Xi?bWMxUH9ynPg@`~4POg^b_gh*HCZ%HUZ{ z8xeW3GCfjT^nux~&=7>d-1n8(yxamb{~vAd6dY@~Xzj+fZQI6-XKY(Dww)QPwKmq?wfBEc)u}qw7k$xRS9f1@)mz^)o-uf0SXsoz`@^G(B1hBt**)mX z6JF8m!AlVZbZ8}0$NBkK-i>A9^vKjvP7%ycSdW*VN2neQg#=Ah zKbd@(g4$%ybb)1hMg}Ney!8Un)J{%!-Rr7vlgJ$TK999C2~Am1)m-)tt#=Y@tRx zDAo74DDBK06bW=JCTMP9XxwiZaUwnW7)M)a;Gq@Y%E;>~G|qm-9)GcoVG8_GgYd9a zgGqFKU0Ui`URVxNkKbiB$j^z4zMM9hsBq~`ph#tWG-$Is&8E~oOpRu%_N|7#-me{R#T9u`eC9dpT=~o-f8$x!q{{Q=+%pzs zHA2fLQi8&-gS^!pWLk#q5z3NSCu%TD>H%^X&in*ZE%vE}E|YDAMA$`O3zJ(R*MUSg zeLV5YECYdvf6kB-NU;j27HhbiRpO9F!JqV(_ zfQ}%Bd2}Q3qyk^G^Nu0ppR7M^%|+I$POPG;;1`+corBRle; zZM-|-#npk;ZjiP)3HID#ght65xnrLAb!dGdv-h@WK>9nYZXoRT^=On7;=j6uW>a(m zqVp|l9pGOoj?Z?X%KA2MRSUdlsl1|DdZiecFzq|;HW7(rlawEx7KYNd@^F<;+7faI#D@ zRhRA#rmmmWl2wzN%!N+Hi=DJq%?Dr9;H?%m6EL! z>F;>jggM6R>Ba&kMv2r9VO!V;*Z-;lf{_&siVSWrVv?;3_9c6f(+6sJ+keM8)XfU4 z?M5CJ^+VY_50$bx6XlSah)Yl(>P@0zMIKB34xi##t>Q-vLYvaFPbsZV#M1pKLRT~+ zQDB*qcALji<`cALgoJzEATk-Q=T%cRvbIX-As$cly_Oxj+42?+pY4sfalrNdLc*w@ zvSIgAh9_dKl6aEEVkvG-_rb`TP0mc0$HrKuuPAXmzhaHe3-M>^EVO7qjv%u|Nr`eq z!hCg#9?}_V*#lX@==T_Dc9?=}G*#Qo1M9-P489U6cUnx$kkkB{s0l-1Fu;-pFg-vd zd6@BQsr7xfzQeta;mBFKox2&^OHY654vIR&m&majZ^N-j>(b+uMlH(B;Su+ zj$z63r5w~EwlNvu49Es^se8U-s>C3+-#l$~16R0>d~gVK5Rmk-0iY>EL=O;{fpAsy z1QjD^Lme2Oo@lo`+hBe-Vy?&Hu1e}7Sj+O+;?GgfzRkfs`U8exkxIocO>{*A_1 zQK8U`MF2ry6zi71OjJd0lDVjSSy!$$?TXlzPQsbeSw^0`frclYnINs_NNRCGNU_6) z7b;Q#gei|lQHmPDztyx6+S_Yn1$+L}-rF~Ker_0Cdc*vF1?wGQGFacL6IO2kZ-? zfkmoHb{enq0b<@J7LSXO^oVc|FRnOCubSXy*R{`em)G=Cwu{s11uG4CPVrIJ@fNe( z{MO)0M~kt#n3cxKsF9JW$Kzq-WVGXv&Ui&e@ew;YIh(k>u+8?~mz&5&lSb zf?Zy{?R9}5KUf%qB_Rr2qW<)VIBv#7Hh`?KxAmmTMmTD@?ZIFdtB zm6Xa5I0Ri0Iaq!$mWq%^Z@5^9w9K$MVu(wSs)DJw_D04E>{3R6cIo(RE+_dD!ft%}_v$L}?aDLNsc5V&^ zX0GqN&wu0zWGrm07=@MpkzDwGsDFnR{+ZDcw);nP;X9omMD(4M`3JxL$td~l06DrC zJO6t%0vqGMU8Ma_(y#k(@B8P9;D4dK{|fi~JND#YXaC=75C04HWM%noo&1hSm>Sx^ z!~6{2P={4eR>u+W00}3;nprGz_XqF^w?ZR=i^3D{sQzSvj$c!g?S~IP61xH~Ed9|4 zrA2Rpo~yE;Hq?SaxW3x%d=aLU|5E-(%caP+NuZp*Tj*J*G@$uv>SE&R;-bsxXzNRG z`z!Z4>+9=&8wdi(0Eh~lj!8f)xI1`azAR6Nw4%unW@ zz1lE8fcU@KN2Ml*6ERgu+E9Vif`@Ep;Mw7lftUbjK*Putw#|V>hasRy4$!;#vS#E{ zxAPRhNIby1>ReetBCA}EJU~KDaZyXaQ8}5uAblba58(W%I|xT88wZ|2sq$1k*Q55v zOYLBoapl>g24P*bz&g)c*c73lwb(j(V5xn-TE&^MFSO88!lBf&PPU&WT0SGp?Se+~#@fsfP2MJH3=bt9RHC6xKXTod%j%F&Z$*cby1XN`9 zypc3JOeRDW@5)+ULZ%%%Rl{)rRG#YGxt?%RlZTF=A*`TFG;OAugrdKhXI?GCA8P-%W}7>tLJl9JR@-n1y$f)K|_! zdS28de3zqEMl+#}rj)yoa0}XBOLh^w^M}YDsa7QD3p9|<#y=v@8Lo&Ipi$I35R+SWOL8$69Q zrMVQYny1}6dxxOyf`V?&o^>C3>9e2FXj20^1er5f8sq=Kp4TMCO*WrbOCM1}%^4w{ zBsGG@6jJ7!*I92Bq-fFMUZ4b@e559>70LEE6Fjgg>(MItQ)`%D)eQgZ+@9u5HxUz#JM&JRLLV!0tD&*%ggSXeReKXIZVB!Qba!92CuY|5@? zib-_JvNeWoJfaHvV5&iiWQF%yN!611PTX>Q7`XH2lpI4@R>d;`?l4K3&ScO9hGY{= zxLK|!iYNQ|i<%SMJY&`^eIVg!u^ux|I>4;b^cV&LjXMlGva|6NDxOK36i>sQp0WM1 zVh0+R&3Fz#NAgx0-M&6oreOt}tNTx@d|&AIC;q$Rss~2yAcbyb?O1RM`Yw)xDOo-G z&%A#ZwCGgt2-XJfwM6|C>=FjQ&#Q0R)|>*RRqc^4;+L?9b+KJe&uIhg7sI#HuEE9? zm9_+MyCmokweI*mL#W3P}MszU$gN0@VNQ-#;tmi zzDPonR_qsc9h|QiUx8zdn_33d$)}8mvj$_dRmti-ZGyTrpW+ac*AUU$;Srm0LNj)l z7HdAdV(ZhtCmdGpxA;9l?U356$4-@R>yhB-1=B7sUh(>lBYp&)FP`_I9?_vuUdvVi z-G|3h9<{ZljvetWE_VgCW(Ml7>k>Sao|}J`z|9)3B>%LLy|}NcP9x{gERt#b*tQji4<^2~ zg&_p-v)v}cB2rnjZ<7!J_!Kj&bgM&1Y14SbNlXud=$A~7{uLNQlGj#ZaAHFGv)wW) zDBd201C%(3M;n1nnQVd*IVyI(Wf!aHT{P$_3VsDnpVo+AmPVaw!#&f`uylQ+vElg>O{Ejv6eCCX7WGI3#*s zzn~Q4gvLGDMiF6~u=n!Pnz|uG)ufRZAs%-U8Yar0{s&noU8g914`vIkOp099+`bK` zc*jz+9c?n2Q~Vo;+@^niOqJ`+xacHwBpD{HEMbhTRVL;lE)cFwIMDnn@YNDA z@~m}_)k(jW4j36}_5>UR(BED`goB=cL4vgf3xeaUxdp7L8z(fXXnx zL9eTTD6^o!7&Heg7!0bHH{~wDEQ*U&gyeXs6C}L(d{kV1K3!#VI~`4Me`mM2Y3YzF z)kbWC&uRUJWAflvm42MtnzQwOR*pWv5A zz(57q_9X8rdK=g~r!ny(t$lh237%jfp?=@8mlzZk3#w2h*dwXyBPRCNaBn;?qnVW? zrg0Gd;hv_2jtx2n`5x-tn^e1VvIAao^gxS?peA-J^`-FTLDLkaUZH~0C%4;;WJ0Cd ziw=O0hdd#AZZI5oE*mgrrYD7r2~IK*&`zZfQneJ9s$WZj`fQ8CUPF)jk&u+kqz`x1 zIarBK?Jeg?GAPu{kh)xaBgum$g%M14bQ3NqN&8R?C$o5(8o^CE%BsuR3mi{lj&#A8 z=*_pe^O#%cA;>SCTAWy9S~wPo08I%kkLg3h`3Jr-xR?zpRY27c!I-GE;g@|m6I@o_ zlkqkcVHVjkf<4MBNL%(t?Y#oR5R7ZqynI$1sV9f=4Fv(0@=IluXjRnoSg?+JSG(w* zgstE~A+AW~s3zCt4sYcZGEEabamSr;^+C7(?pl4QU)-Vz9TeS)VoSLPH?E0Uq9cRh z-uxfU^Ati~6JF!PWcXZ7tYSMEs5evE3}QvU)8lz{0mptNw&@B^D$(LEiS?oWRH^Ly zkeIV}!DZ*|QxP*Q&j;guSW3`D7%^}xqxy1!jaHgS2?e?0)mCPf zs1q+?dvrU=toO@mU}&ot@DfAe3{zoDRl1`4aE1VINzro(^`~9)lQ%I)5;gti7Jl5M z!-}?_EV>y24w{~yH;y3;!+-kid~akeDhxm1Sy!Qaa*o^=7?Yl-I+iQ>dF+fXFB&gw zGtVfeJK$s)P>Yw$EG4cNEUY9L&AC5LMQifP2MV67wVLydZO(}o7oYhXwcqi)Ta;ZQ z1FP1n0|O`W^kkNl@Kx5*>*bT<4XmEDZJuLva$ zbLlrS^)~+QYj127Py1;DElxbnN`I=b@H+2)%;S=j$NCCRTUVI6>X>c2v|sSIWQ+@N zTtB(f@v`zy)z@E`sG41-jQzbbzcgL!K8ASyt%|nK=r`R}O)-A%p&bhY@%wRQPo!DauI~xQkYJ~godZRf8w>+y{ zW5fEP02a#_O_xIMw$c^xZ8+`P7zqee#2`uni{hszDDAxZWVs683cQ985=1>W=44WMcEbg0!s(L*^n2#wY>H3))qBc;2!aoFG zs!}*1u7$M>;zrx)V@L)t_8v; z#CB&JR33N@&Ui#IlnIt>IWMpjvjddoM&F(@9Eb*E36eX#R~Pi{6Tu~)u$KO5=$s%UMYSRacBt zfzf>ghG^w5&}>iR2j7oaSO@5r0wXAzTUYDB$-HgN4awoaMGBMOj}-LFaaxW+S>(rm zo)0+MBnXtkSV~e9v}i)tWG@S*l#fq|+HVO$XNMp{>CU_|2wF9mzK+ zu1K%aL_@@X>k=3&d$*P(CZ66Edjq@fgMWcqnS*YPs@cnYv1^qOWi$-uPv46zHWx^UP1Kt2i(w=$xs|cWOy%K*x=Sr_Vg0sr-L~b^+>NEv}U9z*F zgONINxo_*_Hi3}#o@thLPEKG>m{2esYI?00cBM@AJ39dHRy8c-FbUoMR`?2;I@L5s zC@R1;3#Vg1PFJEUiQ6;QR-|r$Bx%T;8um)SvX|Q#c}pG~0BX*e8Y-`VQ=Yjt*;?Nq z^GVjUAi$72Z}0YFUSi=FMRwwMAp;0!TwC0%Cti5Y&WJg4WtKEWK1U-$@-ClAh~)%= zf%KmyH5LMOrjF9>na89E>OoXP$PuQ?h0s5^tHjif5>rU$aP{a2I)b^_0($esGzZEi zIRuH6vd+0XM{hBa4XA>?8|%g+TrsX#rgmn$bH9R`7PV89V8h$6M_AZYTK|X~qLl99 zZn8x;W=bo>mCU$Ff(h>-1r*0aD(#%}MR$su?CT#tfKDwKX8BUc^#IFRPfm+B@bkMT z!*0Jc%>~=_!;6ST%ALDimxt6XJZw|(gJ7;AXK-4(?RKJVX7^wIh@_ig`c2T`` z`ncxjwb*;GQ$c*{l;~F(naov6ake@ebkG`E|C!i(p-Am&O?jKL7@t@?7D6#ly4F=V zQ45l*!8_dCyl~NmJ&;aOH3y}#2B}g8*B8eTeP<)KClbGs6teB}OfD^anidon=g!#k z%=?_>G~IQ);dP($cvYrIk9IBGsT53G3Ng>%2b!#djzmjzx_Rav?$W|4QtKT0ltf2n z*IW5O&_r7py2u~^zNv*NRrs(KIIEC4avuGP>x>~&F2Ylm?b$SKpP$DZbp>^nz#NsZ zdpZ-PWZ7CcnX<`-_N-dGpt7f+(n4Y69fgzIt$#W9Ea+Rcw5{-q5nj~Ataiejh)14Z z`c;W*dl7xVzy?k{7WZm>r~C5Oil73ce3GiO%wh!nW1{cGvLaQ`m>KMmQ}hj>H=zYT zNy8W2T^bJ@P`@TFlW^{yL9*M3vzPHg8gZq&xK*tQLMb(_`LU&)BAVseF0Ue z@ptLj;7=q<2T9HTO!Y>E`jg+rtnxbAxL^*ZMY7k;H;S3qV4F)-&1Q+ zA_GK+?u}C?r!q{sKlEB#C*_yEF(|_OC^K0;Y8VOEyH_#`-g^9;Ts$I)&*R7jxY}%ANbccCEjm zzwLSfk6C|KvCR18V7)VPqu+J4F9$Y?FJTVOw1+u*LzYfszO1(W5btJqcGmSU-dkQ> z?YV0O@r@>@iU$@=GEqb20X!@p`jry zFq{Yo*#zJPSO-)FXzbAL2!dRL_yKJJZ-MB6`XY3Kp#6sJ)!Z@NVY|V*AvM5ohxrK- zC_bSsdIHG1570w-0OaLDdCDoI<{=1qfj7YJc6x_)>Q*PWjAb51*K1cN(3+;wjU%j5Xq#Lp`XsU&g+I8}hxt-V#uJNu zY4>RTst!avcWp{M#U(|V#U?bQFE~34&7LZ?Mis@BGo{$#q7h{Y3k{G$U)IQ9b zw0rs_F3sXH91sdNtx2Qvhw|!nn5U(EWIg)e>TyZn)MHcpf=+d3Q#(Ai4IYT|mG>|H zMi3_kr|RuB-@MBEL6_e2`9-CLqlj*x(w-anmdz61=dyNuAx>#ZHOso{6G*&G_=WV6 z$CDXgICFV(*08?gkqJ^Zy}>amtv4+kKSW2?65F}8`4)l zNmD*gs@ZouWu%|QbJ)V{Z>^-DD+hy~ofG3y<7~IspiPB^m8}ufyVx}cU)p-}^L|T$ z>v_LKBEgXqMiFYHNiwBx+Aa%;Ock#z#uP)u&66m;Z>;@bmD&)eKj19doZ$z` zCF5&g1BS!x?({=Ib``$LW8Q#ytQyQ<(z39}(NlIWhMSfbH`l_>$8HCnFu~JIam5 zYY8=tM&q#X#|dr@D(}biI1hPDZ8wppKg03fbuSmPQ$;OB6{4J8y4RAE!`PhiFM{9l zt*#f|+y4ro{^dFU2VeSsl5hX%0RDIR_J8;OzAaoP_^@ZBWA#r7{TmW$)R zjo|%<1pHrxO%4{;|Ln+j0l(<$1)ul1{NPzGp3i3UW(Cl&XYfg(|g;17!BQ0a}yGQ5Lt^(L{RZ z{gl_&m)~>G_DAYpL?$4ht6pFYB1*+7DT=_O@%SSOAi(bFS?$fh0Z|O3oqWuXIg$*ZAFZ^`FVJ7c>cOK*l91=(bGKop@?DU9do}C;(B3Z{DIKgM`kb~a-T<@Dsu472C=WhX|hMct5;$to?mxWCqh19Qg_YP2*~`6@N5K7gFO#*+KQlg0!S z5C-&)>+4s%cZui?Im@G8F-q$&6VPNxON}agGMt%?WI@4%pDBTuRWu(^%CKOsIKkj5 z*)pI@i|rdG%|}Bm`}Ir~P?_c}iwfg4+y!~a=<$n751`A@l8@-A)TxrNaZCYNF$<7l zu>sT9zh4ntBME{>3wKwj;65mbnYC~Th(AJKdi?zF*r$iH`hY9%f~l@lC+-~WwLm)H zScmcx9CNcbbaBDGx;7}9E7oCnW5mI(d7MI@T@M(SD+q7(EI!U>B>i|kKeETNo1*VQ z>?X#Z$iDT?^4^YTg{SPis#Rsnm9BiAnhVF=qX2TVkA{IM0#t`1ai3-rX_2#+^X$6M z^+wuX?^PVCY%%hB98HEI3#$ZrC#NANsxlZfXP8m}!R|xuRlcdLM++_^19J_T9p}=X zT>R4eupk_vQJoJtaiyMQIV0|Vb5gnu%i(r#-_r^O6u>-Do8%@+V;H8hNxEl*a7beMkoprCh~ z-{N1$w(0@9Tu=YAXRh{ww5=Vdn&is}ZC}L1`eQYAN>w#T*9gbYuZUJX9uU|Iw~O~_ z3qJ0$og&JQ7Ak>o#4q*R+kU?9<**r5(|o9o;Jn(qHT~oVkfdM_XGyyuJ9cYrjcgsC z{64FQTaX?Z^~q!cI}e>#p*e2ViG*{rR=XuzZBC!L$#;HF(>H8k5q`5k&-Mij0PKxy5Nb1|J7IC!v#MaM zyN#od*zXDUgQ<5+#_Q^~W`q4}-an-K?oGUFn2lb3D--QwunUeo^6y-)iHWF*Q&CG> zPrO?X;@0K{?&IaOe%P6RMKZbDPAo~Aw+3dFmN0lbu0H1sEW(}xNdem17p*zuE#$!w zX2x<`5YAo;b!l)E^9^J*!z^YJ=LEwQDQm+JfE~?Y8I_qAJJF9r?1Z*+`TndZx6ggD zLP-syFTl&*o{=Q7)=xk%O4lM@2t{o&o06KBWEzQx?6qOjI+=nx2x~ZBcv`iUWCTTg z^&!dPk!d-PlZ+!l(t_L9(0=X9MHVbz_ijhmEU5{ytWxl8(=-*J^mc>)q znUI2Y;RwmGzN@Kqe<>+eWBB^bIW>*^Fu0b_zF?yd4w!If)QOKI{=qq8R|A=m#r0`$gAy6FV^($uWky?vdk>GsPgXQLtH{_Is9?*| zCxasd5F|mFG$Bz3K_8Qe)=3`DrJ9~dDzQ+JVwX`VL#K9BEoVUTD}{p$j6?#U6~Tl&Fk!)nl@u!YZ1S}>--OR$j26e* zEz1ClVoNQm<$ICAE)|ftg|fQR$+<~RLe+%=1nN#lUNdkYPE`zCl`=Cf>pR#_71z6v3L&(xZzIitp%WcPx6n4Y9V{XfRxVohsSsEmAUFiVWoPCqM3pHW zR;_h}`vH|#=xLSHQk+%ThH}rYBJ@;B(Qs%=@%Hb9-nn1D(w`SfPL&@3Ned58l>jv+QXa@xJ@MD#(PQ z<8c&~%#p4aT3cSr{rx^kS(G{4l5kA^u-X-rPc>*CeDY!0wC@gHiK@r{c;tP?lD9lh zR`qDd7}!9R$Xyw2F2esbk~~SMLXV84V@q6LC1W3q@(^InbKX6c4|zLouH3Rp7qpO# z^4_<&!L&RN{M*W+9qXKSbuUwmX4;h7)_!3cw&mioKZ3qp>E)dpSR>c?i<{GK*K~nE zUSlsC7p1nTu(H8DIJe~FQ_ioaOhV5YEhYi&&W8#za@6G(@YVNu8#0iWoG#Wv74-us z8GK|=u0|E7H}PRpNhN0TIp`D#Qq#F4kbs2jNfg`eI)_%9 z?jkKV7LytLfQVdIM1o!4`%tg-;|oUzfe!9rHv=i@#mT3S=ETY=u>)I67mdYVuTHmf zJ&Q-=>SLSd12q@j9+#-MYd=f4WdBBC-;ER0wr-7e6!I`V*4gRxHvpIcepVzS_39~N zb}%Z1y1MptOCFcu7z0Jhn8vV1(;o2MclIxVNBm36l;>k1vfW=EHuDWNj@*ImzkZIm znF@Ai?qNFj&*oQqUN=U&Q(Uxpx*SU8pIAHn*jF592~GAm{#z1VS7W<%k%K{H=OajJ z8!EB5g5sg-av1p$EOdA(xh!0RX+t|W?mT66l8w(QNxY=Em^xfb%k|gqOKf~aXftk- zzAsk7HAEaEH3#v-VDe-s|NcGr3a`$1`%ja%E|Ubz#{rLlk&@}C;r@= z+Xo&BJ{Ny_C)~GEA?uZT=2}@d$oIuPuxv9oAIINa zF;o6B+||Iq8c-at6iRdJ+aHneaT6;u>VzVpY6JjqM1K#$HyuOEWE`XwIdP<$I|4b5 zjuALBU>aLa>}{CNQ&-@WFCadTVc*{!13q?dAD^a_T_PHbhv2+ozRR+i zkbVtlb%N#ofNd4R5(P!9G(ZY71jP%YxI#(}X2SUVJh(6m!>AwuF(@7b#9H zAw3*vy(t9div*->0Fm?qRUhuxLLy|-biiY6IcgiLlnI_io zP~fq!SqpQ23Y=HyS3@DB0QP9MfV3|JC8}%e9nux}ky%VmCgKUxD~`H)3XYhCu|MW` zGC=xJ6#68F+}|4&aKxI{X&ifW{_#u^o;cD~!-*)qJMvLQNKz4WMArUNE5LpspeAl8 z8Tt5-Gj4s_SfQ~u)R@yBqKf@->I?^$qGNNcvYp0~>v&WYx`O_WcTR{41JJE-(Kn!t z{nCx%Zf6BC$jsNwB_14n)Ytf1hQAYu>S?pBh#4o#1UXS@8RPsBWyph&Na0V+kCb-s z@7kcGWX~#tWoyx!Mc@~N@v}m4Z`^PWk)!A3+{5|UNT)bX0#KBG#?Yu3vtSs46AY?( z_pdNB%g`kbTANv>1x|S6K-Oe2?qBZ{9^thn>+moC*(4^69^>t^SIRDGyCr`?EiqUN z{)Ln@NQYze=i1}obsbI8q7j##ETyeBiNuH7LeXfi17#_mBs2WhjN&3h5c#Rsw;z~G zoC~33hb}7+)*ie%p0j0#_XU|}hZ^LS1!Z$4kw}>NH8BE~3BI8gPJNf+FIt6z;L^SW zUo_?|jUMI3kll^`3tmSWaTMyl43~Zid#=VsL zx(Ba^gomuRM0ZN=s2>p&dMQ|V07>6SfMo;t5yH`ce%5(FHMMR@`<0^+Lj>)fnp0?N zq7Eo^Fq@YM_0xVXCNM4Pg>u)O&mAZZlzGjD3k#h~<58x)Q8a$(3MsjmVLk8g~>% z15iB*-OL+|t-jEe-}2Z_zkrO#;f%#mHq!L5YM#D*Pu9;(r>ibG5Q_;?HYAwk4GM5; zRB>2%%@G+R$OPwIW|j*y3P>n;$znwvz1l3XmY9BgKp3gK6n8vahcoD6L;e!Ym z3!_HkWa>aQbHtT3e;x&k)xeF9?)??%Ig8Bf+@AZ-t!-{E zbJrn^QV%pAie1WIIiHQ)gve(&8O*@jqvFAeW^|l-ta7+LEP+RXNB2jOM~2?hY3h^f zIk!3CIovr~)3J9_ch(wRxKD()v%W;1bO|J;oz%Ia1o-)pj^!6ie&Ov6Ivw_=L$oA631@k0rI9dJ4cTBISyaO+7Kr67w43}Qx*C-;$tg(p^Nu>>XKN>ss_ zs)abxve!H!@uR_MAg?=4h1gW+Tj?Q-b?{n`&>gp1`iV3>IxbR+jvNml&??PgG~?0R zie;@;*^K_=i@JXsMq5~6uLAD_dPI*Ba)Q&6tLkc#uh1S>`rT=N0p93bI7Q9jSESi->LtU(9EyV2qQx zx_X{#Z}q!?@Ddr%C?(Z4nlR4V)-(#uCYS##Bf~mbMyQJ5d1e2=sfy?pd$a}AFd!q0 zq^-YXoK)|QOPjJN)sODkvb2pm`gW4=crT6g)L|jOL*S^1`^2rqTr_J$Co2{KBP>eM z5Rt{!Wnc$uUqZzWuG3R)S2wRGTsm-BNzLUaultM?FNAIhb63Y|jH)WGAA5H##54t! zJjoUwj9m&=z-qdXng#q8xNeOqdcUIi&V&40i1+iAn*j6&TQs#jYXYZ&uhRSIS9CKs4HWmp1E+<^! z=(9500GFZ>DwW+>Zjve1vI`jp)M>JM*0xIr++A-x^6b);QQGMbbPr0|utrtxwZbo! z&5U%3H_=LgO)6=I*pwEs4yp0|(M{&oVvMphnWZ%~8v1c}cO0CAOw!v* zsgJAhYNZlaw@TSS#q4+1C3}hmQPZ+8Q!RiBVDUz_!%)m=A%bjQBnB6!OodGR<~M{2(BI*p8l=5Wy6JFO z6}mR~bkiF9K>7-4G@ho(K7mdbW|y&W5;6kalzrpz~ipZ+%s=!bVj5>2Z=>UsA4oONjkwDpWQ1u*X*?D%}v=M+=S3ejuar=8fF1-hOd_)>T_ z@w13V_ukLA@Sl(Z!q*xX3{dzg3{#7=G6-6sS2mm=6~;`95)%{lij z=vO!ipLB}fsLz6|rTfe}Pw;gDoSH`))yfmoV0Z}L^nZ0>OWB=dEruTwCY(z9Gk%WU z!9yNc;l)&17xXzs{|JbY5-c)|#f>wplWEmA*yLW_-%64VJf1Y-8N4a9fV^-9U4d(3 zbdT6fl$z38n_>pmQ6bWT%@m-8ES=|)^KA${>V<$My2l@c)3b7hKjx2l1>c#cgV>nn z&T+5l2EJw6afH*GtC>O5l*z7N>B^9JfF3cQQrm&`Kp4|o!TcNtHA!qng(A`8{T=L` z^EaxwZgcfntDhY?FxDKjQ3ThX@rPi-XCH6J99}X)F-v*L{Fi6En^53DXQOB z$Q(cH3k_^DzjY&A7?9WRKmexQwce%fthAHRbbv5}%?#1A9f^>`@s_<=OD z*QdR#=t{hQ=HoyU*g);53Aa zh+LG1C8e~bur!?LF7iy^c8epQJX7>jk+TaoqyZ5>|6&*|Y|q{FqON5o^2_5$*(v-n3e5X z^pWM2>l?;BOON!k!{ws7g2L%LunTU>X;gU&Y`laM^~Ae}4ui-?o9Lq>bd_nhBM<+G zv17q|{==LUH$5xklo6bj32C;K!fd@+HaFj%}Bo{2d#m$C@W!UX|RT zI?wYC^T%5%&7K1vI;)Y-wr;t54SbLrfu7t=>CtRC`A;U7L#}wgXs3u>1b1bO1@H~D z(;I$bp`M0%c!k|P<@%4XBF{A%YM z1jz_*eeD(od*a>guGx0pp59c<(-920bI&P{B)GfT3~I~15d+zOgtOS4;*qThn6B7U zJb6>T>Daq6(xZ_`e?FVgEx8iwcH+Wh^f$xvULqnS4s5^YG0)%&#<5S*YGCHi_+`8y ziZ8+cg~q(zdyTMgFMKc~p6)p9^dTP2Gwp_!!%{?H0sM!Bz6XZeJtaf&T@NzCAH=|g z;Fw_cQ_-1lAaQ9e-i-R?6Yl9s-A!I=VrD+W@S&X$_iL}y(;vW9^YYw%X#0HCX?*Pu z4)TVdmjLAng+Yd*Dc4(9vIy0*L4CxA^`)AM*C#0(K`t(7S(hnl6(@7fR##e;Xq^8P zV_^O0!e9C2xalXtxy7@oLdv6kue?)AQP?X~^Bb>;g#A>Bw% zJpcCb;_(|6noxq_`TbM<{fqR0=c-6P|5Ls5nBsQz&}XXRfoFAEj6{La7fg(5%R;n= znS5I)J+$-JL02!h7c;h34>Q^%AOSduCCP_sK%;}({Oj$Z1NAv={)J&ZeA$$9Y+Z+r zx36HT!?25Z&S%MoB>A#FaEzm->QC|7(n>!EEvmP0QLUD{@C;amj%kT;r~Xhu)SehM z!1zOQ8)4dr`8Up_EFA=YIjF<^EJgDypP%L z5x4cM+@uxkp4nm8!4Zxf{MW#}=nq(c5I8x+GMw(9l+O8lq}ZXZCo&0HFjLHfihhLS z>j?ADb6VNFGb+_5-&+664~XJ{Uv{DW}O|SCNZ|=EIl{UvamVHi(nu>f4ek#onZF6KowQu*1s5 z{VblYhidQvZAZq&%MWfQec;m4D+vD1L@CTmVnNIf+co_1uMWqX-w5sW~VU48eLd+JSIxGPL zb9vggndwD)zxr9Fi{Z5X=rwXtpMSYGv0(Uy^8V2sdwU=`l!Kd`<_CDAMZhkfIEcJT zdqoj^apQ(h827~P?-&mY9d3A>gs5_zz*SE@MbN4F5wLP> zFxU|L>%od!-Pek-l)2Yr!wHTTq%bc!r(J@(<|v-tMK@tFClaz5Ht%>1N1RQaUCT(w zB~O5jZUjiH5rU4nvU_}50#C#r7%Xe2cMrJ%fh>kuNn;U9oI#*_z-@_Sb}@A9Ol*3$ zgnU!N7nm5rN%kh5;6I^H7(%i6pqPBOnj-t8MH%6Ojlt$Hw3xMzryw7LvnIj&p=`*z z>6pOX<`%-%2;I^wdMNI57>l#*+Zeb)8kQDx!2(9!G5MxMJXX=RrowGs@tpm!=vDY? z<#30;Gs8CLQJ!usqS1GsDAXnmmXSj`iWZrLqvi~@!~bG4@$wQTxi#?0{i?$mhc8W8 zUfWkD?5QoThqK}2=7>c9Yf!BP2`C3n^xrfifirBQ_^}yy6H(p?ti3kg z3$EFWA%{Bwa|Q{h?w5&|PC%ev-K@dOJ+Nt`J9QqxPDJPEtCn*nAZPJ;Ss7?`s~tKZiLxOcYzPsErla2CZomrmFG^R z#wRVJYYtdCgJked`*#<;omy$lSkWvf+s13W&^U#NItu2`pTxtt2tF-goF8S8)c7H0a_+E zi(1UI^<>-LdKd<@z23Mh~k0_Rx|hFxE{Vrni+}&>i#oa#8#q7;r*-9 zj!bI}V2KdfOsmYZ7uk+ewVC=ux+{zhY0y(+$~Dm~q@0?-_EzJhg{v{}yFp89cQ8%1 z)~heQJ*Re*7CB1D4@*mGNX4w{1$rot3LIxsm9~}Hz5+Vz;vG7cjCozS zlE%;*E-35iT@1WpQDaMQcuNubQ6|%Z%4?pgqfJfG-?u4?O6g5*`H&1X+=0WRGwVO) zpEV<+5A!Qx%^a<`4(uhV+p+319Yjzg_q0E*M?^&AaLmAI$lvd#4NBuFZkDIwMpr2> z)w^IulCrX<4cKxofeZ0okHn%rrV(& zA00+IxoP~Z4kV3PJ#Gv+$C1ia9Y;A_NN!@80rFBiOKs4cJ)m;d#3cYI{(zV60wPiT zC_rQ^eH-Kd8Ts3SLn1DV{59pgI?U#<1^AJByybnI)^YzD6Sa-I-WSRdo3sMy@n?rC z0+=+OgA_2j98et(dA?DMA(kDz}Ov?N|3ko}p^O=7F^)A{hp5;IM2Sd4#8OOzN7bAy1GDrt*Bp{T>Eymi7INSB2RJz@U+lhw;Ad5Bzq=itjU}n(Io}?SAbY{# z`JR4Mx7Nryk0dUCEBvVynVwG}KOp=Ys0-+J;Jq(lbdYnktGzUQg2JUm*>6pPm zP6F?~*Ly8CHoOubA9N_qQ?R$_#1yaeIIfi+d({&WQAVK>d zX}w5PMRU?0cADWb!8FjOLrfDPj)IuI+u(tJ{>0b77b{Bbrj46M(4)VALJkRVPEi{} zpWcZ$jVkHwprgPj^rC^jIw${rn$KPQ9j5lAn2qG%tlWf!SqH4}usn5q z%U;zO3MTmcW|qx_HR)=gHoY0Z1uC(ia8m&BSe5J9oc}9>e3Z2|GydVrU}2<9B5^h$ zzUTp{cTB)-IjZZpU4*(6$vs7JF>+o^U*%j?dHM5is@|OIo5HnOPNbq8|6K<@i2Rk$ zZS5|)YmjpX3JOUtTCcy^bG1OJ+AlWcU_B58(17I4y|6PipByw{sQ#A*g_KrCU{h+HQ?@jBci8t*0)AS9`7PUFR>3 zTCMCv>;`RFoKyqOEDE{ux3F<)sfSNQz%j7ax_J@hO>R`yw>A{)Y)58e1?dhYOqJZJ zQuZ5HTPipiNZfAC*9F%1HKK42A;<7Lr_!QyK z#iPjPBVLKx^t@}`YhTJZ^u3jeBHjGMyT<8@p&?v+{~(Cy0#;c;JLu98q|Tw6a*&Rd zplf-6ys+CZnKZ1X?L!LlcroOrtN6e+2|0H4I}*bFB@!wJrjk^YjQVwofEg>SK~%Pk zAjWY<&VJm%`E+XF+@Ib|TVQ|5^^2IkdTvNB5ch%=!~Phqa?0dHMw!50ZGLVU_UG)9NH~ zns)j4CLC$2^T)hzpigtnk2!kOubzOFUHO@=f? z*TsvqwnkS576o>MtGF_HcmI)nlyeb^NT45XVsNz+-0(quO%|iwH0cpd4dX;Qty$21 zzsGLL4fSq-Kt-^PkQxT69`dL!AjB>}E{UfVNT8ivD}wAG;2z#>cshA5f-`;sVO|gb zh(l`_;iSk6dk&|Tgt*WQO2n5DE}^fXARzc32Uy(SM*RXDJVFp)fe5)73V`AXR23NF zw#rjuUI>vW5UsP#DaT3nOqUxX zNkVD~>TklDc)bhM3uOQhX&0 z?kZDiSDbaJ>_Ml@%9!jTmkl7BplsUqssStmQT~g8H6Uy)gE1zK(^wdbNZ0|oymK&X z;Ff;fR5-T4nu++9`e&tvBsd^SA*5HqnR~z7ZNFst#H7Dh`D2t4u!ncR#y3k0WtB;B zCXHTZCC?YR1*@7KfmrmW%@+V|tN>tYo}LRzmyzFT`vxB&qn&Q{CxUG zx_9h{@TTr!VAm4>+mO&8eYxSIRT}BiWbzFcF~~UQX7bh+kL*>bc;|;M7Tam&!8&0B+ZJ~#C{f!)P3H**dQqsR zl@_GtkH>*)O+;?zPT&jiA;l+SYH~Z6eSVXm1}?W<<(eTzHl2fqg?=%={u;jTqR-l` zVFZj+*(OJ=lGmyD7ZJx?jp}%{dFoWBp$dkB;Y4TbYKA5-SS6xyGBsAal$|H5&6L|L zE>@N_=cf8{ULaMv3z}4u!9lGs>g&G;^GUWMBljlMe-?jDcrxk1H?`rFwBM|GaE;Wqu`ok>@y^@5FcK>Cb+bDZe1v zpUGeq*;#~e7dE?D!EiNjx_x@7WJRB3x-Ua!PmA7tsm5UA>XPVB4`NIehcv6vmgdZ3 z6gBTgG1{nc*Xk~9E$}UT22x~4eIqa5(-aB_vA@CsG&P3<%^7&(tj?0w%lDL4j zwi`{TdoBS~A`Sio`hj=%?B;xV}Ar4I9Wo<~!-Z|s- zMLFi9$79Kx*Q0WZhazZ2JA@4;^>X6O5&3=E-SzRQw=d!W(+5bJTcxe{?_F$boQqWX z30q39QWfhJrIsl!NABpPdUHBj)dnkINj8|kZC=z;6^227bmBAtNb;nGBdL^ESDz72 ziJlslofEQKUn_)$1QiZnr7;$XKN;h8hC_;K7x*YaZN_U$e(l!K5$ayK4%Pv^Ph2xX zZZ0iLlkJ_bPF|iu=+oB;Qq*k{N1!Jne6%>ZdS1bGnUODCBpfM-~^Gr zl9Bjhk#E6eA(OUG*_CtYzh2j91mg#df3@xkYKR_$*8;LRWf$5sjl$m(dk0+odg|`@ z)Wyw}1u$py%~Rd5#fJImo|`i;$@A3~!k>dSqtIHT#f?`fYD0JL0*{xi)1(C&l1vC4 z-bD-~L?oB=LZl=XVY|WzV%|sYIS2pzgkg3n4w0u2&?Hf3Qd~|Ui2DYkAVwusz{e6} zKB08R>I&Qv;1{{hhp!{9Ci28ffS?Wh!~}13%OvI!)YmodWZs12{^p_HqQ0WL(zDel zt8%_VN${;x83gl0E37eJ{Tk)$txIs=;Nm%aaCAms9N-Wow!0A);ABx6<08PGG$g3J zr~!$Xu;C!V=si$`ObMe_2NhpxBujA)5YK_2vcP6g{Wwgn-yHqEo3&P>aYg(aZ|=oj zY>Y(8vUF$zWOtOpO#4`|KBYe9+AXIP3h!A0#AtH60zx|1v>$U}@|(J0?aTqf2il0i zN^DWBmDWGm+3CtzcJ$nA4E~}sEr^V{hWNMl;{v3$QX|r6O%a}TNJadqeQ%vx)*7H?5x$*|h&iaSyt+C1=);D znNd)q>oO*v0}(kfqCu)LSM<;mc42!FQ7k7`Gz&f@Ga}>`ZfWOpx!`YT0)sHQ#ldm= z1Q?Jzv5Nxwx}$df!oRgW;`9MF*!P6fr^YO34C@+SuZ%*kDRfn_^1+lx4G}@GW4w{B zkK02|^kb&)B`?1sRc3%GdC&)pMXrcJshE(|hwm)2P7#$yul)AU0)H8uQ_pp3zPbtN z+`X4SuZ?AMd*aNp1M56;^X|J?@7|K_R;b>ax$t&qnBGK-P3C9B}dD?_#QX8Ln4=K5{qSF+kL7vt@d(R?a#k;n=zIJv`DQA zS78E@P$@xBvSv(+)!{-RYX}k&5F-hHHUZ=cwn!E=s1L-j?Q3hdl)CE1YwMh<>*M=R z9+Cr4d22ua9wC!@5?76ck_YA8#tqFhFgE-kQi@V?nEhc)+hJC`1^qob4*EY3J-jv} zmv(_*M}2R-v_tteA{4Fz#s~bJCg84KG^uQ~)V@1@xH|nx_Gt>3!BO*gWXW4*UV=L- zL}e5Clsgjg>xb2}ITVwJ4H8;}-_<L1>nZ> zDJ`kk`1T2S$&y6K$QTOrPe;Pibf=okf@t|ZZKs%AE)rt z=Yo5%?1Mgi)tiY|=V=gDcC`NJyeczr8k)kDo(GITW#P_}GiMPK>WjvWAt2K1n2|YG z37YC*s-)Yj41;kY)yPeWvAq!fBzPi*Ujk_6kDtMn-*Q)KVU1KbY1f~1D>GzFY5`4N zyPcorMv1&oRc84$(49>#U|de~Ik<~K-hKuDx*T!}y7jMS#h$A6ZcVL^1eXrDCwBO- zsWX|tC_^mcQVYFX2^cmn`kHU=;#L}OLZdv(TyppHR4812`5!TttcB46B-{-yik zdr){XQtyWft3ec%C4=^RU@C$i5stcd$pICbEamqnZ8z9N|5h`ASrh^>gyU7e}S z5A0*9u3CIDg~kkdpIhHgM>PdNnx;|dG4hrk;rA+P8GJRpwU10y z0--g$tFGiCRP){>(QdVhlw#O`^mTe!OiW^Nd&cE1i(b1*ExRSX{QQ>UG^1nX9oV!1 zX|~7IdE24Zoze?g+lP;?@idM&J`*gWv~6I5df}WXthf3DH1zeHe+l|CkrrN6=zUOE7y7k;IX4$|xE;@3ke5(?)QL2uQPU*kG34v~iBIO@{lXxy=;J?m5(vb&y*hK`~t?S_QJbXRXIjzeh zVig!Jn6R9!^$k92z(*V~%B&aWmh5m~OcsyX$-r=|UsbEMItNPQC=ZlaaxH> z`KjGGA<-W>%37z4)GcmU6}~vXGL}95DXbK|^S31@xrbMxeAlW%pIaMh17*K*y|!5? z2ach-&oDJZl98*y9U`Dn3&F);D0RM%F`b;uG@lCgK*m`Kp8{uh=rPLFmm^t{+8OCqvzw7|v_Lg_PCAAlEuvr<5EZcKix2|@VZNEE>fui#@?`-t4WuT zgw*kStf^boqQOjBM~QS|zR0Z2*8|%rYqtkN!q?o_*?^G~wJxH`hh+be6o}GZ?znK~P=4lULb;lMYKTgE z8@uk8L?V$C&^10zG@1^Yw&bWXoH@?x`@vJkAXG-cg}bx|N|1WCasR{Q!#QUK8MKhT zA#QJ&5-#rif(h3MhO>PUXrlF!Nw-=OG-~Epf(~W}tZkx3d!M2{R5#9G5PuZQxUKLu zlrge3<$AQurr4Tw)(d!KUYd!hUVPeN+JW|+-Jw?lT#_H{ej`)-A^+8dS=GMPs8B3u z1mi;N^7C4C^hK4M`5!`4Il^HMF1}(jBkrKeHlKz`cXpP%dE0agYO;QG^^AP5`VWIF zdpuRC^% za64m+$tjWANS79nNnzFC>Y#y32QO3(98 zu3v&y|FW1oV!{S3oVI|i4o`euG2uIU#(fW+7qINc!;*oX14y&DB+pJ&i1a-R-u&yg zq2sx`x>Xf6!PPwct@!h0BAX5V(apWR>gJoRe|%5P$IZ7+;_w-MZ}08k?XeOYv`;d? z=)sAAh6EIiASO*%AwUU9P*IYSho#VLVfukst&9RW{1Wyx*ZgTrWldGBQA(tuFegH` zf}vDdv+6bt?CIzIyy^CK75DBdpHjb~@hnz6Z+6xRDOuMr7U4yn37w|LE*U=wqr2(S@@muB7;evjTAFC%~+fobDgDJnBb#1SO zOuK*14%a~|D5lT7uH1@bE}H^aGL0*9#R7j_~^zEPUeJ9m)pKXX&@p;icvm_Kq}#! z0h3N@pyB@f;j&b=R_NXb^LTZlwN-O(zZ7!7s=O8JEZ4Gh3`ut-*O@={xu_X$XZp(V zbURh`j1y7QKC9YW=L!|o5+>A_EZ*iN;p6fMF~<=@XT34q9M0p12c;^DO2b@(>|9kV zU3Jm~FV&ja!po=PFk`ZhOF8{U-k}MeYlo!qJogO=?(sBhq-;@wxiD-ueC$K(A04B+ z*=v)y>g=KW`7OJWWUQbkcRoDFC3rn0H|rXTm(4!MzWl%Q!E!?yyaJ|=!4+PvGiJUs zktQW?PFVpeR5Z2gTeiSCPS?3D+RkK=FSp=pKXWw}HD$YjZ?4VN@bdh6i6sy`)E~BB zfnRW`waP)|W?`RzF#)_u3mLNp+Qb@r)v-Lf8=PlRPSOaqmLT7g2bbe*$0RMO9HI|- zy~EL8ZGE}@;`yh4AM)>@ztX>sbYkt=-Ik?-^L)FUfYO>0S2p>)WjC}dP0}l>5z!Q# zqb%?OGAL!!v#JIfo-a|O*C)8ZoR>g8-XdQ}^v~plO6lL6r_<@ zG^^bepQXIJgWMC7_Ypggp8kqx860$XWZ+EBNa~npG_`3b^^y8C^KNlrW6dJ-nm0bx z6-Ex5F1b}M;e0Mfh8}=6{>|dE^k{i2z1y+E-+}+Rw|g7AUDi10eG@b1@1j|i^DUqniCreu_) z&9T-*cO@Z&`OYQ}Mq%7yG5!Kq1tC{HFS01pTEj?wsKTJa`@$89?5Oq=nRl7($?1$$ z%#RJ2bPso__bLruL|}+ z=$PFLtT!O~<1awF{i${&P(YYaHU)4xi-#=}R#8kCoMqd%P+BzQ)d{+aZUp>omZJvD z#U3~WW5FEdd9UJO6*}egxvje9HRJFx2lIP2I%jigVd{&t<0?JaV#XmZzj+^L|N2Y} z@*qti{ib*f(ReMoxi5GEu>IiI_gTqMJbdh4(@a+G0Wmjc&*9$ zoJ(QbTD>7O+ha__HivmN(V0%QYG{B*Ttn*WBGu{K zZCh@)G4o*vA5n4+-?d_uQqq{O$(M+sj*+NJ9-|#Yv^MU` z4Q*%1kb$$OpHVnZa^2pKa;Lh1$dt=87fwNROZbWukVG5^`_kdSkoRLO4B5NS+EF*A z%i;zTp5MQt2b&cVuwXZ=Ch!eKF3*M)XlJ<{4R|naC*hA>&-CQ-C-tQF zhJzwXH5fZ?)(6Q6( zHxfC^WD750HCE|ETYtVK0~U(NZKcYi^r2n`4+|SrlK8W_{pnkv`fS=i1xt%OQ53`*+;SMI-LI!(KXvocCY^;mS^Myle>u4`MoyQ2gw+F$_y{rIu{n zTs4G^>0g$nh;jxcwWKdVzpAW?dNkQhuIi+Cwk6rjhA&_XW$A`zI>_Qo=cUyp$<*!Z zpIXQau!J%^mC0`IQLgy%#@`KLi@G?!W)|>{3!F}Z)gwcdK#hBXB?NpyXpQ_mE(t>q<6RWt12!zpqu} zKYC26#h7yTUPE-;ti08#=4NFo&1*$0@S>LW8hTd1Yc~}Y?iZ`aameKDj!x?L2QLx2 zsGd-vi6Oc%ylNbV&#X^vX4=~nfP+=GHV^ut=Ww9D(mqo8EULu{;|c!S40g?JoQ=bq z+Iv@m1O9;XQYmJ?Ph|ZFW@uEnGR%<&o6sxQbCFNrK|4r0yUZ4(b64Aj#| zI=y$=mIf!fCzZLsPI0awJFIvlpL4oL=)Lq*O*tNf<;4F}CGQldPCX90<+lxM+}p z+36aXt8S72oP6xqH6#ZY&WtfDS9mzz6h#yT%_MbJq>aMBiuS2gT2B%F3gnt*rg zsv0mHfyCK|Kmt`;cgY)p|1d0Qr9V-|pnux>AXg%vD5smdWNJj;P@{=?Bn-;4-e}tc zgUb$q9@yof+p%3Ur#63yX6VNT>JIvimV0v<``abwaQdzmYWq0{*$;#NciT8Ugq@cz z@PY5A0M0K)X6p&o0o(^%MDx$E$AR1Tn)i*!wt{W>I+B@i8SiN9!wDf-oaean{aYy` zmOr$9iJW7(&N+K>x2+lLHR~JK9{4l&{cyHIy^XIi!09+n(0Fk(`16pQQOF{E>r)O> z-b+a{=E5QoZ2|@$GQ!ZKs!}#V`WVyDiU_<&1oJ4OVrvG2@v-CNrYH$^6DNw8qjw5^ zPXbSi7gA{E4Ftcgyb|8sYam^?>?AP?{Cp#VZv05Jp`TKX3}+ebQq6Yf&GK@?So{z4 zsk;^OOR#9$pN~UazG|)Jm2mIEpFVAo&wUJ}H5%kkap_G{G{Ue;#esY{vR-aeH;z_9 z{SP97xfnwCgD3BT8q!j^MXBmrf#$hAM`}4@^FC{(Z6}Yy%u{<;H4hq!X!wBfCN-~^`@z`r&E&= zF=ci77z&uHW7l-x;tq^ZI}I71rhNR%HZ?YQuq$((@>X9tAj!#OL(F`3aF-LYwR%gd z$q6K12Pc06l`9sSu#MqS0KNd*ONQ+5(!r}y!5x9Blpr%44uckkz%9xJty{1h1Dznz z*y{-es%B9KTNCq&{wCT1quGgIz2e~R7iGO7Ndl@AwF8AD-u&y+`6d(wO%b$jE^(J~ zH$;L^9fO)jmEZ|YApb^j%-Y|t`DTK*Evvg@3y?7M74T}etK*0hu_SW2;E%^(KY%xR z<}pN2$B=&60j%PB=nN&ycf^?d-y>`gqb;O5RVbYNnVdCXr69%kRM$k8X)H_s$`Nwe^PXG!)n z#5PtEzR^1y*O9(Jd4}|G5Js;ry>SxU6>8=<)5k5ch;X&yTq_{&!!o#b`mY!r{)h3D zCuU*PKVK5K4j8eF%jxD>ty`M#ONX8w+BtA3^ZCx0*jQ{RI<$$Aw7}TOHU+7R!d-c- zZd&uCU79MqLj~hrT~lkprD|Da9^~#_Wmdv)=35wQVh02fBpss~qcZSC8A6l?6-g=$ z88n$8_wk0aEBaz6R=vghO+)<}{1`b}g3b%~~)hl4{FtJsaRn1oN zOL}EK3dFzgFM}iYZReXrI8doQYpD1Xg_gJ%zaQy$*b9$6fmreDwa~H;DmcaXXEK-2 z^=_f(QL8PrRIONpYe;2VE!)kMwSrJ!itWpLsdtT3P%T5a`4Lq&1o50)e{(?rjoGE* zCcIibtIX1Jb%luL)~y1Cl=V_%yegsZqdwRrl`%LUeVP{$oVPf<6-Q!!LTf|0fl_3B zBqd`Ubn2SeKQ;18lGNaqa}~(rZ#hHmOO>WE>&_0ozj15qMF@lboif)p$S&YX`Mrg+ z&jWOPT^%%bJw^lQQfGQN^8#9hzY2|E>_k)x4|4<#HoU(dVb$F}_cD&Xakyi8+VCM} zn$UsRN!UfJzg!zfr)HbNze1!0R9r01xF#Eoq+JiiUnP}?X)O>di{*Ten~k!qI7U-W zUw|c)zn0ZJ%#aegqSfm}usnPLRtl=CBq1eDT26PFB2gaWYs7G+Cf!k;-!yDlwj}nf z-(j@DqEHCyYijQ@2r5JX`!(XbIMm{Rv-^kp>)u)XOk%Ex=++{#z$8*!xu=9gy@*sZ zl`?BC&R8;)iit#4(XUAIElkn?gf70=g0Q&CEv0t8U>V5b;`aT<3*7jf+P|$;`7z zS{yrRbRc45N~V^ydC&-{3v{*1)nW#FZjS)B4IHB)mLJiZl|*&5YSwi2Avrj*UH09X zCh8@ob0`)~RV;h++(@)}E?%Z)nfF_M@%!LIz;CX1Pn=G{k)_{z6Q)LZEc5k`b1WlPaLQ2OKC?3 zI^^K7j{5O*JL^AP&Nxqsv+Q12*o2@K;O$tf3W9OO9LL>LL5ApT=xjFUMF7GoyVAQNo*zuqZx)QxGmZBX72T16Pw8Q#8NWG8bK|%eOCWaNYk__?=r7btmjs zP4i_XG`7@LttpJS#NzjOt`b6+O_vn>a&}Fs-?W8yKJPx=4YL~-`sqxYBYQf|X6tow z!8)%c>cTyb5u<%BB7nHMiWR-yh0pr6gl~roV-?3iT%T#%H^|7<%yKCzbv-oks!2aSWt~|RRX9!Xrt-|qUGZ{R*yS@u{L~#iJ7B@(i79^d}Oq|&# z!0lA#p;2mxf&caxXA5-#^~TzrBr*VJ_Jn~RBe(KY4>tnhMKKM}0S=VTTXB=C0+FSm z?}W3$ARR?B)PS7Skj2*;!RX;D9MMOp!a7F-MX6QXlJmmZ+2hI+Sy{CysYV+ zX0hKoSeJ8rda_5oj~_M++Dypjb6_5^W$1Ou=Q2CZOM>U!c(>Yktxs$>SoO@@+zSZMBjZZo z33vH`6Og}KNIW7ICqA-ca>dXJc*cZ6HWW6&&8zexmh?Cq5|T`ZD?f zEwEyIahJd1P1WVbHf4#ROR=~)z7WF*kcu}_Hy=thGf?c!Hl-xM*s78R*d|(|SXClU z)e`n^T169@@5qNcMb=nqLtL@45tX7;_?S+&&Zrrh^j^e7)W4uQx~{S^CD6qnOVY>Ct435=G^S3!L@AlLxY*c^ z)^jKMwWO*{lJrX+sr49O@^#G+NC%DMLs8buplE-_B@;q&Hmxyfk?v{@sv*i5tYZ}f zUwR}X%(+6Q2*(0R9VXPm*sSn{@|biI1lNJg?V(mc%ZEWAYV;9ZVRcY^OB?45zXf(; zojRH0^m&ZxR65E-E!ERfPb8_P9dx5O){J{ktfU4telM=k8%d)*8zNdVXh&n>cv zKYcmQ$7CASBla8pdRZI$WcTEHU^@@r7uf2-hzvpizr7#kQ=9V$5nf{5&;H`b=^Wbo zn_QtbNq0|r;}N3VuIlT{(bVGJp-WD>v$mTG@EgGZfEOi=?El64W%)<__@7`{7bE8% zQZD`f39DuN7X??w(8*cY!qAa`k&)xSXtiu?>;&vg|1e?y|I0r|7zo%H|2da|fR*8A z{c&3USId93|NB}0#4r%Bu(13q`k(E;A7x_a_|N_Sh-3aSV=@r@)B4Z;PxQZ0b5$&D zOr7LR-IVNX3~d#ZX(gQvtu2lJ7e<$jo&LY6zUr2?g0@aSDytvnucfW||G;JchaJoE zPa6M@(Pd|(V`pLdACm6>eaZhfO;_F2(%izCfQ5m9Ud-Ci+=+nm-@&jPGBdFMJa?uadM*PKvo5`$ld-9-Gr`Wa0TL${y=-dcv z+1YyGTOcJ+A$LGQKucIc101#_gu>==Y4>;wwmUp+#Q+OLopR_Jm4zi(oVh)w+;ZVK z=7KVm*1)9-;(e8KrL%7TX&(hqo1A}nw49E*?x!cdx39mi-M&e`fnfmrxqnQc@fmq) zWJ9NE(Sn)S0O1CiTr{0^)E*1~Tfp%@lNooOxTEH?02w9${p)+<<@@$NIaMuqp#fZt zT6jkqyeby({resza+8ed#=GlGZ(0F@bHE5FHYIj6!`7||_2->`(7A||Ji$EZ0N#uw z@T^*8LLP#^4bO`Jy}zwnFzp#wb)kC)^ChO6c0ydQ^jBIFJ}H93)HZ}@scCCX1yXb(v@GLC!p!@wZD2} zcKfSbpgQ8uz>@mn+l_(SYJ8|=;J^(sbbKLx1fd+_O#c#u#zyG>eX+iweFQA@x@O4( zC#eHuCIAS@eLless(mx|+DlZ9k@rDX77@pfp^0xLU*O{18p)m{djMe+?H?aTzOS+U zx=%}(`h}*}1Y@cAi@$F}&)&2SvA99LSh&uutqO)spF=^KL&i!u7S#&Jg9KC=vZD7W zoenqHV;&%2_LEZpCPghsglahO9S!J>Ru&DYf^x%%UDGKq)BYd}21I4mI@uWnZ7U2; zQZ{HzO0$zmvpfUB)bS6IZlMIiz;0;XNy5z{FT=K=?HqBvge3T2IkoZeTfH;nX5!nU|yF&3{K9z+zwUj0IAOHA4Jv$#YhsYx?$J0%h<(#%_SG)7= z|Hg=Kf{Cv21)#n=2&?E)T<^)Z7`oW*Gjk?bl2&InwRG*hzzMGR`zYsLQretX+0xvq z4|`?GS6drcu;YDbHP9W|j-hRqxccpl2e$V&`|)I<*nJQgA=r`<$6e{{EdF@9vrWl)HT!bUhpj7TQ|#=cANSlHXY)@vfG|5Sv#@Tbj$r ze34HJj|TSE*IUE+z9aM(CX<&@nLFCifsIg{IBnFJ0TXXjLuGX%_SzG}R>KktE7Bi& zX0w98VL#F{yJ-awvP)_Ao2bb6bsDsOLxx?mvKCWi(6%7|QxDI^2o@wbq;bfn7V1%$G$=+~%P~|2rd2t@eF3OCp&yVOmg2c0Tjc_>(=~KRROD#G zN|mOP{$$uvoygYb)nRzy)ZF>gYx@rDIYsZyBb_7D2EgAArW_bBiz=?ytJJC=Jt*JH zq!NwvK7Rw~af_61;T8&>%W2bXZ36FjD_2EFMC~GxyT8vtp_lkYswsP{Pdzb)Hf~K; zz4`e=Z?>vz8no|@&TD<+Tc2y+j%*J;?}+bfzK!FWOjei_<4i{m2R=0C&$#?4>VIK# zvwX#O3r^x58ac&*wyx9`7nVuXTjS&whd86`Zi$*ZVq|Y4Ve9|K$aAIgk6EDEt-3Q% zR6kz*rCW;M``u~W!ncvimt{QXHifPh&9#2IFXuai+vxYwcRrGKz=l7%)vUMw9YbI~ zJn%;}<#F}HW*`5VA$eKT2)nnKiJ#`C2O^EbBD)mxlylZ>g#AOvzRVg`x^ESbgZ#4 zL$-oip~*P2elv#LdT>LcfApZ=4cMbb?a4sNKYGx{f9XMkI9C-{Q=k_%vlsbKpPhC z*bkC~$Ni%RrRtj{duLl~blD=R=Gc_Sv8lOby$QK(U{G#OX<0?Cjfm0qMkwMx%ZnMg7n zM-c@|E+*?_2}??$lwt`b^~TDnkdciH$gGD-&sXbh5_wQAzj7&+Q5iSI0{ur2sx;0z zhMdnu?3*oA6OhTW7F?@Zmi%qdtuc_~n7ZeYI1Ph6z zFlzycfFN4XIhZQiYvkjrp|4_f+bp#F_W#lL7GQBLOWP>!4#9)F>)-?n8iIRpcXxuj z1%kV~1SdEI2=2k%gS*>5guTzsKHu5*eE+@Aedb}Uo}TWm>Z-S@8)osgKwe>?(n)0r ztx|3Y{pswY<=AbzV@Wv`rW4u*@zl}0_T53!!o~s@tGy8gtNqqWx7386R^H_CDyqC% zu4KLdKL$$vs7UtQ7QG_3CdOfpR1Qhp9L$gIIt2;M0?1|>x({V;dDSG`yh2$MCyUBi z=xi*Gu?uv0c;;blLDVD$k{$;&@^~FVg(U1omnf-HH#XF}RAKT`q}RuV!8T>@S1o4^ z0)c0Xvd@Xn>jZR5m<0p~=1=~_n8=oOjZ-{`pu<(lHM^xve{Wc8q6ER15GW!1iW~Kd z0+q#(Q}PIWH9`Ye(GTwPnnC}Dj8Ly6>Plxi3i1MdH71JVqI^YrRdNbEbcfd=L__U^ z!2?|oRqRHjZRB685vY?y`9GF}t`kkhcJ$!fxS%tTtNLS)y9#@F7^#avQ6!IJs@i=A zl&pUhgbP=!hN3Czb()^xZF`~^;yIztCySw?=8{YGYX2bN0%-e?N;!-^)6Jmrd6OPa z?=1|8C`@T(u?@bmEM-D{zZhl6dLvblOXJK~kqRG%ezj2GyL}P2JPqEIg^y^?lNkKu zvnZ5n3M@=mT1N~WEM4#UXwq2Cf#)OFcFKHd?O7v>ot!CcSU@#Z% z`HErVo(-}YcO?rO%8K=#^Pliij%qr)lY>kdmaPrtONP6=ex}eP)6svJydAT9Le1te z1bvJt*5+qGk%Uuap3<>q(@ed2!}-QD2d4&0)tNKE4&P$r3nud6>1RaJ9pI70Gx`o~ zvl4EvdDd1J!%Mq-4mcdW!aEV2%J;6{;FQErLcI;!J}0VA@DF33=Q~><#z2S)906kz zq#*-A?%zF|h%5C_Mw}QKjMS5x;=+`;Ex{5?c(_6a*YoF16Sx306rMaGU!)ZfqdDiA}fQv1{b4C)72@|>-!2N z0^?}C(e;Ar)V*WcfW;IH3^&#;7J*Wf0-6gT#Aj!m| zRT1g>5Qg6y6JjW5ErhqnIO89!qCet#`e4<(DcP`VK(m43uz^P1E&l#-O|BE+nvX8P z&<6hz?o$Zji!ja=onkwh9eLrn9r6(h$T|Ij}A== zfh=T@ypJq`j-nf8GdFT>Lib0^`z-F_0$2zB2XD+#w8l73!I6o*bIb>5QeChl7m5tm z{=iJFF1+6)*1#2yG4?QZ_`Fyw_# z%KqRsC`f{@QiI@+js0nD5L^8y!qb9|A<{dg=x`p!v?a4i%>0?q-s_Eq-WU+~kwO~K z&k8twHj|ejhz8IIXn^fNaEH9l7i0@D8pUr6FE2>hAy5yoNd=7GoogfL?qfrL4_L)v zG{VR+-Xh*$Y8d3oPj48gsceUvK>-9U4iV_k&Z^g?e{8R_9ZpSEu+>eC*XSih{kza@n7FdH)#WeopsCUvRSP(NU1JRI9upe1I%3BG6kVkEB;r5u|V01cG4Ka&V zB+(S4Rcs>-V$tuO=UfmGcvvfMrmSnei0qT%Zay?cA4MFWp4(tGHk@__Av)R;uv{++ zzK;Zl<~%=|zDnc2bgBbPDT5(>DS~Kz^({)Z^&4xQ?*#@;T+ZN;5I6|}A4=sb-fSVQ zf}$0DdV~ADSV8fmnJ|_@KbFF<&*$ru?f!C0%|g8@Kl%giq=fWFK)`j2GE&85S!S|<>ZFO#5IL6Xz zdvAf&EPQ4E9Je-4J{GlJS*DiMk10f3KV%ltP^JuDvO>dN*(z9HO^ah*6e%Kq;aL8I zSLdS1;J`sxuF^lbo4tH#AF7Le3l$Iqe2%cO+1``)-NTMacP9JHbc#bpq)$U=H z`huo*i<*))2g5@Z8|CY%%!^W* zeGS#9kJ5QICLcB3oms%j%4S?+hJL<>gSP=bzJnxrik+gybY1akJ^Ea30#Ti(jCk7w zw?lpF>yM8tpEah8WL!83>5aJgBxu(T3+v=R(hpRB`aJRRRItvn@z~)q zTDDTI(#C4t#`Jwnmz|ZM`SK*1xk0TjNjaB}P)zP-KYPTz{nzMJA5pr_wpfTy1U^sW z?_Fr2g-T#G^3S{lAoe<&G6;5PBY(25LU&2$ONH1aUd>yv?M_XxD1Z&Y(6h}m+~V!+ zMK&EwiO)F9ud?jE(^D|pF2N2uYjv^mx&wvE71wsLN#$@rA(zsXU=_O9<+X_~kd}JM84zb{nOrNqR zmmG;qzo*t@ph+diNY;L^=$n)*t|^u))seo?K(MEHjnUs~5=mlwx+^=6#@^zcMbU9nZ6nq1B#dbv^ z6V?Sc82rxXK=lcY$(yxxU07mNKqt|SeZHv-QGwP*w%)V_AX@SRXD(lQ%>EW(ma|QR z_=s+c!!)jjA}Vua&lT>cOHpOHPaZ&0(~O+&i(#``%V%X%*dsrIA1RY8ijil_ogXhw z5guN1XLy$?_56gUalO(VkT48|V%CD^;~}~dI*hkXNY1?Y`6ZB0S>TF$k^-E?yUCpS z(H}R@$#KR#*eNKrK&fKeJ2i`bt(5sl-*WIygj_v)qvezTo9uIVcH#%nQ?;M#Fir4v zga#=eQ&hdCcC^8`t32&NA4uLRf@FQRI%B3gf20gn7Dy=I3>+nn@I=;oK-iD>R$A#( z2xmDZ_$I?D5WbEn?(znUpD>3q3B4T$^jZxk2a%I9tL44i$JnXj{VS?V_nG zcckDm*Zz;{J)XvCxnr~SV~?aB3Xr8rVyN?SGZKnDyx-HU_TR`F#n2!6q?5zKJP!E; zMQ}XE@eg3bqGSwhVq5>2-Bi zjn1->D@Ib7jF(P9}=-jC>k%_~>T*%DQi)kT3O#uA@xaGozv7 z=5kq5u3nbs{`zj=n0%Vz4S#A_s?1x>d6a4A4dx@6IV9`P=H-v1)-1<(*7B~)DL*uc zkeb(}B{^DD?i)*5-a8vL9@hLiCcTN}ChS zZa3Opcf*q{5_+P)2!6m;F`~}TMQK8zPp}$SiB+f(4u6Okrg@VC*YzcBJ5G6nY>KKa z`+eo1u-m&E2BnfF*&H5|%BmplNtz#(d^HhydU6G)SU)=RR%WRO%Q_ZVHu?c(q6_o7 z>)PF%UjjCm<%~7EjNt%&6C_TaR(>izS1t2~%ia&x?fKLG8O!<_+s$%i%_@wH*CiG_ z(QavVuo)+f-_m{CLOtnjLic#@;EbW-N0~3k}*fp=9yl=l~9CAy%6dBe$awonl<9=-^ z?-kyFh4O_L=N4klSef0duH9y)_n`z<+JF*%B?fs4LoTxygk-IaX^89_v!Ve7KZgmY_ojYXSSbbJ^+dg zns)1vxHIBSczZe=`|Zc+lPBm?N1G@Q?}TOJ-nIfQsQvu*@E;(Ftz91F!3eTpj_w2E zx0v9mh&gr3(2=G9O-KNEfe-a{In+Ar(}75uD|&BcYZ;^yxO@BdG(~TG#6nJ73Pp2s zGaVM)G8+|B~HtCZ(C)=7Hn>UwMt3y8pa=Z zxG-r-GJ6H!rzw;)5krUUru41ho%gh5wOHrnOj`x;< zh#ktl=X$Ux8xu#5L9b#a9ux5tLSpBmUnEC20kOzL?*+l~_WqgY6U~*A;N6@^ejf;m z(^OFDj=NWIA~wOcRUkndp+yr}{MA%F{2SzW8ZE7kkOBllFL+FQgl|wqT<9>f4^%s5 zPFhtUBQ)atQ@FNF&9|!f7~h`qYsSl6_K14K>5qFt`WPlrz445}*GWBAM$v1ruKU$~9x!*>idO;}Q>LL`8t#9EpDKU2jisK`&M>=C^P0qaKpm;kQRH&UVh< zkEra7bsq*ZhGmVrXbLzn?do6$)&~MM=LbUP2Q&sSGD>~LHt^*I%8B4kG2`o_7*TK; zpI~}oK(J=R!im|+X*`)W!nL$~6k>u>{lwWgZcfO$Whf|?Gjff;dkpIu?0+4(>9C2b zKCmV=r$e=YSn$wI=YHemp01ulqY{s6TbmT1DMdeg6CHI1QN=dCAI>f2P1wL9bV8G! z)qA*@*h@i5d)_#uQo4yM{J70vx*!9bgl-zCJUSz_cU9PiV=!_*kfR(8UNwYbL_0@ikiHRZ{nQ+q zDrn^9*9fQic9rjEHv+wYOhY*Q!Mjz*e4AkEcT54c`Aq#7NGv?FZd2V;Rg)I4%#F(| z$j$Y*lt;|e*axa;lsn|O@$ix1p4jQ9EOZ4y9v!rTZbRB+O`YrLu;1VC!1mF&c%hoWGePm zT+|K6m81>lGZr&Wv)Vg__6y$i^_utqJX@MRy20U_ayZhRlQsEUJ=?xT(x>!>7#UBT zTk@s_00$387-o`RjDhlL+(UJaOSW~*2T4AVS27~EbNkisLz2+c<2$5pu}D7PGd3>p zy@lGln0IPvg7%=486HAiu1@M!q!=eu$H%prWMin@at;9#a8m~V0KNeE>PP}pPEVp! zTIjmx>Z?0hbUVumGWK5h$Ry4l#s)3c$35D6(i`hF`Gs$5|DISE%s@>!aOwJED%kQdOMMkng7AX) zL=)q4Z9o3dUs45JL)4Wad`+cPNPIz;p4W z(hDno#F#W#f%1&48@(2w4ZDDOSa zozj^ZTd(=L2Ob^Ve^4)0k}S{u)f3t3<9kM`Jqc1%%9agAU#}oMrv`1ZApeOLtd%C| zY1Xz8k8cmv(q*A}^VCd6;$qem;0LV~;Kt##coE}!QzB3_mA0UmEV10+Nl0LU`A!tC z_N4O8{}2yJ z_vv1%gXfUmC2Z-9o068+LMp0l%{^2-ao{zgTxc`~M@>ZCO!&2W*b!a*W3ne7fwtJ{ z)cW2i@E_`rV{lMKOnk(@hS5-h1){C1!ef7@Ko!MpQ19rM|0MPKxYkce4A#SOVaG}7QZ5R7>c*cjQS#Y31Pb-yC8KG*;& zs=gU38YC>-8J=8xolw9sjTwV=Al)D7bIq@t`X#-JZEF5qqnUPph9m)@8MuthOn6k8~{UT+^_=(rJ`D zby_zk?m+W7Zq|;~%QWb~>6MOJ+|L}W94nx5oqm(x`g6(bFmMrEtcgSF#e5lq&Q%Lt zi?EW`Rh$@@pT3YU^88IkufjIGA*nus4+%7 zd@63s%6cM4n8mfYud*eZMt)F5N7$HV7-MWD9Y4q>k|$vdMJ5bQAxC8mb5|V}H{JdQ zVzuOz97k1`D2|pVPtp~JJ^wki(bkIfYg*NO9(CXyesDII;&7iVli=)b?kG7?FtwRJ zlQ9l;pOt?a7JXKhaXQ3{k7)+^&Pupn;_`9S7JHvK%*0$!;Fl|n3?yfGgiqegr=Vx$xX*O zZ6)_&0cF)XO7LH#uG=&=xH-EAOEv5)g%Nlhn9LQcLSMC3-yaq2 z)US6O%*e0xI7}0<{dwiEO*-C z6LO_6oel*c=z+E%UwDt`EbI@Qp=^A zL#^Vyr_lLVv=DT(kq(Q*?F*tWmu=?Cb&?r)6gJ(awb$CbY^__45tl~asJE>l19OTM zV&Hp>WQNb*$-Ff=n)Ny6A$Jg(9K&UIWvT`XmT(8b0kJFa^ZK~VRqb1#qLl(-&wbi51qv>7za!}4s z@)OsCNuz3tLqN*Yh*o0r0pVv4c>bJPSDbEoI%$_OW%D`#N8Dk+VBj^v7E>TEK1tj= zsvVogyzw6pOt!)JimdBS)UqdVLejSNfHKWl=nolit@;-S0-{|oIkF(Vb6Kll$Az7U zFnkr^sp^9txWmB5NikmStn@84W@MGJ{h%eXNo<#`=WI_4GKB6H32IBcP%q;pf^gkE z9lTf*#kudKKgWOuH8&qb8gdRG8%cmEp0=hgR>1ONTaZ>?XS3u7Ei9^8rk{nEbtUvkXhZa;1Pt;6Q)I<( z$Vf^`?Ut5QmL**!l1EDAVvFDCS{&Jjt|zmQcNE}ZMN4CN2s$5N>opV!@7FweL82DM ztHuMN#BA}oy-DB2Lb&Cw*&4P+@nUFxq)$znI*tIZuVS$;_jMOF&Y4w{x$iY;YdkM0 zISVQJp86wz(YGUSwFs)3R?Gu{sWPw>@JjI1F-R&xEtMQ}B(GfAzFEZ9C#t8#>9aFI zODdn!%7)Qa^T{oj07}K#ZpB1kA!;eofU(XZG64a|l7mq=8wFoLj@?o%1dVY%e59d@ z=d2?kg$3xD05qTCSKZOL@BJ%1^C&SEpXaqePA0{U#4}7p63pIC5NFy?S?^Nx7y}^ za?E!e^8rM`Z&&l8NHWxhvK%eZO?Xj`Fl$|mro3(eV+}%Z&XV$|x{fRw+c~55+qvPb zQ)=z&4j?6)5=?%G!-C}M<)#w^t>}Qogf7HSPL^qG@d7;;YiuY=7G;P6*thd6Dp-r- zc;8Zjl<`1zB5mY?j8<4%z{ZR5LR4>R40}Mr*Vs@vfG5xmvMGMZkk9}<(k3x-7|Dvz z7n>FeBJs=^KzS>(;*AcngG)OL+A%kykJgi&8^{gmKTyB6B2m>2IOmeiLXh&VY}`nW zdu8c#S-^wVoTqWlooMdG^f77Gg&8}^4z}Q+?)sD`;bRmcAnb=U4;A(uX}HeUHrq-& z$x~Zz<<(^-vXB`Tkb-Y-&0sWo9@BZ~*f)Awy9IU}JpJ48wlCb~j%Y0}SorsaYPI-A zk|rG-!|`x_q&3u1<-a#c2o&`=oXrt| z)*c~5z;HI`Qna4J84tx^enw|u?S@qO2Fl>}2K)5-z)H}GCDzhAudjs=3n~ATaVK8G zm&bH+s(2E}DZMyQ4+KiZrhs~uT#=6t%Lzte-$|UUFxkwP^!=bBM6 zqvf*u!#5rM3Sy`?LKQwJ$B1Ou!2`6O8-dt(l0>MHFlxAOF&N8mBZ8H7s+0|q0Oa!d ziW)R!gv#uT{B(p>A5GqnP1G>P6qm`@O2lO=;_l`uMWwC7OVGXIAL016e`J=sv^zVJ27=j2>{ zkyrQXcPZArDyMOK#!p(0#rGL#6H_&|*V{pF_};-v%QL<)AgDDkY5hPIqt~ZJVJry_ z-nnUKT8I3lx^NV#f6jskLw(Zd6{1R6a7|d=>Aq=JjQ1_ohvHI6C$^4s?(E^}ww5pB zc|8}y%zPy>9WlludnLDd?Rd!8qWNgQaav)VI= zDVDzSBG<~InY`gi3QD3(@-k{29uph@jFe={ELsath^p6ORVPMmF9| z1Z3pW2|1M%NXs3FR+qF|em%mn>Yy1h5YiB;@=Ocm(jj)Yz7Phy(&(2 z99&*hvm#Tdeyf?t$#-cap!?tP`TJ48{g|S99S-?HQDm;YJE)7%Uvp#=WWzyeZq{>D zLvsbPfkGw5$`TT3@b8+Kl1E$bT^rhs(yHglg0;&rOiwwyt-1we_vEy>mtpv1e0~@{ zhwL47&Xv(D1vdA(j{38{F%PUa$&6k$i1?Ob)zWwNiw(XO#ZcC03dsoXEB85XYhn^k z3ldTmUz+dq0K09N#ga?w)(M+@uAK@di~@CREl4&gI5unN0lR%Mt9tWu71qzwQq{^L zI%u@aXs47F!?3ZpZ8qhZ0W4!6jR!R##Baec1ybG$pm(4|Deh36ZmZNH;FOD4zPhmI zK%GQ)gU;B+J-XGOu4bUYwX!a^zmd+C4rr!3yYLZ-Jl+QL82*t8pJ->{&K^ZsjI7p< zN++Hb*Ig({(jovM@6kb|+zEQ#)tUnjMwrVWqX3zejP{#LBap3kH^cIGVaUU&48);dj>bl4-MD z+nDW-kTSn$xku#h<@^DiD~(rf97?%;eOiWW&DRWx-1T{t-x35V?>nW;&$n)K8Jb)z z4g?I0&5jpy^FKr<*WDI}ic~UVygseqgaynZ1d;X`kg)g^rH-^dZb@1-#DY=N?MG&b zI8u4>fJvfez9kS7e;?}Y00G;Gsdj1I1^hKUB;pjRMeZZ(_PIbfF)&fBX^?qzqg9`(e-6`$8;_+CS}XS?Ib&CeQoa$6 zc(TK*_1pwAdm41I-TRg>Rlt5Ckc9Nn>8gUd*_&9mB4YJ*RNcA9i1^`D9hMRzYf+hS zq6>-@!dg*F^oU5L-VyO2F}ujcbm`k{R)a$1aYFoyiZUC{69x+S*t0}FlSxHbbU~`h zFmdbv@fiWDn7wm!@(Z;i!w9r>L2oTeu2!%uf%bqeBT~rG!KFbs<&D_ZkbOtoo_HjEo58&JtKHg1sVlBsbMU@ zT6F-D#yRy*?{9ZQVe4$ex^`G480zX`AV*LRZTWi~x-giBgQS+<+6B*XmmJIh-Ub8z zK2Mc41bqtjID|&}lQ=B)GOv$~pu7jwTWojT!ZWL}$K9CeK7*v7IpT-IKsz5zo!QE= zy=)Udj_^g(Y+r+UN@c01A4m)IKA-B*><^6 z{3(*PlAlR>s7+K#cZB^QzT&iQ<7+svGg2_`IOnyeVNJiTAUeJYwc+7S|7FsRB7}gb+15 zE{GnIci11>?m7628>rmF_Su1_;&AU~Wwx5d<9>`VSTDh)>pVL~bb;pgp=jn6frMNp zGp(DKUG;%f+lqc~}a02k+bdDvOpUDigN zn$L{4<3WxE0%7W0b5EC8Z6^il&gA?q`m1G&I3et=Cn0`01I0IUdYj>kUH7$5DV-S^ zYAv^Ugq8?Ps#Y?h&P~cEI^!9o^sgHopDq_F@j(WchRb_z$LN_5`9X)~vQ*}ung==g zwvC6smoRfyuvn-wBag_8d`f!KE0F~0G*!Cj707!qIo}p$t$EcGc%rwd`-=1v1BC+MLdaV8)MFjdF9=?5$N25Xd&5HaeGT1BLSkOtsLF*^L*c!-*r!;3oD6cr*BC#UOxTiLt13p|hZsN%^)Afk z8Cb*~pK2Gyf70jV6h2Bdl2fHjkQ#~v+7@a!B~f{{iKWWeqF(J+#j$w%+n&-0_KxBC86CBm08FoIT9-mD6QKHTk&rWGN}{lgz1If0BGz zL&Q8`3M>**RIc#5bbV>4z6_J-%(9=&ui>EV%Shpxdxd6qkM{Ta=xVF7+npE?Jl$#n zN6WLsj9OH!_~6>W2)EY`5iaN4vz!B*4a>?AXdNH|gILhFty;&e+ld3NdPAA)GOQDX zmHnbOT}Wx?4WRXXH?~O5ct{C*UW=ML2ghL8u65NjNC%R>d2A3^XaEl$#8ihSU7;U3 zfWKr4i1S3(#dm+YA8p3`IAhOY0?d|`rc0TbIQ{xD`tNv`KiyXGvpn(ASrdT8uVTCs z#&lVMzDmUmbDfcRHIc%eaIG`hg0G&=L! zj#OEFzMD$27M(Q`dUc*uu9poV;waFez|kAr7ab|ZqVME9tH$P3ro>E;b&S(3@9eJP zlTGdJ6UQUw>afTdkt>Y@IlT8ZTK2?w z7?p4LExYUF=LOU4y+3zmVZ@S9zOpOZk#9UQhvt&WDq{>`?Up;jI_Tkt9a#Pqwt3xtvOFV6)zB; z@a(=h7QVz`KmX2TBV%#aol|2?HV5475WLFUtD8K&j0eKQNF?Xt-ob zoG}uG=mAtGK0DS^w+&=eCt5Jl=sh^aCGRF@?HpNz0cXZ-ok)Ch&2%+tP#t2}Ov2cX zffb4dXb#w^j%ASSt5h%(AACzN2v0Z}U$~PS^%l=f#fKl4Ik&@cX}4y?a?X=`T}Nd* z$yQ<_A20GT%rBrOU(0RBxwUBJeA-eBT2IL;LQl^6qS{=n*HpZQx8;)HDt)ub8_`^$ z3_UcUi->-5^G1(3R%<<~HFzs|R8qQ#tAtedHIL&eV8~3n?lwgH>zoN~^b#Y1|$nA&5byRxp{S^-R&2`AZ$8K;wdxf`hmHd71i7o=kHO-J{Rx+CkHy<%cav6ypi>A@zv+dJz z!OcZ7@8lZYTED3H!f-dZt}-z~lxEZFOR>n-akZplzOlAbn_0Pto`Wy->gr-8%*Rw# z_rTE(sYYcvgblh#yi_ADM=ZHCI+56wl&()v(MS@6SHzO*PBJ^ zjp)zakhpv}wE4-lOfB$AMMFhzYm(INazW8F%b}r0OHV4#E}U^-Gj@UyCQDe*XEU!z z9|0tehGSrOr*aIG?5$pIgCvP6(t9X5o1xjJcy0rtFg(&Dt2AGB`LqqazDLxblkWr+ zMMP6e$}N?20vO!Nb_QZU)>D54ocCT8icYBqEo~v~TSHeG&e5^e9I*Av+$6Ap4R3;b zird8gOd6M;NH#@|!WS#$#velk9K73vtwFOR|E4l=L(%xz80?hWb!RyJqtU6`5t#w# zcSZ4^iggGS?rvg;{Axs`iMEc2r}$xDgX^&{!jPFFMXb}8G-sLlgqSn~9AL8?t1g?0$6tu_bHaqmQJ zno!U;AmBS2&<5)fBSY?26%8<+DlD0qH<{I3$?&3l>L;{1yoHZ)=w`gHYMnVoEaC)|B=H!+!Wc|lGeaZ1_N=_?0dB`>Y zY>G0!FzPI2i8;%uA*;qm-4=;;e79hlen?_sMSuUoubFlxMa3j;5M$_A{wOL@D`3!3 zQPD;{pTb z0c)#kgJ!m6E@q`)b2!l$tms9>uBp8G+1LBAC@2aVN)xdqf#lMIc_M~wb`m$@mEBh@ zHj0(THC#PYmf&?WcFUo!UtbMNS}Oh2hEF31`}kU4zp~-+akPJSqChxGmqi7~xK8_B zG)79}+7QcZsc~e|-Ok0gJTQ&xhsn`~(L3VzFfAB*pZpU?Gv7a5?o}7ExqLDHnAAZy zs?=p%=NhtuSU`?hecombFd<_%3XnVR@J8SRRaeDqcxulYm;eV?Ns1`_Dd+3*E+($O zm=Co}m{(t>dyG3n!f~v4hC!>z=>UP=lsRfK(@4~s=ml6@Hp* z$J?0@RB`=QCA@ExVwQwiPZ5|JEQY)c+d4l+zNSBAyoU(e$n!T(zlgw($m6Hl2YZ*Ni zt0&pS*;RNKHz%)^+G()9;5VOCW+)uKHbUTOQO4W5Xr{|HO_P6RY{s(cRPLpm!x=U* zZf^BffC;|0*$f$(%1%T5l`90#*CU;1gEjh5ZFzv={s2;FH4g^HuhXxx| z0wV|l=Zh4*{N792pah;6E740SGoG0NnCd23&zIE>s0!@pF${=E`F9+?LGBb*=m(aO z910r@`hgrAmmvFTslE?fF5F%#N#ClE7Y5IQK#-Q*ckW^=WIL0J3`apAg_uLDDWQJlvZs(k>3rofBG(>^f)LjIOaeRM&lH^h!0MSEa(X zq92#CU&{tK-Ue7=D=?Xd8;v1|%o5Tk2RIE|j^Ur%FJf8>yM4=c&Bdah1J$H8Q408#WTRra^2V7+8F~nIBUwWKXHQ?nPs^^CF`?XFqN;un^+-Z%kiuhh9YS-fuxXVAJwziZS7j^+t81ej58R~HX z2sj8y9p}-1BM$jfm)}hQ;9&lj3Fz6m zSpTaH{>~V}{+EmY8@GSK(#qvv==keHpre^^f9XJXLP-EaI03ZIDn>SW#(ky;NSpGl8J!} z0E{z*Kb-!~)XJPuNP(9ZIHCfh3K7!_jD)Q13=Hk~`56U)p8KVMIHLrkf`gr-zJsi; z-E%Ml7+)G`{4%=cOFuy?D{F_}w0d^nAF=jdP{#aBVe>o6fT=>o)WE^SUIS?DXNv+lTx<;N zOk70F0A>azE+B%LfNp(GoBw-v{)$+6#{c0?j{k)_fA#&p1Sb1$%uN3c0?!!!9Re&Y ze?kBNboO7bmv_(Ce=j|^`Fq>H_xh{POZ~sU|Eu+%{LlNpfAZ(Z|8#%p z_gAk!+x=DlSIwWZ0@nNnH(_f>J5xhDAf1$~!r!p=f0=IB|00k26Gs2UGzR3i`kRM< zlKzZQHkRL1Q#Q0S(6!Q~7qYf60FqGszs!T|zimVQ3v_@v{BMde|FuT3{+i$Kj{URD z3V2@GUao)E{qr5b`P>=+B>Un3u5rNJ!@&+LJ!faOU(#QCa1Fl~i1fpLYa`G>W zfsCVrg{hUH{a@?BuO2T${IQAv7u)AC1c5AdzY6aSU4To=OIgv>!NQR0@d<l!;2E+oy5O_BPu>wlf1^$?VSOd#MAO^s?=NeOB3;Vz8^DO@FlYCi1fs=fJ>B}Tv zwEUMiVGtAG(AL1gOo0N7fg*H&iFp?KTza0q^)CY$14R=7#p;5%0&5(B^?x(RUu!OK z_wbC6f9)QCNc+#b2ll^~n->%QiVUD#UY7bloGM5J+_3*;LY5a30$wKfV#0r$lMrw& zdO%H|jb{8ycN^d=UH_)rhUU2ZT%K`xRmH*jJzkvAz60~V;^?l=ITFN_*c^SSD)Vl8UPH6f9Uhqnl7U8w=Tfd{ztOcGgEM|r%6n!IMCHq@_RTnJ90% zZOMD}nKxTW;q(&^DrQIeVazDs*&+9Cf+d3urCZeB@oQ;>*c ziGgAyjhZ1FR6!LijcZ(*5;YacwqhtYcu_1y5<+xo?`@{Q=N__{>=j~tjJLux8sRvy zNSUA>S~yjS(1rpP{Q6*95;#&(1K8lPCS~EICSwpJ0ug|I7lF@#KKw#HP$o>HnLfC$ zS)mQ7xl!cQ^m&6JNU9W-F+b_FLZNoN%PnQqp#UfO299mO$6oFWGq@jzn4IK;&&vwV z^^MBc7J!Q_DiBEkz$2nG3XB7E(E9SHoTTgI4S`+?WK8IgVQ)M5GeFEn2QZ)uviV5E zIaRtS50ju7u)~a0Qf%Uf>w#{Qc+@L%jd%wan}5^u!JlD--)L{uAQD5$hqMb12j74g z+VD>0#6{{&BHi*%<-%2U`m)OKrD=LU@~q!}rWXDjZ*@$XZ5Wc@Dd>4T|xu{@dXPE7t9s_&ZX`N z3DgfFIEwS6GBitV6J}%3HP|~aJXP$lq<2R^!q0n4+v|19oykg!vWoPY-aXqbQ&Gvy zZhkopgAng7udDV$t(yuT@rbBOn3^NAnq3IX$k0R;uI88Bp83ENvr5(1uLV2qdV-D! z*;QN|=-DBx)%8r>b&fsIEV&<*sjveJc zl_$j9;I4Vxwye6R4i(3F-{%w`QJldRei(%?CVk4+qLZN*&>O2G$EzFYd8NU~P58#E zt*l@`DT$$^@lIzt9&vDJ6Wfb&Xc@Y6kuN3E@cKg;&ij-E)v}#>vlFUd4%PYfZtWb7 zi8o@}C4Gwyp2&h=-~04#6lIRu$`L4zur4|cp!7P|>x@9Fm$#hHx{JYBJ>N&er_A=P zt%A-%d@tFR3g~JqtIN4x5VCAuI3>h=;%_V2mA+mgdF^^zmX`kfNN!tkQ(BL;HN!BD zV*fl1qum ztx$5S-+qlSGrs5P_dMtOJl{XeQ?GYE@7imxz4l)F-Fxk|XXg~T+eYq;F)_LNFl(WC ze1C%8>N=JDbW3A(6&dO=l#2AcyL9Qz#)_Akh($gJ-_Ly_eqou8YQV0Kc};;ueFxvq zd$Qnyl#bj^lK>VY)qgY*0}kM$dp?$-X;=85P-Zf)cKAEm@(5#%<$8*HjK7*!4*bz| zC~KR@P;Z~ywTRDc#rYEPqW*y+!_TXh1X0r&+z9h?`-(k2)zn?ZEtQSVdY_>i6?cD_ z)0cPX?(csn8ylO~yuG-jIum?L&1uRyYJ8_DW?N?^*-b0k?wxYKasMe|Pj9?crkRqh z*ID+}-Uh48B@W?ciyfup^^ZS&^;A5|R;1Qt57O>jv}7n%Oup9I^vfzUN?-%~J&$CGs7*31JOHMSLq|w)o{(j2usu3ye0qRd9o8uYBvT z{yE(u!OP+ZnGC%2rTU$H@hj6yL*foTT_K**f0Z+k7ES0=*89Lfla%-M*>^7iyN)E7LAY*HytP|~&@L?|`>c6C&v|Bov}1L281 zPt|0qwloZr8-{OaZ+m#WyPLccI?`oCM)t+WBE=~KM|+Rc z(`%CPa$&FLIMi()#xChTCP{e)_xLb3L%g^{!Q-{3^@s1D4DW_n=v}eUt6roo)8_-H zG*)`|>1RA%qZL;CckQ4kNemJmN$SIA6XC(KSmZvEDm`3g@2}6Xk-E36u^Zz!@vX>%t59OG%_6O zn9DXV9*x<1NQ~`o@2q_2)ZC0Tviy$V%tcEUsYoCEE&U{NeeXc;jK)|D}J8I>8)7(=jFsd(b>i{#pY;*W$Z^sL~3r?S*kil zaQ;lV-n%;6e4WF~a?4Gpy+5y`-xrH9f?s1a;Z9cN%-q1|_bpCls zI%z)JC~Tg)wSoI;d1B>;LnknYN@QGS$LikuOEfmrZFa2U{=bSId=QOQ+;A)GHhe2V zWr1%4BXaJ6>y^(Q8kahR-)(?{=DXX62iqlGWMbd)(f@jaJ6( zEZbuB`{9Hpl_j>~vA4*xV{a9cia4Udh?}M+D`lo|P8ba<^fPM)=(wX|hELzG<>^Qj0kvWh-S8-;v9T zIj%vv8g7e1VfFNP6+s8@N|%&Lr#udx|1|9`@rFdlB~GU_!_dHKdqPa;rnKK&eCAh+ z+Qvt#rgffCOY6}&Qm(*M-7ea$<1wfuGgU3yDLWwbUWsy*09X zUgKmoZT(EG8F{%@LrN;OJfX4BOG*x|+M~j1J>Ah$S6&!j>X)AL)ib2Qyn*2=x8r$n zYjaTbRV%LZ&ByW2?dY!y9M2DQr_>Fm+*tbbNkZ{pdfufSqq@W*?PZ(JS~lc$ul#&r z)3dG%r5P+__YR%A>tA@RO)Z&~aaM%jnBZ(_sg+o~^+wXA#8Ff3;tZL?Uk;|6bXRrH z70XAzk4kPl`{{ybboVw^O?_#;R>LC8JMTlo2AayFZ1-y!qry?ZsyNp7t?zh4o+53-^$lNXm8TpjG?8+Bg|AAdSs* zwe;SfFLk=r(2>-k9HJq1J++c@=8D-1eEW_Ui@XYT!d6IUvlaX7f+fAuR8i+gpV=4x zx=gR7J+(DrZb4{SlJ)9SeXEqujJ)z=jTpS|3hJX3$leRKz>jbWuQ-1gxZR>r5zovv z&?s!yajH2NQSEETy}XDM=s%cMPbGgj*Bcg(T2!fB{fe@+vAN_`Wn;8~KC-R<^Rnv3 z;{5M1eZ39^(is}9LwgHyMqV*a9DkCze9Q1W!u->j_M>wsGMisFVO!O9Vca?%?a6hx z>6%uv(Jx;5Vq{I_=hjnCbic*zjqON0{rT}%PQ=!GM+@?&9Q!nHTH^cGVk=uxUH3*VeSKY_t|RQj zwsn7-+TAG}iaRVe_!Izd{l**)*!3S7!3 ziKwo)vh^8vYMNIlReS50ba_jcML)X`Q+3?_1f~qJ%dl6r+aOhm^!h*zuDY3?>6OBQ zd)cpem^jbTV!7+bkmz-<8ze3LLvwe&DZ4V_dCc6y@V5O$4(nAaeA#*MZ&AzY4(f~i zq3Tw~(SJL*&MKa_x3C?FBTqq`K|$2P8kTZ6uQ~o;b3hj_g?neu5)7-q+~L2KTx_ z50ljM9;fXzvg-V7a!tJ!YG)qla>!b>r3BeoEm3Nsrstx5*xk=#%>%fnvJKcPV5>%b zc~oY%tL($b&?>E$Z-PQYLvr#RamQ0STHcO$2V!Ioe^u*wRCX{fWXHLXUD(EgPj|WX zR~DRqlBSB0Dl7V%;ILLK_u`|T&?-Wlj94H3-Z!b;v#Q-!J5BdCnsjpT-bP3?=EvIz z105ML?aK&1b(Z@N@1kUD3(q=(#iQ%zh1+7i~YvK-16NjqU zOvktT8c+UNqEux3$HKQ=W$^<|(6-jFy8sq$?9tHrAgQpMZN*KK%P z67}?;(d>I1tEew44Q~(F?MIrLa$a6MXmoM`-J!Z6dM#@c;}4Tr2Ki59H#z?Wl5TmnkOXtx)f|AO8FuKQF!>ZoeWMG_`HAOuiTt2Lq z>kgz6cWiXZchYe9u<^}?n$GnD#J*p*JNBDAxs175e0#V4OQ(W?+!VKmauqEpes!9= zOSGG}$H40^r5@fk*wX62wvlq~IH=XOR-6^3mnjyl0!2)V|imMqhJ$Ay$6r{Y@(zE&p5hg0k*=BLhhY-}Q2` z>R&F09P$hPWw6xrRbiz2@LJaF+%tW9TW!9dHr|GdS(Y$2LGRsxM>Vj(0ZxNxWNB(i zqhDQ$W0#n#aR?5hFFp9KM6VUD|MqcX@bPx1WBsj)d5=t4*Y9I)d}~hlzHIlb2voA( zbPZ+Fvt{Y)Li;9KZau&4=~ zv49zjcO4tkz{Xs2urc=;jOV$9@w{-bF@HW^&Jfjj&f{w%4i@GU?HCOjvMqFGj0KHL zrjohj$?=koegKb{2WT>V z6nRX3@cD5V3Z2D-L43(BEMKm!f&!G$#D^y!drC%3AFVNAwJ0nvICua@YN6p1oIyez z0FtaYEUGUBEPESLI4l=37iL8F;nEol8V82gLcr9((mj>s@1w2*v6!SD&szr$2{c8( zvC>1l1@NB`94L2OMS_wCOe=Z-X(P*vO=bq_S^Ckbbn=*lli;LwpmGL~Y{1GPg=PUx z({ZKKsCq^u5P(BOV2}hP=nIjU@zerT|8_A0$n5D$2_Aq#BKYeEfTWGUv&f|xf&Y4t zz?uk*CX!%_z>v@w5(cG-z>^RN9k>AHl(J7eVR39(EXG7NTNxQ!kUht1*_FkC*@NhZ zDU8O+1vrhVFK{|(up~5gsx(t51$m5H=TC8&O8Z}^3=4~Yt`09Rp&GHUAQ`bJzFr_4 zWV4Z;uP>cSazRiLSd1$Y)Qk&36N5rvHOW+<4m6I8bVbncu2>{-Ott)J`Sk*xZD#s# z$xI6E2VXo5k3qU15t=TpSOmlu+)-#Wa6wZkSPGg(b>USRe_A2FU}f3|bRK~1BfwnKjDw!31#)K^$=9bL{+hUIgGImluCiq7&NFVe1P>J z`Rj^GA%S-7Mds>}*=%ss7MTll0QF)z@X1G$1=9f_7g~H3C@j>G88W#1=%kXM9-hP? zGu?C*0yL>KSF$gItDtAdX2UF5TpG-l=EY_JR!p#4*hQoGeaalg@ ztpCvSPCORwe4;p^BfmnNiozXla6GMqLxC_?ep-b^VN%CTM2VHKB^1xtUSd&uD3a z=AYChG3nv}D@M8s{=k7Tjemy#MMd#kC}T5AFeHZNVQQ1pVFU&ZJc3{2O^ zx$Z2E+K*u**o?s&hN}JW7fd^mR0q+8Jio#O9lu|}@rPr z`f9w1zB-(LmOe#z-dtWC&I`E`8ih{@`wHODTqPyIP7NXf{F(TGXg`oK40;4UNCX-U zMM*&)7;^%{K{4U{7#0a>Rsh2YV>mPv4aG+X4$z$j!$7hB0(2NC9*`fyp+IbtAclkX zZ3xieph!@DjEIGztOPIurLL&~7P#v^cadMuhfa@Y4~IkQ-VM6RJ1DH1)HDe1i{Q+nQ zGyTDg4rclT-UwmF7G`W=#ujF5fv15PTbQwh8C&?@wgoPS41O7kBPjv>v<^Lp26@*( bfT#orYvOQu9(Uk8l9W(Z-n7+NQsVyr7&7YW literal 0 HcmV?d00001 diff --git a/benchmarks/opencl/BlackScholes/oclBlackScholes_common.h b/benchmarks/opencl/BlackScholes/oclBlackScholes_common.h new file mode 100644 index 00000000..70ec92da --- /dev/null +++ b/benchmarks/opencl/BlackScholes/oclBlackScholes_common.h @@ -0,0 +1,50 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * Please refer to the NVIDIA end user license agreement (EULA) associated + * with this source code for terms and conditions that govern your use of + * this software. Any use, reproduction, disclosure, or distribution of + * this software and related documentation outside the terms of the EULA + * is strictly prohibited. + * + */ + + + +#include + + + +//////////////////////////////////////////////////////////////////////////////// +// Process an array of optN options on CPU +//////////////////////////////////////////////////////////////////////////////// +extern "C" void BlackScholesCPU( + float *h_Call, //Call option price + float *h_Put, //Put option price + float *h_S, //Current stock price + float *h_X, //Option strike price + float *h_T, //Option years + float R, //Riskless rate of return + float V, //Stock volatility + unsigned int optionCount +); + + +//////////////////////////////////////////////////////////////////////////////// +// OpenCL Black-Scholes kernel launcher +//////////////////////////////////////////////////////////////////////////////// +extern "C" void initBlackScholes(cl_context cxGPUContext, cl_command_queue cqParamCommandQue, const char **argv); + +extern "C" void closeBlackScholes(void); + +extern "C" void BlackScholes( + cl_command_queue cqCommandQueue, + cl_mem d_Call, //Call option price + cl_mem d_Put, //Put option price + cl_mem d_S, //Current stock price + cl_mem d_X, //Option strike price + cl_mem d_T, //Option years + cl_float R, //Riskless rate of return + cl_float V, //Stock volatility + cl_uint optionCount +); diff --git a/benchmarks/opencl/BlackScholes/oclBlackScholes_gold.cpp b/benchmarks/opencl/BlackScholes/oclBlackScholes_gold.cpp new file mode 100644 index 00000000..88d2473b --- /dev/null +++ b/benchmarks/opencl/BlackScholes/oclBlackScholes_gold.cpp @@ -0,0 +1,92 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * Please refer to the NVIDIA end user license agreement (EULA) associated + * with this source code for terms and conditions that govern your use of + * this software. Any use, reproduction, disclosure, or distribution of + * this software and related documentation outside the terms of the EULA + * is strictly prohibited. + * + */ + + + +#include +#include "oclBlackScholes_common.h" + + + +/////////////////////////////////////////////////////////////////////////////// +// Rational approximation of cumulative normal distribution function +/////////////////////////////////////////////////////////////////////////////// +static double CND(double d){ + const double A1 = 0.31938153; + const double A2 = -0.356563782; + const double A3 = 1.781477937; + const double A4 = -1.821255978; + const double A5 = 1.330274429; + const double RSQRT2PI = 0.39894228040143267793994605993438; + + double + K = 1.0 / (1.0 + 0.2316419 * fabs(d)); + + double + cnd = RSQRT2PI * exp(- 0.5 * d * d) * + (K * (A1 + K * (A2 + K * (A3 + K * (A4 + K * A5))))); + + if(d > 0) + cnd = 1.0 - cnd; + + return cnd; +} + +/////////////////////////////////////////////////////////////////////////////// +// Black-Scholes formula for both call and put +/////////////////////////////////////////////////////////////////////////////// +static void BlackScholesBodyCPU( + float& call, //Call option price + float& put, //Put option price + float Sf, //Current stock price + float Xf, //Option strike price + float Tf, //Option years + float Rf, //Riskless rate of return + float Vf //Stock volatility +){ + double S = Sf, X = Xf, T = Tf, R = Rf, V = Vf; + + double sqrtT = sqrt(T); + double d1 = (log(S / X) + (R + 0.5 * V * V) * T) / (V * sqrtT); + double d2 = d1 - V * sqrtT; + double CNDD1 = CND(d1); + double CNDD2 = CND(d2); + + //Calculate Call and Put simultaneously + double expRT = exp(- R * T); + call = (float)(S * CNDD1 - X * expRT * CNDD2); + put = (float)(X * expRT * (1.0 - CNDD2) - S * (1.0 - CNDD1)); +} + +//////////////////////////////////////////////////////////////////////////////// +// Process an array of optN options +//////////////////////////////////////////////////////////////////////////////// +extern "C" void BlackScholesCPU( + float *h_Call, //Call option price + float *h_Put, //Put option price + float *h_S, //Current stock price + float *h_X, //Option strike price + float *h_T, //Option years + float R, //Riskless rate of return + float V, //Stock volatility + unsigned int optionCount +){ + for(unsigned int i = 0; i < optionCount; i++) + BlackScholesBodyCPU( + h_Call[i], + h_Put[i], + h_S[i], + h_X[i], + h_T[i], + R, + V + ); +} diff --git a/benchmarks/opencl/BlackScholes/oclBlackScholes_launcher.cpp b/benchmarks/opencl/BlackScholes/oclBlackScholes_launcher.cpp new file mode 100644 index 00000000..317cabbc --- /dev/null +++ b/benchmarks/opencl/BlackScholes/oclBlackScholes_launcher.cpp @@ -0,0 +1,125 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * Please refer to the NVIDIA end user license agreement (EULA) associated + * with this source code for terms and conditions that govern your use of + * this software. Any use, reproduction, disclosure, or distribution of + * this software and related documentation outside the terms of the EULA + * is strictly prohibited. + * + */ + + + +#include +#include "oclBlackScholes_common.h" + +static cl_program cpBlackScholes; //OpenCL program +static cl_kernel ckBlackScholes; //OpenCL kernel +static cl_command_queue cqDefaultCommandQueue; + +extern "C" void initBlackScholes(cl_context cxGPUContext, cl_command_queue cqParamCommandQueue, const char **argv){ + cl_int ciErrNum; + size_t kernelLength; + + shrLog("...loading BlackScholes.cl\n"); + char *cPathAndName = shrFindFilePath("BlackScholes.cl", argv[0]); + shrCheckError(cPathAndName != NULL, shrTRUE); + char *cBlackScholes = oclLoadProgSource(cPathAndName, "// My comment\n", &kernelLength); + shrCheckError(cBlackScholes != NULL, shrTRUE); + + shrLog("...creating BlackScholes program\n"); + //cpBlackScholes = clCreateProgramWithSource(cxGPUContext, 1, (const char **)&cBlackScholes, &kernelLength, &ciErrNum); + cpBlackScholes = clCreateProgramWithBuiltInKernels(context, 1, &device_id, "BlackScholes", NULL); + shrCheckError(ciErrNum, CL_SUCCESS); + + shrLog("...building BlackScholes program\n"); + ciErrNum = clBuildProgram(cpBlackScholes, 0, NULL, "-cl-fast-relaxed-math -Werror", NULL, NULL); + + if(ciErrNum != CL_BUILD_SUCCESS){ + shrLog("*** Compilation failure ***\n"); + + size_t deviceNum; + cl_device_id *cdDevices; + ciErrNum = clGetContextInfo(cxGPUContext, CL_CONTEXT_DEVICES, 0, NULL, &deviceNum); + shrCheckError(ciErrNum, CL_SUCCESS); + + cdDevices = (cl_device_id *)malloc(deviceNum * sizeof(cl_device_id)); + shrCheckError(cdDevices != NULL, shrTRUE); + + ciErrNum = clGetContextInfo(cxGPUContext, CL_CONTEXT_DEVICES, deviceNum * sizeof(cl_device_id), cdDevices, NULL); + shrCheckError(ciErrNum, CL_SUCCESS); + + size_t logSize; + char *logTxt; + + ciErrNum = clGetProgramBuildInfo(cpBlackScholes, cdDevices[0], CL_PROGRAM_BUILD_LOG, 0, NULL, &logSize); + shrCheckError(ciErrNum, CL_SUCCESS); + + logTxt = (char *)malloc(logSize); + shrCheckError(logTxt != NULL, shrTRUE); + + ciErrNum = clGetProgramBuildInfo(cpBlackScholes, cdDevices[0], CL_PROGRAM_BUILD_LOG, logSize, logTxt, NULL); + shrCheckError(ciErrNum, CL_SUCCESS); + + shrLog("%s\n", logTxt); + shrLog("*** Exiting ***\n"); + free(logTxt); + free(cdDevices); + exit(666); + } + + //Save ptx code to separate file + oclLogPtx(cpBlackScholes, oclGetFirstDev(cxGPUContext), "BlackScholes.ptx"); + + shrLog("...creating BlackScholes kernels\n"); + ckBlackScholes = clCreateKernel(cpBlackScholes, "BlackScholes", &ciErrNum); + shrCheckError(ciErrNum, CL_SUCCESS); + + cqDefaultCommandQueue = cqParamCommandQueue; + free(cBlackScholes); + free(cPathAndName); +} + +extern "C" void closeBlackScholes(void){ + cl_int ciErrNum; + ciErrNum = clReleaseKernel(ckBlackScholes); + ciErrNum |= clReleaseProgram(cpBlackScholes); + shrCheckError(ciErrNum, CL_SUCCESS); +} + +//////////////////////////////////////////////////////////////////////////////// +// OpenCL Black-Scholes kernel launcher +//////////////////////////////////////////////////////////////////////////////// +extern "C" void BlackScholes( + cl_command_queue cqCommandQueue, + cl_mem d_Call, //Call option price + cl_mem d_Put, //Put option price + cl_mem d_S, //Current stock price + cl_mem d_X, //Option strike price + cl_mem d_T, //Option years + cl_float R, //Riskless rate of return + cl_float V, //Stock volatility + cl_uint optionCount +){ + cl_int ciErrNum; + + if(!cqCommandQueue) + cqCommandQueue = cqDefaultCommandQueue; + + ciErrNum = clSetKernelArg(ckBlackScholes, 0, sizeof(cl_mem), (void *)&d_Call); + ciErrNum |= clSetKernelArg(ckBlackScholes, 1, sizeof(cl_mem), (void *)&d_Put); + ciErrNum |= clSetKernelArg(ckBlackScholes, 2, sizeof(cl_mem), (void *)&d_S); + ciErrNum |= clSetKernelArg(ckBlackScholes, 3, sizeof(cl_mem), (void *)&d_X); + ciErrNum |= clSetKernelArg(ckBlackScholes, 4, sizeof(cl_mem), (void *)&d_T); + ciErrNum |= clSetKernelArg(ckBlackScholes, 5, sizeof(cl_float), (void *)&R); + ciErrNum |= clSetKernelArg(ckBlackScholes, 6, sizeof(cl_float), (void *)&V); + ciErrNum |= clSetKernelArg(ckBlackScholes, 7, sizeof(cl_uint), (void *)&optionCount); + shrCheckError(ciErrNum, CL_SUCCESS); + + //Run the kernel + size_t globalWorkSize = 60 * 1024; + size_t localWorkSize = 128; + ciErrNum = clEnqueueNDRangeKernel(cqCommandQueue, ckBlackScholes, 1, NULL, &globalWorkSize, &localWorkSize, 0, NULL, NULL); + shrCheckError(ciErrNum, CL_SUCCESS); +} diff --git a/benchmarks/opencl/BlackScholes/oclUtils.h b/benchmarks/opencl/BlackScholes/oclUtils.h new file mode 100644 index 00000000..2b109e18 --- /dev/null +++ b/benchmarks/opencl/BlackScholes/oclUtils.h @@ -0,0 +1,198 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * Please refer to the NVIDIA end user license agreement (EULA) associated + * with this source code for terms and conditions that govern your use of + * this software. Any use, reproduction, disclosure, or distribution of + * this software and related documentation outside the terms of the EULA + * is strictly prohibited. + * + */ + +#ifndef OCL_UTILS_H +#define OCL_UTILS_H + +// ********************************************************************* +// Utilities specific to OpenCL samples in NVIDIA GPU Computing SDK +// ********************************************************************* + +// Common headers: Cross-API utililties and OpenCL header +#include + +// All OpenCL headers +#if defined (__APPLE__) || defined(MACOSX) + #include +#else + #include +#endif + +// Includes +#include +#include +#include + +// For systems with CL_EXT that are not updated with these extensions, we copied these +// extensions from +#ifndef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV + /* cl_nv_device_attribute_query extension - no extension #define since it has no functions */ + #define CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV 0x4000 + #define CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV 0x4001 + #define CL_DEVICE_REGISTERS_PER_BLOCK_NV 0x4002 + #define CL_DEVICE_WARP_SIZE_NV 0x4003 + #define CL_DEVICE_GPU_OVERLAP_NV 0x4004 + #define CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV 0x4005 + #define CL_DEVICE_INTEGRATED_MEMORY_NV 0x4006 +#endif + +// reminders for build output window and log +#ifdef _WIN32 + #pragma message ("Note: including shrUtils.h") + #pragma message ("Note: including opencl.h") +#endif + +// SDK Revision # +#define OCL_SDKREVISION "7027912" + +// Error and Exit Handling Macros... +// ********************************************************************* +// Full error handling macro with Cleanup() callback (if supplied)... +// (Companion Inline Function lower on page) +#define oclCheckErrorEX(a, b, c) __oclCheckErrorEX(a, b, c, __FILE__ , __LINE__) + +// Short version without Cleanup() callback pointer +// Both Input (a) and Reference (b) are specified as args +#define oclCheckError(a, b) oclCheckErrorEX(a, b, 0) + +////////////////////////////////////////////////////////////////////////////// +//! Gets the platform ID for NVIDIA if available, otherwise default to platform 0 +//! +//! @return the id +//! @param clSelectedPlatformID OpenCL platform ID +////////////////////////////////////////////////////////////////////////////// +extern "C" cl_int oclGetPlatformID(cl_platform_id* clSelectedPlatformID); + +////////////////////////////////////////////////////////////////////////////// +//! Print info about the device +//! +//! @param iLogMode enum LOGBOTH, LOGCONSOLE, LOGFILE +//! @param device OpenCL id of the device +////////////////////////////////////////////////////////////////////////////// +extern "C" void oclPrintDevInfo(int iLogMode, cl_device_id device); + +////////////////////////////////////////////////////////////////////////////// +//! Get and return device capability +//! +//! @return the 2 digit integer representation of device Cap (major minor). return -1 if NA +//! @param device OpenCL id of the device +////////////////////////////////////////////////////////////////////////////// +extern "C" int oclGetDevCap(cl_device_id device); + +////////////////////////////////////////////////////////////////////////////// +//! Print the device name +//! +//! @param iLogMode enum LOGBOTH, LOGCONSOLE, LOGFILE +//! @param device OpenCL id of the device +////////////////////////////////////////////////////////////////////////////// +extern "C" void oclPrintDevName(int iLogMode, cl_device_id device); + +////////////////////////////////////////////////////////////////////////////// +//! Gets the id of the first device from the context +//! +//! @return the id +//! @param cxGPUContext OpenCL context +////////////////////////////////////////////////////////////////////////////// +extern "C" cl_device_id oclGetFirstDev(cl_context cxGPUContext); + +////////////////////////////////////////////////////////////////////////////// +//! Gets the id of the nth device from the context +//! +//! @return the id or -1 when out of range +//! @param cxGPUContext OpenCL context +//! @param device_idx index of the device of interest +////////////////////////////////////////////////////////////////////////////// +extern "C" cl_device_id oclGetDev(cl_context cxGPUContext, unsigned int device_idx); + +////////////////////////////////////////////////////////////////////////////// +//! Gets the id of device with maximal FLOPS from the context +//! +//! @return the id +//! @param cxGPUContext OpenCL context +////////////////////////////////////////////////////////////////////////////// +extern "C" cl_device_id oclGetMaxFlopsDev(cl_context cxGPUContext); + +////////////////////////////////////////////////////////////////////////////// +//! Loads a Program file and prepends the cPreamble to the code. +//! +//! @return the source string if succeeded, 0 otherwise +//! @param cFilename program filename +//! @param cPreamble code that is prepended to the loaded file, typically a set of #defines or a header +//! @param szFinalLength returned length of the code string +////////////////////////////////////////////////////////////////////////////// +extern "C" char* oclLoadProgSource(const char* cFilename, const char* cPreamble, size_t* szFinalLength); + +////////////////////////////////////////////////////////////////////////////// +//! Get the binary (PTX) of the program associated with the device +//! +//! @param cpProgram OpenCL program +//! @param cdDevice device of interest +//! @param binary returned code +//! @param length length of returned code +////////////////////////////////////////////////////////////////////////////// +extern "C" void oclGetProgBinary( cl_program cpProgram, cl_device_id cdDevice, char** binary, size_t* length); + +////////////////////////////////////////////////////////////////////////////// +//! Get and log the binary (PTX) from the OpenCL compiler for the requested program & device +//! +//! @param cpProgram OpenCL program +//! @param cdDevice device of interest +//! @param const char* cPtxFileName optional PTX file name +////////////////////////////////////////////////////////////////////////////// +extern "C" void oclLogPtx(cl_program cpProgram, cl_device_id cdDevice, const char* cPtxFileName); + +////////////////////////////////////////////////////////////////////////////// +//! Get and log the Build Log from the OpenCL compiler for the requested program & device +//! +//! @param cpProgram OpenCL program +//! @param cdDevice device of interest +////////////////////////////////////////////////////////////////////////////// +extern "C" void oclLogBuildInfo(cl_program cpProgram, cl_device_id cdDevice); + +// Helper function for De-allocating cl objects +// ********************************************************************* +extern "C" void oclDeleteMemObjs(cl_mem* cmMemObjs, int iNumObjs); + +// Helper function to get OpenCL error string from constant +// ********************************************************************* +extern "C" const char* oclErrorString(cl_int error); + +// Helper function to get OpenCL image format string (channel order and type) from constant +// ********************************************************************* +extern "C" const char* oclImageFormatString(cl_uint uiImageFormat); + +// companion inline function for error checking and exit on error WITH Cleanup Callback (if supplied) +// ********************************************************************* +inline void __oclCheckErrorEX(cl_int iSample, cl_int iReference, void (*pCleanup)(int), const char* cFile, const int iLine) +{ + // An error condition is defined by the sample/test value not equal to the reference + if (iReference != iSample) + { + // If the sample/test value isn't equal to the ref, it's an error by defnition, so override 0 sample/test value + iSample = (iSample == 0) ? -9999 : iSample; + + // Log the error info + shrLog("\n !!! Error # %i (%s) at line %i , in file %s !!!\n\n", iSample, oclErrorString(iSample), iLine, cFile); + + // Cleanup and exit, or just exit if no cleanup function pointer provided. Use iSample (error code in this case) as process exit code. + if (pCleanup != NULL) + { + pCleanup(iSample); + } + else + { + shrLogEx(LOGBOTH | CLOSELOG, 0, "Exiting...\n"); + exit(iSample); + } + } +} + +#endif \ No newline at end of file diff --git a/benchmarks/opencl/BlackScholes/shrQATest.h b/benchmarks/opencl/BlackScholes/shrQATest.h new file mode 100644 index 00000000..245cf8dc --- /dev/null +++ b/benchmarks/opencl/BlackScholes/shrQATest.h @@ -0,0 +1,238 @@ +/* +* Copyright 1993-2010 NVIDIA Corporation. All rights reserved. +* +* Please refer to the NVIDIA end user license agreement (EULA) associated +* with this source code for terms and conditions that govern your use of +* this software. Any use, reproduction, disclosure, or distribution of +* this software and related documentation outside the terms of the EULA +* is strictly prohibited. +* +*/ + +#ifndef SHR_QATEST_H +#define SHR_QATEST_H + +// ********************************************************************* +// Generic utilities for NVIDIA GPU Computing SDK +// ********************************************************************* + +// OS dependent includes +#ifdef _WIN32 + #pragma message ("Note: including windows.h") + #pragma message ("Note: including math.h") + #pragma message ("Note: including assert.h") + #pragma message ("Note: including time.h") + +// Headers needed for Windows + #include + #include +#else + // Headers needed for Linux + #include + #include + #include + #include + #include + #include + #include + #include + #include +#endif + +#ifndef STRCASECMP +#ifdef _WIN32 +#define STRCASECMP _stricmp +#else +#define STRCASECMP strcasecmp +#endif +#endif + +#ifndef STRNCASECMP +#ifdef _WIN32 +#define STRNCASECMP _strnicmp +#else +#define STRNCASECMP strncasecmp +#endif +#endif + + +// Standardized QA Start/Finish for CUDA SDK tests +#define shrQAStart(a, b) __shrQAStart(a, b) +#define shrQAFinish(a, b, c) __shrQAFinish(a, b, c) +#define shrQAFinish2(a, b, c, d) __shrQAFinish2(a, b, c, d) + +inline int findExeNameStart(const char *exec_name) +{ + int exename_start = (int)strlen(exec_name); + + while( (exename_start > 0) && + (exec_name[exename_start] != '\\') && + (exec_name[exename_start] != '/') ) + { + exename_start--; + } + if (exec_name[exename_start] == '\\' || + exec_name[exename_start] == '/') + { + return exename_start+1; + } else { + return exename_start; + } +} + +inline int __shrQAStart(int argc, char **argv) +{ + bool bQATest = false; + // First clear the output buffer + fflush(stdout); + fflush(stdout); + + for (int i=1; i < argc; i++) { + int string_start = 0; + while (argv[i][string_start] == '-') + string_start++; + char *string_argv = &argv[i][string_start]; + + if (!STRCASECMP(string_argv, "qatest")) { + bQATest = true; + } + } + + // We don't want to print the entire path, so we search for the first + int exename_start = findExeNameStart(argv[0]); + if (bQATest) { + fprintf(stdout, "&&&& RUNNING %s", &(argv[0][exename_start])); + for (int i=1; i < argc; i++) fprintf(stdout, " %s", argv[i]); + fprintf(stdout, "\n"); + } else { + fprintf(stdout, "[%s] starting...\n", &(argv[0][exename_start])); + } + fflush(stdout); + printf("\n"); fflush(stdout); + return exename_start; +} + +enum eQAstatus { + QA_FAILED = 0, + QA_PASSED = 1, + QA_WAIVED = 2 +}; + +inline void __ExitInTime(int seconds) +{ + fprintf(stdout, "> exiting in %d seconds: ", seconds); + fflush(stdout); + time_t t; + int count; + for (t=time(0)+seconds, count=seconds; time(0) < t; count--) { + fprintf(stdout, "%d...", count); +#ifdef WIN32 + Sleep(1000); +#else + sleep(1); +#endif + } + fprintf(stdout,"done!\n\n"); + fflush(stdout); +} + + +inline void __shrQAFinish(int argc, const char **argv, int iStatus) +{ + // By default QATest is disabled and NoPrompt is Enabled (times out at seconds passed into __ExitInTime() ) + bool bQATest = false, bNoPrompt = true, bQuitInTime = true; + const char *sStatus[] = { "FAILED", "PASSED", "WAIVED", NULL }; + + for (int i=1; i < argc; i++) { + int string_start = 0; + while (argv[i][string_start] == '-') + string_start++; + + const char *string_argv = &argv[i][string_start]; + if (!STRCASECMP(string_argv, "qatest")) { + bQATest = true; + } + // For SDK individual samples that don't specify -noprompt or -prompt, + // a 3 second delay will happen before exiting, giving a user time to view results + if (!STRCASECMP(string_argv, "noprompt") || !STRCASECMP(string_argv, "help")) { + bNoPrompt = true; + bQuitInTime = false; + } + if (!STRCASECMP(string_argv, "prompt")) { + bNoPrompt = false; + bQuitInTime = false; + } + } + + int exename_start = findExeNameStart(argv[0]); + if (bQATest) { + fprintf(stdout, "&&&& %s %s", sStatus[iStatus], &(argv[0][exename_start])); + for (int i=1; i < argc; i++) fprintf(stdout, " %s", argv[i]); + fprintf(stdout, "\n"); + } else { + fprintf(stdout, "[%s] test results...\n%s\n", &(argv[0][exename_start]), sStatus[iStatus]); + } + fflush(stdout); + printf("\n"); fflush(stdout); + if (bQuitInTime) { + __ExitInTime(3); + } else { + if (!bNoPrompt) { + fprintf(stdout, "\nPress to exit...\n"); + fflush(stdout); + getchar(); + } + } +} + +inline void __shrQAFinish2(bool bQATest, int argc, const char **argv, int iStatus) +{ + bool bQuitInTime = true; + const char *sStatus[] = { "FAILED", "PASSED", "WAIVED", NULL }; + + for (int i=1; i < argc; i++) { + int string_start = 0; + while (argv[i][string_start] == '-') + string_start++; + + const char *string_argv = &argv[i][string_start]; + // For SDK individual samples that don't specify -noprompt or -prompt, + // a 3 second delay will happen before exiting, giving a user time to view results + if (!STRCASECMP(string_argv, "noprompt") || !STRCASECMP(string_argv, "help")) { + bQuitInTime = false; + } + if (!STRCASECMP(string_argv, "prompt")) { + bQuitInTime = false; + } + } + + int exename_start = findExeNameStart(argv[0]); + if (bQATest) { + fprintf(stdout, "&&&& %s %s", sStatus[iStatus], &(argv[0][exename_start])); + for (int i=1; i < argc; i++) fprintf(stdout, " %s", argv[i]); + fprintf(stdout, "\n"); + } else { + fprintf(stdout, "[%s] test results...\n%s\n", &(argv[0][exename_start]), sStatus[iStatus]); + } + fflush(stdout); + + if (bQuitInTime) { + __ExitInTime(3); + } +} + +inline void shrQAFinishExit(int argc, const char **argv, int iStatus) +{ + __shrQAFinish(argc, argv, iStatus); + + exit(iStatus ? EXIT_SUCCESS : EXIT_FAILURE); +} + +inline void shrQAFinishExit2(bool bQAtest, int argc, const char **argv, int iStatus) +{ + __shrQAFinish2(bQAtest, argc, argv, iStatus); + + exit(iStatus ? EXIT_SUCCESS : EXIT_FAILURE); +} + +#endif \ No newline at end of file diff --git a/benchmarks/opencl/BlackScholes/shrUtils.h b/benchmarks/opencl/BlackScholes/shrUtils.h new file mode 100644 index 00000000..0f2795d4 --- /dev/null +++ b/benchmarks/opencl/BlackScholes/shrUtils.h @@ -0,0 +1,642 @@ +/* +* Copyright 1993-2010 NVIDIA Corporation. All rights reserved. +* +* Please refer to the NVIDIA end user license agreement (EULA) associated +* with this source code for terms and conditions that govern your use of +* this software. Any use, reproduction, disclosure, or distribution of +* this software and related documentation outside the terms of the EULA +* is strictly prohibited. +* +*/ + +#ifndef SHR_UTILS_H +#define SHR_UTILS_H + +// ********************************************************************* +// Generic utilities for NVIDIA GPU Computing SDK +// ********************************************************************* + +// reminders for output window and build log +#ifdef _WIN32 + #pragma message ("Note: including windows.h") + #pragma message ("Note: including math.h") + #pragma message ("Note: including assert.h") +#endif + +// OS dependent includes +#ifdef _WIN32 + // Headers needed for Windows + #include +#else + // Headers needed for Linux + #include + #include + #include + #include + #include + #include + #include +#endif + +// Other headers needed for both Windows and Linux +#include +#include +#include +#include +#include + +// Un-comment the following #define to enable profiling code in SDK apps +//#define GPU_PROFILING + +// Beginning of GPU Architecture definitions +inline int ConvertSMVer2Cores(int major, int minor) +{ + // Defines for GPU Architecture types (using the SM version to determine the # of cores per SM + typedef struct { + int SM; // 0xMm (hexidecimal notation), M = SM Major version, and m = SM minor version + int Cores; + } sSMtoCores; + + sSMtoCores nGpuArchCoresPerSM[] = + { { 0x10, 8 }, // Tesla Generation (SM 1.0) G80 class + { 0x11, 8 }, // Tesla Generation (SM 1.1) G8x class + { 0x12, 8 }, // Tesla Generation (SM 1.2) G9x class + { 0x13, 8 }, // Tesla Generation (SM 1.3) GT200 class + { 0x20, 32 }, // Fermi Generation (SM 2.0) GF100 class + { 0x21, 48 }, // Fermi Generation (SM 2.1) GF10x class + { 0x30, 192}, // Fermi Generation (SM 3.0) GK10x class + { -1, -1 } + }; + + int index = 0; + while (nGpuArchCoresPerSM[index].SM != -1) { + if (nGpuArchCoresPerSM[index].SM == ((major << 4) + minor) ) { + return nGpuArchCoresPerSM[index].Cores; + } + index++; + } + printf("MapSMtoCores SM %d.%d is undefined (please update to the latest SDK)!\n", major, minor); + return -1; +} +// end of GPU Architecture definitions + + +// Defines and enum for use with logging functions +// ********************************************************************* +#define DEFAULTLOGFILE "SdkConsoleLog.txt" +#define MASTERLOGFILE "SdkMasterLog.csv" +enum LOGMODES +{ + LOGCONSOLE = 1, // bit to signal "log to console" + LOGFILE = 2, // bit to signal "log to file" + LOGBOTH = 3, // convenience union of first 2 bits to signal "log to both" + APPENDMODE = 4, // bit to set "file append" mode instead of "replace mode" on open + MASTER = 8, // bit to signal master .csv log output + ERRORMSG = 16, // bit to signal "pre-pend Error" + CLOSELOG = 32 // bit to close log file, if open, after any requested file write +}; +#define HDASHLINE "-----------------------------------------------------------\n" + +// Standardized boolean +enum shrBOOL +{ + shrFALSE = 0, + shrTRUE = 1 +}; + +// Standardized MAX, MIN and CLAMP +#define MAX(a, b) ((a > b) ? a : b) +#define MIN(a, b) ((a < b) ? a : b) +#define CLAMP(a, b, c) MIN(MAX(a, b), c) // double sided clip of input a +#define TOPCLAMP(a, b) (a < b ? a:b) // single top side clip of input a + +// Error and Exit Handling Macros... +// ********************************************************************* +// Full error handling macro with Cleanup() callback (if supplied)... +// (Companion Inline Function lower on page) +#define shrCheckErrorEX(a, b, c) __shrCheckErrorEX(a, b, c, __FILE__ , __LINE__) + +// Short version without Cleanup() callback pointer +// Both Input (a) and Reference (b) are specified as args +#define shrCheckError(a, b) shrCheckErrorEX(a, b, 0) + +// Standardized Exit Macro for leaving main()... extended version +// (Companion Inline Function lower on page) +#define shrExitEX(a, b, c) __shrExitEX(a, b, c) + +// Standardized Exit Macro for leaving main()... short version +// (Companion Inline Function lower on page) +#define shrEXIT(a, b) __shrExitEX(a, b, EXIT_SUCCESS) + +// Simple argument checker macro +#define ARGCHECK(a) if((a) != shrTRUE)return shrFALSE + +// Define for user-customized error handling +#define STDERROR "file %s, line %i\n\n" , __FILE__ , __LINE__ + +// Function to deallocate memory allocated within shrUtils +// ********************************************************************* +extern "C" void shrFree(void* ptr); + +// ********************************************************************* +// Helper function to log standardized information to Console, to File or to both +//! Examples: shrLogEx(LOGBOTH, 0, "Function A\n"); +//! : shrLogEx(LOGBOTH | ERRORMSG, ciErrNum, STDERROR); +//! +//! Automatically opens file and stores handle if needed and not done yet +//! Closes file and nulls handle on request +//! +//! @param 0 iLogMode: LOGCONSOLE, LOGFILE, LOGBOTH, APPENDMODE, MASTER, ERRORMSG, CLOSELOG. +//! LOGFILE and LOGBOTH may be | 'd with APPENDMODE to select file append mode instead of overwrite mode +//! LOGFILE and LOGBOTH may be | 'd with CLOSELOG to "write and close" +//! First 3 options may be | 'd with MASTER to enable independent write to master data log file +//! First 3 options may be | 'd with ERRORMSG to start line with standard error message +//! @param 2 dValue: +//! Positive val = double value for time in secs to be formatted to 6 decimals. +//! Negative val is an error code and this give error preformatting. +//! @param 3 cFormatString: String with formatting specifiers like printf or fprintf. +//! ALL printf flags, width, precision and type specifiers are supported with this exception: +//! Wide char type specifiers intended for wprintf (%S and %C) are NOT supported +//! Single byte char type specifiers (%s and %c) ARE supported +//! @param 4... variable args: like printf or fprintf. Must match format specifer type above. +//! @return 0 if OK, negative value on error or if error occurs or was passed in. +// ********************************************************************* +extern "C" int shrLogEx(int iLogMode, int iErrNum, const char* cFormatString, ...); + +// Short version of shrLogEx defaulting to shrLogEx(LOGBOTH, 0, +// ********************************************************************* +extern "C" int shrLog(const char* cFormatString, ...); + +// ********************************************************************* +// Delta timer function for up to 3 independent timers using host high performance counters +// Maintains state for 3 independent counters +//! Example: double dElapsedTime = shrDeltaTime(0); +//! +//! @param 0 iCounterID: Which timer to check/reset. (0, 1, 2) +//! @return delta time of specified counter since last call in seconds. Otherwise -9999.0 if error +// ********************************************************************* +extern "C" double shrDeltaT(int iCounterID); + +// Optional LogFileNameOverride function +// ********************************************************************* +extern "C" void shrSetLogFileName (const char* cOverRideName); + +// Helper function to init data arrays +// ********************************************************************* +extern "C" void shrFillArray(float* pfData, int iSize); + +// Helper function to print data arrays +// ********************************************************************* +extern "C" void shrPrintArray(float* pfData, int iSize); + +//////////////////////////////////////////////////////////////////////////// +//! Find the path for a filename +//! @return the path if succeeded, otherwise 0 +//! @param filename name of the file +//! @param executablePath optional absolute path of the executable +//////////////////////////////////////////////////////////////////////////// +extern "C" char* shrFindFilePath(const char* filename, const char* executablePath); + +//////////////////////////////////////////////////////////////////////////// +//! Read file \filename containing single precision floating point data +//! @return shrTRUE if reading the file succeeded, otherwise shrFALSE +//! @param filename name of the source file +//! @param data uninitialized pointer, returned initialized and pointing to +//! the data read +//! @param len number of data elements in data, -1 on error +//! @note If a NULL pointer is passed to this function and it is initialized +//! within shrUtils, then free() has to be used to deallocate the memory +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrReadFilef( const char* filename, float** data, unsigned int* len, + bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Read file \filename containing double precision floating point data +//! @return shrTRUE if reading the file succeeded, otherwise shrFALSE +//! @param filename name of the source file +//! @param data uninitialized pointer, returned initialized and pointing to +//! the data read +//! @param len number of data elements in data, -1 on error +//! @note If a NULL pointer is passed to this function and it is +//! @note If a NULL pointer is passed to this function and it is initialized +//! within shrUtils, then free() has to be used to deallocate the memory +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrReadFiled( const char* filename, double** data, unsigned int* len, + bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Read file \filename containing integer data +//! @return shrTRUE if reading the file succeeded, otherwise shrFALSE +//! @param filename name of the source file +//! @param data uninitialized pointer, returned initialized and pointing to +//! the data read +//! @param len number of data elements in data, -1 on error +//! @note If a NULL pointer is passed to this function and it is +//! @note If a NULL pointer is passed to this function and it is initialized +//! within shrUtils, then free() has to be used to deallocate the memory +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrReadFilei( const char* filename, int** data, unsigned int* len, bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Read file \filename containing unsigned integer data +//! @return shrTRUE if reading the file succeeded, otherwise shrFALSE +//! @param filename name of the source file +//! @param data uninitialized pointer, returned initialized and pointing to +//! the data read +//! @param len number of data elements in data, -1 on error +//! @note If a NULL pointer is passed to this function and it is +//! @note If a NULL pointer is passed to this function and it is initialized +//! within shrUtils, then free() has to be used to deallocate the memory +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrReadFileui( const char* filename, unsigned int** data, + unsigned int* len, bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Read file \filename containing char / byte data +//! @return shrTRUE if reading the file succeeded, otherwise shrFALSE +//! @param filename name of the source file +//! @param data uninitialized pointer, returned initialized and pointing to +//! the data read +//! @param len number of data elements in data, -1 on error +//! @note If a NULL pointer is passed to this function and it is +//! @note If a NULL pointer is passed to this function and it is initialized +//! within shrUtils, then free() has to be used to deallocate the memory +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrReadFileb( const char* filename, char** data, unsigned int* len, + bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Read file \filename containing unsigned char / byte data +//! @return shrTRUE if reading the file succeeded, otherwise shrFALSE +//! @param filename name of the source file +//! @param data uninitialized pointer, returned initialized and pointing to +//! the data read +//! @param len number of data elements in data, -1 on error +//! @note If a NULL pointer is passed to this function and it is +//! @note If a NULL pointer is passed to this function and it is initialized +//! within shrUtils, then free() has to be used to deallocate the memory +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrReadFileub( const char* filename, unsigned char** data, + unsigned int* len, bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Write a data file \filename containing single precision floating point +//! data +//! @return shrTRUE if writing the file succeeded, otherwise shrFALSE +//! @param filename name of the file to write +//! @param data pointer to data to write +//! @param len number of data elements in data, -1 on error +//! @param epsilon epsilon for comparison +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrWriteFilef( const char* filename, const float* data, unsigned int len, + const float epsilon, bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Write a data file \filename containing double precision floating point +//! data +//! @return shrTRUE if writing the file succeeded, otherwise shrFALSE +//! @param filename name of the file to write +//! @param data pointer to data to write +//! @param len number of data elements in data, -1 on error +//! @param epsilon epsilon for comparison +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrWriteFiled( const char* filename, const float* data, unsigned int len, + const double epsilon, bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Write a data file \filename containing integer data +//! @return shrTRUE if writing the file succeeded, otherwise shrFALSE +//! @param filename name of the file to write +//! @param data pointer to data to write +//! @param len number of data elements in data, -1 on error +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrWriteFilei( const char* filename, const int* data, unsigned int len, + bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Write a data file \filename containing unsigned integer data +//! @return shrTRUE if writing the file succeeded, otherwise shrFALSE +//! @param filename name of the file to write +//! @param data pointer to data to write +//! @param len number of data elements in data, -1 on error +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrWriteFileui( const char* filename, const unsigned int* data, + unsigned int len, bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Write a data file \filename containing char / byte data +//! @return shrTRUE if writing the file succeeded, otherwise shrFALSE +//! @param filename name of the file to write +//! @param data pointer to data to write +//! @param len number of data elements in data, -1 on error +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrWriteFileb( const char* filename, const char* data, unsigned int len, + bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Write a data file \filename containing unsigned char / byte data +//! @return shrTRUE if writing the file succeeded, otherwise shrFALSE +//! @param filename name of the file to write +//! @param data pointer to data to write +//! @param len number of data elements in data, -1 on error +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrWriteFileub( const char* filename, const unsigned char* data, + unsigned int len, bool verbose = false); + +//////////////////////////////////////////////////////////////////////////// +//! Load PPM image file (with unsigned char as data element type), padding +//! 4th component +//! @return shrTRUE if reading the file succeeded, otherwise shrFALSE +//! @param file name of the image file +//! @param OutData handle to the data read +//! @param w width of the image +//! @param h height of the image +//! +//! Note: If *OutData is NULL this function allocates buffer that must be freed by caller +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrLoadPPM4ub(const char* file, unsigned char** OutData, + unsigned int *w, unsigned int *h); + +//////////////////////////////////////////////////////////////////////////// +//! Save PPM image file (with unsigned char as data element type, padded to +//! 4 bytes) +//! @return shrTRUE if saving the file succeeded, otherwise shrFALSE +//! @param file name of the image file +//! @param data handle to the data read +//! @param w width of the image +//! @param h height of the image +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrSavePPM4ub( const char* file, unsigned char *data, + unsigned int w, unsigned int h); + +//////////////////////////////////////////////////////////////////////////////// +//! Save PGM image file (with unsigned char as data element type) +//! @return shrTRUE if saving the file succeeded, otherwise shrFALSE +//! @param file name of the image file +//! @param data handle to the data read +//! @param w width of the image +//! @param h height of the image +//////////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrSavePGMub( const char* file, unsigned char *data, + unsigned int w, unsigned int h); + +//////////////////////////////////////////////////////////////////////////// +//! Load PGM image file (with unsigned char as data element type) +//! @return shrTRUE if saving the file succeeded, otherwise shrFALSE +//! @param file name of the image file +//! @param data handle to the data read +//! @param w width of the image +//! @param h height of the image +//! @note If a NULL pointer is passed to this function and it is initialized +//! within shrUtils, then free() has to be used to deallocate the memory +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrLoadPGMub( const char* file, unsigned char** data, + unsigned int *w,unsigned int *h); + +//////////////////////////////////////////////////////////////////////////// +// Command line arguments: General notes +// * All command line arguments begin with '--' followed by the token; +// token and value are seperated by '='; example --samples=50 +// * Arrays have the form --model=[one.obj,two.obj,three.obj] +// (without whitespaces) +//////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////// +//! Check if command line argument \a flag-name is given +//! @return shrTRUE if command line argument \a flag_name has been given, +//! otherwise shrFALSE +//! @param argc argc as passed to main() +//! @param argv argv as passed to main() +//! @param flag_name name of command line flag +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrCheckCmdLineFlag( const int argc, const char** argv, + const char* flag_name); + +//////////////////////////////////////////////////////////////////////////// +//! Get the value of a command line argument of type int +//! @return shrTRUE if command line argument \a arg_name has been given and +//! is of the requested type, otherwise shrFALSE +//! @param argc argc as passed to main() +//! @param argv argv as passed to main() +//! @param arg_name name of the command line argument +//! @param val value of the command line argument +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrGetCmdLineArgumenti( const int argc, const char** argv, + const char* arg_name, int* val); + +//////////////////////////////////////////////////////////////////////////// +//! Get the value of a command line argument of type unsigned int +//! @return shrTRUE if command line argument \a arg_name has been given and +//! is of the requested type, otherwise shrFALSE +//! @param argc argc as passed to main() +//! @param argv argv as passed to main() +//! @param arg_name name of the command line argument +//! @param val value of the command line argument +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrGetCmdLineArgumentu( const int argc, const char** argv, + const char* arg_name, unsigned int* val); + +//////////////////////////////////////////////////////////////////////////// +//! Get the value of a command line argument of type float +//! @return shrTRUE if command line argument \a arg_name has been given and +//! is of the requested type, otherwise shrFALSE +//! @param argc argc as passed to main() +//! @param argv argv as passed to main() +//! @param arg_name name of the command line argument +//! @param val value of the command line argument +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrGetCmdLineArgumentf( const int argc, const char** argv, + const char* arg_name, float* val); + +//////////////////////////////////////////////////////////////////////////// +//! Get the value of a command line argument of type string +//! @return shrTRUE if command line argument \a arg_name has been given and +//! is of the requested type, otherwise shrFALSE +//! @param argc argc as passed to main() +//! @param argv argv as passed to main() +//! @param arg_name name of the command line argument +//! @param val value of the command line argument +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrGetCmdLineArgumentstr( const int argc, const char** argv, + const char* arg_name, char** val); + +//////////////////////////////////////////////////////////////////////////// +//! Get the value of a command line argument list those element are strings +//! @return shrTRUE if command line argument \a arg_name has been given and +//! is of the requested type, otherwise shrFALSE +//! @param argc argc as passed to main() +//! @param argv argv as passed to main() +//! @param arg_name name of the command line argument +//! @param val command line argument list +//! @param len length of the list / number of elements +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrGetCmdLineArgumentListstr( const int argc, const char** argv, + const char* arg_name, char** val, + unsigned int* len); + +//////////////////////////////////////////////////////////////////////////// +//! Compare two float arrays +//! @return shrTRUEif \a reference and \a data are identical, otherwise shrFALSE +//! @param reference handle to the reference data / gold image +//! @param data handle to the computed data +//! @param len number of elements in reference and data +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrComparef( const float* reference, const float* data, + const unsigned int len); + +//////////////////////////////////////////////////////////////////////////// +//! Compare two integer arrays +//! @return shrTRUEif \a reference and \a data are identical, otherwise shrFALSE +//! @param reference handle to the reference data / gold image +//! @param data handle to the computed data +//! @param len number of elements in reference and data +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrComparei( const int* reference, const int* data, + const unsigned int len ); + +//////////////////////////////////////////////////////////////////////////////// +//! Compare two unsigned integer arrays, with epsilon and threshold +//! @return shrTRUEif \a reference and \a data are identical, otherwise shrFALSE +//! @param reference handle to the reference data / gold image +//! @param data handle to the computed data +//! @param len number of elements in reference and data +//! @param threshold tolerance % # of comparison errors (0.15f = 15%) +//////////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrCompareuit( const unsigned int* reference, const unsigned int* data, + const unsigned int len, const float epsilon, const float threshold ); + +//////////////////////////////////////////////////////////////////////////// +//! Compare two unsigned char arrays +//! @return shrTRUEif \a reference and \a data are identical, otherwise shrFALSE +//! @param reference handle to the reference data / gold image +//! @param data handle to the computed data +//! @param len number of elements in reference and data +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrCompareub( const unsigned char* reference, const unsigned char* data, + const unsigned int len ); + +//////////////////////////////////////////////////////////////////////////////// +//! Compare two integers with a tolernance for # of byte errors +//! @return shrTRUEif \a reference and \a data are identical, otherwise shrFALSE +//! @param reference handle to the reference data / gold image +//! @param data handle to the computed data +//! @param len number of elements in reference and data +//! @param epsilon epsilon to use for the comparison +//! @param threshold tolerance % # of comparison errors (0.15f = 15%) +//////////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrCompareubt( const unsigned char* reference, const unsigned char* data, + const unsigned int len, const float epsilon, const float threshold ); + +//////////////////////////////////////////////////////////////////////////////// +//! Compare two integer arrays witha n epsilon tolerance for equality +//! @return shrTRUEif \a reference and \a data are identical, otherwise shrFALSE +//! @param reference handle to the reference data / gold image +//! @param data handle to the computed data +//! @param len number of elements in reference and data +//! @param epsilon epsilon to use for the comparison +//////////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrCompareube( const unsigned char* reference, const unsigned char* data, + const unsigned int len, const float epsilon ); + +//////////////////////////////////////////////////////////////////////////// +//! Compare two float arrays with an epsilon tolerance for equality +//! @return shrTRUEif \a reference and \a data are identical, otherwise shrFALSE +//! @param reference handle to the reference data / gold image +//! @param data handle to the computed data +//! @param len number of elements in reference and data +//! @param epsilon epsilon to use for the comparison +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrComparefe( const float* reference, const float* data, + const unsigned int len, const float epsilon ); + +//////////////////////////////////////////////////////////////////////////////// +//! Compare two float arrays with an epsilon tolerance for equality and a +//! threshold for # pixel errors +//! @return shrTRUEif \a reference and \a data are identical, otherwise shrFALSE +//! @param reference handle to the reference data / gold image +//! @param data handle to the computed data +//! @param len number of elements in reference and data +//! @param epsilon epsilon to use for the comparison +//////////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrComparefet( const float* reference, const float* data, + const unsigned int len, const float epsilon, const float threshold ); + +//////////////////////////////////////////////////////////////////////////// +//! Compare two float arrays using L2-norm with an epsilon tolerance for +//! equality +//! @return shrTRUEif \a reference and \a data are identical, otherwise shrFALSE +//! @param reference handle to the reference data / gold image +//! @param data handle to the computed data +//! @param len number of elements in reference and data +//! @param epsilon epsilon to use for the comparison +//////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrCompareL2fe( const float* reference, const float* data, + const unsigned int len, const float epsilon ); + +//////////////////////////////////////////////////////////////////////////////// +//! Compare two PPM image files with an epsilon tolerance for equality +//! @return shrTRUEif \a reference and \a data are identical, otherwise shrFALSE +//! @param src_file filename for the image to be compared +//! @param data filename for the reference data / gold image +//! @param epsilon epsilon to use for the comparison +//! @param threshold threshold of pixels that can still mismatch to pass (i.e. 0.15f = 15% must pass) +//! $param verboseErrors output details of image mismatch to std::err +//////////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrComparePPM( const char *src_file, const char *ref_file, const float epsilon, const float threshold); + +//////////////////////////////////////////////////////////////////////////////// +//! Compare two PGM image files with an epsilon tolerance for equality +//! @return shrTRUEif \a reference and \a data are identical, otherwise shrFALSE +//! @param src_file filename for the image to be compared +//! @param data filename for the reference data / gold image +//! @param epsilon epsilon to use for the comparison +//! @param threshold threshold of pixels that can still mismatch to pass (i.e. 0.15f = 15% must pass) +//! $param verboseErrors output details of image mismatch to std::err +//////////////////////////////////////////////////////////////////////////////// +extern "C" shrBOOL shrComparePGM( const char *src_file, const char *ref_file, const float epsilon, const float threshold); + +extern "C" unsigned char* shrLoadRawFile(const char* filename, size_t size); + +extern "C" size_t shrRoundUp(int group_size, int global_size); + +// companion inline function for error checking and exit on error WITH Cleanup Callback (if supplied) +// ********************************************************************* +inline void __shrCheckErrorEX(int iSample, int iReference, void (*pCleanup)(int), const char* cFile, const int iLine) +{ + if (iReference != iSample) + { + shrLogEx(LOGBOTH | ERRORMSG, iSample, "line %i , in file %s !!!\n\n" , iLine, cFile); + if (pCleanup != NULL) + { + pCleanup(EXIT_FAILURE); + } + else + { + shrLogEx(LOGBOTH | CLOSELOG, 0, "Exiting...\n"); + exit(EXIT_FAILURE); + } + } +} + +// Standardized Exit +// ********************************************************************* +inline void __shrExitEX(int argc, const char** argv, int iExitCode) +{ +#ifdef WIN32 + if (!shrCheckCmdLineFlag(argc, argv, "noprompt") && !shrCheckCmdLineFlag(argc, argv, "qatest")) +#else + if (shrCheckCmdLineFlag(argc, argv, "prompt") && !shrCheckCmdLineFlag(argc, argv, "qatest")) +#endif + { + shrLogEx(LOGBOTH | CLOSELOG, 0, "\nPress to Quit...\n"); + getchar(); + } + else + { + shrLogEx(LOGBOTH | CLOSELOG, 0, "%s Exiting...\n", argv[0]); + } + fflush(stderr); + exit(iExitCode); +} + +#endif \ No newline at end of file