Jump to content

Open Source Joystick FFB / DIY FFB Joystick


Recommended Posts

  • Replies 419
  • Created
  • Last Reply

Top Posters In This Topic

Hi

I am not quite sure what you mean aboutthe Inputs.

But for using RC-Servos:

The cheap ones are fairly weak.

The strong ones are quite expensive.

These servos are Position controlled internally.From extern you only give a PWM to Position the horn. And the internal circuit keepsit there.

For FFB and RC-Servos:

One would need a Pot / Hall Sensor for actualStick Position. And the Controller IC would send a corresponding PWM to theservos.

From that Point it would be almost thesame as my Test Setup.

Only that I handle the "Servocontrol" inside the Controller IC.

MetalGear_Honk

The threemost dangerous threads to Programmers:

  • Fresh air
  • Bright sun light
  • The horrifying screams of singingbirds

Link to comment
Share on other sites

It's just something I'd been thinking about and even then just abstract.:)

 

Control and feedback is a little different to what I'd thought so thanks for the heads up. I've been thinking of getting an Arduino or something for a project I'm working on. :thumbup:

 

Frag

Control is an illusion which usually shatters at the least expected moment.

Gazelle Mini-gun version is endorphins with rotors. See above.

 

Currently rolling with a Asus Z390 Prime, 9600K, 32GB RAM, SSD, 2080Ti and Windows 10Pro, Rift CV1. bu0836x and Scratch Built Pedals, Collective and Cyclic.

Link to comment
Share on other sites

Good evening everyone!

I searched many USB HID Library and sensor which is used in other joystick today.

I found that HOTAS Warthog using "melexis MLX90333 Hall Sensor".

It is 3D Hall Sensor and output 14bit, 2 axis.

It will be nice solution for this project.

 

And I found this library which is developing support of force feedback.

https://github.com/MHeironimus/ArduinoJoystickLibrary/blob/master/README.md

https://github.com/MHeironimus/ArduinoJoystickLibrary/issues/9

 

BTW

I thought that DC motor makes magnetic noise.

Are there problems for Hall Sensor?

 

@metalgear

I want to read many codes for my study.

Could you send me other projects source?

 

thanks you read my clumsy English.


Edited by crow0827
Link to comment
Share on other sites

Arigatou Crow for the links to HID stuff. :thumbup:

 

<edit>

 

here an overview of handling the HID interface from Atmel. :thumbup:

 

refers to AVR328


Edited by FragBum
<edit>

Control is an illusion which usually shatters at the least expected moment.

Gazelle Mini-gun version is endorphins with rotors. See above.

 

Currently rolling with a Asus Z390 Prime, 9600K, 32GB RAM, SSD, 2080Ti and Windows 10Pro, Rift CV1. bu0836x and Scratch Built Pedals, Collective and Cyclic.

Link to comment
Share on other sites

  • 2 weeks later...
Not a stick, but a Yoke using MSFFB2 motors and electronics

 

Interesting stuff. :thumbup:

Control is an illusion which usually shatters at the least expected moment.

Gazelle Mini-gun version is endorphins with rotors. See above.

 

Currently rolling with a Asus Z390 Prime, 9600K, 32GB RAM, SSD, 2080Ti and Windows 10Pro, Rift CV1. bu0836x and Scratch Built Pedals, Collective and Cyclic.

Link to comment
Share on other sites

FFB with sidewinder 2

 

Hello,

 

Regarding Sokols post the guy who have made the Yoke work on a stick solution. He is looking for a programmer who helps him to create a software provide options for the forces. He had established a homepage.

 

Regards Christian

 

http://vrflightsim.forumotion.com/

https://vrflightsim.wixsite.com/mysite/in-progress


Edited by avidflyer
Link to comment
Share on other sites

good evening!

I'm programing sensor part with MLX90333 for my FFB.

Has anyone done programing Arduino Micro & MLX90333?

MLX90333 communicate through SPI Communication function with Arduino.

it is hard about SPI TIMING…

Please teach me how can I get data from the IC.

 

from Datasheet(https://www.melexis.com/en/documents/documentation/datasheets/datasheet-mlx90333)

MLX90333 SPI COMM procedure is blow

1. Chip Select Pin - LOW

2. Start Byte Read - Read must be 0xFF

3. Axis X Data Read - 16bit angular

4. Axis Y Data Read - 16bit angular

5. Error Data Read - 16bit Error Code

6. SUM Read

7. Chip Select Pin - HIGH

 

I want to know if it needs delayMicroseconds() between each steps.

My code was already coded delay (). but any data doesn't appear.

if I delete delay() from code, maybe angular was outputted at Error Code timing(but it is "broken data") .

other data looks like random.

 

I think that this is problem of timing.

 

Does anyone know how to solve this problem?

please contact me.

 

thanks

Link to comment
Share on other sites

Hi

I am mostly guessing. as we didn't get all needed infos.

 

if you use the Arduino IDE than you should use the Library for the SPI.

if you are using any other IDE please read the SPI Specification again.

 

there is no Delay needed as it is carried with the CLK line. that will make your timings.

other than that we would need to see your code to get a better understanding what is not working properly.

 

 

MetalGear_Honk

The threemost dangerous threads to Programmers:

  • Fresh air
  • Bright sun light
  • The horrifying screams of singingbirds

Link to comment
Share on other sites

Ok

I haven't studied the full Datasheet for your MLX90333.

But you need to set _SS one time to high to begin with.

And the line

Datasheet Page 36:

To synchronize communication, the Masterdeactivates /SS high for at least t5 (1.5 ms)

 

"SPI.beginTransaction(settingMLX);"

Needs to go in the Setup.

 

 

Next Point is where/how have you connected the Clock line (CLK)?

What is the Value of this "SPI_CLOCK_DIV128" ?

Couldn’t find the declaration.

The Delays are not necessary as they areafter a Data Package was send.

The Timings refer to the Clock Timings.

 

 

I haven't looked up your Transfair Values but it is suspicios that X value and Y Values would have the same comand line.

 

 

MetalGear_Honk

The threemost dangerous threads to Programmers:

  • Fresh air
  • Bright sun light
  • The horrifying screams of singingbirds

Link to comment
Share on other sites

Set SS pin, HIGH in setup() - DONE

SPI.beginTransaction(settingMLX); is changed position to setup() - DONE

Remove delays - DONE

 

SPI_CLOCK_DIV128 = 0x03 is defined by SPI.h.

It is my coding miss. CORRECTED

0x03 is too low Freq, so it makes Freq 125[kHz].

Because I wanted to set Freq 125[kHz], it is same behavior.

 

I have connected CLK LINE as same as Datasheet Figure21, Page40.

Arduino Micro SCK Pin → R4 100[Ω] → MLX90333 SCLK Pin & R5 20[kΩ] → R5 connect to GND

 

"I haven't looked up your Transfair Values but it is suspicios that X value and Y Values would have the same comand line."

Are you talking about the value in SPI.transfer(value)?

I understood that MLX90333 only works as output.

and couldn't find any command to send.

So, I set the value to 0xff by referring to the Datasheet Figure17, page37.

 

thank you for advise, metalgear

 

P.S.

deleted source code, because post becomes too long.

I have solved this problem.

If anyone needs source code, please contact me.

I will correct error between wanted axis data and input data.

After of correction, I'll post or upload source code again.

Good Day!


Edited by crow0827
Link to comment
Share on other sites

I have adjusted input data.

Please watch this video.

 

 

There is room for improvement.

But I was satisfied for first success.

After hardware design, I will set sensor dead zone.

This time, it has vibration of value ±0.5°(if my calculation is correct).

I believe that the cause is holding a magnet with hand :).

If magnetic noise of Motor is low, It will be good solution for this project!

 

Until today, I had never thought of flying an airplane with a magnet instead of a flight stick! lol.

 

Thanks for reading and watching video.

Good Day!


Edited by crow0827
Link to comment
Share on other sites

Hello Metalgear.

I have questions about FFB code "Joystick.c".

How does OCR4X work?

from 32u4 datasheet, it compares time n and input value.

Is it prototype for PWM?

 

How does it work?

merk→I couldn't find what purpose of PORTB5.

alloff→while FFB are working, always alloff = 1.

 

How did you determine the value?

example1: condition(128-((posmemox-XAchse)*5),128-((posmemoy-YAchse)*5),i); 's "5"

example2: float direction = (EffectSetting.directionX*360/255)*0.01745; 's "0.01745"

 

I'm not good programmer, sorry for immature.

 

thanks


Edited by crow0827
Link to comment
Share on other sites

Hi

OCR4x is the Value for the DWM. It determinesthe frequency.

merk is the short form for Merker (germenfor Marker)

I use it for testing. Mostly to find outif some Triggers are met.

The bit "allof" is used if noeffect is set. Mostly as a failsafe. Of when the Joystick is used without FFB.

Example 1: is mostly a place holder as forinteria is not programmed properly but I do not want to get Errors when I getInteria effects

Example 2: is to Change digital FFBdirection (254 angles) to rad (360 degree)

MetalGear_Honk

The threemost dangerous threads to Programmers:

  • Fresh air
  • Bright sun light
  • The horrifying screams of singingbirds

Link to comment
Share on other sites

Hey all,

 

Wow, I just finally read through this entire thread. Pretty excited to see that others have been wrestling with the same challenges I've had for the past year or so.

 

I'm currently part of a maker-space that includes some pretty phenomenal equipment, which includes some commercial grade 3D printers that can print in all kinds of material at insane resolutions. It's not cheap to print parts in these things, but I am certainly willing to get something printed to help you guys out.

 

For myself, I'm building a helicopter sim and am interested in using FFB to simulate Force Trim Release.

 

Let me know if I can help you guys out.

 

Slim

Link to comment
Share on other sites

Wow, I just finally read through this entire thread. Pretty excited to see that others have been wrestling with the same challenges I've had for the past year or so.

Yeah, interesting reading here. :)

 

Currently, I'm not flying that much, because I enjoy my OSW so much (thus more driving).

Pretty good proof that DIY stuff can be very awesome.

(But obviously doesn't leave a lot of time for other gaming stuff.)

 

I plan to get more into DCS & Co next year and then hopefully dig into a DIY FFB project.:thumbup:

Link to comment
Share on other sites

Hi

 

I have a small conversation with "VR FlightSim" his Work and homepage was mentioned some posts up.

 

We are thinking that it is interesting toknow for all. And maybe some there are some more thinks to add from the rest ofthe community.

 

So here it goes:

Hi mate

 

I'm Jay (VR FlightSim) the guy behind 3D Printed FFB Yoke as it appearedrecently in your forum.

You are exactly the king of genius I've been looking for last couple of months.I didn't know about your project until someone pointed me towards yourdirection.

I love what you're doing as I'm hopelessly seeking people to achieve somethingvery similar and I would love to join in for future development.

I also love the idea of open source platform that everybody can customize forindividual builds. I started few projects based on MSFFB2 stick but I know thatwe will have to replace this technology eventually so I was shouting out toevery possible forum (except ED) to find people willing to help.

The goal is to program Arduino (or any other dev. board) to behave like an FFBHID (exactly like you did) with additional program to customize and tuneindividual forces (something like FS force).

Ideally we would have three axis available so the system would be able tohandle full set of controls. With such elegant setup people could manufactureany kind of controller and implement FFB really easy.

Look at the driving sims.. They have it all worked out and it's great shamethat flight simmers are somehow out of the game.

Are you focused on DCS mainly or do you think that your version could servesuch purpose? (general platform to build on)

Would it be possible to write win program/driver to interface the board andtune the forces with?

 

I Feel free to check out my web and forum

 

https://vrflightsim.wixsite.com/mysite

 

http://vrflightsim.forumotion.com/

 

 

Looking forward to your answer

Regards Jay

 

 

 

Hi

I for myself fly several Sims. MostlyMilitary (Rof, IL2, DCS) but also FSX ordovetail flight Simulator.

 

My Version of the "Open sourceFFB" is mainly to build a HID Joystickwith FFB Support.

That will be supported by most Flight Simsas it is now.

Adding a third axis is not possible forthe ATMega. As it is stretch alreadywith the two axis. It would need astronger Controller (32bit Cortex) to addmore Features. And as I don't haveany Cortex CPUs I am not planning in usingone.

as for the Arduino: I use a pro micro butit cannot be programmed using theArduino GUI as I Need all the power thissmall Controller has. Including theBootloader. So you would need to program itusing an ISP Programmer. What leadsto your last question. Using a Windows appto Program Features. it is notpossible as the Controller has not enough ram tohold a Bootloader or othercommunications to get data nor does it hasenough Rom to store such Info’s.

 

For the universal use of this Project: Ithink it is possible to use it on aJock similar as you use the FFB2 now. Butwe are talking about some Years bevorthis is complete and stable.

 

MetalGear_Honk

 

 

 

 

Well that's quite bad news then, I really want to pull thisthrough but running out of options.
RAPGeMjFAwwSaU8Zgkc5dwXH2OZ5BXcIExskghZFAQTo6AQBAh1DFoIGNvP18mC7l6+LgX5NyCFbmG4dih4H9ViYw8Aaw2TbJIihcUMQCRkCKjgwhkxZhWZA6CgRlAHOjAZ3cuGZOXMXkhROygiK8CAOBQh47py6kwSoiRFsoA1KEEPNhzUIBAhAIOHDiREt7PwiZIQLDzITSpSYEOYNGCtjvhyqdGUDlBdCF3agCfJpkp4FHC6EECEixAUOkuwKLhQIADs=

Would you consider to investigate possibilities of STM32F4 Discovery forexample?

I mean there are chances that project like this could get some funding intobeginning. Having such platform would be great success as it would be reallythe only one available as an open source flightsim FFB solution.

I have read all 17 pages of the forum last night and I think there's nobodymore suitable for the job than you areMm4RomNG3mclRYMhSWRxReELLWHFkfw4AMQQPjQwxFQhAGHIUsN1MYdaJxRhhh0zFFIGxmWOFRAADs=

I'm not able to do programming my self but as you can see from my project I amquite good with mechanics and will have full workshop at my disposal soon.

I work with 3D software, own 3D printed and small CNC milling machine. Thereare many projects I've done for home cockpits but I think is't about time webring descent FFB controls back to life.

I mean yeah, there are some high tech toys you can buy but who the hell canafford those? Another big companies or entertaining vendors?oI+cRBAaUPPnAMoitQxhNks6hMA6AbEAA7

As you can tell I'm fed up with this and having spend so much time and money onmy own effort, it too late to give up nowhttps://forums.eagle.ru/data:image/png;base64,R0lGODlhMgAfAPcKAAAAAEhISEAUEHFAQP/mIEA0EObq6lVACIlQUP/iHP////rWDPraDPbKAP/mHPK+AP/aEPK2AO6qAJ1pDPLCAPbOAO6yAPraEOadAPLGAPrSCP/iGP/eGJEEBPK6AFlACG1MBPrWCM6JAHlVIOqhAO6uAPoEBP/aFPrOAMKJAOalAN6VAPbCAKVxBJlpBK59ALp1AKVpAJVhBOKRAKVpBG1IBMqFAOaZAKVtAP/eFO62AEwsCHFQBK6FAOKVAN6uAPbGAM6FAN62AM6NAJVpDP/iIN6yANKNAJF1QPbOBGVIBOquAPbKCOqqAOKhANqRAKV9FJVpELZ5AH1lLIllENqlAKFxFOq6AL59ALJ1AM6dAL6JBJlxEAgICPLKBJ19BMKVAAQEBH1hLOahAIlhEIFpLJFlENqVAJl1EBgYGLqZHDAwMCgoHOrSIERAMPbSDDw8POa6AI1paYlMTBwcFFBQUPraFBAMCERERCwsLCQkJGVlZWlpaVVQTBAQDMqqGEQ0EKWNFObKaUQ8EKWVGObGaYlZWfrSBDQwJKGFhe7CBPrOBNahAIFlOKV9EBQUFK6RFDg4OEhAQObOIOrOILKZcery6uK+ENahCAwMDERALPbKBN6qANadAFlMTEg8JOrOHObCDExEJIVMTGU4OJl1CGlAQPraHEAsLPrWHMaFAMaNAOaVAF1EBKFtCL6RAJltQH1VJIldCLp5AJVlBIVZBJFtDOK2AG1ISM6dUL6ZBK6FWcKRAMJ9AJ19YX1ISHlpWXlQTJFhBHVQUG1AQIllBIFlGGlVSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/iREZXNpZ24gYnkgQWl3YW4gKHd3dy5rb2xvYm9rLndyZy5ydSkAIfkECWQAyAAsAAAAADIAHwAACP4AkQkcSLCgwYMIEypcyLChw4cQI0qcSLFhgIsYK1YcwBGARwAcB2iEGGCAgZMDPJpEGWAkwwAIVhoIKZNjS5cIAwCIeXKmyp4db+IsqHMnTY8xOSLwKHSowKJIESz9KHUqU6cDoXoExPWj149Nh0INAEiBWUBkuV4Ei1Ug2LJmz8YFRAFqW2RMF8BVwJVvWUANLBS9CyCAkAt7uSrm2yDCEJ2EA2S4kCAxAcV2Gq+A3LYwhQUJLnMlQJqAnQuBNwOI/EMDhyKlY9tZQEFCEM5YC/doQBl27ASZI5Cggdvpah4PeHMITSDBckAPJPgAgZcwsgMvkmu4YEcx9BIYaEocqN5Z4IcUESg0WN+AQgQJGGB8cGtd4AEXKixEiGBBAokVMoxHX3kDHQBCCyJgcIMNNIAg4IC5GXTAhBQatNpdGGao4YYcdphhQAAh+QQJCgDIACwQAAQAFQAWAAAI/ACRCRyILIDBgwEIEhzAcIBBAA0HAABgUOEAAxgZQsRoQOPEigIvZmzI0eNEiiFLShTZUeLJj8gQRJwokyGClycTBkDA8yXPmzhzBpgIqGjQoxSHAlLAFFCAok6HBlXKtOrSpkWkvqTadGlRBYAI2NH6EcBVsFC9ih27leLZsFAJrCU7NACFuHLzir1Al+IPDRyK6M1rZwFZgQF6NLiQQLDeBHYaaE0okMeDxRwSyE0AKEGDBxJOEjzw4rKGtAs+l8BAA4BCZB9SRKDQoHYDChEkYIDxwbVCAAdcqLAQIYIFCSRWyDggUPRoEC1EYLhhgwYI5q9fH9jOPTuygAAh+QQJCgDIACwQAAQAFQAWAAAI/gCRCRyILIDBgwEIEhzAcIBBAA0HAABgUOEAAxgZQsRoQOPEigIvZmzI0eNEiiFLShTZUeLJj8gQRJwokyGClycTBkDA8yXPmzhzBpgIqGjQoxSHAlLAFFCAok6HBlXKtOrSpkWkvqTadGlRBYAI2NH6EcBVsFC9ih27leLZsFAJrCU7NACFuHLzir1Al+IPDRyK6M1rZwFZgQF6NLiQQLDeBHYaaE0okMeDxRwSyE0AKEGDBxJOEjzw4rKGtAs+l8BAA4BCZB9SRKDQoHYDChEkYIDxwbVCAAdcqLAQIYIFCSRWyDgg0HdzgQdAtBCB4YYNGiCYPx/oHNmB7+B/AwsMCAAh+QQJZADIACwQAAQAFQAWAAAI/gCRCRyILIDBgwEIEhzAcIBBAA0HAABgUOEAAxgZQsRoQOPEigIvZmzI0eNEiiFLShTZUeLJj8gQRJwokyGClycTBkDA8yXPmzhzBpgIqGjQoxSHAlLAFFCAok6HBlXKtOrSpkWkvqTadGlRBYAI2NH6EcBVsFC9ih27leLZsFAJrCU7NACFuHLzir1Al+IPDRyK6M1rZwFZgQF6NLiQQLDeBHYaaE0okMeDxRwSyE0AKEGDBxJOEjzw4rKGtAs+l8BAA4BCZB9SRKDQoHYDChEkYIDxwbVCAAdcqLAQIYIFCSRWyDiAzDdB1wdAtBCB4YYNGiCYN3/t/ID3788HAgYEACH5BAkeAMgALBAABQAVABcAAAj+AJEJHIgsgMGDAQgqHGgQgMOHAAwuRDag4oCHFi86lDhwgIGPFQF4BKlxY8ePBjKiDAkxIcWVF0emLGkyAIKMDm9WRADxYUMEQCEC5dlzYwCfCBEWjejTToIERaIm0NDgaE+rATQ8LUKga5EECzZZ9RlRF6CzXQmcTXBBQ4SxTAMAcloEkNquczU8gHtUrtO0aRPY0cs3YoYLCbwGbusBrsAAtxZABUyA7SYLY122epXEDg0BNLyCfdAky0OCxShoEMC6Mgc7QCzcqIUMgMIDvCiwntu2QQQSsw7UXgig02caDRo8sEBChPDhCgEcWFVCRwQLTTBgeQ6doO0DtFQO3bjRSxj37hMPqD+/MCAAIfkECQ8AyAAsEAAFABUAFgAACP4AkQkciCyAwYMBCCocaBCAw4cADC5ENqDigIcWLzqUOHCAgY8VAXgEqXFjx48GMqIMCTEhxZUXR6YsaTIAgowOb1ZEAPFhQwRAIQLl2XNjAJ8IERaN6JNDgiIEokYtcrRn1QALEkiFKtVOVZ8RhQAaK5UsATteW0YEdOEpIAJv4Z5NCzYAoKxTuUa1c+Er0wA/NHDQK/XsAr8CA/RocIGGABqFE9hp8NUlMh4PGgjYHDWB0wYPJDwkeODFg82A0F5YALoEBhoAFn5I4ZhGg9sUIkjAAONDbIUADrhQYSFCBAsSSKyQcQDZb4KxD4BoIQLDDRs0QDR3vvD5ge/goQMPDAgAIfkEBVAAyAAsEAAEABUAFgAACP4AkQkciCyAwYMBCBIcwHCAQQANBwAAYFDhAAMYGULEaEDjxIoCL2ZsyNHjRIohS0oU2VHiyY/IEEScKJMhgpcnEwZAwPMlz5s4cwaYCKho0KMUhwJSwBRQgKJOhwZVyrTq0qYEpL6k2nRpUQWACCTQ+hHAVbBQvYq1Q3boU6sEoBJY25biD7lz84q9UDcAGC8XEhTROzcB35cCA6C5ogFQggRxCRRJwGGB1oQCy2ih0JiDY8p2LjDRcZLgAS5VKABqfGGBhiQUdKgQAeCAwgNQAOmgAAQQEAoRSmAQYQWAQmS1qaRwssSChSZOzmAhc8C4QuMHpkSRMuSJiCxRpg3Ytk6Q/IHz6G0LJB8QACH5BAkKAMgALBAABAAWABYAAAg7AJEJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNqpEgAEEVAEjw+dIUsJCCRDWUJBNQxokeWKF0KDAgAIfkECQoAyAAsEAAEABoAFgAACP4AkQkciCyAwYMBCCokOKDhAIMAHA4AAMDgQoYGMjaMmNHARooWLw7oKJHkRIogRZrkqPEkyooLEUikKLMhgpcoEyoMgKDny543cebcSRGQUaFIYRIMAACQgqeAAhiNylSozoFNn2p1CpVA1ZdXBWaF6tSoAkAEEnxNSXDs2all09pZGxZZRa5nCUwlIJeuwoo/9vIdnPaC37YBwHi5kKAIYb4JDL+8GADNFQ2AEiTQS6BIAg4LviacSrCMFgqYOWT+bOcCEx0okaHlC2jgAS5VKADCfGGBhiQUdKgQAeAAIAm0JdQWeAAKIB0UgAACQiFCCQwirACQjVy5UawHqDGkcLLEgoUmTs5gIXOgqXLOy8UiOzAlipQhT0RkiTLlgF3ZaAXYlm0HFGggVgPVtlxAACH5BAkoAMgALBAABAAdABYAAAj+AJEJHIgsgMGDAQgqXIhsgMMBBgE8HAAAgEGGCwcY2OhQ4kYDHStexChQI8eHH0NWtEiyYUqKJkFSXCmSJIKJFW86REBzZUKMARAIpSmUZ0+fQI8qPfpzYQCfCBEqbarQJ4cERQho3fq0J1WCIt8AGruVbIKuSBlaNAIIKwFAb7W2tYOWpdoAcdpm3bo1AV2aTQUIGGjxh4arBPb2vVD3p4ALggdbBOPlglu+BBIwpilQAAHBFyAXRHNFQ9sEcYsk4LAArWOtkAcLLKOFgmkOpznYucBEx8qBnmGLRnaASxUKgExfWKAhCQUdKkQAOEDwcWyCB6AA0kEBCCAgFCI5lMAgwgqAhaBlC5xOJYWTJRYsNHFyBguZA+cZql9PfEoUKUM8IUIWUUxBXX4t8SfQAQw2SJ2CJAUEACH5BAkeAMgALBAABAAeABYAAAj+AJEJHIgsgMGDAQgqXChwgMMBBgE8HAAAgEGGDAcY2OhQ4kYDHStexDhQI8eHH0NWtEiyYUqKJkFSXCmyJYKJFW86REBzZUKSARAIpSmUZ0+fQI8qPfqTYQCfCBEqbbrQJ4cERQho3fq0J1UBAgaKfAOo7FazCboiFSjgAtiwFo0AwkoAUF2tc+2oZYlMAAGwF9xajDM369atCfTS/OmXgFu4AX5ouErAMOILexlvDSzAIhgvF+geJpAAM02CbR8LDIDmioa5Ce4WScBhgVqqfduGFVhGC4XXHGBzsHOBiY6VGHcLPMClCgVAry8s0JCEgg4VIgAcaEnwABRAOig7AAEEhEKEEhhEWAHAnaB2KimcLLFgoYmTM1jIHGDfXiD7A1NEIcUQT4iQRRRTbMdffwse4OCD2/nXXkAAIfkECQoAyAAsEAAEABUAGQAACP4AkQkciCyAwYMBCBIcwHCAQQANBwAAYFDhAAMYGULEaEDjxIoCL2ZsyNHjRIohS0oU2VHiyY/IEEScKJMhgpcnEwZAwPMlz5s4cwYISjTow48IERId+pFDgiIEokpl+pJpgDeAskrVmoDqR4pGAD0lAIhsVLF2vA4NEEcsVKlSE6StSvGHBqcE3sa9oJYiGC8XxsIlkIDvS4EB0FzRIDaB2SIJOCygmlBgGS0UGHNozMHOBSY6ThI8wKUKBUCMLyzQkISCDhUiABxQeAAKIB0UgAACQiFCVkBWAChEJptKCidLLFhoUvascIXCD0yJImXIE0ASzkoANPw5sgPgDxZgJ7A96/Dz2MuqP89e63r27ZFxJxgQACH5BAkKAMgALA8ABAAWABYAAAj+AJEJHCgwgMGDAQgqHMBwgEEADQcAAGBQIbIBBjIyhJjRwMaJFQdi1Niw48eJFEWalDjSo0SUIAUiiDhxJkMEMFEmRBYAgU+YPnHm1MlzqNGhCQNM3MEU4UGjCZcWmbqDgNWrSnMmPMD1wNQiVQkAAkQgQVadXossKFLi6wGyYhPYOZuya9oiFA5cLTsXZoC0a9sSyLs3wQW6W7t+JXzVMF2BgNsSJlskAYcFZ3cis8uVA6AElu1cYKIDpcIDXKpQAKQB0IUFGpJQ0KFCBIADFg9AAaSDAhBAQChEKIFBhBUAFpHdppLCyRILFpo4OYOFzAHkFpEfmBJFypAnIrINRJmCG7tC85y5DjQfEAAh+QQJCgDIACwQAAEAFQAZAAAI/gCRCRw48AAygwQTKjxwoEhDhAoXOpwIMSLBhwsOZNxhcYDHAQE0Ppy4I0DCAQZSejxQokjLlkV2AAhgUiBKlQMaFtnJUyaAmTZTGlhJgedOnz+BIvg44OcBClBjJk1qMgCCq1MZMpw6lSbXr2BnBqBKs2xZsGN/BuCQoAiBt3DTdlX7BpBduHcTyFU70wigtgQABX77187esQHi/HULF24Cw3MD/NDAlgBjxxcOzwTj5QLgxgQSZJ4qMACaKxr+JhhcJAGHBXJrIiujhUJqDqo52LnAREfSi1yqUACU+sICDUko6FAhAkDFg1AA6aAABBAQChFKYBBhBYBC51RSJThZYsFCEydnsJA54D2h9wNTokgZ8kRElihTDLYnuF+r/4H7BQQAIfkECQoAyAAsEAAEAB4AFgAACP4AkQkciCyAwYMBCCpcKHCAwwEGATwcAACAQYYMBxjY6FDiRgMdK17EOFAjx4cfQ1a0SLJhSoomQVJcKbIlgokVbzpEQHNlQpIBEAilKZRnT59Ajyo9+pNhAJ8IESptutAnhwRFCGjd+rQnVQECBop8A6jsVrMJuiIVKOAC2LAWjQDCSgBQXa1z7ahliUwAAbAX3FqMMzfr1q0J9NL86ZeAW7gBfmi4SsAw4gt7GW8NLMAiGC8X6B4mkAAzTYJtHwsMgOaKhrkJ7hZJwGGBWqp924YVWEYLhdccYHOwc4GJjpUYdws8wKUKBUCvLyzQkISCDhUiABxoSfAAFEA6KDsAAQSEQoQSGERYAcCdoHYqKZwssWChiZMzWMgcYN9eIPsDU0QhxRBPiJBFFFNsx19/Cx7g4IPb+ddeQAAh+QQJCgDIACwQAAQAFQAZAAAI/gCRCRyILIDBgwEIEhzAcIBBAA0HAABgUOEAAxgZQsRoQOPEigIvZmzI0eNEiiFLShTZUeLJj8gQRJwokyGClycTBkDA8yXPmzhzBghKNOjDjwgREh36kUOCIgSiSmX6kmmAN4CyStWagOpHikYAPSUAiGxUsXa8Dg0QRyxUqVITpK1K8YcGpwTexr2gliIYLxfGwiWQgO9LgQHQXNEgNoHZIgk4LKCaUGAZLRQYc2jMwc4FJjpOEjzApQoFQIwvLNCQhIIOFSIAHFB4AAogHRSAAAJCIUJWQFYAKEQmm0oKJ0ssWGhS9qxwhcIPTIkiZcgTQBLOSgA0/DmyA+APFmAnsD3r8PPYy6o/z17revbtkXEnGBAAIfkECQoAyAAsDQACABwAGgAACP4AkQkcSLAgwQkIDSKbIJChwocLHTacWDCAxYsBFEqcOKDjAIsAPA4AAMDiQIcbkQ0wwLJjSJYGXJI0uZCiwJUtPcKUSbLkxI04Y44MyrNnxpMDEXTcwRSA0o4Ieko9ajMAgh1Fsu5wiiCq1KlIBR4YeyBrka1f01IdWLbIgiIlzB7AmNanQbJti1A4QKAvgQBq72Z9G1cvX0CACCQADPYuWbN7ExMAlMAO45kK2y6Iu9dv38qX7RYEgHes588XQq8dWBKMlwsJipxWnFoqxABormignGAygSIJOCy4vLpgGS0UdnPgzcHOBSY6eoYteIBLFQqAdl9YoCEJBR0qRFKQnr7xABRAOigAAQSEQoQSGERYAYBUokTSVFI4WWLBQhMnZ2BBxgH01WQgRfQdMEUUUgzxhAhZRDHFAcgUaNNGFpY2FmvT2QSRRil9+BBCIQYEACH5BAkKAMgALA0AAgAgABkAAAj+AJEJHDih4MCDCAVOSJjQIEOGC5FFfDhxYICLGAMgjFjx4MIBIAdcBBByAAAAFz0qbIhsgIGXIEm+NBDzZEqVG1vOLLnT5EmbD1fqhGnSJdGfPzVSFIig5MmmIBEgTRo0YgAEWJFilTqValBkAbqK7ao0aFibGTOKLfswKYcERQjInXsWaVkBAhLafAOo71y/CeoCRSbgAt68A1EaAQSXACDHchnbEaxRAAG8FwwnDhCHcdy5cxNMtktYrmHEAlH+0PCWwOfQFyiXNq05dQAwXi40Bk0gQWykAwufRhgAzRUNjBNALpKAw4K6bDGjjlhGCwXkHJJzsHOBiY6fDBFnL4x4gEsVCoCQX1igIQkFHSpEADjwlaPAA1AA6aAABBAQChGUgIEIVgCAU06JHUBFCk4sYYEFTThxBhZkHGCgUB1JlBgyB0wRhRRDPCFCFlFMQd+F9kGU2kAHtOgifSsSVN9XNCYUEAAh+QQJCgDIACwNAAIAHAAaAAAI/gCRCRxIsCDBCQgNIpsgkKHChwsdNpxYMIDFiwEUSpw4oOMAiwA8DgAAwOJAhxuRDTDAsmNIlgZckjS5kKLAlS09wpRJsuTEjThjjgzKs2fGkwMRdNzBFIDSjgh6Sj1qMwCCHUWy7nCKIKrUqUgFHhh7IGuRrV/TUh1YtsiCIiXMHsCY1qdBsm2LUDhAoC+BAGrvZn0bVy9fQIAIJAAM9i5Zs3sTEwCUwA7jmQrbLoi712/fypftFgSAd6znzxdCrx1YEoyXCwmKnFacWirEAGiuaKCcYDKBIgk4LLi8umAZLRR2c+DNwc4FJjp6hi14gEsVCoB2X1igIQkFHSpEUpCevvEAFEA6KAABBIRChBIYRFgBgFSiRNJUUjhZYsFCEydnYEHGAfTVZCBF9B0wRRRSDPGECFlEMcUByBRo00YWljYWa9PZBJFGKX34EEIhBgQAIfkECQoAyAAsDQACACAAGQAACP4AkQkcOKHgwIMIBU5ImNAgQ4YLkUV8OHFggIsYAyCMWPHgwgEgB1wEEHIAAAAXPSpsiGyAgZcgSb40EPNkSpUbW84sudPkSZsPV+qEadIl0Z8/NVIUiKDkyaYgESBNGjRiAARYkWKVOpVqUGQBuortqjRoWJsZM4ot+zAphwRFCMidexZpWQECEtp8A6jvXL8J6gJFJuAC3rwDURoBBJcAIMdyGdsRrFEAAbwXDCcOEIdx3LlzE0y2S1iuYcQCUf7Q8JbA59AXKJc2rTl1ADBeLjQGTSBBbKQDC59GGADNFQ2ME0AukoDDgrpsMaOOWEYLBeQcknOwc4GJjp8MEWcvjHiASxUKgJBfWKAhCQUdKkQAOPCVo8ADUADpoAAEEBAKEZSAgQhWAIBTTokdQEUKTixhgQVNOHEGFmQcYKBQHUmUGDIHTBGFFEM8IUIWUUxB34X2QZTaQAe06CJ9KxJU31c0JhQQACH5BAkKAMgALA0AAgAcABoAAAj+AJEJHEiwIMEJCA0imyCQocKHCx02nFgwgMWLARRKnDig4wCLADwOAADA4kCHG5ENMMCyY0iWBlySNLmQosCVLT3ClEmy5MSNOGOODMqzZ8aTAxF03MEUgNKOCHpKPWozAIIdRbLucIogqtSpSAUeGHsga5GtX9NSHVi2yIIiJcwewJjWp0GybYtQOECgL4EAau9mfRtXL19AgAgkAAz2LlmzexMTAJTADuOZCtsuiLvXb9/Kl+0WBIB3rOfPF0KvHVgSjJcLCYqcVpxaKsQAaK5ooJxgMoEiCTgsuLy6YBktFHZz4M3BzgUmOnqGLXiASxUKgHZfWKAhCQUdKkRSkJ6+8QAUQDooAAEEhEKEEhhEWAGAVKJE0lRSOFliwUITJ2dgQcYB9NVkIEX0HTBFFFIM8YQIWUQxxQHIFGjTRhaWNhZr09kEkUYpffgQQiEGBAAh+QQJCgDIACwNAAIAIAAZAAAI/gCRCRw4oeDAgwgFTkiY0CBDhguRRXw4cWCAixgDIIxY8eDCASAHXAQQcgAAABc9KmyIbICBlyBJvjQQ82RKlRtbziy50+RJmw9X6oRp0iXRnz81DhQggKBABCVPQgWJAGnSpReYNo0YAIFXpF6rWr0qgADTC1ktjl07VmNZAlmbqrWZMeNatwTyopWLLCmHBEXyCiYQoK1AAXv59kX5BpBjwY8TFEaqFNlZxSiNAAJMAFDnvJvtTAZ6UHHfAHE2Bx6cN4FoykEFovyh4S+B1YITXBiNMihTlGC8XODMWjdv33sDlLqiYXOCz0UScFgwujJDARPyGtNCoTkH5xzsclxgouNn7AkXshM4YKsKBUDNLyzQkISCDhUiABw4zxS9gANQAKIDBUAAAgQFEZSAgQhWAIDTRnH1dQAVKTixhAUWNOHEGViQcYCDQnUk0UAOHjBFFFIM8YQIWUQxxX4gckSRbAMdYOON+9HoVFAixuZjQAAh+QQJCgDIACwKAAQAIQAXAAAI/gCRCRxIcGCAgwgDFFzIUOCAhwMOAoA4AACAgw0zDjDA8eFEjgY8WsSYseDGjhBBirR4sSTBkyErwlzJUqFLZAgoWsz5EAHLnzZdBkBA9CdRnz+B3gxgEZDTpFBrLgUASIFVQAGcYmUKNWhGqlbDVr1KgKtSl2CvVnWqABCBBGZHZhQgAFnatlrXvrUT1+tAugIICLg4ti0BrQT29l0o4MIFugQu/kCcuPLbC4sZB058EYyXCwmKWE6cAPNPho0vVBYQAM0VDXYSJKhcJAGHBWZt0iVI13FdZGW0UNBwgYNs23YuMNHBUmBjwM4f/0Z2gEsVCnkXaEhCQYcKEQAOVyAL3Pux84UHoHTSQQGIewoRSmAQYQWA88TSS4anksLJEgsWNOHEGViQcYB941Xm21fUTRGFFEM8IUIWUUwhHoLj+TYdQxge4OGH4gmE4XjP3WQiYwIFBAAh+QQJCgDIACwIAAQAJAAWAAAI/gCRCRxIsGCAgwgLKlzIUOCAhwAiAng4oKFFgwMMaBwQMePGABctBkDg0QDFkg9BhlQYAABJjSY7woSocuXAli5PRiT5EEHEmjZx7kTgUyLRoj9tChQaEZBTiVAlAg0pNAAgBVgBWXV6UKpSZFKvYs06FhAFoRcFCBj4c4FYBU7hXgXUwALOgWoJqhVAYC3YAEIuvHVKGG6DCENaChRwYS8yxo35rgUQIMOFBIMJELZzeIViyZDXqiVAenIACgsSaHZKmrSdC3U9A3hMOvLjCxdam/6hgUOR1sDtLKAgIcjn1rhFhxZIuUeDy7+BJ+AcgQQNxbdt387LHBmPB885aGB2Kr7BAwk+QIDFy9jv44KzD7wAr+GCHTuEH5TAQOPAer0WzYbMBylEQEEDCDZAQQQSYADDB90pJSAyB7igggURRGCBBCSsIIN/Edo0IYUgtCACBjfYQAMIIIa40ogCHSDjjArBOFBAACH5BAkKAMgALAgABQAkABYAAAj+AJEJHEiwYICDCAsqXMhQ4ICHACICeDigoUWDAwxoHBAx48YAFy0GQODRAMWSD0GGVBgAAEmNJjvChKhy5cCWLk9GJPkQQcSaNnHuROBTItGiP20KFBoRkFOJUCUCDSk0ACAFWAFZdXpQqlJkUq9izToWEAWhFwUIGPhzgVgFTuFeBdTAAs6BagmqFUBgLdgAQi68dUoYboMIQ1oKFHBhLzLGjfmuBRAAyIUEgwkQtnN4hWLJkNeqJUB6cgAKCxJodkqatJ0LdT0DeEw68uMLF1qb/qGBQ5HWwO0soCAhyOfWuEWHFki5R4PLv4En4ByBBA3Ft23fzsscGY8HzzlnqF5N94EEHyDA4mXs93HB2QdegNcg2OmCBg9KYKBxQL1ei7Mh80EKEVDQwIENUBCBBBjA8EF3SgWIzAEuqGBBBBFYIAEJK8jQH4Q2STghCC2IgMENNtAAwocgriSiQAfEKKNCLw4UEAAh+QQJCgDIACwIAAQAJAAWAAAI/gCRCRxIsGCAgwgLKlzIUOCAhwAiAng4oKFFgwMMaBwQMePGABctBkDg0QDFkg9BhlQYAABJjSY7woSocuXAli5PRiT5EEHEmjZx7kTgUyLRoj9tChQaEZBTiVAlAg0pNAAgBVgBWXV6UKpSZFKvYs06FhAFoRcFCBj4c4FYBU7hXgXUwALOgWoJqhVAYC3YAEIuvHVKGG6DCENaChRwYS8yxo35rgUQIMOFBIMJELZzeIViyZDXqiVAenIACgsSaHZKmrSdC3U9A3hMOvLjCxdam/6hgUOR1sDtLKAgIcjn1rhFhxZIuUeDy7+BJ+AcgQQNxbdt387LHBmPB885aGB2Kr7BAwk+QIDFy9jv44KzD7wAr+GCHTuEH5TAQOPAer0WzYbMBylEQEEDCDZAQQQSYADDB90pJSAyB7igggURRGCBBCSsIIN/Edo0IYUgtCACBjfYQAMIIIa40ogCHSDjjArBOFBAACH5BAkKAMgALAgABQAkABYAAAj+AJEJHEiwYICDCAsqXMhQ4ICHACICeDigoUWDAwxoHBAx48YAFy0GQODRAMWSD0GGVBgAAEmNJjvChKhy5cCWLk9GJPkQQcSaNnHuROBTItGiP20KFBoRkFOJUCUCDSk0ACAFWAFZdXpQqlJkUq9izToWEAWhFwUIGPhzgVgFTuFeBdTAAs6BagmqFUBgLdgAQi68dUoYboMIQ1oKFHBhLzLGjfmuBRAAyIUEgwkQtnN4hWLJkNeqJUB6cgAKCxJodkqatJ0LdT0DeEw68uMLF1qb/qGBQ5HWwO0soCAhyOfWuEWHFki5R4PLv4En4ByBBA3Ft23fzsscGY8HzzlnqF5N94EEHyDA4mXs93HB2QdegNcg2OmCBg9KYKBxQL1ei7Mh80EKEVDQwIENUBCBBBjA8EF3SgWIzAEuqGBBBBFYIAEJK8jQH4Q2STghCC2IgMENNtAAwocgriSiQAfEKKNCLw4UEAAh+QQJCgDIACwIAAQAJAAWAAAI/gCRCRxIsGCAgwgLKlzIUOCAhwAiAng4oKFFgwMMaBwQMePGABctBkDg0QDFkg9BhlQYAABJjSY7woSocuXAli5PRiT5EEHEmjZx7kTgUyLRoj9tChQaEZBTiVAlAg0pNAAgBVgBWXV6UKpSZFKvYs06FhAFoRcFCBj4c4FYBU7hXgXUwALOgWoJqhVAYC3YAEIuvHVKGG6DCENaChRwYS8yxo35rgUQIMOFBIMJELZzeIViyZDXqiVAenIACgsSaHZKmrSdC3U9A3hMOvLjCxdam/6hgUOR1sDtLKAgIcjn1rhFhxZIuUeDy7+BJ+AcgQQNxbdt387LHBmPB885aGB2Kr7BAwk+QIDFy9jv44KzD7wAr+GCHTuEH5TAQOPAer0WzYbMBylEQEEDCDZAQQQSYADDB90pJSAyB7igggURRGCBBCSsIIN/Edo0IYUgtCACBjfYQAMIIIa40ogCHSDjjArBOFBAACH5BAkKAMgALBAABAAUABcAAAj+AJEhE0CQoMCDAwsKOChggUOHAgJIDNDw4YKFFRUOAMARwACFEBtGHGCg5EaPJQ0MoHhRJAKSJgfITClTpEuYKjnirNkypEyZHF/WzMgSIgIEHQEcrXhRIoCCAABJTcoRqlOOAQAp2Aooq9SrAAJ0zLq1rFauFMQmDbDgrAKpb7UCamBBbVghF9xK3fu2QYQhagMAuZBAL4G9dvyuCExhQYLDUglIJmDnAt3FWH9o4FBksmc7CyhICBK4RwPCnT0nSByBBA21yHg8OM3hMeS5DyT4AIGMI7IDL2ZryCt1QYMHJTDQONAbgMAPKSJQaEC9AYUIEjDA+CDQt8ADLlQkWIgQwYIEEitkMO/u/OABEC1EYLhhgwaI9ewRfj/An7/+3gEBACH5BAkKAMgALBAAAwAUABcAAAj+AJEhE0CQoMCDAwsKOChggUOHAgJIDNDw4YKFFRUOAMARwACFEBtGHGCg5EaPJQ0MoHhRJAKSJgfITClTpEuYKjnirNkypEyZHF/WzMgSIgIEHQEcrXhRIoCCAABJTcoRqlOOAQAp2Aooq9SrAAJ0zLq1rFauFMQmDbDgrAKpb7UCamBBbVghF9xK3fu2QYQhagNkuJBAL4G9dvyuCExhQYLDUglIJmDnAt3FWH9o4FBksmc7CyhICBK4RwPCnT0nSByBBA21yHg8OM2hsNTaDR5I8AECGUdkB17M1nDBjp29D0pgoHHANwCBH1JEoNCgegMKESRggPFB4G+BB1wlqLAQIYIFCSRWyGju/fnBAyBaiMBwwwYNEOzbIwR/oH///b4FBAAh+QQJCgDIACwQAAQAFAAXAAAI/gCRIRNAkKDAgwMLCjgoYIFDhwICSAzQ8OGChRUVDgDAEcAAhRAbRhxgoORGjyUNDKB4USQCkiYHyEwpU6RLmCo54qzZMqRMmRxf1szIEiICBB0BHK14USKAggAASU3KEapTjgEAKdgKKKvUqwACdMy6taxWrhTEJg2w4KwCqW+1AmpgQW1YIRfcSt37tkGEIWoDALmQQC+BvXb8rghMYUGCw1IJSCZg5wLdxVh/aOBQZLJnOwsoSAgSuEcDwp09J0gcgQQNtch4PDjN4THkuQ8k+ACBjCOyAy9ma8grdUGDByUw0DjQG4DADykiUGhAvQGFCBIwwPgg0LfAAy5UJFiIEMGCBBIrZDDv7vzgARAtRGC4YYMGiPXsEX4/wJ+//t4BAQAh+QQJCgDIACwQAAMAFAAXAAAI/gCRIRNAkKDAgwMLCjgoYIFDhwICSAzQ8OGChRUVDgDAEcAAhRAbRhxgoORGjyUNDKB4USQCkiYHyEwpU6RLmCo54qzZMqRMmRxf1szIEiICBB0BHK14USKAggAASU3KEapTjgEAKdgKKKvUqwACdMy6taxWrhTEJg2w4KwCqW+1AmpgQW1YIRfcSt37tkGEIWoDZLiQQC+BvXb8rghMYUGCw1IJSCZg5wLdxVh/aOBQZLJnOwsoSAgSuEcDwp09J0gcgQQNtch4PDjNobDU2g0eSPABAhlHZAdezNZwwY6dvQ9KYKBxwDcAgR9SRKDQoHoDChEkYIDxQeBvgQdcJaiwECGCBQkkVsho7v35wQMgWojAcMMGDRDs2yMEf6B///2+BQQAIfkECQoAyAAsEAAFABQAFgAACP4AkQkciCyAwYMEEw40CKChQwABFAoM8LCiw4gEBWjUaHGjxoECFogUKeBhyJELBCA76XHAwwEeSYYsOcCATZcAat4EMHMmAp0GBggFKrRnyp82gwIKQBRmSpYChg5QAOhnUZY8RwpAgAAQIKpcT6ZsGGCjgrNe01LdSBFihgsJvqIlkNZOgwgr2gagsCABXa8EAhOwc6GBhbxkf2jgUESwYzsLKEgIordHA7iNHSewG4EEjbbIeDy4zMHvX0ANHkjwAQJZQ2QHXozWcCHtgtQlMNA44BqAwA8pIlBoQLwBhQgSMMD4IPC1wAMuVFiIEMGCBBIrZPBu7nvgARAtRBBguGGDBojt3BUeWM9eIYCAACH5BAkKAMgALBAABAAUABYAAAj+AJEJHIgsgMGDBBMONAigoUMAARQKDPCwosOIBAVo1Ghxo8aBAhaIFCngYciRCwQgO+lxwMMBHkmGLDnAgE2XAGreBDBzJgKdBgYIBSq0Z8qfNoMCCkAUZkqWAoYOUADoZ1GWPEcKQIAAECCqXE+mbBhgo4KzXtNS3UgRYoYLCb6iJZDWToMIK9oGoLAgAV2vBAITsHOhgYW8ZH9o4FBEsGM7CyhICKK3RwO4jR0nsBuBBI22yHg8uMwhrtfSDR5I8AECWUNkB16M1nDBjp20D0pgoHHANQCBH1JEoNCgeAMKESRggPFB4GuBB1yosBAhggUJJFbI6O3898ADIFoSiMBwwwYNENy7KzzAvr1CAAEBACH5BAkKAMgALBAABQAUABYAAAjvAJEJHIgsgMGDBBMONAigoUMAARQKDPCwosOIBCla3Iix4MaPECeC5OhRgEmTFk+iNChggUuXAh62fLlAQICZKgccDDBAJcyWNgcYGDqAAAGhRG/WBIoAqYEBUJ1CBcpUqlGpPZf+jFqUQNOpOAHMrIkAgVGjZcfGhHiyyNm3dpbabBigR4MLCdy+TWCnQQQSNDQi4/HgLocERgEpbvBAgg8QyBoiO/CisIYLigEtYFwCA40DkQEI/JAiAoUGqBtQiCABA4wPAiULPOBChYUIESxIILFCBujYogceANFCBIYbNmiA+A1c4YHn0BUCCAgAIfkECQoAyAAsEAAEABQAFgAACPAAkQkciCyAwYMEEw40CKChQwABFAoM8LCiw4gEKVrciLHgxo8QJ4Lk6FGASZMWT6I0KGCBS5cCHrZ8uUBAgJkqBxwMMEAlzJY2BxgYOoAAAaFEb9YEigCpgQFQnUIFylSqUak9l/6MWpRA06k4AcysiQCBUaNlx8aEeLLI2bd2ltpsGKBHgwsJ3L5NYKdBBBI0NCLj8eAuhwSAEh9u8ECCDxDIGiI78KKwhgt27CQG9KAEBhoHIgMQ+CFFBAoNUjegEEECBhgfBEoWeMCFCgsRIliQQGKFjNCyRw88AKKFCAw3bNAAATy4wgPQoysEEBAAIfkECQoAyAAsEAAFABQAFgAACO8AkQkciCyAwYMEEw40CKChQwABFAoM8LCiw4gEKVrciLHgxo8QJ4Lk6FGASZMWT6I0KGCBS5cCHrZ8uUBAgJkqBxwMMEAlzJY2BxgYOoAAAaFEb9YEigCpgQFQnUIFylSqUak9l/6MWpRA06k4AcysiQCBUaNlx8aEeLLI2bd2ltpsGKBHgwsJ3L5NYKdBBBI0NCLj8eAuhwRGASlu8ECCDxDIGiI78KKwhguKAS1gXAIDjQORAQj8kCIChQaoG1CIIAEDjA8CJQs84EKFhQgRLEggsUIG6NiiBx4A0UIEhhs2aID4DVzhgefQFQIICAAh+QQJCgDIACwQAAQAFAAWAAAI8ACRCRyILIDBgwQTDjQIoKFDAAEUCgzwsKLDiAQpWtyIseDGjxAnguToUYBJkxZPojQoYIFLlwIetny5QECAmSoHHAwwQCXMljYHGBg6gAABoURv1gSKAKmBAVCdQgXKVKpRqT2X/oxalEDTqTgBzKyJAIFRo2XHxoR4ssjZt3aW2mwYoEeDCwncvk1gp0EEEjQ0IuPx4C6HBIASH27wQIIPEMgaIjvworCGC3bsJAb0oAQGGgciAxD4IUUECg1SN6AQQQIGGB8EShZ4wIUKCxEiWJBAYoWM0LJHDzwAooUIDDds0AABPLjCA9CjKwQQEAAh+QQJCgDIACwQAAUAFAAWAAAI7wCRCRyILIDBgwQTDjQIoKFDAAEUCgzwsKLDiAQpWtyIseDGjxAnguToUYBJkxZPojQoYIFLlwIetny5QECAmSoHHAwwQCXMljYHGBg6gAABoURv1gSKAKmBAVCdQgXKVKpRqT2X/oxalEDTqTgBzKyJAIFRo2XHxoR4ssjZt3aW2mwYoEeDCwncvk1gp0EEEjQ0IuPx4C6HBEYBKW7wQIIPEMgaIjvworCGC4oBLWBcAgONA5EBCPyQIgKFBqgbUIggAQOMDwIlCzzgQoWFCBEsSCCxQgbo2KIHHgDRQgSGGzZogPgNXOGB59AVAggIACH5BAkKAMgALBAABAAUABYAAAjwAJEJHIgsgMGDBBMONAigoUMAARQKDPCwosOIBCla3Iix4MaPECeC5OhRgEmTFk+iNChggUuXAh62fLlAQICZKgccDDBAJcyWNgcYGDqAAAGhRG/WBIoAqYEBUJ1CBcpUqlGpPZf+jFqUQNOpOAHMrIkAgVGjZcfGhHiyyNm3dpbabBigR4MLCdy+TWCnQQQSNDQi4/HgLocEgBIfbvBAgg8QyBoiO/CisIYLduwkBvSgBAYaByIDEPghRQQKDVI3oBBBAgYYHwRKFnjAhQoLESJYkEBihYzQskcPPACihQgMN2zQAAE8uMID0KMrBBAQACH5BAkKAMgALAgABQAkABYAAAj+AJEJHEiwYICDCAsqXMhQ4EEAECMCCNCwokGJGCNStNgwQMaPEzku9Ajy40aRA0mWxHgSpcqVLFE6lIigJk2bGmUiU4lggE8EB3v+zCkzYk8DSAcQIDAAqYEBCCJaFCBgIMQAR5P6bKqV5ECqBKkKIFAV2UQhWZ8u5fp0wBCPAgVcEItM7tyxVSdmuCDU59K+CCKsgIvXblWqS8maDUBhQYKaCBITgNzAwmAAdZferXvhQuK8AX5o4FBEcmI7CyhICEI4cefDhgVO7NHgQoLSkhPYaRCBBA24nDdzBisbGY8HtTkkWAqoeYMHEnyAMPtVbtm6BTEfeIFcw4XmgBZMPC+BgcYB6mErYkb2IUUECg3iN6AQQQIGGB+KFx14wIUKCxFEYIEEJKwgw3n6obSeQAeA0IIIGNxgAw0gIJigSAvyd8CGGyqUIUEBAQAh+QQJCgDIACwDAAQALgAWAAAI/gCRCRxIsGDBAAgTGlzIsCFDhAAiSgQQwKHFi8gCTNwosSLGjwM1chzpEeRFkSNJmjyZMmXJlQtRtuT4EiZBmQhyTsyJYGJNmwJRIhhAFAHCoUU7AjUocaiBpwMIEBjw1MCAnhGXFowYwClUolS/ivwooKzZswIpCvFqVWpYqwOGaBR4tq4AZAKk6t1L4C7FDBeQEpUqGEGEFXPz8t17ty4FCg+k+g1AYUECnnt5NrCAGABeqQ8e1104GhnFHxo4FFlMwM4CChKCzMWLFibFHg0uJFi9N4GdBhFI0JitNS0yHg9yc0gAqPnyBg8k+ABhuvhAzwdeJNdwwY6d5oAeR5TAQONAdevnP6SIQKGB+wYUIkjAAOODcfSeBR5wocJChAgWSEDCCjKYd591+ekHQgsiYHCDDTSAYOCBxSU40AEYZsgURgEBACH5BAkKAMgALAMABQAuABYAAAj+AJEJHEiwYMEACBMaXMiwIUOEACJKBBDAocWLyAJM3CixIsaPAzVyHOkR5EWRI0maPJkyZcmVC1G25PgSJkGZCHJOzIlgYk2bAlEiGEAUAcKhRTsCNShxqIGnAwgQGPDUwICeEZcWjBjAKVSiVL+K/CigrNmzAikK8WpValirA4ZoFHi2rgBkAqTq3UvgLsUMF5ASlSoYQYQVc/Py3Xu3LgUKD6T6DUBhQQKee3k2sIAYAF6pDx7XXTgaGcUfGjgUWUzAzgIKEoLMxYsWJsUeDS4kWL03gZ0GEUjQmK01LTIeD3JzSCAVkPMGDyT4AGG6+EDPB14k13DBOaAF0EtFYKBxoLp18x9SRKDQoH0DChEkYIDxwfh5zwIPuFBhIUIECxKQsIIM5dlnHX75gdCCCBjcYAMNIBRoYHEIDnTAhRgyhVFAACH5BAkKAMgALAMABAAuABYAAAj+AJEJHEiwYMEACBMaXMiwIUOEACJKBBDAocWLyAJM3CixIsaPAzVyHOkR5EWRI0maPJkyZcmVC1G25PgSJkGZCHJOzIlgYk2bAlEiGEAUAcKhRTsCNShxqIGnAwgQGPDUwICeEZcWjBjAKVSiVL+K/CigrNmzAikK8WpValirA4ZoFHi2rgBkAqTq3UvgLsUMF5ASlSoYQYQVc/Py3Xu3LgUKD6T6DUBhQQKee3k2sIAYAF6pDx7XXTgaGcUfGjgUWUzAzgIKEoLMxYsWJsUeDS4kWL03gZ0GEUjQmK01LTIeD3JzSACo+fIGDyT4AGG6+EDPB14k13DBjp3mgB5HlMBA40B16+c/pIhAoYH7BhQiSMAA44Nx9J4FHnChwkKECBZIQMIKMph3n3X56QdCCyJgcIMNNIBg4IHFJTjQARhmyBRGAQEAIfkECQoAyAAsAwAFAC4AFgAACP4AkQkcSLBgwQAIExpcyLAhQ4QAIkoEEMChxYvIAkzcKLEixo8DNXIc6RHkRZEjSZo8mTJlyZULUbbk+BImQZkIck7MiWBiTZsCUSIYQBQBwqFFOwI1KHGogacDCBAY8NTAgJ4RlxaMGMApVKJUv4r8KKCs2bMCKQrxalVqWKsDhmgUeLauAGQCpOrdS+AuxQwXkBKVKhhBhBVz8/Lde7cuBQoPpPoNQGFBAp57eTawgBgAXqkPHtddOBoZxR8aOBRZTMDOAgoSgszFixYmxR4NLiRYvTeBnQYRSNCYrTUtMh4PcnNIIBWQ8wYPJPgAYbr4QM8HXiTXcME5oAXQS0VgoHGgunXzH1JEoNCgfQMKESRggPHB+HnPAg+4UGEhQgQLEpCwggzl2WcdfvmB0IIIGNxgAw0gFGhgcQgOdMCFGDKFUUAAIfkECQoAyAAsAwAEAC4AFgAACP4AkQkcSLBgwQAIExpcyLAhQ4QAIkoEEMChxYvIAkzcKLEixo8DNXIc6RHkRZEjSZo8mTJlyZULUbbk+BImQZkIck7MiWBiTZsCUSIYQBQBwqFFOwI1KHGogacDCBAY8NTAgJ4RlxaMGMApVKJUv4r8KKCs2bMCKQrxalVqWKsDhmgUeLauAGQCpOrdS+AuxQwXkBKVKhhBhBVz8/Lde7cuBQoPpPoNQGFBAp57eTawgBgAXqkPHtddOBoZxR8aOBRZTMDOAgoSgszFixYmxR4NLiRYvTeBnQYRSNCYrTUtMh4PcnNIAKj58gYPJPgAYbr4QM8HXiTXcMGOneaAHkeUwEDjQHXr5z+kiEChgfsGFCJIwADjg3H0ngUecKHCQoQIFkhAwgoymHefdfnpB0ILImBwgw00gGDggcUlONABGGbIFEYBAQAh+QQJCgDIACwDAAUALgAWAAAI/gCRCRxIsGDBAAgTGlzIsCFDhAAiSgQQwKHFi8gCTNwosSLGjwM1chzpEeRFkSNJmjyZMmXJlQtRtuT4EiZBmQhyTsyJYGJNmwJRIhhAFAHCoUU7AjUocaiBpwMIEBjw1MCAnhGXFowYwClUolS/ivwooKzZswIpCvFqVWpYqwOGaBR4tq4AZAKk6t1L4C7FDBeQEpUqGEGEFXPz8t17ty4FCg+k+g1AYUECnnt5NrCAGABeqQ8e1104GhnFHxo4FFlMwM4CChKCzMWLFibFHg0uJFi9N4GdBhFI0JitNS0yHg9yc0ggFZDzBg8k+ABhuvhAzwdeJNdwwTmgBdBLRWCgcaC6dfMfUkSg0KB9AwoRJGCA8cH4ec8CD7hQYSFCBAsSkLCCDOXZZx1++YHQgggY3GADDSAUaGBxCA50wIUYMoVRQAAh+QQJCgDIACwDAAQALgAWAAAI/gCRCRxIsGDBAAgTGlzIsCFDhAAiSgQQwKHFi8gCTNwosSLGjwM1chzpEeRFkSNJmjyZMmXJlQtRtuT4EiZBmQhyTsyJYGJNmwJRIhhAFAHCoUU7AjUocaiBpwMIEBjw1MCAnhGXFowYwClUolS/ivwooKzZswIpCvFqVWpYqwOGaBR4tq4AZAKk6t1L4C7FDBeQEpUqGEGEFXPz8t17ty4FCg+k+g1AYUECnnt5NrCAGABeqQ8e1104GhnFHxo4FFlMwM4CChKCzMWLFibFHg0uJFi9N4GdBhFI0JitNS0yHg9yc0gAqPnyBg8k+ABhuvhAzwdeJNdwwY6d5oAeR5TAQONAdevnP6SIQKGB+wYUIkjAAOODcfSeBR5wocJChAgWSEDCCjKYd591+ekHQgsiYHCDDTSAYOCBxSU40AEYZsgURgEBACH5BAkKAMgALAMABQAuABYAAAj+AJEJHEiwYMEACBMaXMiwIUOEACJKBBDAocWLyAJM3CixIsaPAzVyHOkR5EWRI0maPJkyZcmVC1G25PgSJkGZCHJOzIlgYk2bAlEiGEAUAcKhRTsCNShxqIGnAwgQGPDUwICeEZcWjBjAKVSiVL+K/CigrNmzAikK8WpValirA4ZoFHi2rgBkAqTq3UvgLsUMF5ASlSoYQYQVc/Py3Xu3LgUKD6T6DUBhQQKee3k2sIAYAF6pDx7XXTgaGcUfGjgUWUzAzgIKEoLMxYsWJsUeDS4kWL03gZ0GEUjQmK01LTIeD3JzSCAVkPMGDyT4AGG6+EDPB14k13DBOaAF0EtFYKBxoLp18x9SRKDQoH0DChEkYIDxwfh5zwIPuFBhIUIECxKQsIIM5dlnHX75gdCCCBjcYAMNIBRoYHEIDnTAhRgyhVFAACH5BAkKAMgALAUABAAsABYAAAj+AJEJHEiwoMAACBMGMMiwocOCCAFInAgA4cOLDwNQ3DjRIsaPBzmKlLgQ5EWNI0eWNNkQZUqOK1lCfJkypsyQABDopKgTgUibNzUiGEAUAcKhRWHeLJhzgIGnA4oQcArVJ8WSArJq3Xqx6VMDRIl+JbpxoQACaNOqFfDQK1S0VMEOcFkR2VkCDyhQ2Mq2bQCkRNECRmCHLlauJise6KmWceGrIPluVfxDAwepatE+nhg5c+YAB3o0uJAAc9oEm+tG3qr3AVq2PB6MBkSbQAIOCRo84LzULuIDL2RruEAb0ALdJTAAONDb4YcUESg0mN6AQgQJGGAAaN5w+wEXKiwgRIhgQQKJFTKY8+Ze8ACIFiIw3LBBAwRz9hgP6N/fOyAAIfkECQoAyAAsBQAFACwAFgAACP4AkQkcSLCgwAAIEwYwyLChw4IIAUicCADhw4sPA1DcONEixo8HOYqUuBDkRY0jR5Y02RBlSo4rWUJ8mTKmzJAAEOikqBOBSJs3NSIYQBQBwqFFYd4smHOAgacDihBwCtUnxZICsmrderHpUwNEiX4lunGhAAJo06oV8NArVLRUwQ5wWRHZWQIPKFDYyrZtAKRE0QJGYIcuVq4mKx7oqZZx4asg+W5V/EMDB6lq0T6eGDlz5gAHejS4kABz2gSb60beqvcBWrY8HowGRJtAAg4JGjzgvNQu4gMvZGu4QBvQAt0lMAA40NvhhxQRKDSY3oBCBAkYYABo3nD7ARcqLCBEiGBBAokVMpjz5l7wAIgWIjDcsEEDBHP2GA/o3987IAAh+QQJCgDIACwNAAYAFAAWAAAI1ACRCRyILIDBgwQTDjQIoKFDAAEUCgzwsCKAAxcTUrTo8EARjwcOTOT4EOTHjwVJNtxxYEFLkBtJ7jgJ0mVMjjOLlNCp88BNizmLCBWKEYFRmUOFUjiAYIBTBD9XFqFAFeMAA1gHQOUYMiTEq1kHEIj60CBYA04JjLV4MGLTpwmKrC0bgQQNkciMImhwgUOCmwEoSPABguCBFw8aaLhw80EJDHcTfkgRgUKDmAEkYIDxQeIBFyosRHBIYoUMvJ5BtBCBAYANGiBQSxTY9aLs2QodKgwIACH5BAkKAMgALA4ABgAUABYAAAjfAJEJHIgsgMGDBBMONAigoUMAARQKDPAQwAGLDyMSpPjwQBGPBy421FiwosWPKEVCnFhxx4EFL0E6jMjR4Y6UH2FmrNnwZpESP3+qhMgTgM8iSJEOpYigqc2kSCkMBYBggFUEHG9S2DoVwAADYAdgbRgypMkAX8MOIFC0osG0BqwSYHsWYdWrCYrQzRiBBI0DApsiaHCBQwKeAR5I8AGC4IEXDxpouMDzQQkMfxN+SBGBQoOaASRggPFB4gEXKixEcEhihQzAEpEdANFCBAYANmiAgB1bYFmLvHsrdKgwIAAh+QQJCgDIACwPAAYAFQAWAAAI1gCRCRwoMIDBgwQTIjuw0CCAhxABBFC4sMgBiwciapxI8KJHixojckS248ACkx5DiiRpsSVKlRAn7ihSpETNmhlhPgwwk6ZPkDolsvxJIafOiQBmUlhqNCgyBAMOSG3qdICBqwMQBAi6E5lVrAMIbD068auBAWHFhjzIESpaBAmKqBUZgQQNhgIR6G1wgUOCsTsfSPABIuGBFw8aaLgAGMCDEhjuKvyQIgKFBoADSMAA4wPFhS5UWIgAkcQKGXg/HwDRQgQGADZogEj9WeBUAFJr64aoMCAAIfkECQoAyAAsAQAFADAAFQAACPkAkQkcSLCgwQAIExpcyLChQ4QAIkoEEMChxYsDA0zcKLEixo8FNXIc6RHkR5EjSZo8mTJlyZUNUbbk+BLmwZkuQQrYybOnQJk4N9ZkKICA0aNIBSADGrTjx54CKFB4YFQp06YUbUL9iZWmQKhbMV5tWrEo0rNKL8pMyLbtxLJGH0gNq7bjhQRFziaw0yACSo90TYoM8KDBBQ4JjCZA3OCBBB+DbTKMGOBFYQ0X7Ni5sKBxCQw0RA4EIJlg1g8pIlBowLoBhQgSMMD4sJS0QNulbws84EKFhQgRLEggsULGAdMRcxeUeABECxEYbtigAeK4cpMHsmsvHRAAIfkECQoAyAAsAQAEADAAFgAACP4AkQkcSLCgwQAIExpcyLChQ4QAIkoEEMChxYsDA0zcKLEixo8FNXIc6RHkR5EjSZo8mTJlyZUNUbbk+BLmwZkubTKUiXNjTZ3IePbs+FGA0aNIBQodSlEg0qcCkAkgQLWq1ahLh1acarVr1KcUKDygipUpTalUH4R9upBt0IkJ48qF6zQpTJQBLiQo0jWBnQYR8AINGTHAgwYXOCSgmkBxgwcSfIj8CbTwi8MaLtixc2HB4xIYaIgcbLDphxQRKDRY3YBCBAkYYHx4S7oggIEHXKiwECGCBQkkVsg4MPB27eIED4BoIQLDDRs0QBBHfjziwgPYsy80fhymdYwBAQAh+QQJCgDIACwHAAUAKwAVAAAI7wCRCRxIsKDBAAgTGlzIsGFBhAAiSgQQwKFFhwEmapRY8aJHgRk3iuz4EaPIkxRLmkS5kaTKhyxPunwJMuZImgRD2myJs+ZOnj11/uTYUIDRo0h9DiWKDOlRAlCjShWATOjSigKkQm2KlAKFB1CpCk1ItuxErFAfeKVa0KnSABcSFNGawE6DCDo7uvUYMsCDBhc4JICaQHCDBxJ89O0pMGKAF381XLBj58KCwyUw0Ag5EADOlB9SRKDQoHQDChEkYIDxoarnxj1fH3ChwkKECBYkkFgh4wBBiYyRSTwAooUIDDds0ADhO/jFA9CjqwwIACH5BAkKAMgALBQACQAeAA0AAAidAJEJHEhwIJw1ayIVXMhwYYBHACIC6BKgoUWCaSRqBJDmokU+Gzfy8cgwY0iJHUkSrHNyYx2LsWLKRBagpcaKMmdWUqPmj51Tk2LVtBkxQKxJp+z84RmL4IhYjWhGROSmqlVERZHFHEGypqhLHIoQKJIgCaZPACqqHNglFqckF+wsSBLhSKwuawnu0crIAwUPEoY03Zt3IZGYRFQGBAAh+QQJCgDIACwSAAQAHgANAAAInQCRCRxIcCCcNWsiFVzIcGGARwAiAugSoKFFgmkkagSQ5qJFPhs38vHIMGNIiR1JEqxzcmMdi7FiykQWoKXGijJnVlKj5o+dU5Ni1bQZMUCsSafs/OEZi+CIWI1oRkTkpqpVREWRxRxBsqaoSxyKECiSIAmmTwAqqhzYJRanJBfsLEgS4UisLmsJ7tHKyAMFDxKGNN2bdyGRmERUBgQAIfkECQoAyAAsEgAFABQACQAACFoAkQkcOFCPHoIIEyKDEwaAQzgKEwZwSBFAgIgEu1R02CVhrI8fkW2kiAxkSGRttmwR6YeOSzp+ACBTuaWNwjuQQLVpE8rRHYwD+xBRpIHJEiJ9gBIkwpRIxIAAIfkECQoAyAAsCQACABQACQAACFoAkQkcOFCPHoIIEyKDEwaAQzgKEwZwSBFAgIgEu1R02CVhrI8fkW2kiAxkSGRttmwR6YeOSzp+ACBTuaWNwjuQQLVpE8rRHYwD+xBRpIHJEiJ9gBIkwpRIxIAAIfkECQoAyAAsDgABAAoABQAACCYAkQlExobNwINrAABYMxAJEmRhunQJg8zhwEGEAgE6OFBQoYMBAQAh+QQJCgDIACwUAAEACgAFAAAIJgCRCUTGhs3Ag2sAAFgzEAkSZGG6dAmDzOHAQYQCATo4UFChgwEBACH5BAkKAMgALBoAAQAKAAUAAAgmAJEJRMaGzcCDawAAWDMQCRJkYbp0CYPM4cBBhAIBOjhQUKGDAQEAIfkEBcgAyAAsAAAAADIAHwAACEIAkQkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZsKAwIAIfkECQoAyAAsAAAAADIAHwAACF4AkQkcSLCgwYMIEypcyLAhMjZsHEqcKHANAABrKGpEiAQJsjBduoRB1nGjSYKDCAUCdLIlQUGFXMqcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQZQYEACH5BAkKAMgALCQABQAKAAUAAAgmAJEJRMaGzcCDawAAWDMQCRJkYbp0CYPM4cBBhAIBOjhQUKGDAQEAIfkECQoAyAAsGgAGABQACQAACFkAkQkcOFCPHoIIEyKDEwaAQzgKEwZwSBFAgIgEu1R02CVhrI8fkW2kiAxkSGRttmwR6YeISyJ+ACBTuaWNwjuQiFiyRMTRHYwD+xBRpIHJEiJ9gBJ8SSRiQAAh+QQJCgDIACwQAAYAHgANAAAIsgCRCRxIcCCcNWsiFVzIcGGARwAiAugSoKFFgmkkagSQ5qJFPhs38vHIMGNIiR1JEqwTxhMCBH4A+HnpKWIdi7Fy6kQWQJIhOXJMARgG1JAkABV17qykRs0fO6cmxQowJ5EBA7hQkbqa6BfSWJNO2fnTNBbBEbEa8ax6NdgxYlwHIEWWcwTJnj/lwCKwqyiwuSoHdvH1Umyql7lidQlMcA9dRh4oeJAwxKxjxguJ5CSiMiAAIfkECQoAyAAsBQAFAC0AFQAACP4AkQkcSLBgwQAIExpcyLDhQoQAIkoEEMChxYsBJmqUWPGiR4IZN4rs+BGjyJMUS5pEuZGkyocsT7p8CTLmSJowIyLYmTDATgQQI87EiUwiggFIERAgcDRpg5AAPAqYSrWqQJ0DDGgdsDTrVgQRQgqsSnbq0rNoCQgo6tOrAaRItb4dEGFFRmQC0qbFW5UChQdL11I8KpcrAbdILdiNmpfAA79kDUZm+6Mp0qWWEVCQEOQuX6o0KfZo8BPtzwYRSNDwTHQgRR4PGlzgkGBpAtoNHkjwAYJ164EHXsTWAKj4hQW5S2CgceA3ww8pIgBqQL14BAkYYHxw3vCACxUWIh1EsCCBxAoZzbl3B9FCBIYbNmiASK/e4YH7+HEGBAAh+QQJCgDIACwBAA0ALQASAAAI+QCRCRxIsCDBAAgTGlzIsOFChAAiSgQQwKHFiwEmapRY8aLHgxtDUvz4MQCCkxNPItjYkaRDBANirgQAU6bGli4XwjTAc0DEATwNDJjJMSfDnT1jAk1606jOpUIRQo0JMWJHAVizahWotasAZDSVDiBAoOZQOw0iZIyITADZt3AJYI0bV0BElXBV2rnQwMKKtW3JPqBAoStXrYQfkLUbQAOHInQJ2FlAQUILZBkPZ71omOKXCwmKKJGYNe2XA5gBODVI8cBnDgmydjDRQclpgZlXExzpOoKd3xc6zBbeAbdq3QNHCjzAnPlwE9CL50Z+cTZ02tSNEs8ZEAAh+QQJCgDIACwCAAgAKAAWAAAI/gCRCRxIsCCyAAgTBjDIsKHDgwEASJwIAOHDiwYjUtwo0SLGixo5ilz4sWFIkSNLMjyJciNJlQNZtnQJMyaCmxRvImj5EiaCAUARIPwZVGbFmsh+Glg6gACBAUsNDBDKsSdDAVizClDKFCjUrnZYah0rAJkAp2idcpXq9KvUAXYahDybtm7ZsRQoPCAKVK1XBHYuyJ1I90HesVexAtBZBK1OAnYWUDiJuGTFBhcAaU6bIG6Ek0hjPmighDDWBA0eSAhpFeaBF6OzdjDRQcmDEhhoTAxN8EOKCBQaNOgwm3gHGB+QAeBd8IALFRYiFDdBvYPA5cwHAjgAooUIDLOpE9O+nl27wAPo0Rs3X175R+wXAwIAIfkECQoAyAAsAQAGAC0AFgAACP4AkQkcSLAgwQAIEwYwyLChQ4MIAUicCADhw4sXA1DcONEixo8DNXIcWRHkR5EkRy40+RBlyo0rWTJ0+RKmzJkIclLMiSBlzJsDEQwYigChUKI0Jf4EKtSA0wEECAxwamBAUY4LBWjdylUg168Cmj4dOnWsHZoBBERdy5aA1rZtxVaNWrbqADsNXKaN+oACha9eufp9EDUsWagEjlq1cyEvxaxdLwIGwLPIWp4E7CygoBdowYoNLiSwzDYB3gguPUN80EDJxK0JGjyQgHKp6gMvWG/tYKKDkgclMNCYqJrhhxQRKDRo0IF3BwkYYHxABqB4wwMuVFjgbaL3ChkHBB5Wt24QwAEQ3JvTABFePPnyApt3OED/83v7GMd/DAgAIfkECQoAyAAsAgANAC0AEgAACPkAkQkcSLDgwAAIExpcyLDhQoQAIkoEEMChxYsBJmqUWPGiR4IZN4rs+BEjgpMTTyLYSLJkQwQDYq4EAFOmxpYuDcI0wHNAxAE8DQyYyTEnw509YwJNetPoQqRCES4VOgBiRJxOkdFUOoAAgZpD7TSIEBJA1oIRVXr1qtLOhQYWVoQ8S5CiBg5F1uq1s4CChBbIMg4UQLiwYYGGEwug+OVCgiJKJBYe++VAYLPIBOjdTIAwZ70UDzTmkKBwBxMdlFQWKDiz1wcUKCRGbDj2A68UkYmOYKf3hQ6ngXdgjTnzYYuJcws8wJx5cBPQh7eme/E0dNTUjQo3GhAAIfkECQoAyAAsAAAIAC0AFgAACP4AkQkcSLDgwAAIEwYwyLChQ4MIAUicCADhw4sXA1DcONEixo8HOYqUuBAkRo0jR5Y06RBlSo4rWUJ8mTKmzIMIclLMiaDmTYMIBghFgDDoUJcUSwpYyrSpwKZQgxqYOoAAgQFTDQwgChOZAKtgwxJYKjasVKpCsaK1g7SiV6sPKFCA+rSp3AcEzmq1qlbrADsNkCp1ejFq2qp50yKwcyFw0p8FAfAsApYnATsLKAiGTLBigwuAQodNADgCUs4FAzxooGQi0wQNHkhwaZPzgRermXYw0UHJgxIYaExEbfBDiggUGjTosJt5BxgfkAEgzvCACxUWIjQ3wb2DwOnUIxwfANFCBIbd3Hl/Dx9Z4IH3750PBM9+PUb6HwMCACH5BAkKAMgALAEABgAtABYAAAj+AJEJHEiwIMEACBMGMMiwoUODCAFInAgA4cOLFwNQ3DjRIsaPAzVyHFkR5EeRJEcuNPkQZcqNKwXInElTIM2bApC5fAlTAIGfQIPKDEqUgIAACJJSTIogZQCfBB5QoHDTJs2pD34KQDCgKwKEXL3ulLiw6sWbXA2oHfBzgFoDA75yXMmyYNq1Xd3itbOTbt2Bd+G2fdvVTgOXfv8KDNv1J2MEdi4cpphYMQCmRYAyJWBnAQXEigtWbHAhQeagCQxHcBka4oMGSibOTNDggQSUlUMfePF6ZgcTHZQ8KIGBxsTWDD+kiEChQYMOvztIwADjAzIAyBsecKHCwm8TwFchyDggEHt2gwAOgPgOnQYI8uXPoxcIvcOB+6Ll58do/mNAACH5BAkKAMgALAAADQAtABIAAAj7AJEJHEiwYMEACBMaXMiw4UKEACJKBBDAocWLASZqlFjxokeCGTeK7PgRI4KTE08i2EiyZEMEA2KuBABTpsaWLg3CNMBzQMQBPA0MmMkxJ8OdPWMCTXrT6EKkQhEuFToAYkScTpHRVDqAAIGaQ+00iBASQNaCEVV69arSzoUGFlaERCagrt27Au/qFSCQogYORdYKtrOAgoQWyDIKEMyYQN3GgvlS/HIhQRElEu2O/XIgMYDFBB5QoKA3793RD7xKDnCAMocEdjuY6KCEs8CMdPFaLK21YusIdoJf6CCbeIfbZs8OpDjwgHPnxU1IP45buUfZ0mdbN2rcZUAAIfkECQoAyAAsAQAIAC0AFgAACP4AkQkcSLCgwAAIEwYwyLChQ4MIAUicCADhw4sXA1DcONEixo8DNXIcWRHkR5EkRy40+RBlyo0rWTJ0+RKmzJkIclLMiSBlzJsDEQwYigChUKI0Jf4EKtSA0wEECAxwamBAUY4xBWjdylUgV65Nnw6dKtYOzZUCoqpdS0ArW7Vhq0YlW3WAnQYu0UZ9QIHCV69c+z4gcHRo1MII7FzASzFr14tcAfAsAjcnATsLKOQFWrBigwuAQq9NcDeCS84QHzRQMnFrggYPJKBcivrAC9VbO5jooORBCQw0JqJm+CFFBAoNGnTQvbwDjA/IAAxveMCFCgsRmJvY3kGg9OkGARwcANFCBAbd23d7Bx9e4IH375sP/M5+/kf6IAMCACH5BAkKAMgALAEACAAtABYAAAj+AJEJHEiwoMAACBMGMMiwoUODCAFInAgA4cOLFwNQ3DjRIsaPAzVyHFkR5EeRJEcuNPkQZcqNK1kydPkSpsyZCHJSzIkgZcybAxEMGIoAoVCiNCX+BCrUgNMBBAgMcGpgQFGOS282fTp0Klc7NLPK3Fo1qteqA+w0cCl2bFeoBI5atXNhLcWYAvLq3Stwr18APItEjZuTgJ0FFNj2Hcx4cN7GjCs2uACoMuMEaiO4HCgg6gMKFPz23Qv6QdQADxoomag3QYMHElD+FH3R74EXqfV2MNFByYMSGGhMBOrwQ4oIFBo06LCbeQcYH5ABIP7wgAsVFiI0N8G9g8Dp1BseAjgAooUIDLu58/4eXrzAA/DhOx8Ivn3B+g/xfwwIACH5BAkoAMgALAEACAAoABYAAAj+AJEJHEiwoMAACBMGMMiwoUNkCAFInAgA4cOLBgNQ3DjRIsaLGjmKrPjRYciRIheWzIhypMqVA0+25PgSZgAEOCniRICy5koEA4IiQAhUqMyOMAUCNcB0AAECA5gaGDCUZlJkS5sGjarVzlGfH7NOfcp16gA7DWSCDbvVKYGiVO1cSEtxLUYAO4s8fYuTgJ0FFNReRVaxwQVAiPcSSIA2gszBBx80UDJRgOUEDR5IOGn344EXki0L6GCig5IHJTDQmIhRtGvRyD6kiEChQYMOpHF3gPGBMLLXr38rHk5AALIDLlRYiJDbhPMOAgEIIK7Y+GsKFB48NQ7gAIgWIjAdkHZeOvp0Ag+wBze4HoDAA/Dh6x7ofn1S93cxBgQAIfkECSgAyAAsAQAIACgAFgAACP4AkQkcSLCgwAAIEwYwyLChQ2QIAUicCADhw4sGA1DcONEixosaOYqs+NFhyJEiF5bMiHKkypUDT7bk+BJmAAQ4KeJEgLLmSgQDgiJACFSozI4wBQI1wHQAAQIDmBoYMJRmUmRLmwaNqtXOUZ8fs059ynXqADsNZIINu9UpgaJU7VxIS3EtRgA7izx9i5OAnQUU1F5FVrHBhQR69xJIgDaCzMEHHxjmkOApIMoNHkg4affjgReSAYkGdGFB5hIYaEzEKKC169fIPqSIQKGB7QYUIkjAAOMDYWSvgwsArrg4geEHXKiwECGCBQkkVsg4IBCAAOOKhwenQOHB0+EADiSAaCECww0bNEBQr36dwAPuwRnG/43sgP37BQEAh31V/12MAQEAIfkECR4AyAAsAQAJACgAFgAACP4AkQkcSLCgwAAIEwYwyLChQ2QIAUicCADhw4sGA1DcONEixosaOYqs+NFhyJEiF5bMiHKkypUDT7bk+BJmAAQ4KeJEgLLmSgQDgiJACFSozI4wBQI1wHQAAQIDmBoYMJRmUmRLmwaNqtXOUZ8fs059ynXqADsNZIINu9UpgaJU7VxIS3EtRgA7izx9i5OAnQUU1F5FVrHBhQR69xJIgDaCzMEHHxjmkOApIMoNHkg4aXeggM+gQx94IRmQaUAXFmQugYHGxNCwBSAToLg2AQEfUkSg0KB3AwoRJGCA8YEwbdt7ZcOmQOHBU9kHXKiwECGCBQkkVsg4IBDA8QfMYSQzFE/4AIgWIjDcsEEDBPfus0MPBiDwgP37BelDJqj/Yn+HAQEAIfkECQoAyAAsCAACACQAFgAACP4AkQkcSLBggIMICypcyFDgQQAQIwII0LCiQYkYI1K02DBAxo8TOS70CPLjRpEDSZbEeBKlypUsUTqEaVImMpUBBuhEmHOnRpsaBxgYOoAAAaFEVQKdiACpAZ06hz4dQNKiAAEDJwppKrXo0a4DhngceJXgVQEEsCKbmOFCU6hG3w5AEGHFWGQCLpzFe0EvWqwTKSxIgKCw0biFG1iwCwBv2rx68aI1CjjADw0cihzebGcBBQlBxk72y/fC4co9GlxIoHlzAjsNIpCgIfpwX6xXbwtszOOBag4JjCYADuiBBB8g1gqEXJZvc+UHXvjWcMEOoOvFS2CgcUD58rxq8UUWbIzsQ4oIFBqob0AhggQMMD7sLhh+IXlkB1yosBAhggUJJKwgQ3fzyXQffiC0IAIGN9hAAwgEFojSgQIdYOGFClE4UEAAIfkECR4AyAAsCAAEACQAFgAACP4AkQkcSLBggIMICypcyFDgQQAQIwII0LCiQYkYI1K02DBAxo8TOS70CPLjRpEDSZbEeBKlypUsUTqEaVImMpUBBuhEmHOnRpsaBxgYOoAAAaFEVVoUIGAgxAAIkBrQqXPo1AEkBzIlyFQAgabIJgqJarXo0bIDhngUKOBCV2Rt3XptOjHDhahUjeIdgCDCirVz4zZlavRr2AAUFiRAwLgwAcYIGlj4CwCuUblwL1woTDfADw0cijgubGcBBQlBABfWPFiwwIk9GlxIINpxAjsNIpCgsTYz5sxbXyPj8UA2hwRGExwH9ECCDxBhtbYFC7dg5QMvimu4YAeQd+YlMEjQOBCda8XKyD6kiEChgfsGFCJIwADjg3CZ6JEdcKHCQoQIFkhAwgoykHcfSvnpB0ILImBwgw00gGDggSIlKNABGGaokIUDBQQAIfkEBR4AyAAsEAAEABQAFgAACO8AkQkciCyAwYMEEw40CKChQwABFAoM8LCiw4gEKVrciLHgxo8QJ4Lk6FGASZMWT6I0KGCBS5cCHrZ8uUBAgJkqBxwMMEAlzJY2BxgYOoAAAaFEb9YEigCpgQFQnUIFylSqUak9l/6MWpRA06k4AcysiQCBUaNlx8aEeLLI2bd2ltpsGKBHgwsJ3L5NYKdBBBI0NCLj8eAuhwRGExwG9ECCDxDIGiI78KKwhgt2AGlmXAIDjQORAQj8kCIChQaoG1CIIAEDjA8CJQs84EKFhQgRLEggsUIG6NiiBx4A0UIEhhs2aID4DVzhgefQFQIICAAh+QQFCgDIACwQAAkAFAAKAAAIdACRIRNAkKDAgwMLCjgoYIFDhwsZPoQ4cEFCggMAHRygENmCiAIADDBAMiOykSUBRDyIAOHJAS5hupwJSMFMlx8FDNiJDBAgBDs5NhSo0uNHBAgUaPyJoKHFkMgCFCTgU6NAAnYuFAxw8IcGDjcPUpAQRGBAACH5BAUKAMgALBAABwAUAAsAAAiDAJEhE0CQIICDCAsSFDhwgUOHAhACEPAQYsMFCgdIHKAQIsWIAwyI1Agg5MiJGD8iMGlggEuWLj+qhAkoAEyOKT2+HKAA0MqYFDGihIgAASBAPYsGFQogQEEFUI9K7VkwwMEAGS4kQBqVgFQ7DSKssNqUwoIEXo8SWEvAzoUGFsYCCAgAIfkEBQoAyAAsEAAFABQACwAACHwAkSETQJAggIMICxIUOHCBQ4cCEAIQ8BBiwwUKB0gcoBAixYgDDIjUCCDkyIkYPyIwaWCAS5YuP6qEeRAmx5QeX5JcGZMixgA+MSJAoABQAEBDgwoIcLCggqdPAUEFVFBigAVSo0oFtLWBBaYHAwi5kLUoV65FG0QYwjQgACH5BAkUAMgALBAAAwAUABcAAAiMAJEhE0CQoMCDAwsKOChggUOHCxk+hDjQIcIBFxFCbCggwAADIDEi+xgyAEeBAhCQNDCg5cqWEQ8iQEjzoMiDCwi6RAYAgEqYDQWafJgSAQCBPhE0hBggAICIAABJRdrz6EAAAXj2DABIgQKEUptWPYgVUE2EFJyeXcu2rdu3cOPKnUu3rt27ePO2DQgAIfkECQ8AyAAsCAAEACQAFgAACP4AkQkcSLBggIMICypcyFDggIcAIgJ4OKChRYMDDGgcEDHjxgAXLQZA4NEAxZIPQYZUGAAASY0mO8KEqHLlwJYuT0Yk+RBBxJo2ce5E4FMi0aI/LwoQcFNiREBQnUoFUHMpwaUCCDBFJjQAIAVgAXmFelCiSgEXsCJDmzYrU7NfwYaVC4iC0LVa2TJdSqDvW6oL4iqAOvgroAYWcOIl0HbthQt9tSKjKuSCYKiYBzeIMKTlYsZp1+oVSDXDhQSXCWC2s3mFZ8eNHVslHYDCggSqoUYmYOcCYtcABi4NLXDrQKo/NHAosjuynQUUJAR5Ldwi1R4NTjPfnYB1BBI0qGqvDM7jQXYOuAkkQA/ogQQfICbbJI3swAvzGi7Ywdy+BAYaB8g3X3DIfJBCBBQ0oGADFEQgAQYwfEDfgAMd4IIKFkQQgQUSkLCCDAFOaBOBAh0AQgsiYHCDDTSAEKKI4yl0wIw0KkRiQQEBACH5BAkKAMgALAgABAAkABYAAAj+AJEJHEiwYICDCAsqXMhQ4ICHACICeDigoUWDAwxoHBAx48YAFy0GQODRAMWSD0GGVBgAAEmNJjvChKhy5cCWLk9GJPkQQcSaNnHuROBTItGiP20KFBoRkFOJUCUCDSk0ACAFWAFZdXpQqlJkUq9izToWEAWhX38uEKvAadurgBpYwJk2gJALbJ3qbdsgwpCWFwUIGAggQIYLCfIS0Gun7wrAAgUTFCyAwGCwASgsSLDYKYHPBOxckPsYQOQLlJEJuIC68uDCPzRwKAK6tp0FFCQEAex6NWrVlT+/DtCjAWLatRM0jkCCBu/PrVWzBv0aGY8HxjlwJpBAO6AHEnxrgACrGjTrwYLPCzR94AV2DRfs6P1eAgONA+SlR5cueb3ADylEQEEDBDZAQQQSYADDB/5FttplqhVkmkAHuKCCBRFEYIEEJKwgA34NDgThQhNSCEILImBwgw00gABiiCuVONABNNaokIwEBQQAIfkECQoAyAAsDAAEABwAGAAACP4AkQkcSBBZgIMICypcKHCAQwAQATgcwJBhgAEGMg6AiFFjgIoEAyDoaGAiSYcfQQYAMDJjSY4uH6a0CHHkxJoTEUCcqXBlRARAI7IMGpFnSKEAAClFitToQJ8AAgBSQBWQVKUHizIsOpVqVa+AKEDdGnVBVwVK0U4F1MCCz60BhFw4q7Qu2gYRhqyEm+FCAroE6trBu2LvwqgUFiQIrJSAYwJ2LrQtDADuDw0cijzebGcBBQlBDCuM2qOBX82bEwyOQIKG6IKVeTwwzWExgQS1AT2Q4AMEssoFlyI78GK2hgt26uougYHGgd9KBwJynBTZhxQRKDTY3oBCBAkYYFR8QAYIgGNA5CVMB6B+uAsVFiJEsCCBxAoZzwFJMK9f+f72w4HQgggY3GADDSA8lx57dZEXWFIADnfAhBNKp15SgQk03YbogSTdhhlqSJ6HC6HXYUAAIfkECQoAyAAsEAAEABQAFwAACP4AkQkciCyAwYMEEw4cwBCAQwAMBygUGGCAgYsDHFrEGCBhAAQbDUQMybAjRQAgL4rUqLKhyQAOQUaMGRGBw44wHyLY+RAlz4cGewIARFSo0KA3ASlYCigA0aY5AUR1urSqUqYUot5ccFUBUa9KATWwMFXIha5Pv4qNMCRngAwXEqAl8NROgwgr3FJYkIAuUQKACdi5MDbvzR8aOBQJzNjOAgoSgrjt0SDuYsYJ7EYgQSMnMh4PKnPoSyDBaEAPJPgAgcwhsgMvQmu4YCftgxIYaBxoPVTChxQRKDQY3oBCBAkYYHyQAMjh0wMuVFiIEMGCBBIrZBx46hoQ3QMgWh6IwHDDBg0Q2+nyRua9/YH38NurBzAQEPuJ9+0LDAgAIfkEBR4AyAAsEAAEABQAFgAACP4AkQkciCyAwYMEEw4cwBCAQwAMBygUGGCAgYsDHFrEGCBhAAQbDUQMybAjRQAgL4rUqLKhyQAOQUaMGRGBw44wHyLY+RAlz4cGewIARFSo0KA3ASlYCigA0aY5AUR1urSqUqYUot5ccFUBUa9KATWwMFXIha5Pv4qNMCRngAwXEqAl8NROgwgr3FJYkIAuUQKACdi5MDbvzR8aOBQJzNjOAgoSgrjt0SDuYsYJ7EYgQSMnMh4PKnPoSyDBaEAPJPgAgcwhsgMvQmu4YCftgxIYaBxoDUDghxQRKDQY3oBCBAkYYHwQ6FrgARcqLESIYEECiRUydjPvPfAAiBYiMA/csEEDhPbtCg+oX68QQEAAIfkECQoAyAAsEAAEABQAFgAACDoAkQkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYCQrYaHCjAIQbFXj0KPIjyJIkRS5M6dHhSJMZKQYEACH5BAkKAMgALBAAAwAUABYAAAj+AJEJHIgsgMGDBBMOHMAQgEMADAcoFBhggIGLAxxaxBggYQAEGw1EDMmwI0UAIC+K1KiyockADkFGjBkRgcOOMB8i2PkQJc+HBnsCAERUqNCgNwEpWAooANGmOQFEdbq0qlKmFKLeXHBVAVGvSgE1sDBVyIWuT7+KjTAkZwAgFxKgJfDUToMIK9xSWJCALlECgAnYuTA2780fGjgUCczYzgIKEoK47dFAgGXGBBJYFkCCRk5kPB5YVrB5M2kBPkAgc4jswAvRp02TxkDjwGoAAj+kiCB7MwYYHwSyFnjAhQoLpQWskGFbOO6BB0C0EIHhhg0aIJo7V3igu3eFAAIBAgAh+QQJCgDIACwQAAQAFAAWAAAI/gCRCRyILIDBgwQTDhzAEIBDAAwHKBQYYICBiwMcWsQYIGEABBsNRAzJsCNFACAvitSosqHJAA5BRowZEYHDjjAfItj5ECXPhwZ7AgBEVKjQoDcBKVgKKADRpjkBRHW6tKpSphSi3lxwVQFRr0oBNbAwVciFrk+/io0wJGeADBcSoCXw1E6DCCvcUliQgC5RAoAJ2LkwNu/NHxo4FAnM2M4CChKCuO3RQIBlxgQSWBZAgkZOZDweWFaweTNpAT5AIHOI7MAL0adNk8ZA48BqAAI/pIggezMGGB8EshZ4wIUKC6UFrJBhWzjugQdAtBCB4YYNGiCaO1d4oLt3hQACAQIAIfkECQoAyAAsEAADABQAFgAACP4AkQkciCyAwYMEEw4cwBCAQwAMBygUGGCAgYsDHFrEGCBhAAQbDUQMybAjRQAgL4rUqLKhyQAOQUaMGRGBw44wHyLY+RAlz4cGewIARFSo0KA3ASlYCigA0aY5AUR1urSqUqYUot5ccFUBUa9KATWwMFXIha5Pv4qNMCRnACAXEqAl8NROgwgr3FJYkIAuUQKACdi5MDbvzR8aOBQJzNjOAgoSgrjt0UCAZcYEElgWQIJGTmQ8HlhWsHkzaQE+QCBziOzAC9GnTZPGQOPAagACP6SIIHszBhgfBLIWeMCFCgulBayQYVs47oEHQLQQgeGGDRogmjtXeKC7d4UAAgECACH5BAkKAMgALBAABAAUABYAAAj+AJEJHIgsgMGDBBMOHMAQgEMADAcoFBhggIGLAxxaxBggYQAEGw1EDMmwI0UAIC+K1KiyockADkFGjBkRgcOOMB8i2PkQJc+HBnsCAERUqNCgNwEpWAooANGmOQFEdbq0qlKmFKLeXHBVAVGvSgE1sDBVyIWuT7+KjTAkZ4AMFxKgJfDUToMIK9xSWJCALlECgAnYuTA2780fGjgUCczYzgIKEoK47dFAgGXGBBJYFkCCRk5kPB5YVrB5M2kBPkAgc4jswAvRp02TxkDjwGoAAj+kiCB7MwYYHwSyFnjAhQoLpQWskGFbOO6BB0C0EIHhhg0aIJo7V3igu3eFAAIBAgAh+QQJCgDIACwQAAMAFAAWAAAI/gCRCRyILIDBgwQTDhzAEIBDAAwHKBQYYICBiwMcWsQYIGEABBsNRAzJsCNFACAvitSosqHJAA5BRowZEYHDjjAfItj5ECXPhwZ7AgBEVKjQoDcBKVgKKADRpjkBRHW6tKpSphSi3lxwVQFRr0oBNbAwVciFrk+/io0wJGcAIBcSoCXw1E6DCCvcUliQgC5RAoAJ2LkwNu/NHxo4FAnM2M4CChKCuO3RQIBlxgQSWBZAgkZOZDweWFaweTNpAT5AIHOI7MAL0adNk8ZA48BqAAI/pIggezMGGB8EshZ4wIUKC6UFrJBhWzjugQdAtBCB4YYNGiCaO1d4oLt3hQACAQIAIfkEBVAAyAAsEAAEABQAFgAACP4AkQkciCyAwYMEEw4cwBCAQwAMBygUGGCAgYsDHFrEGCBhAAQbDUQMybAjRQAgL4rUqLKhyQAOQUaMGRGBw44wHyLY+RAlz4cGewIARFSo0KA3ASlYCigA0aY5AUR1urSqUqYUot5ccFUBUa9KATWwMFXIha5Pv4qNMCRngAwXEqAl8NROgwgr3FJYkIAuUQKACdi5MDbvzR8aOBQJzNjOAgoSgrjt0UCAZcYEElgWQIJGTmQ8HlhWsHkzaQE+QCBziOzAC9GnTZPGQOPAagACP6SIIHszBhgfBLIWeMCFCgulBayQYVs47oEHQLQQgeGGDRogmjtXeKC7d4UAAgECADs=

How much work do you think would it take to make this happen?

Are we talking weeks, months, years? Given that there would be some funding tokickstart and maybe more people involved..

Primarily, would you be interested in something like this?

 

Regards Jay

 

 

 

Hi

I am not a fan of the Microchip line. so I will not investigate in thatdirection.

I am looking at some Atmel controllers so that would be the road to go for me.maybe a Arduino Due could be used? it could also be possible to port most ofthe existing code.

for the hardware: I have a complete workshop here. but simply not enough timeto get all things done. at the moment the parts of the Gimbal are waiting toget finished.

the Code is mostly ready for some testing s. If that goes well we can think ofthe next steps.

 

but I will NOT take part in any project that is taking Donations and or Moneyin any form!

there is also a high risk of this getting into License of some sort. as that isthe main reason why there are no Commercial products around.

 

it is a project that I do in me free time and only if I feel like Proging onit.

for the time it will take to finish it? we are most likely talking about Years.as I have serious problems with the sinus Calculations that is needed for someof the Effects.

 

the first step is done by getting the descriptor to work properly. the rest ismostly about maths and timings.

 

MetalGear_Honk

 

 

 

 

 

The threemost dangerous threads to Programmers:

  • Fresh air
  • Bright sun light
  • The horrifying screams of singingbirds

Link to comment
Share on other sites

Here is the Rest:

 

Hi

If you have some experience in Microcontroller:it would be great to get someFeedback about the code. Flash it on a Pro microusing an ISP programmer. Andsee how it does in your sim.

 

The OpenFFB Project is a Native FFBDevice. So it will be detected by theDirectX Directives.

It will work with all Simulators that supportFFB, and it will act exactly asthe Game Designers intend it to act. So I seeno Need for an APP.

 

The downside on this HID-FFB is that it ismostly not possible to generateForces outside a sim. It is not impossible butsomeone would need to program aDirectX function that reads Simulator Data andcalculates these to Forces.

That is simply to much work for almost noNeed.

 

The only use I can see of an app would beto adjust the Forces. But that can beachieved on the Controller with much les hassle.(a simple Pot for maxForce...).

 

 

MetalGear_Honk

 

 

So there's hope after all AHsJFJhC1JVdTiwNFHjIzQRYghQooATggIBTTTRlyNVL0Z4COQLoGuCnQgAduFxBEWgoDaMibGzFWSPmU4csj+wM1PKj1okIIUjp6WEESB+BGGKhQHUrj5U6CaosGTVmjgxZfDhtogIpxgAJAgBgmZTpC5kNAxkcmaIq1B1PgSotWCgQzyIagHx4afCnFZqFdF5IKWCKgGENQxAxKdGi1yBCpWrMCCDCAC0TAdrsuGRDyAcYFIJ0QSDAAIIEiQBEYpWEh5JXTySZAQBmxYADD8KQaOQCTi8cXFZ5cGRBDYRUZd6AuiFnIIhOW1QQucCBFxJMLM7QFTgiioNZheYuAgwIADs=

 

Absolutely understand your point about the licence and funding. I just readabout Immersion's cases and honestly, it's ridiculous! Let's stay away fromthis bu..hit as far as we can.

NO donations, NO money involved! I'm doing this stuff as my hobby too, seekingno financial gain for it. Also there are no dead lines to meetj2xgwDMBDSsnVA69OtCogRQzID4UOTOFEwAHkGJSmhPzgRIAFU7lagXmBJGuXwEwEMPlz8AaBEagAjDrBQAkcUj5iCtQwK0FSzhciBsQADs=

 

Well back on the subject,

I got four MSFFB2 sticks sitting on the shelve waiting to be"recycled" into one of my future projects so I can take one and usethe existing gimbal for testing.

It's "all-in-one" package ready to roll. Gimbal, motors and 10K pots,all assembled into one neat box.

I also checked the specs on Arduino Due and it looks very promising. It has thebest specs of the whole Arduino family.

Lets try this thenwmOCghjcC8IRweMCBoJsEzhR5IEIjn0JEQCiUkTNDFYIKEBSHAAXSFhAIIDRkcLMBQYoQxjg+bfDRSJAtAAyFBAAA7

I may be able to get at least one more guy on board for the control softwareprogramming.

Is it technically possible/wise to talk to arduino from win app to controldifferent parameters as well as interface into particular flight sim?

Something like this: Arduino<>Control APP<>Flight Sim

 

Jay

 

Hi

 

I only have UNO board on hand at the moment (that's a no go). Honestly I wouldprefer investing into DUE rather than Pro micro which runs "red hot" withthe code already.

Would you be able to adjust the code so it is compatible with DUE? I would thenbuy one along with 10A DC Motor shield (if that would work).

 

Native DirectX support is the genius of your solution and DCS may have greatFFB model in default however I am sure from my experience with civil flightsims that we need the app to "improve" default FFB features.

That's why plugins like FS force or X force were created. The default simplywasn't good enough to satisfy our community.

Another thing is the need for different profiles (heavy jets, GA planes,choppers etc.) They all have different FFB requirement. Also good UI willprovide simplicity for the user with not much knowledge of what's going on"under the hood".

Las but not least I would love to interface the FFB with Aerofly FS2 sim whichis kind of a "new kid on the block" with huge potential and amazingVR support. Sadly this sim doesn't support FFB as it is still in early accessbut it already has public SDK that can be used to tap into all different kindsof flight data.

I'm actively contributing on theirs forum and there are many great mindscapable to help.

I mean very experienced real pilots with deep knowledge of flight dynamics,programmers, mechanical engineers, modelers, ww veterans, you name it. Thething is nobody is excited to start such a long process from scratch and whatyou did is well enough to draw theirs attention..

Ideally the app would support multiple flightsims and describe the feedbackbased on 1-user settings, 2-sim output, then send it to the hardware.

I don't know if this is the right approach but seem like others are doing itthis way.

 

Jay

 

 

BTW

the gimbal doesn't have moving parts (the white tube that you though is slidingin the black one).

It's just been manufactured like this perhaps for easy assembly. It's reallysmart design though.

I'm planing to replicate this in my stick version using metal framing, bearingsand universal coupling joint.

How is yours coming up?

 

 

 

Hi

For the app:

Ok I will take it into account.

(DCS has different effects on all Planes, aswell as ROF and IL2. These are mymain Sims.)

I do not own Aero fly. But I am watchingit for some time now. Still waiting formore in deep Systems.

But I think I will focus on getting the NativeFFB running to start with. TheFSX FFB tool that you are talking about shouldwork with the OpenFFB project.

 

I cannot port the actual Project to a Due.At last not now.

1. I don’t own one I7tavEvSRQCKYZJmXKBZYujSE3eoKLhWSQSM2yE2HHhAgMGLmx8EQGkSrBBAUigsGLjxw8MMl7cEAFDAwlYgxwMCMACIYuWG0a24GhCQIAwSNAMqUikghFcQYEAADs=

2. I need to evaluate what GUI I Need touse

Most probleblie I will stay withthe Atmel Studio because it will be les work.

3. I have no time to do it at the Moment.

Sorry for that.

 

For my Gimbal: I have the Center ready. Andit is moving a bit less than a mm.

I am using a 3d print at the Moment butwill Change to metal when I am satisfiedwith the design.

My Motor connections are real bat at theMoment. 1. Too much Play

2. To week motor mount (bends underStress)

 

MetalGear_Honk

 

 

 

 

 

what if there was a parcel on you door step one day, withDUE board inside and perhaps even gimbal mate? I7tavEvSRQCKYZJmXKBZYujSE3eoKLhWSQSM2yE2HHhAgMGLmx8EQGkSrBBAUigsGLjxw8MMl7cEAFDAwlYgxwMCMACIYuWG0a24GhCQIAwSNAMqUikghFcQYEAADs=

Where are you from? (if that's not a secret)

 

 

 

Sorry for confusion..

I just run the gimbal design through 3D software and it turned out I was wrong.

The white part in sidewinder stick need to rotate around yaw axis otherwise thecross will jam in diagonal movements of the stick.

Although it looks like really great concept, I'm afraid that so many bearingsplus the need for two part cross will introduce unwanted play in the stick..Especially with long extension.

 

 

 

Hi

 

Sorry for the Delay.

 

First about the unwanted play in aDesign:

 

The Ball bearings are 90° crossed so thatthey will delete most Play by design.

 

And when we are extending the two slidingparts it will be much easier to get them"free" of Play. Using precisionholes will improve the result as well.The use of a Reamer is what I suggest. Somegrease will do the rest.

 

 

 

For throwing away your Money: I cannot forbidyou to send your Equipment away.

 

 

 

I think that you should concentrateon the Gimbal design, as that would help.And if I am to give an adviceinclude 608ZZ Ball bearings. These are easy to getand work extremely well. ihave used them in all of my Joystick designs.

 

 

MetalGear_Honk

 

 

 

Hi

It’s me again.AHsJFJhC1JVdTiwNFHjIzQRYghQooATggIBTTTRlyNVL0Z4COQLoGuCnQgAduFxBEWgoDaMibGzFWSPmU4csj+wM1PKj1okIIUjp6WEESB+BGGKhQHUrj5U6CaosGTVmjgxZfDhtogIpxgAJAgBgmZTpC5kNAxkcmaIq1B1PgSotWCgQzyIagHx4afCnFZqFdF5IKWCKgGENQxAxKdGi1yBCpWrMCCDCAC0TAdrsuGRDyAcYFIJ0QSDAAIIEiQBEYpWEh5JXTySZAQBmxYADD8KQaOQCTi8cXFZ5cGRBDYRUZd6AuiFnIIhOW1QQucCBFxJMLM7QFTgiioNZheYuAgwIADs=

I have used my coffee brake to flip thruDocuments and Datasheets. The Due willwork just fine. Maybe I can even portthe FFB functions to the Arduino IDE.

 

As you suggested I am looking into somesort of Software to communicate with theJoystick.

We have two Options to do it.

1. Integrate it in the HID Descriptor sowe can do it on the fly. But that isquiet complicated.

2. Use some sort of disguised Programmer. Likemost Gaming-Keyboards donowadays. But that would mean that it can onlyprogrammed while not Using(Flying).

 

What do you think is better?

 

And last I have reread the USB- Classdocument.

I am not able to find a way to integratethree FFB Axis into one endpoint.

I can integrate a second descriptor so itwould Show up asJoystick+RudderPedals. If that is ok on your side?

 

Maybe we should bring this discussion backto the Forum? Maybe the others havesome ideas as well?

 

MetalGear_Honk

 

 

Hey mate

 

I was also thinking to bring this conversation back to the forum so if it's okwith you I will copy and paste the whole think to one post..

 

As for the gimbal..

My design of control stick is different to yours. I want to build full sizecontroller with pivot point near the floor and very powerful output forces.

Since I'm not restricted by the space (all build into larger box beneath yourlegs) I will go for more traditional solution where one axis"carries" it's motor and gears along with it's movement.

Only the second axis will have these components mounted static.

 

Arduino IDE..

Using IDE to load the script would be only smart because we want to keep iteasy for other pilots to use. That is a key feature of any successful platformI think. So yes please, if you'r able to do that, it would be great.

 

Third axis..

Perhaps this would be something that people on the forum can help with as Idon't really know how it can be doneRAPGeMjFAwwSaU8Zgkc5dwXH2OZ5BXcIExskghZFAQTo6AQBAh1DFoIGNvP18mC7l6+LgX5NyCFbmG4dih4H9ViYw8Aaw2TbJIihcUMQCRkCKjgwhkxZhWZA6CgRlAHOjAZ3cuGZOXMXkhROygiK8CAOBQh47py6kwSoiRFsoA1KEEPNhzUIBAhAIOHDiREt7PwiZIQLDzITSpSYEOYNGCtjvhyqdGUDlBdCF3agCfJpkp4FHC6EECEixAUOkuwKLhQIADs=

Anyway we can always add third axis to the existing script later I guess.

 

Software..

We don't really need to change parameters "on the fly". As long asDUE looks like general FFB HID we can use simple program to presetforces/profiles and tune them based on our last flight experience.

I've found brilliant "open source" project that will give us greatkickstart. It is exactly what I was talking about and the author providedsource code so it can be extended and modified. All credit to "averagepilot".

 

https://forums.eagle.ru/showthread.php?t=84883

 

I'm going to order Due and other electronics soon. Looking forward to get thisinto testing phase8G+JI4EIOPicEGGGjQAhZAgBTrzXigYV4qAwYUnOAF8uNAGhd2BDPAQkEIaS1DNkrAI4ODTwYYoIjRTQhInY0EQLCh4AUJD5UYzTOEKGqsX7GuTs2qiACBA2DDeuU6yKvZs2bJCkHLlgDXQAA7

 

Regards Jay

 

Hi

Yes I think we should get back in theForum.

 

I have seen this Gimbal design somewhere.

But I think it is a bit unhappy because ofthe asynchrony Forces in the twoaxis. But that is up to personal likings Ithink.

 

For using the IDE or a small tool toreprogram some curves will most likelypossible. But it will need to wait untilwe have a stable Controller running.

 

If you feel like it you can read the PIDdocument (Device Class Definition forPhysical Interface Devices)

It contains all possible functions that aHID can use. But be warned it is notvery easy to understand.

As for now I will stay with two axis. Andmost likely add another Controller forRudder FFB. (Or use the Open Sim Wheel whichis simply a one Axis FFB)

 

I have taken a look at the Project you mentionedif I understand it correctly itwould hang between DCS and a FFB Stick. So itwill work as well with the OSFFBwe are building.

 

MetalGear_Honk

 

 

I will re-post this conversation to the forum later andhopefully more people will jump in.

 

Considering the two axis per controller, I have to agree it's for the best andthe rudder can have it's own controller because we need to implement brake'spotentiometers as well. Also it would be rather awkward having all thosecomponents hard wired into one "junction" and swapping let's say yokefor joystick would be tricky task.

That brings a question.. Do you see this possible? One FFB axis for rudder andtwo analog pots for it's brakes, all of them connected to one DUE controller?

Anyway this would be a next chapter so don't bend your mind about it too much,I'm just curious though.

 

Let's focus on the joystick for now. Two axes, some buttons, native FFB HID.Having this done would be great leap mate.

I was already studding some of the documentation but as you said it is not easyto understand so I'm slowly learning as I go..

 

That little program I mentioned is able to handle generic FFB devices so itshould work with OSFFB. I have the source code on my PC and was hoping to getsome help from my friend to extend functionality as I need.

 

I'm really glad that the wheels are turning somehow cause I was struggling withthis for some time on my own..

Is there anything I can help you with at the moment?

 

Jay

 

Hi

bit in a hurry at the Moment.

the OSFFB Stick is 2 FFB Axis 4 Normal Axis 32 Buttons and 2 Hats.

 

 

that is inplemented already. it is not covered as Inputs. so it is easyer totest for me. the code is ready and i will implement it as needed. working onthe ADS wires at the Moment. i whant the FFB in 16Bit Resolution.

 

 

for some help: i have no Gimbal to test. if you can draw something for me to 3dPrint it would be great.

later i will mill me some nice Metal parts, but for testing it would be greatto have something simple to use.

 

 

Sorry no spell checker

 

 

MetalGear_Honk

 

The threemost dangerous threads to Programmers:

  • Fresh air
  • Bright sun light
  • The horrifying screams of singingbirds

Link to comment
Share on other sites

Hi metalgear!

 

thank you for teaching about source code and showing good conversation.

 

At now, I'm programming using Arduino IDE slowly.

Arduino default library is supporting USB_Core and not complete HID.

I'm adding "set report via Interrupt OUT" to HID Library.

 

I think that it is good for Open Source, supporting many kind of sensor(ex. POT, Hall Sensor, Rotary Encoder).

So, sensor function should be write in other source. (ex ."Sensor.cpp", function name "Sensor_IC_name_read()")

and data input using pointer*.

conversion to 16 bit is easy using "math.h map();".

 

I think that beginer user should set configure which is Sensor_Read, Button_Count(Shift Register Read Count), motor_driver_select.

So Variable_HID_Descriptor is needed for button count and axis count.

 

those is my idea for minimum requirement of Open Source FFB Stick.

if you and VR Flight Sim make source code management page(like GitHub), plz let me know!

I want to study more about FFB.

 

I think Arduino Due is good.

I'm suffering SRAM size too.

 

Due works with 3.3V, 3.3V is supported by HOTAS Warthog Stick(CD4021BC).

it will work properly.(maybe)

also, 3.3V is supported MLX90393.

it makes sensor circuit simple, because it has 2 axis outputs with one chip and not needed registor compared to MLX90333.

 

Thanks


Edited by crow0827
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...