This commit is contained in:
rawhide kobayashi 2025-01-01 23:24:09 -06:00
commit 12573d6245
49 changed files with 119281 additions and 0 deletions

View File

@ -0,0 +1,271 @@
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_HX711.h>
#include <ArduinoJson.h>
#include <avr/wdt.h>
const uint8_t hx711_data = A3;
const uint8_t hx711_clk = A2;
Adafruit_HX711 hx711(hx711_data, hx711_clk);
const uint8_t pump_relay = A1;
const uint8_t solenoid_relay = A0;
const uint8_t pump_tacho = 2;
const uint8_t flow_tacho = 3;
const uint8_t fans_tacho = 8;
const uint8_t temp_1wire = 4;
const uint8_t pump_pwm = 5;
const uint8_t fans_pwm = 10;
volatile uint8_t default_pump_speed = 255;
volatile uint8_t default_fan_speed = 250;
volatile uint8_t pump_pulse_count = 0;
volatile uint8_t flow_pulse_count = 0;
volatile uint8_t fans_pulse_count = 0;
DeviceAddress air_therm = { 0x28, 0xCC, 0xAE, 0x46, 0xD4, 0x1B, 0x7D, 0xC9 };
DeviceAddress water_therm = { 0x28, 0xD8, 0x79, 0x46, 0xD4, 0x76, 0x2C, 0x17 };
const uint8_t temp_precision = 12;
OneWire oneWire(temp_1wire);
DallasTemperature sensors(&oneWire);
//we will use this function to periodically self-reset to avoid timer overflows
void(* resetFunc) (void) = 0;
void setup() {
Serial.begin(115200);
sensors.begin();
sensors.setResolution(water_therm, temp_precision);
sensors.setResolution(air_therm, temp_precision);
sensors.setWaitForConversion(false);
hx711.begin();
//set pwm timer to highest frequency
TCCR1B = (TCCR1B & 0b11111000) | 0x01;
pinMode(pump_pwm, OUTPUT);
pinMode(fans_pwm, OUTPUT);
analogWrite(pump_pwm, default_pump_speed);
analogWrite(fans_pwm, default_fan_speed);
pinMode(pump_tacho, INPUT);
attachInterrupt(digitalPinToInterrupt(pump_tacho), count_pump_pulse, FALLING);
pinMode(flow_tacho, INPUT);
attachInterrupt(digitalPinToInterrupt(flow_tacho), count_flow_pulse, FALLING);
pinMode(fans_tacho, INPUT);
pinMode(pump_relay, OUTPUT);
pinMode(solenoid_relay, OUTPUT);
wdt_enable(WDTO_2S);
Serial.print("Hello!");
Serial.println();
}
//value limits correspond to +1 mbar and -700mbar. the sensor reports ~30k at gain 64 per 100mbar. all an approximation, don't need super high accuracy.
float pressure_raw_to_mbar(int32_t pressure_raw) {
return (pressure_raw - 390000) * (1700.0 / (5600000 - 390000)) - 700;
}
void count_pump_pulse() {
pump_pulse_count++;
}
void count_flow_pulse() {
flow_pulse_count++;
}
void count_fans_pulse(uint32_t* last_fans_tacho_pulse, uint32_t* cur_loop_timestamp) {
static bool last_state = HIGH;
static bool cur_state;
cur_state = digitalRead(fans_tacho);
if (cur_state == LOW && last_state == HIGH) {
fans_pulse_count++;
*last_fans_tacho_pulse = *cur_loop_timestamp;
while (digitalRead(fans_tacho) == LOW);
last_state = HIGH;
}
last_state = cur_state;
}
float pump_ema(uint8_t new_reading, uint32_t* last_timestamp, uint32_t* cur_timestamp) {
static const float alpha = 0.8;
static float ema = new_reading;
ema = alpha * (new_reading * (60000 / (*cur_timestamp - *last_timestamp))) + (1 - alpha) * ema;
return ema;
}
//ema calculation to get flowrate in liters per hour with an aquacomputer flow monitor (approximate)
float flow_ema(uint8_t new_reading, uint32_t* last_timestamp, uint32_t* cur_timestamp) {
static const float alpha = 0.8;
static float ema;
ema = alpha * (new_reading * (3600000 / (*cur_timestamp - *last_timestamp)) / 170) + (1 - alpha) * ema;
return ema;
}
int fan_PID(float* air_temp, float* water_temp, uint32_t* cur_loop_timestamp) {
static const float kp = 120.0;
static const float ki = 0.16;
static const float kd = 4.0;
static float integral = 0;
static float derivative = 0;
static float last_error = 0;
static float error;
static float delta;
static float last_time = *cur_loop_timestamp;
static const float min_water_temp = 5.0;
static const float max_water_temp = 40.0;
static const uint8_t min_fan_speed = 90;
static const uint8_t max_fan_speed = 255;
static const uint8_t temp_target_offset = 4;
static const uint8_t fan_offset = 10;
static int16_t fan_speed;
if (*water_temp >= max_water_temp) {
return max_fan_speed;
}
else if (*water_temp <= min_water_temp) {
return 0;
}
else {
error = *water_temp - min(*air_temp + temp_target_offset, max_water_temp);
delta = *cur_loop_timestamp - last_time;
//mitigate unlimited integral windup
if (fan_speed == max_fan_speed) {
integral += error * delta;
}
if (*air_temp + temp_target_offset > *water_temp - 1) {
integral = 0;
}
derivative = (error - last_error) / delta;
fan_speed = round(constrain(min_fan_speed + fan_offset + (kp * error + ki * integral + kd * derivative), min_fan_speed, max_fan_speed));
last_error = error;
return fan_speed;
}
}
void loop() {
static uint32_t cur_loop_timestamp;
static uint32_t serial_last_sent;
static uint32_t last_temp_request_timestamp;
static uint32_t low_pressure_confirmation_timestamp;
static uint32_t last_fans_tacho_pulse;
static uint32_t last_pressure_check;
static float new_water_temp;
static float new_air_temp;
static float water_temp;
static float air_temp;
static bool sucking = false;
static bool checking_low_pressure = false;
static int16_t low_pressure_threshold = -500;
static int16_t high_pressure_threshold = -600;
static float loop_pressure = pressure_raw_to_mbar(hx711.readChannelRaw(CHAN_A_GAIN_64));
static float new_loop_pressure = loop_pressure;
static uint8_t fan_speed;
static StaticJsonDocument<64> output_stats;
static JsonObject temps = output_stats.createNestedObject("temps");
static JsonObject tacho = output_stats.createNestedObject("tacho");
cur_loop_timestamp = millis();
//reset the system when approaching timer overflow
if (cur_loop_timestamp >= 4000000000) {
resetFunc();
}
if (cur_loop_timestamp - last_temp_request_timestamp >= 1000) {
new_water_temp = sensors.getTempC(water_therm);
new_air_temp = sensors.getTempC(air_therm);
if (new_water_temp != -127) {
water_temp = new_water_temp;
}
if (new_air_temp != -127) {
air_temp = new_air_temp;
}
sensors.requestTemperatures();
fan_speed = fan_PID(&air_temp, &water_temp, &cur_loop_timestamp);
analogWrite(fans_pwm, fan_speed);
output_stats["mbar"] = loop_pressure;
temps["air"] = air_temp;
temps["water"] = water_temp;
tacho["fan"] = fan_speed;
tacho["pump"] = pump_ema(pump_pulse_count, &last_temp_request_timestamp, &cur_loop_timestamp);
tacho["flow"] = flow_ema(flow_pulse_count, &last_temp_request_timestamp, &cur_loop_timestamp);
serializeJson(output_stats, Serial);
Serial.println();
fans_pulse_count = 0;
pump_pulse_count = 0;
flow_pulse_count = 0;
last_temp_request_timestamp = cur_loop_timestamp;
wdt_reset();
}
if (cur_loop_timestamp - last_pressure_check >= 100) {
loop_pressure = pressure_raw_to_mbar(hx711.readChannelRaw(CHAN_A_GAIN_64));
if (sucking == false) {
if (loop_pressure > low_pressure_threshold) {
if (checking_low_pressure == false) {
checking_low_pressure = true;
low_pressure_confirmation_timestamp = cur_loop_timestamp;
}
if (cur_loop_timestamp - low_pressure_confirmation_timestamp >= 1000) {
digitalWrite(pump_relay, HIGH);
digitalWrite(solenoid_relay, HIGH);
sucking = true;
checking_low_pressure = false;
}
}
else if (cur_loop_timestamp - low_pressure_confirmation_timestamp >= 1000) {
checking_low_pressure = false;
}
}
else {
if (loop_pressure < high_pressure_threshold) {
digitalWrite(pump_relay, LOW);
digitalWrite(solenoid_relay, LOW);
sucking = false;
}
}
last_pressure_check = cur_loop_timestamp;
}
}

View File

@ -0,0 +1,830 @@
:100000000C948A000C94690D0C94420D0C94B2006F
:100010000C94B2000C94B2000C94B2000C94B20098
:100020000C94B2000C94B2000C94B2000C94B20088
:100030000C94B2000C94B2000C94B2000C94B20078
:100040000C94F80C0C94B2000C94B60D0C94900D1A
:100050000C94B2000C94B2000C94B2000C94B20058
:100060000C94B2000C94B200005EBCE2613FDD83F0
:10007000C29C7E20A3FD1F41009D23BE46DB65F888
:100080008C11AF32CA57E974000000002400270029
:100090002A0000000000250028002B0000000008B6
:1000A000000201000003040700000000000000003F
:1000B000CDCCCC3D0AD7233C17B7D13877CC2B32E7
:1000C0009595E6241FB14F0A000020410000C84268
:1000D00000401C4620BCBE4CCA1B0E5AAEC59D74C7
:1000E0000000000023002600290004040404040486
:1000F00004040202020202020303030303030102D7
:1001000004081020408001020408102001020408A5
:100110001020E80D11241FBECFEFD8E0DEBFCDBF09
:1001200011E0A0E0B1E0E0E3F3E302C005900D923E
:10013000AE39B107D9F723E0AEE9B1E001C01D92B5
:10014000A331B207E1F710E0CAE8D0E004C021977C
:10015000FE010E945F17C938D107C9F70E94640EDB
:100160000C9496190C940000833081F028F48130AF
:1001700099F08230A9F008958730A9F08830C9F04D
:100180008430B1F4809180008F7D03C08091800025
:100190008F7780938000089584B58F7784BD08950C
:1001A00084B58F7DFBCF8091B0008F778093B000B6
:1001B00008958091B0008F7DF9CFCF93DF93282FE2
:1001C00030E0F901E456FF4F8491F901E250FF4F0E
:1001D000D491F901E651FF4FC491CC23A1F08111D4
:1001E0000E94B400EC2FF0E0EE0FFF1FE052FF4F33
:1001F000A591B491EC91ED2381E090E009F480E0C9
:10020000DF91CF91089580E090E0FACF1F93CF93D4
:10021000DF93282F30E0F901E456FF4F8491F90174
:10022000E250FF4FD491F901E651FF4FC491CC2326
:10023000A9F0162F81110E94B400EC2FF0E0EE0F10
:10024000FF1FEE56FF4FA591B4918FB7F894EC9134
:10025000111108C0D095DE23DC938FBFDF91CF91C1
:100260001F910895DE2BF8CFCF93DF9390E0FC0130
:10027000E250FF4F249186519F4FFC0184918823C7
:10028000C9F090E0880F991FFC01E857FF4FA59136
:10029000B491FC01EE56FF4FC591D49161110DC090
:1002A0009FB7F8948C91209582238C938881282382
:1002B00028839FBFDF91CF910895623051F49FB79B
:1002C000F8943C91822F809583238C93E8812E2B88
:1002D000EFCF8FB7F894EC912E2B2C938FBFEACFF2
:1002E0001F93CF93DF93182FEB0161E00E9434013D
:1002F000209739F460E0812FDF91CF911F910C940A
:100300000601CF3FD10511F461E0F5CFE12FF0E018
:10031000E456FF4FE491E33031F140F4E130B1F0C5
:10032000E230E1F0C038D1057CF7E4CFE73029F1C5
:10033000E83059F1E430B1F7809180008062809319
:100340008000D0938B00C0938A0004C084B580687D
:1003500084BDC7BDDF91CF911F91089584B58062A0
:1003600084BDC8BDF7CF80918000806880938000F5
:10037000D0938900C0938800EDCF8091B000806851
:100380008093B000C093B300E5CF8091B00080624D
:100390008093B000C093B400DDCF3FB7F894809154
:1003A0003F0290914002A0914102B091420226B5D5
:1003B000A89B05C02F3F19F00196A11DB11D3FBF9D
:1003C000BA2FA92F982F8827BC01CD01620F711D6C
:1003D000811D911D42E0660F771F881F991F4A9566
:1003E000D1F708958F929F92AF92BF92CF92DF92F2
:1003F000EF92FF926B017C010E94CD014B015C01E9
:10040000C114D104E104F104B9F00E94CD016819CE
:1004100079098A099B09683E73408105910580F33B
:1004200021E0C21AD108E108F10888EE880E83E0C5
:10043000981EA11CB11CE4CFFF90EF90DF90CF90ED
:10044000BF90AF909F908F9008958091CC018F5F67
:100450008093CC0108958091CB018F5F8093CB0175
:1004600008950895AF92BF92CF92DF92EF92FF92DC
:100470000F931F93CF93DF936C017B018B01040FCC
:10048000151FEB015E01AE18BF08C017D10759F068
:100490006991D601ED91FC910190F081E02DC601AA
:1004A0000995892B79F7C501DF91CF911F910F91A4
:1004B000FF90EF90DF90CF90BF90AF900895FC0138
:1004C000538D448D252F30E0842F90E0821B930BB9
:1004D000541710F0CF96089501970895FC01918D5F
:1004E000828D981761F0A28DAE0FBF2FB11D5D9662
:1004F0008C91928D9F5F9F73928F90E008958FEF04
:100500009FEF0895FC01918D828D981731F0828DB7
:10051000E80FF11D858D90E008958FEF9FEF08950E
:10052000FC01918D228D892F90E0805C9F4F821B72
:1005300091098F739927089583E492E00E949002B5
:1005400021E0892B09F420E0822F089580E090E0DB
:10055000892B29F00E949C0281110C9400000895BF
:10056000FC01A48DA80FB92FB11DA35ABF4F2C9128
:10057000848D90E001968F739927848FA689B7891F
:100580002C93A089B1898C91837080648C93938D16
:10059000848D981306C00288F389E02D80818F7DB9
:1005A00080830895EF92FF920F931F93CF93DF9371
:1005B000EC0181E0888F9B8D8C8D98131AC0E8899F
:1005C000F989808185FF15C09FB7F894EE89FF896E
:1005D0006083E889F98980818370806480839FBF0C
:1005E00081E090E0DF91CF911F910F91FF90EF900C
:1005F0000895F62E0B8D10E00F5F1F4F0F7311271C
:10060000E02E8C8D8E110CC00FB607FCFACFE88956
:10061000F989808185FFF5CFCE010E94B002F1CF2C
:10062000EB8DEC0FFD2FF11DE35AFF4FF0829FB7CA
:10063000F8940B8FEA89FB8980818062CFCFCF93BA
:10064000DF93EC01888D8823B9F0AA89BB89E889FA
:10065000F9898C9185FD03C0808186FD0DC00FB6A0
:1006600007FCF7CF8C9185FFF2CF808185FFEDCF1E
:10067000CE010E94B002E9CFDF91CF910895DC0155
:1006800080E0615090F09D919827E92FEF70F0E0A5
:10069000E859FF4F2491E92FE295EF70F0E0E85818
:1006A000FF4FE491822F8E27ECCF0895DC012C912F
:1006B0001196ED91FC91F8948181822B8183928136
:1006C000322F30959323928387E090E00197F1F7E2
:1006D00081818323818383E290E00197F1F7908108
:1006E0007894EFECF0E03197F1F7922381E009F490
:1006F00080E00895FC0190810180F281E02D292F96
:10070000209560FF14C0F8948281822382838181C6
:10071000892B8183A3E2B0E01197F1F78281982BB6
:100720009283789487ED90E00197F1F70895F8941B
:100730008281822382838181892B8183AFEFB0E024
:100740001197F1F78281982B928378948FE090E053
:10075000EBCFDF92EF92FF920F931F93CF93DF9334
:10076000EC01D62EE42E08E010E0FF24F39461E0C3
:100770008D2D8F2109F460E0CE010E947A03FF0CD9
:1007800001501109A1F7E11010C0F894E981FA8134
:1007900091818881809589238183E981FA81928181
:1007A00088818095892382837894DF91CF911F91EE
:1007B0000F91FF90EF90DF900895EF92FF920F93CB
:1007C0001F93CF93DF938C017B0140E065E50E948E
:1007D000A903E70188E0E80EF11C699140E0C80137
:1007E0000E94A903CE15DF05C1F7DF91CF911F91BC
:1007F0000F91FF90EF900895FC0190810180F281AC
:10080000E02DF8948181292F20958223818378948B
:100810003DE743E050E0315029F1DA011197F1F75B
:1008200080818923C1F3F89482818223828381812C
:10083000892B81837894ABE7B7E01197F1F7F894AF
:10084000818182238183A3E1B1E01197F1F7808157
:10085000982381E009F080E07894E3E6F6E03197B0
:10086000F1F7089580E008956F927F928F929F92A2
:10087000AF92BF92CF92DF92EF92FF920F931F93AE
:10088000CF93DF938C01EB018091E9029091EA0212
:100890000E94FC03882309F43FC0B8018091E9025B
:1008A0009091EA020E94DD0340E06EEB8091E90244
:1008B0009091EA020E94A9037E016E0189E0C80EB0
:1008C000D11C8E01A090E902B090EA0288E0882E47
:1008D000912C712C66246394C5010E9456038111EA
:1008E0007628660CE1E08E1A9108B1F7F801719252
:1008F0008F01CE16DF0631F78091E9029091EA026E
:100900000E94FC03813041F4F70181917F01811144
:1009100005C0E017F107C1F790E008C068E0CE011C
:100920000E943F0391E028852813F6CF892FDF919D
:10093000CF911F910F91FF90EF90DF90CF90BF90DC
:10094000AF909F908F907F906F900895CF93DF939B
:10095000CDB7DEB729970FB6F894DEBF0FBECDBF77
:10096000BE016F5F7F4F0E943404882331F08D8178
:100970008F33A9F020F48F31A1F080E007C08F35CC
:1009800021F08F37D1F78CE001C08BE029960FB6AC
:10099000F894DEBF0FBECDBFDF91CF9108958AE0FE
:1009A000F5CF89E0F3CF0F931F93CF93DF93CDB7AC
:1009B000DEB729970FB6F894DEBF0FBECDBF8C010E
:1009C000BE016F5F7F4F0E943404811105C060E05B
:1009D00070E08EEF92EC3EC06A8170E0762F662761
:1009E000770F770F770F298148E0249F900111241A
:1009F000262B372BF80180818031E1F4688566234E
:100A0000C9F070E08F81AB01481B5109CA0196956E
:100A1000982F8827979587950E941E17CB0180975E
:100A2000B90153E0660F771F5A95E1F760789C0192
:100A3000260F371F213854EE35074CF2B901330F1A
:100A4000880B990B0E94D81520E030E040E05CE371
:100A50000E948D1629960FB6F894DEBF0FBECDBF4B
:100A6000DF91CF911F910F9108956F3FA9F0E62F6D
:100A7000E295EF7044E0E49F90011124DC01ED91D8
:100A8000FC91E20FF31F6F7082819381B6E06B9F40
:100A9000800D911D1124089590E080E00895CF937A
:100AA000DF93EC0188819981DC01ED91FC9101904B
:100AB000F081E02D09952A813B81820F931F9B8352
:100AC0008A83DF91CF910895CF93DF93EC018881E2
:100AD0009981DC01ED91FC910280F381E02D099573
:100AE0002A813B81820F931F9B838A83DF91CF9161
:100AF00008958F929F92AF92BF92CF92DF92EF9222
:100B0000FF920F931F93CF93DF93CDB7DEB7669716
:100B10000FB6F894DEBF0FBECDBF6C018E01095E2B
:100B20001F4F78018AE0882E912CA12CB12CCB018B
:100B3000BA01A50194010E943217942F852F605DA0
:100B4000F80162938F01A901692F782F4115510592
:100B50006105710561F7A7014E1B5F0BBF01C6015F
:100B60000E94640566960FB6F894DEBF0FBECDBF37
:100B7000DF91CF911F910F91FF90EF90DF90CF9079
:100B8000BF90AF909F908F900895DC0152969C91FA
:100B90005297915084E0989F900111245096ED91C6
:100BA000FC91E20FF31F228133812115310579F089
:100BB00041818081481758F481E0840F818386E069
:100BC000489F200D311D11242115310521F460E0CD
:100BD00070E08FEF0895B901892F8295807F840F8F
:100BE0000895AF92BF92CF92DF92EF92FF920F9350
:100BF0001F93CF93DF93EC018B018C8180FF2CC07E
:100C0000A881B981FB018381948130E020E00097C5
:100C100019F1A817B90709F041C0F80140815181C5
:100C200012969C911297915012969C931297911143
:100C300013C08D919C9111972115310561F1F90136
:100C400091838083FA0180819181FC01228133812B
:100C5000BD01CA01F90109958C81807631F1209797
:100C600021F1F8805801F5E1AF0EB11C8FEFF816B5
:100C7000D1F06F2DC5010E9435056C01FC01E580A6
:100C8000B8010E94F105F801818DF6018083F80119
:100C9000F18EFE2CEBCF94838383D4CF9C01FC0197
:100CA00080819181B4CFF882F9821C82DF91CF914B
:100CB0001F910F91FF90EF90DF90CF90BF90AF907A
:100CC000089542E050E060E471E083E492E00C9427
:100CD0003202FB0101900020E9F73197AF01461B7A
:100CE000570B0C946405CF92DF92EF92FF920F9313
:100CF0001F93CF93DF938C016B017A0162E20E9414
:100D00004F05E601EC0CFD1CEC16FD0699F069910F
:100D1000E3E4F1E0D480DD20C9F0329683816813EA
:100D2000F9CF6CE5C8010E944F056D2DC8010E94E6
:100D30004F05EACF62E2C801DF91CF911F910F9179
:100D4000FF90EF90DF90CF900C944F056111EECFA4
:100D500066E571E0C8010E946906D6CF2F923F92E6
:100D60004F925F926F927F928F929F92AF92BF92BB
:100D7000CF92DF92EF92FF920F931F93CF93DF9367
:100D8000CDB7DEB76B970FB6F894DEBF0FBECDBF01
:100D90007C018B01DC0114968C9114978A3009F444
:100DA000A0C2F0F4843009F479C268F4833009F405
:100DB00090C26DE571E0C8010E946906D8011296E3
:100DC0008D919C9129C2853009F47BC2863089F7C8
:100DD0008C9162E671E0811155C067E671E052C006
:100DE0008E3009F440C0C8F48C3019F7CD90DD90F6
:100DF000ED90FC90B701A601F7FE0BC06DE2C801B3
:100E00000E944F0544275527BA014C195D096E0908
:100E10007F09C8010E947905FCC1803209F415C21E
:100E2000803439F66BE5C8010E944F05D701FC906C
:100E3000BFEFFB1609F4E9C1F801848195816F2D9C
:100E400045960E9435057C01B8010E94AE06D70187
:100E50001596FC90BFEFFB1609F4D7C16CE2C801F0
:100E60000E944F05E5CFF70180809180A280B3807A
:100E7000A5019401C501B4010E942915882331F010
:100E80006DE571E0C8010E946906C3C120E030E051
:100E9000A901C501B4010E942915882371F0A5019B
:100EA0009401C501B4010E94BD149B01AC01C501B0
:100EB000B4010E942915882319F320E030E0A9012C
:100EC000C501B4010E94291587FF08C06DE2C80161
:100ED0000E944F05B7FAB094B7F8B09420E836E90D
:100EE00048E15BE4C501B4010E94881687FD83C018
:100EF00074E1C72ED12CE0E2EE2EF12C312C212C06
:100F0000F601E853FF4F6591759185919491A50184
:100F100094010E94291518167CF0F601E055FF4F48
:100F20002591359145915491C501B4010E948D16CA
:100F30004B015C012E0C3F1CF594E794F4E0CF1AB2
:100F4000D1082CEFC2162FEFD206D1F63FEF3F8B20
:100F500020E030E0A901C501B4010E9488161816EE
:100F60000CF051C02CEA35EC47E257E3C501B4015F
:100F70000E94291518160CF446C0AF89B4E0AB02E4
:100F8000C0011124D12CC12CFC01E055FF4F2F01D1
:100F90009C0128533F4F39013F893F3F09F433C03B
:100FA000F201EC0DFD1D659175918591949120E004
:100FB00030E040E251E40E948D16A50194010E94A8
:100FC000881618167CF4F301EC0DFD1D2591359162
:100FD00045915491C501B4010E948D164B015C01ED
:100FE0002E183F08F594E7948F8981508F8B94E0F9
:100FF000C91AD108D1CF50E2E52EF12C85E08F8BB4
:10100000312C212CA5CFC501B4010E94A7156B017D
:101010007C012B013C0180E492E4AFE0B0E0888FDA
:10102000998FAA8FBB8F96E09F8BAAE04A16510436
:1010300061047104E0F0688D798D8A8D9B8D2AE0C2
:1010400030E040E050E00E943217288F398F4A8FFD
:101050005B8FBF89B150BF8BC301B2012AE030E082
:1010600040E050E00E94321729013A01DECFC7016B
:10107000B6010E94D6159B01AC01C501B4010E94C6
:10108000BC144B015C01688D798D8A8D9B8D0E940B
:10109000D6159B01AC01C501B4010E948D162B0130
:1010A0003C010E94A7154B015C010E94D6159B01D3
:1010B000AC01C301B2010E94BC149B01AC010E94AF
:1010C000BD140E94A715860E971EA81EB91E888DF6
:1010D000998DAA8DBB8D88169906AA06BB06C0F00D
:1010E0009FEFC91AD90AE90AF90A2114310439F122
:1010F000AAE0CA16D104E104F10408F1BFEF2B1AEB
:101100003B0A812C912C5401C12CD12C7601C39423
:101110002AE0422E512C612C712CC501B401A3018F
:1011200092010E943217672B682B692B61F4EF89BB
:101130001E164CF449015A01E150EF8BEECF812C81
:10114000912C5401E5CFB701A601C8010E94790591
:10115000FF89FF2391F16E0121E1C20ED11CF88FAE
:1011600076019AE0492E512C612C712C388D31502A
:10117000388F3F3F69F0C501B401A30192010E947D
:101180003217605DD6016E936D0149015A01EECFB1
:10119000BF898B2F90E0BC0160957095F701E81B2B
:1011A000F90B31978EE2808344275527461B570B56
:1011B0006E0D7F1DC8010E9464052114310449F1A0
:1011C00065E6C8010E944F05710137FE07C06DE258
:1011D000C8010E944F05F194E194F108FE01779651
:1011E0009F018AE0C82ED12CC701B6010E940A17C0
:1011F000805D82937B01672BB9F7A9014E1B5F0BC2
:10120000BF01C8010E94640504C06DE5C8010E94C9
:101210004F05F801828193816B960FB6F894DEBF7B
:101220000FBECDBFDF91CF911F910F91FF90EF9037
:10123000DF90CF90BF90AF909F908F907F906F90F6
:101240005F904F903F902F9008956BE7C8010E94E8
:101250004F05D701FC90EE24E394BB24B394BFEF79
:10126000FB16D1F0F801848195816F2D45960E947F
:1012700035056C01B8010E94AE06D6011596FC90AA
:10128000BFEFFB1639F06AE3E11001C06CE2C80160
:101290000E944F05EB24E3CF6DE7B8CF6D917C91B1
:1012A00050E040E06115710541F0FB010190002024
:1012B000E9F73197AF01461B570BC8010E9473062F
:1012C000A8CFED91FC91438150E0BF016C5F7F4F4F
:1012D000F4CFED91FC91438150E0BF016C5F7F4FF3
:1012E00090CF4D915D916D917C9193CDBF92CF92B6
:1012F000DF92EF92FF920F931F93CF93DF93EC0156
:10130000B62EC72E8D85811105C0CE010E94FC032B
:1013100081110EC01B861D861C8680E0DF91CF9157
:101320001F910F91FF90EF90DF90CF90BF900895A5
:1013300040E060EFCE010E94A90301E0E12CD12C36
:1013400011E0CE010E945603F82ECE010E945603F2
:1013500091E0F91218C0813099F51134D8F2DB868A
:10136000D11002C081E08D878B81882399F223966A
:10137000EB2DFC2DCF01089629912193E817F90751
:10138000D9F781E0CBCFEE2DF0E0F8120FC08B85BE
:101390001817A0F4DE01AE0FBF1F13968C918023A7
:1013A00079F4F12C193008F41C87D12EEC0FFD1FB5
:1013B0008381902F9095892383830AC08113F1CF75
:1013C000FE01EE0DF11D8381802B8383FF24F394B6
:1013D0006F2DCE010E947A031F5F000F11F4E3947A
:1013E00001E087E08E1508F0ACCFB7CFEF92FF9207
:1013F0000F931F93CF93DF93CDB7DEB729970FB627
:10140000F894DEBF0FBECDBF8C01FC018081FF24AC
:10141000F394803109F46FC0BE016F5F7F4FC80144
:101420000E943404F82E882309F465C08D818F371B
:1014300009F461C08FE78D838091E9029091EA02FF
:101440000E94FC03B8018091E9029091EA020E9497
:10145000DD0340E06EE48091E9029091EA020E948F
:10146000A90340E06B818091E9029091EA020E9419
:10147000A90340E06C818091E9029091EA020E9408
:10148000A903F8018081803141F040E06D818091B5
:10149000E9029091EA020E94A903E090E60280919D
:1014A000E9029091EA02EE2009F481C00E94FC0357
:1014B000882309F1B8018091E9029091EA020E9423
:1014C000DD034091E00268E48091E9029091EA0234
:1014D0000E94A9038091E00281114FC064E170E095
:1014E00080E090E00E94F2018091E9029091EA028E
:1014F0000E94FC03FE2C8CE08093E3028091E702C3
:10150000823008F462C010E08091E702181708F0FA
:101510005CC08091E3028C3009F457C0E091E9028D
:10152000F091EA02138615861486128611861086BB
:101530001782168215821482138200E0BE016F5F4B
:101540007F4F8091E9029091EA020E9476098823F8
:1015500029F0011779F10F5F101780F78981803129
:1015600091F1CE0101960E94A6049091E302981792
:1015700010F48093E3021F5FC7CF8091E1028823BC
:1015800029F060E08091E2020E94060164E170E0CF
:1015900080E090E00E94F2018091E102882309F44A
:1015A000A3CF61E08091E2020E9406019DCF0E94DC
:1015B000FC03A1CF67E0CE0101960E943F0398850E
:1015C0008913C9CFCBCF8CE0D0CF8F2D29960FB602
:1015D000F894DEBF0FBECDBFDF91CF911F910F9169
:1015E000FF90EF900895CF92DF92EF92FF92CF930A
:1015F000DF93809105030E94DD000197D1F360E045
:10160000809106030E940601C8E1D0E0C12CD12CD4
:10161000760161E0809106030E940601CC0CDD1C7E
:10162000EE1CFF1C809105030E94DD00092E000CBA
:10163000AA0BBB0BC82AD92AEA2AFB2A60E08091B0
:1016400006030E940601219721F7C3E0D0E061E084
:10165000809106030E94060160E0809106030E94CB
:1016600006012197A1F7E7FE02C0FF24FA94C70103
:10167000B601DF91CF91FF90EF90DF90CF9008956A
:10168000BF92CF92DF92EF92FF920F931F93CF936F
:10169000DF93EC01198D1F3F81F0612F45960E9469
:1016A0003505FC018081898F309709F477C0148259
:1016B0008FEF8583BF01812F76C06C0135E0C30EAB
:1016C000D11CE880F9808F89882341F0C6010E94EF
:1016D000C505E62FF72F182F309749F71F89988DEA
:1016E000191324C0103109F459C0110F6D897E8976
:1016F000D701ED91FC91B4E01B9FA0011124C61607
:10170000D70609F044C00190F081E02DBA01C7016D
:101710000995009709F442C020E1F601DC0101902F
:101720000D922A95E1F79E8B8D8B188F0D891E895E
:101730008F8921E0280F2F8BE4E08E9FC0011124B8
:10174000080F191F90E1B92E203111F48FE0B82E47
:10175000F6E0BF9EB0011124D701ED91FC910190FC
:10176000F081E02DC7010995F80193838283892BCD
:1017700009F4B12CD801BC9211961C92012B71F086
:10178000C6010E94C505E62FF72F182F8DCF0480C4
:10179000F581E02DC7010995009729F681E08A833C
:1017A00060E070E08FEFDF91CF911F910F91FF907C
:1017B000EF90DF90CF90BF9008957F928F929F928D
:1017C000AF92BF92CF92DF92EF92FF920F931F934F
:1017D000CF93DF93EC016115710589F4B12CA12C35
:1017E000C501DF91CF911F910F91FF90EF90DF9096
:1017F000CF90BF90AF909F908F907F9008958C81F5
:1018000081112AC080E28C83209741F38FEF888377
:1018100089837A018B016A0185E1C80ED11C688138
:10182000C6010E943505FC01BB24BA94892B09F03E
:10183000B580AA24A39499249394309709F451C0B5
:10184000AA2099F18481843069F08530C9F190E053
:1018500080E0F0E0E0E015C0803209F0BFCF2097D3
:10186000C1F6BCCF0190F081E02D90E080E0309790
:1018700041F0DF010D900020E9F7CD0101978E1BAB
:101880009F0BD8010D900020E9F71197A01BB10B19
:10189000A817B90751F4D8018E0F9F1F8E179F0705
:1018A000C1F031912D913217C9F3A9246B2DC601D6
:1018B0000E943505FC01892B09F4BFCFB580BDCF4F
:1018C0000190F081E02D838190E03496DACF788228
:1018D0002AC06B2DC6010E9435055C01892B09F0D9
:1018E0007FCFC7010E94400B782E4B01672B09F474
:1018F00075CFC7010E94400BF82E962FA92EB72E48
:10190000A114B10409F46ACF84E0F4018483118343
:101910000083F58269816F3FD1F2C6010E943505CF
:10192000DC0115967C92F9825BCF8F929F92AF92E9
:10193000BF92EF92FF920F931F93CF93DF93FC011F
:10194000E380F48081819281009719F18B01658198
:101950007681A7010E94DD0BEC010097D1F0F80120
:1019600080809180A280B380B7010E94F1058EE053
:101970008C8388829982AA82BB8281E0DF91CF9199
:101980001F910F91FF90EF90BF90AF909F908F901D
:10199000089580E0F3CF0F931F93CF93DF93FC0163
:1019A00000811181C8014A96D0E0C0E081F06281D7
:1019B0007381A8010E94DD0BEC01009741F0B80192
:1019C0000E94F10580E28C838FEF88838983BE01BA
:1019D000C801DF91CF911F910F910895CB01BA01FA
:1019E0000C949918CB010C941018CB010C9474171B
:1019F0001F920F920FB60F9211242F933F938F9344
:101A00009F93AF93BF9380913B0290913C02A09132
:101A10003D02B0913E0230913A0223E0230F2D3770
:101A200058F50196A11DB11D20933A0280933B0207
:101A300090933C02A0933D02B0933E0280913F02FE
:101A400090914002A0914102B09142020196A11DE5
:101A5000B11D80933F0290934002A0934102B09346
:101A60004202BF91AF919F918F913F912F910F9023
:101A70000FBE0F901F90189526E8230F0296A11D08
:101A8000B11DD2CF1F920F920FB60F9211242F9338
:101A90003F934F935F936F937F938F939F93AF93F6
:101AA000BF93EF93FF93E0910201F0910301099539
:101AB000FF91EF91BF91AF919F918F917F916F9126
:101AC0005F914F913F912F910F900FBE0F901F90FC
:101AD00018951F920F920FB60F9211242F933F93D8
:101AE0004F935F936F937F938F939F93AF93BF9326
:101AF000EF93FF93E0910001F09101010995FF91AF
:101B0000EF91BF91AF919F918F917F916F915F9175
:101B10004F913F912F910F900FBE0F901F901895EE
:101B20001F920F920FB60F9211242F933F934F9352
:101B30005F936F937F938F939F93AF93BF93EF9335
:101B4000FF9383E492E00E94B002FF91EF91BF9176
:101B5000AF919F918F917F916F915F914F913F9145
:101B60002F910F900FBE0F901F9018951F920F92FC
:101B70000FB60F9211242F938F939F93EF93FF93A0
:101B8000E0915302F09154028081E0915902F0916A
:101B90005A0282FD1BC0908180915C028F5F8F731F
:101BA00020915D02821741F0E0915C02F0E0ED5B74
:101BB000FD4F958F80935C02FF91EF919F918F91E4
:101BC0002F910F900FBE0F901F9018958081F4CF2A
:101BD000E3E4F2E01382128288EE93E0A0E0B0E04A
:101BE00084839583A683B78382E391E09183808386
:101BF00085EC90E09587848784EC90E097878687D2
:101C000080EC90E0918B808B81EC90E0938B828BC9
:101C100082EC90E0958B848B86EC90E0978B868BA2
:101C2000118E128E138E148EE5E0F3E081E1808335
:101C300080E1818360E084E00E943401E2E0F1E031
:101C4000E491A7EFB2E0EC93EEEEF0E0E491F0E087
:101C5000EE0FFF1FE052FF4F8591949112969C93D7
:101C60008E9311971B961C921B971D961C921D9785
:101C70001C961C921C971A961C921A9719961C92E5
:101C8000199718961C92189717961C9217971696E4
:101C90001C92169715961C92159714961C921497E1
:101CA00013961C921397E0EEF2E0168A158A1182C1
:101CB000B287A18717821086108289E0838381E032
:101CC0008483858386830895CF93DF93CDB7DEB772
:101CD0002C970FB6F894DEBF0FBECDBF789484B5B5
:101CE000826084BD84B5816084BD85B5826085BD18
:101CF00085B5816085BD80916E00816080936E00A6
:101D00001092810080918100826080938100809197
:101D10008100816080938100809180008160809348
:101D200080008091B10084608093B1008091B00008
:101D300081608093B00080917A00846080937A0003
:101D400080917A00826080937A0080917A0081602D
:101D500080937A0080917A00806880937A00109254
:101D6000C100E0915302F091540282E08083E0913F
:101D70004F02F09150021082E0915102F091520214
:101D800080E1808310925B02E0915702F09158024B
:101D900086E08083E0915502F09156028081806157
:101DA0008083E0915502F0915602808188608083A3
:101DB000E0915502F0915602808180688083E09125
:101DC0005502F091560280818F7D8083E091E90277
:101DD000F091EA0213861586148612861186108603
:101DE000178216821582148213821092E7021092D3
:101DF000E80211E0BE016F5F7F4F8091E902909190
:101E0000EA020E947609882309F45FC067E0CE01E8
:101E100001960E943F0398858913ECCF8091E702D9
:101E20008F5F8093E7028981883231F008F044C0E7
:101E3000803111F08232F1F68091E8028F5F809359
:101E4000E8028091E002811128C08091E90290911E
:101E5000EA020E94FC03BE016F5F7F4F8091E9029E
:101E60009091EA020E94DD0340E064EB8091E90278
:101E70009091EA020E94A9038091E9029091EA02FE
:101E80000E945603082F8091E9029091EA020E9475
:101E9000FC03011102C01093E0028981803199F0A6
:101EA000CE0101960E94A6049091E302981708F0D3
:101EB000A1CF8093E3029ECF8B3309F4BDCF823450
:101EC00009F098CFB9CF8CE0EFCF80E191E00E948C
:101ED000F60988E091E00E94F6091092E40262E0BF
:101EE000809105030E94340161E0809106030E9405
:101EF000340161E0809106030E94060161E070E018
:101F000080E090E00E94F20160E0809106030E9470
:101F1000060180918100887F81608093810061E06B
:101F200085E00E94340161E08AE00E943401609102
:101F3000050170E085E00E9470016091040170E08D
:101F40008AE00E94700160E082E00E94340185E234
:101F500092E09093010180930001809169008C7F51
:101F6000826080936900E89A60E083E00E94340117
:101F70008BE292E0909303018093020180916900CB
:101F8000837F886080936900E99A60E088E00E941E
:101F9000340161E08FE00E94340161E08EE00E9434
:101FA000340188E19FE00FB6F894A8958093600013
:101FB0000FBE9093600046E050E06DE671E083E470
:101FC00092E00E9432020E946106809132028111E9
:101FD0001FC00E94F30A6057734F854091090E9409
:101FE000D81527EA32E14BEA59E30E948D1620E02A
:101FF00030E04FE254E40E94BC1460932E027093D0
:102000002F02809330029093310281E0809332025C
:1020100080912602811103C081E080932602809185
:102020001E02811121C086E091E09093FF01809310
:10203000FE01109200021092020210920102E3E0EF
:10204000F2E0F0931402E09313021092150284E080
:10205000809316028FEF8093170210921C028093D8
:102060001D0281E080931E028091F201811117C050
:102070008EEF91E09A838983E4E7F1E0FC83EB83C0
:10208000CE0101960E94CB0C6093EE017093EF019C
:102090008093F0019093F10181E08093F2018091AF
:1020A000E601811117C08EEF91E09A838983EAE7F8
:1020B000F1E0FC83EB83CE0101960E94CB0C609390
:1020C000E2017093E3018093E4019093E50181E0E4
:1020D0008093E6012FB7F89480913B0290913C02E7
:1020E000A0913D02B0913E022FBF8093DE019093FC
:1020F000DF01A093E001B093E10181159842AB4666
:10210000BE4E18F0F0E0E0E009958091DE0190917C
:10211000DF01A091E001B091E1014091DA0150911D
:10212000DB016091DC017091DD01841B950BA60B36
:10213000B70B883E9340A105B10508F42BC380E19D
:1021400091E00E94D3046B017C01C092D601D09231
:10215000D701E092D801F092D90188E091E00E9485
:10216000D3044B015C0120E030E04EEF52ECC7019C
:10217000B6010E942915882341F0C092D201D09265
:10218000D301E092D401F092D50120E030E04EEF8F
:1021900052ECC501B4010E942915882341F08092B8
:1021A000CE019092CF01A092D001B092D101809146
:1021B000E9029091EA020E94FC0340E06CEC8091FD
:1021C000E9029091EA020E94A9034091E00264E4CE
:1021D0008091E9029091EA020E94A9038091E402B1
:1021E000882391F1E091E3028091E502882309F4CC
:1021F0004DC38091E002811149C38FB7F894C0901C
:102200003B02D0903C02E0903D02F0903E028FBF36
:102210008091E9029091EA020E9456038130A1F078
:102220002FB7F89480913B0290913C02A0913D021F
:10223000B0913E022FBF8C199D09AE09BF098E3E99
:102240009240A105B10520F38091AC01811115C028
:102250006091DE017091DF018091E0019091E101D8
:102260000E94D6156093A8017093A9018093AA01DA
:102270009093AB0181E08093AC018090D20190906B
:10228000D301A090D401B090D50120E030E040E22D
:1022900052E4C501B4010E9488166FEF70E087FF19
:1022A000FBC020E030E040EA50E4C501B4010E94E8
:1022B000291570E060E018160CF0EEC020E030E068
:1022C00040E850E46091CE017091CF018091D0013F
:1022D0009091D1010E94BD143B018C0120E030E0BF
:1022E00040E252E40E94291587FDF8C270E060E0E8
:1022F00090E282E4272F362F492F582FC501B401D1
:102300000E94BC146B017C016091DE017091DF01C1
:102310008091E0019091E1010E94D6152091A801E1
:102320003091A9014091AA015091AB010E94BC14C7
:102330001B012C018091A6019091A7018F3F91056F
:10234000D1F4A2019101C701B6010E948D169B0133
:10235000AC016091A2017091A3018091A4019091C0
:10236000A5010E94BD146093A2017093A301809304
:10237000A4019093A50120E030E040E85FE3C501AF
:10238000B4010E94BC149B01AC01B301C8010E94BE
:102390008816181644F41092A2011092A30110920C
:1023A000A4011092A5012AE037ED43E25EE36091BB
:1023B000A2017091A3018091A4019091A5010E94B6
:1023C0008D164B015C0120E030E040EF52E4C70184
:1023D000B6010E948D169B01AC01C501B4010E949B
:1023E000BD144B015C0120919E0130919F014091F1
:1023F000A0015091A101C701B6010E94BC14A20125
:1024000091010E942E1520E030E040E850E40E9447
:102410008D169B01AC01C501B4010E94BD1420E0E2
:1024200030E048EC52E40E94BD144B015C0120E016
:1024300030E044EB52E40E9429156AE570E087FD24
:102440001FC020E030E04FE753E4C501B4010E9413
:1024500088166FEF70E018169CF020E030E0A901BC
:10246000C501B4010E94881620E030E040E05FE33F
:1024700087FD39C2C501B4010E94BD140E94A01598
:102480007093A7016093A601C0929E01D0929F0114
:10249000E092A001F092A1016093CD0177278AE03C
:1024A0000E9470014EEF51E060E871E088E192E037
:1024B0000E94DD0B8C01009799F0C0902E02D09005
:1024C0002F02E0903002F09031026EEF71E00E9436
:1024D000F1058EE0F8018483C082D182E282F3822A
:1024E0008091EE019091EF01A091F001B091F10186
:1024F0008A839B83AC83BD8385E891E09F838E8331
:102500006EEC71E0CE0101960E94950C8091EE0177
:102510009091EF01A091F001B091F1018A839B832A
:10252000AC83BD83E9E8F1E0FF83EE8362ED71E007
:10253000CE0101960E94950CC090E201D090E3017B
:10254000E090E401F090E501C114D104C9F0A701C5
:102550006FE871E0C6010E94DD0B8C01009781F0ED
:10256000B090CD01B7010E94F1058AE0F8018483A3
:102570008B2D90E0B0E0A0E080839183A283B383B1
:10258000C090CC018091B801D12CF12CE12C8111AB
:102590000FC0C701B6010E94D6156093B4017093B5
:1025A000B5018093B6019093B70181E08093B801A3
:1025B0002091DE013091DF014091E0015091E10175
:1025C0008091DA019091DB01A091DC01B091DD01F5
:1025D000281B390B4A0B5B0B60E67AEE80E090E03B
:1025E0000E943217C701B6010E94FA160E94D61542
:1025F0002DEC3CEC4CE45FE30E948D166B017C01FA
:102600002CEC3CEC4CE45EE36091B4017091B501BC
:102610008091B6019091B7010E948D169B01AC018B
:10262000C701B6010E94BD146093B4017093B50157
:102630008093B6019093B70169877A878B879C87CF
:102640008091E2019091E301A091E401B091E50154
:102650008A839B83AC83BD8383E991E09F838E83D0
:10266000BE01675F7F4FCE0101960E94950C1091CD
:10267000CB012091DE013091DF014091E0015091CA
:10268000E1018091DA019091DB01A091DC01B09130
:10269000DD01281B390B4A0B5B0B60E87EEE86E3FD
:1026A00090E00E943217A12FB0E00E9454172AEA4E
:1026B00030E040E050E00E943217CA01B9010E94A8
:1026C000D6152DEC3CEC4CE45FE30E948D166B01BB
:1026D0007C012CEC3CEC4CE45EE36091C001709119
:1026E000C1018091C2019091C3010E948D169B018E
:1026F000AC01C701B6010E94BD146093C001709384
:10270000C1018093C2019093C30169877A878B8747
:102710009C878091E2019091E301A091E401B09146
:10272000E5018A839B83AC83BD83E8E9F1E0FF8305
:10273000EE83BE01675F7F4FCE0101960E94950C2C
:1027400083E492E09A8389831C821B828EEF91E05E
:102750009E838D83BE016F5F7F4F88E192E00E9470
:10276000AE060E9461061092CA011092CC0110922E
:10277000CB018091DE019091DF01A091E001B09149
:10278000E1018093DA019093DB01A093DC01B09327
:10279000DD01A8958091DE019091DF01A091E0011B
:1027A000B091E1014091FA015091FB016091FC016F
:1027B0007091FD01841B950BA60BB70B8436910518
:1027C000A105B10508F4B8C00E94F30A6057734F21
:1027D000854091090E94D81527EA32E14BEA59E376
:1027E0000E948D1620E030E04FE254E40E94BC14B9
:1027F00060932E0270932F028093300290933102E7
:102800002091C9012111A5C0C090DE01D090DF0147
:10281000E090E001F090E10120E030E04AEF53EC7D
:102820000E94881618160CF063C08091C8018111AF
:102830000BC081E08093C801C092C401D092C50151
:10284000E092C601F092C7018091C4019091C50148
:10285000A091C601B091C701C81AD90AEA0AFB0AB9
:1028600098EEC91693E0D906E104F10408F454C0C7
:1028700061E08FE00E94060161E08EE00E940601A7
:1028800081E08093C9011092C80146C0E9508EEEE4
:1028900092E0E33038F4F0E0EE0FFF1FE85DFE4F0A
:1028A000808191816C01990FEE08FF088091E1020F
:1028B000882329F060E08091E2020E940601C701AE
:1028C000B6010E94F2018091E102882309F4BCCC98
:1028D00061E08091E2020E940601B6CC762D672D60
:1028E000902F812F07CDC501B4010E94BC14C6CD25
:1028F0008091C4019091C501A091C601B091C7011A
:10290000C81AD90AEA0AFB0AE8EECE16E3E0DE06A8
:10291000E104F10408F0B7CF8091DE019091DF016E
:10292000A091E001B091E1018093FA019093FB0145
:10293000A093FC01B093FD0180E090E0892B09F4A5
:1029400044CB0E949C02882309F43FCB0E940000E4
:102950003CCB20E030E046E154EC0E94291587FF93
:10296000DBCF60E08FE00E94060160E08EE00E9415
:1029700006011092C901D0CF5058BB27AA270E9448
:10298000D4140C944E160E94401638F00E9447163C
:1029900020F039F49F3F19F426F40C943D160EF400
:1029A000E095E7FB0C943716E92F0E945F1658F369
:1029B000BA17620773078407950720F079F4A6F524
:1029C0000C9481160EF4E0950B2EBA2FA02D0B015E
:1029D000B90190010C01CA01A0011124FF27591B64
:1029E00099F0593F50F4503E68F11A16F040A22F6A
:1029F000232F342F4427585FF3CF469537952795DB
:102A0000A795F0405395C9F77EF41F16BA0B620BD9
:102A1000730B840BBAF09150A1F0FF0FBB1F661F20
:102A2000771F881FC2F70EC0BA0F621F731F841F63
:102A300048F4879577956795B795F7959E3F08F089
:102A4000B0CF9395880F08F09927EE0F979587954B
:102A500008950E94131608F481E008950E9442151B
:102A60000C944E160E94471658F00E94401640F0F3
:102A700029F45F3F29F00C94371651110C948216FB
:102A80000C943D160E945F1668F39923B1F3552309
:102A900091F3951B550BBB27AA2762177307840771
:102AA00038F09F5F5F4F220F331F441FAA1FA9F307
:102AB00035D00E2E3AF0E0E832D091505040E695F5
:102AC000001CCAF72BD0FE2F29D0660F771F881F56
:102AD000BB1F261737074807AB07B0E809F0BB0B49
:102AE000802DBF01FF2793585F4F3AF09E3F51055D
:102AF00078F00C9437160C9482165F3FE4F3983EFE
:102B0000D4F3869577956795B795F7959F5FC9F745
:102B1000880F911D9695879597F90895E1E0660FC6
:102B2000771F881FBB1F621773078407BA0720F03F
:102B3000621B730B840BBA0BEE1F88F7E0950895A8
:102B40000E94A7156894B1110C94821608950E94F2
:102B5000671688F09F5798F0B92F9927B751B0F0B2
:102B6000E1F0660F771F881F991F1AF0BA95C9F711
:102B700014C0B13091F00E948116B1E008950C9418
:102B80008116672F782F8827B85F39F0B93FCCF3CB
:102B9000869577956795B395D9F73EF4909580958E
:102BA000709561957F4F8F4F9F4F0895E89409C0AE
:102BB00097FB3EF490958095709561957F4F8F4F70
:102BC0009F4F9923A9F0F92F96E9BB279395F69586
:102BD000879577956795B795F111F8CFFAF4BB0F04
:102BE00011F460FF1BC06F5F7F4F8F4F9F4F16C068
:102BF000882311F096E911C0772321F09EE8872FF2
:102C0000762F05C0662371F096E8862F70E060E0AD
:102C10002AF09A95660F771F881FDAF7880F969526
:102C2000879597F90895990F0008550FAA0BE0E8CA
:102C3000FEEF16161706E807F907C0F0121613067E
:102C4000E407F50798F0621B730B840B950B39F4BE
:102C50000A2661F0232B242B252B21F408950A2624
:102C600009F4A140A6958FEF811D811D089597F964
:102C70009F6780E870E060E008959FEF80EC089522
:102C800000240A941616170618060906089500244B
:102C90000A9412161306140605060895092E0394C5
:102CA000000C11F4882352F0BB0F40F4BF2B11F439
:102CB00060FF04C06F5F7F4F8F4F9F4F089557FD98
:102CC0009058440F551F59F05F3F71F04795880F9A
:102CD00097FB991F61F09F3F79F087950895121631
:102CE00013061406551FF2CF4695F1DF08C01616DD
:102CF00017061806991FF1CF86957105610508948E
:102D00000895E894BB2766277727CB0197F90895A4
:102D10000E94131608F48FEF08950E94A0160C94D9
:102D20004E160E94401638F00E94471620F0952358
:102D300011F00C9437160C943D1611240C94821645
:102D40000E945F1670F3959FC1F3950F50E0551FD9
:102D5000629FF001729FBB27F00DB11D639FAA27F0
:102D6000F00DB11DAA1F649F6627B00DA11D661F3F
:102D7000829F2227B00DA11D621F739FB00DA11D60
:102D8000621F839FA00D611D221F749F3327A00D1A
:102D9000611D231F849F600D211D822F762F6A2FB6
:102DA00011249F5750409AF0F1F088234AF0EE0F1B
:102DB000FF1FBB1F661F771F881F91505040A9F748
:102DC0009E3F510580F00C9437160C9482165F3F9D
:102DD000E4F3983ED4F3869577956795B795F79584
:102DE000E7959F5FC1F7FE2B880F911D96958795FC
:102DF00097F90895DB018F939F930E945417BF9119
:102E0000AF91A29F800D911DA39F900DB29F900D39
:102E100011240895AA1BBB1B51E107C0AA1FBB1FA9
:102E2000A617B70710F0A61BB70B881F991F5A9556
:102E3000A9F780959095BC01CD01089597FB072EC9
:102E400016F4009407D077FD09D00E940A1707FCFA
:102E500005D03EF4909581959F4F089570956195AA
:102E60007F4F0895A1E21A2EAA1BBB1BFD010DC0C6
:102E7000AA1FBB1FEE1FFF1FA217B307E407F5072A
:102E800020F0A21BB30BE40BF50B661F771F881F06
:102E9000991F1A9469F760957095809590959B019C
:102EA000AC01BD01CF0108950E946517A59F900D4B
:102EB000B49F900DA49F800D911D11240895EE0FD5
:102EC000FF1F0590F491E02D0994A29FB001B39FDC
:102ED000C001A39F700D811D1124911DB29F700D23
:102EE000811D1124911D08950F931F93CF93DF939C
:102EF0008230910510F482E090E0E0911103F091AE
:102F0000120330E020E0B0E0A0E0309799F4211502
:102F1000310509F44AC0281B390B24303105D8F596
:102F20008A819B816115710589F1FB0193838283FD
:102F3000FE0111C040815181028113814817590758
:102F4000E0F04817590799F4109761F012960C9326
:102F5000129713961C933296CF01DF91CF911F9158
:102F60000F9108950093110310931203F4CF2115CC
:102F7000310551F04217530738F0A901DB019A01DE
:102F8000BD01DF01F801C1CFEF01F9CF909312032A
:102F900080931103CDCFFE01E20FF31F8193919334
:102FA0002250310939832883D7CF20910F033091E4
:102FB0001003232B41F420911A0130911B0130930F
:102FC000100320930F03209118013091190121154E
:102FD000310541F42DB73EB740911C0150911D01C0
:102FE000241B350BE0910F03F0911003E217F30758
:102FF000A0F42E1B3F0B2817390778F0AC014E5F69
:103000005F4F2417350748F04E0F5F1F5093100392
:1030100040930F03819391939FCFF0E0E0E09CCF2A
:10302000CF93DF930097E9F0FC013297138212826D
:10303000A0911103B0911203ED0130E020E0109750
:10304000A1F420813181820F931F20910F033091D1
:1030500010032817390709F061C0F0931003E093BB
:103060000F03DF91CF910895EA01CE17DF07E8F54E
:103070004A815B819E0141155105B1F7E901FB834E
:10308000EA8349915991C40FD51FEC17FD0761F4EC
:10309000808191810296840F951FE901998388832D
:1030A000828193819B838A83F0E0E0E012968D9188
:1030B0009C9113970097B9F52D913C911197CD01F3
:1030C0000296820F931F20910F033091100328174F
:1030D000390739F6309751F5109212031092110307
:1030E000B0931003A0930F03BCCFD383C28340815E
:1030F0005181840F951FC817D90761F44E5F5F4F48
:1031000088819981480F591F518340838A819B810F
:10311000938382832115310509F0B0CFF093120318
:10312000E09311039ECFFD01DC01C0CF1382128218
:10313000D7CFB0E0A0E0EFE9F8E10C9461198C0181
:10314000009751F4CB010E9474178C01C801CDB7D0
:10315000DEB7E0E10C947D19FC01E60FF71F9C013E
:1031600022503109E217F30708F49DC0D901CD912F
:10317000DC911197C617D70798F0C530D10530F309
:10318000CE0104978617970708F3C61BD70B229723
:10319000C193D1936D937C93CF010E941018D6CF29
:1031A0005B01AC1ABD0A4C018C0E9D1EA09111034F
:1031B000B0911203512C412CF12CE12C109731F5D8
:1031C00080910F03909110038815990509F05CC058
:1031D0004616570608F058C08091180190911901C1
:1031E000009741F48DB79EB740911C0150911D018D
:1031F000841B950BE817F90708F055C0F0931003EE
:10320000E0930F03F90171836083A0CF8D919C91AE
:10321000119712966C90129713967C901397A8159D
:10322000B90559F56C0142E0C40ED11CCA14DB0487
:1032300020F1AC014A195B09DA011296159780F06A
:103240006282738251834083D9016D937C93E11430
:10325000F10471F0D7011396FC93EE93129776CF99
:1032600022968C0F9D1FF90191838083F301EFCF8C
:10327000F0931203E093110369CF4816590608F43E
:103280002C017D01D3019ACFCB010E9474177C01E0
:10329000009749F0AE01B8010E945619C8010E947A
:1032A0001018870153CF10E000E050CFFB01DC0184
:1032B00002C001900D9241505040D8F708952F92CE
:1032C0003F924F925F926F927F928F929F92AF92B6
:1032D000BF92CF92DF92EF92FF920F931F93CF9303
:1032E000DF93CDB7DEB7CA1BDB0B0FB6F894DEBF9A
:1032F0000FBECDBF09942A88398848885F846E84C0
:103300007D848C849B84AA84B984C884DF80EE8009
:10331000FD800C811B81AA81B981CE0FD11D0FB612
:10332000F894DEBF0FBECDBFED010895F894FFCF36
:1033300031023102FAFF220128CCAE46D41B7DC9EE
:1033400028D87946D4762C1700001303800000009B
:103350000000F50CF20CEE0C5E00BC0077010000E2
:103360000000D20232025F021F0390026E0282024C
:103370000D0A002F2F272722225C5C6208660C6E44
:103380000A720D7409005C7530303030006E756C57
:103390006C00747275650066616C73650048656CDD
:1033A0006C6F210074656D707300746163686F00E9
:1033B0006D626172006169720077617465720066A6
:0E33C000616E0070756D7000666C6F770000B6
:00000001FF

View File

@ -0,0 +1,864 @@
:020000040000FA
:100000000C948A000C94690D0C94420D0C94B2006F
:100010000C94B2000C94B2000C94B2000C94B20098
:100020000C94B2000C94B2000C94B2000C94B20088
:100030000C94B2000C94B2000C94B2000C94B20078
:100040000C94F80C0C94B2000C94B60D0C94900D1A
:100050000C94B2000C94B2000C94B2000C94B20058
:100060000C94B2000C94B200005EBCE2613FDD83F0
:10007000C29C7E20A3FD1F41009D23BE46DB65F888
:100080008C11AF32CA57E974000000002400270029
:100090002A0000000000250028002B0000000008B6
:1000A000000201000003040700000000000000003F
:1000B000CDCCCC3D0AD7233C17B7D13877CC2B32E7
:1000C0009595E6241FB14F0A000020410000C84268
:1000D00000401C4620BCBE4CCA1B0E5AAEC59D74C7
:1000E0000000000023002600290004040404040486
:1000F00004040202020202020303030303030102D7
:1001000004081020408001020408102001020408A5
:100110001020E80D11241FBECFEFD8E0DEBFCDBF09
:1001200011E0A0E0B1E0E0E3F3E302C005900D923E
:10013000AE39B107D9F723E0AEE9B1E001C01D92B5
:10014000A331B207E1F710E0CAE8D0E004C021977C
:10015000FE010E945F17C938D107C9F70E94640EDB
:100160000C9496190C940000833081F028F48130AF
:1001700099F08230A9F008958730A9F08830C9F04D
:100180008430B1F4809180008F7D03C08091800025
:100190008F7780938000089584B58F7784BD08950C
:1001A00084B58F7DFBCF8091B0008F778093B000B6
:1001B00008958091B0008F7DF9CFCF93DF93282FE2
:1001C00030E0F901E456FF4F8491F901E250FF4F0E
:1001D000D491F901E651FF4FC491CC23A1F08111D4
:1001E0000E94B400EC2FF0E0EE0FFF1FE052FF4F33
:1001F000A591B491EC91ED2381E090E009F480E0C9
:10020000DF91CF91089580E090E0FACF1F93CF93D4
:10021000DF93282F30E0F901E456FF4F8491F90174
:10022000E250FF4FD491F901E651FF4FC491CC2326
:10023000A9F0162F81110E94B400EC2FF0E0EE0F10
:10024000FF1FEE56FF4FA591B4918FB7F894EC9134
:10025000111108C0D095DE23DC938FBFDF91CF91C1
:100260001F910895DE2BF8CFCF93DF9390E0FC0130
:10027000E250FF4F249186519F4FFC0184918823C7
:10028000C9F090E0880F991FFC01E857FF4FA59136
:10029000B491FC01EE56FF4FC591D49161110DC090
:1002A0009FB7F8948C91209582238C938881282382
:1002B00028839FBFDF91CF910895623051F49FB79B
:1002C000F8943C91822F809583238C93E8812E2B88
:1002D000EFCF8FB7F894EC912E2B2C938FBFEACFF2
:1002E0001F93CF93DF93182FEB0161E00E9434013D
:1002F000209739F460E0812FDF91CF911F910C940A
:100300000601CF3FD10511F461E0F5CFE12FF0E018
:10031000E456FF4FE491E33031F140F4E130B1F0C5
:10032000E230E1F0C038D1057CF7E4CFE73029F1C5
:10033000E83059F1E430B1F7809180008062809319
:100340008000D0938B00C0938A0004C084B580687D
:1003500084BDC7BDDF91CF911F91089584B58062A0
:1003600084BDC8BDF7CF80918000806880938000F5
:10037000D0938900C0938800EDCF8091B000806851
:100380008093B000C093B300E5CF8091B00080624D
:100390008093B000C093B400DDCF3FB7F894809154
:1003A0003F0290914002A0914102B091420226B5D5
:1003B000A89B05C02F3F19F00196A11DB11D3FBF9D
:1003C000BA2FA92F982F8827BC01CD01620F711D6C
:1003D000811D911D42E0660F771F881F991F4A9566
:1003E000D1F708958F929F92AF92BF92CF92DF92F2
:1003F000EF92FF926B017C010E94CD014B015C01E9
:10040000C114D104E104F104B9F00E94CD016819CE
:1004100079098A099B09683E73408105910580F33B
:1004200021E0C21AD108E108F10888EE880E83E0C5
:10043000981EA11CB11CE4CFFF90EF90DF90CF90ED
:10044000BF90AF909F908F9008958091CC018F5F67
:100450008093CC0108958091CB018F5F8093CB0175
:1004600008950895AF92BF92CF92DF92EF92FF92DC
:100470000F931F93CF93DF936C017B018B01040FCC
:10048000151FEB015E01AE18BF08C017D10759F068
:100490006991D601ED91FC910190F081E02DC601AA
:1004A0000995892B79F7C501DF91CF911F910F91A4
:1004B000FF90EF90DF90CF90BF90AF900895FC0138
:1004C000538D448D252F30E0842F90E0821B930BB9
:1004D000541710F0CF96089501970895FC01918D5F
:1004E000828D981761F0A28DAE0FBF2FB11D5D9662
:1004F0008C91928D9F5F9F73928F90E008958FEF04
:100500009FEF0895FC01918D828D981731F0828DB7
:10051000E80FF11D858D90E008958FEF9FEF08950E
:10052000FC01918D228D892F90E0805C9F4F821B72
:1005300091098F739927089583E492E00E949002B5
:1005400021E0892B09F420E0822F089580E090E0DB
:10055000892B29F00E949C0281110C9400000895BF
:10056000FC01A48DA80FB92FB11DA35ABF4F2C9128
:10057000848D90E001968F739927848FA689B7891F
:100580002C93A089B1898C91837080648C93938D16
:10059000848D981306C00288F389E02D80818F7DB9
:1005A00080830895EF92FF920F931F93CF93DF9371
:1005B000EC0181E0888F9B8D8C8D98131AC0E8899F
:1005C000F989808185FF15C09FB7F894EE89FF896E
:1005D0006083E889F98980818370806480839FBF0C
:1005E00081E090E0DF91CF911F910F91FF90EF900C
:1005F0000895F62E0B8D10E00F5F1F4F0F7311271C
:10060000E02E8C8D8E110CC00FB607FCFACFE88956
:10061000F989808185FFF5CFCE010E94B002F1CF2C
:10062000EB8DEC0FFD2FF11DE35AFF4FF0829FB7CA
:10063000F8940B8FEA89FB8980818062CFCFCF93BA
:10064000DF93EC01888D8823B9F0AA89BB89E889FA
:10065000F9898C9185FD03C0808186FD0DC00FB6A0
:1006600007FCF7CF8C9185FFF2CF808185FFEDCF1E
:10067000CE010E94B002E9CFDF91CF910895DC0155
:1006800080E0615090F09D919827E92FEF70F0E0A5
:10069000E859FF4F2491E92FE295EF70F0E0E85818
:1006A000FF4FE491822F8E27ECCF0895DC012C912F
:1006B0001196ED91FC91F8948181822B8183928136
:1006C000322F30959323928387E090E00197F1F7E2
:1006D00081818323818383E290E00197F1F7908108
:1006E0007894EFECF0E03197F1F7922381E009F490
:1006F00080E00895FC0190810180F281E02D292F96
:10070000209560FF14C0F8948281822382838181C6
:10071000892B8183A3E2B0E01197F1F78281982BB6
:100720009283789487ED90E00197F1F70895F8941B
:100730008281822382838181892B8183AFEFB0E024
:100740001197F1F78281982B928378948FE090E053
:10075000EBCFDF92EF92FF920F931F93CF93DF9334
:10076000EC01D62EE42E08E010E0FF24F39461E0C3
:100770008D2D8F2109F460E0CE010E947A03FF0CD9
:1007800001501109A1F7E11010C0F894E981FA8134
:1007900091818881809589238183E981FA81928181
:1007A00088818095892382837894DF91CF911F91EE
:1007B0000F91FF90EF90DF900895EF92FF920F93CB
:1007C0001F93CF93DF938C017B0140E065E50E948E
:1007D000A903E70188E0E80EF11C699140E0C80137
:1007E0000E94A903CE15DF05C1F7DF91CF911F91BC
:1007F0000F91FF90EF900895FC0190810180F281AC
:10080000E02DF8948181292F20958223818378948B
:100810003DE743E050E0315029F1DA011197F1F75B
:1008200080818923C1F3F89482818223828381812C
:10083000892B81837894ABE7B7E01197F1F7F894AF
:10084000818182238183A3E1B1E01197F1F7808157
:10085000982381E009F080E07894E3E6F6E03197B0
:10086000F1F7089580E008956F927F928F929F92A2
:10087000AF92BF92CF92DF92EF92FF920F931F93AE
:10088000CF93DF938C01EB018091E9029091EA0212
:100890000E94FC03882309F43FC0B8018091E9025B
:1008A0009091EA020E94DD0340E06EEB8091E90244
:1008B0009091EA020E94A9037E016E0189E0C80EB0
:1008C000D11C8E01A090E902B090EA0288E0882E47
:1008D000912C712C66246394C5010E9456038111EA
:1008E0007628660CE1E08E1A9108B1F7F801719252
:1008F0008F01CE16DF0631F78091E9029091EA026E
:100900000E94FC03813041F4F70181917F01811144
:1009100005C0E017F107C1F790E008C068E0CE011C
:100920000E943F0391E028852813F6CF892FDF919D
:10093000CF911F910F91FF90EF90DF90CF90BF90DC
:10094000AF909F908F907F906F900895CF93DF939B
:10095000CDB7DEB729970FB6F894DEBF0FBECDBF77
:10096000BE016F5F7F4F0E943404882331F08D8178
:100970008F33A9F020F48F31A1F080E007C08F35CC
:1009800021F08F37D1F78CE001C08BE029960FB6AC
:10099000F894DEBF0FBECDBFDF91CF9108958AE0FE
:1009A000F5CF89E0F3CF0F931F93CF93DF93CDB7AC
:1009B000DEB729970FB6F894DEBF0FBECDBF8C010E
:1009C000BE016F5F7F4F0E943404811105C060E05B
:1009D00070E08EEF92EC3EC06A8170E0762F662761
:1009E000770F770F770F298148E0249F900111241A
:1009F000262B372BF80180818031E1F4688566234E
:100A0000C9F070E08F81AB01481B5109CA0196956E
:100A1000982F8827979587950E941E17CB0180975E
:100A2000B90153E0660F771F5A95E1F760789C0192
:100A3000260F371F213854EE35074CF2B901330F1A
:100A4000880B990B0E94D81520E030E040E05CE371
:100A50000E948D1629960FB6F894DEBF0FBECDBF4B
:100A6000DF91CF911F910F9108956F3FA9F0E62F6D
:100A7000E295EF7044E0E49F90011124DC01ED91D8
:100A8000FC91E20FF31F6F7082819381B6E06B9F40
:100A9000800D911D1124089590E080E00895CF937A
:100AA000DF93EC0188819981DC01ED91FC9101904B
:100AB000F081E02D09952A813B81820F931F9B8352
:100AC0008A83DF91CF910895CF93DF93EC018881E2
:100AD0009981DC01ED91FC910280F381E02D099573
:100AE0002A813B81820F931F9B838A83DF91CF9161
:100AF00008958F929F92AF92BF92CF92DF92EF9222
:100B0000FF920F931F93CF93DF93CDB7DEB7669716
:100B10000FB6F894DEBF0FBECDBF6C018E01095E2B
:100B20001F4F78018AE0882E912CA12CB12CCB018B
:100B3000BA01A50194010E943217942F852F605DA0
:100B4000F80162938F01A901692F782F4115510592
:100B50006105710561F7A7014E1B5F0BBF01C6015F
:100B60000E94640566960FB6F894DEBF0FBECDBF37
:100B7000DF91CF911F910F91FF90EF90DF90CF9079
:100B8000BF90AF909F908F900895DC0152969C91FA
:100B90005297915084E0989F900111245096ED91C6
:100BA000FC91E20FF31F228133812115310579F089
:100BB00041818081481758F481E0840F818386E069
:100BC000489F200D311D11242115310521F460E0CD
:100BD00070E08FEF0895B901892F8295807F840F8F
:100BE0000895AF92BF92CF92DF92EF92FF920F9350
:100BF0001F93CF93DF93EC018B018C8180FF2CC07E
:100C0000A881B981FB018381948130E020E00097C5
:100C100019F1A817B90709F041C0F80140815181C5
:100C200012969C911297915012969C931297911143
:100C300013C08D919C9111972115310561F1F90136
:100C400091838083FA0180819181FC01228133812B
:100C5000BD01CA01F90109958C81807631F1209797
:100C600021F1F8805801F5E1AF0EB11C8FEFF816B5
:100C7000D1F06F2DC5010E9435056C01FC01E580A6
:100C8000B8010E94F105F801818DF6018083F80119
:100C9000F18EFE2CEBCF94838383D4CF9C01FC0197
:100CA00080819181B4CFF882F9821C82DF91CF914B
:100CB0001F910F91FF90EF90DF90CF90BF90AF907A
:100CC000089542E050E060E471E083E492E00C9427
:100CD0003202FB0101900020E9F73197AF01461B7A
:100CE000570B0C946405CF92DF92EF92FF920F9313
:100CF0001F93CF93DF938C016B017A0162E20E9414
:100D00004F05E601EC0CFD1CEC16FD0699F069910F
:100D1000E3E4F1E0D480DD20C9F0329683816813EA
:100D2000F9CF6CE5C8010E944F056D2DC8010E94E6
:100D30004F05EACF62E2C801DF91CF911F910F9179
:100D4000FF90EF90DF90CF900C944F056111EECFA4
:100D500066E571E0C8010E946906D6CF2F923F92E6
:100D60004F925F926F927F928F929F92AF92BF92BB
:100D7000CF92DF92EF92FF920F931F93CF93DF9367
:100D8000CDB7DEB76B970FB6F894DEBF0FBECDBF01
:100D90007C018B01DC0114968C9114978A3009F444
:100DA000A0C2F0F4843009F479C268F4833009F405
:100DB00090C26DE571E0C8010E946906D8011296E3
:100DC0008D919C9129C2853009F47BC2863089F7C8
:100DD0008C9162E671E0811155C067E671E052C006
:100DE0008E3009F440C0C8F48C3019F7CD90DD90F6
:100DF000ED90FC90B701A601F7FE0BC06DE2C801B3
:100E00000E944F0544275527BA014C195D096E0908
:100E10007F09C8010E947905FCC1803209F415C21E
:100E2000803439F66BE5C8010E944F05D701FC906C
:100E3000BFEFFB1609F4E9C1F801848195816F2D9C
:100E400045960E9435057C01B8010E94AE06D70187
:100E50001596FC90BFEFFB1609F4D7C16CE2C801F0
:100E60000E944F05E5CFF70180809180A280B3807A
:100E7000A5019401C501B4010E942915882331F010
:100E80006DE571E0C8010E946906C3C120E030E051
:100E9000A901C501B4010E942915882371F0A5019B
:100EA0009401C501B4010E94BD149B01AC01C501B0
:100EB000B4010E942915882319F320E030E0A9012C
:100EC000C501B4010E94291587FF08C06DE2C80161
:100ED0000E944F05B7FAB094B7F8B09420E836E90D
:100EE00048E15BE4C501B4010E94881687FD83C018
:100EF00074E1C72ED12CE0E2EE2EF12C312C212C06
:100F0000F601E853FF4F6591759185919491A50184
:100F100094010E94291518167CF0F601E055FF4F48
:100F20002591359145915491C501B4010E948D16CA
:100F30004B015C012E0C3F1CF594E794F4E0CF1AB2
:100F4000D1082CEFC2162FEFD206D1F63FEF3F8B20
:100F500020E030E0A901C501B4010E9488161816EE
:100F60000CF051C02CEA35EC47E257E3C501B4015F
:100F70000E94291518160CF446C0AF89B4E0AB02E4
:100F8000C0011124D12CC12CFC01E055FF4F2F01D1
:100F90009C0128533F4F39013F893F3F09F433C03B
:100FA000F201EC0DFD1D659175918591949120E004
:100FB00030E040E251E40E948D16A50194010E94A8
:100FC000881618167CF4F301EC0DFD1D2591359162
:100FD00045915491C501B4010E948D164B015C01ED
:100FE0002E183F08F594E7948F8981508F8B94E0F9
:100FF000C91AD108D1CF50E2E52EF12C85E08F8BB4
:10100000312C212CA5CFC501B4010E94A7156B017D
:101010007C012B013C0180E492E4AFE0B0E0888FDA
:10102000998FAA8FBB8F96E09F8BAAE04A16510436
:1010300061047104E0F0688D798D8A8D9B8D2AE0C2
:1010400030E040E050E00E943217288F398F4A8FFD
:101050005B8FBF89B150BF8BC301B2012AE030E082
:1010600040E050E00E94321729013A01DECFC7016B
:10107000B6010E94D6159B01AC01C501B4010E94C6
:10108000BC144B015C01688D798D8A8D9B8D0E940B
:10109000D6159B01AC01C501B4010E948D162B0130
:1010A0003C010E94A7154B015C010E94D6159B01D3
:1010B000AC01C301B2010E94BC149B01AC010E94AF
:1010C000BD140E94A715860E971EA81EB91E888DF6
:1010D000998DAA8DBB8D88169906AA06BB06C0F00D
:1010E0009FEFC91AD90AE90AF90A2114310439F122
:1010F000AAE0CA16D104E104F10408F1BFEF2B1AEB
:101100003B0A812C912C5401C12CD12C7601C39423
:101110002AE0422E512C612C712CC501B401A3018F
:1011200092010E943217672B682B692B61F4EF89BB
:101130001E164CF449015A01E150EF8BEECF812C81
:10114000912C5401E5CFB701A601C8010E94790591
:10115000FF89FF2391F16E0121E1C20ED11CF88FAE
:1011600076019AE0492E512C612C712C388D31502A
:10117000388F3F3F69F0C501B401A30192010E947D
:101180003217605DD6016E936D0149015A01EECFB1
:10119000BF898B2F90E0BC0160957095F701E81B2B
:1011A000F90B31978EE2808344275527461B570B56
:1011B0006E0D7F1DC8010E9464052114310449F1A0
:1011C00065E6C8010E944F05710137FE07C06DE258
:1011D000C8010E944F05F194E194F108FE01779651
:1011E0009F018AE0C82ED12CC701B6010E940A17C0
:1011F000805D82937B01672BB9F7A9014E1B5F0BC2
:10120000BF01C8010E94640504C06DE5C8010E94C9
:101210004F05F801828193816B960FB6F894DEBF7B
:101220000FBECDBFDF91CF911F910F91FF90EF9037
:10123000DF90CF90BF90AF909F908F907F906F90F6
:101240005F904F903F902F9008956BE7C8010E94E8
:101250004F05D701FC90EE24E394BB24B394BFEF79
:10126000FB16D1F0F801848195816F2D45960E947F
:1012700035056C01B8010E94AE06D6011596FC90AA
:10128000BFEFFB1639F06AE3E11001C06CE2C80160
:101290000E944F05EB24E3CF6DE7B8CF6D917C91B1
:1012A00050E040E06115710541F0FB010190002024
:1012B000E9F73197AF01461B570BC8010E9473062F
:1012C000A8CFED91FC91438150E0BF016C5F7F4F4F
:1012D000F4CFED91FC91438150E0BF016C5F7F4FF3
:1012E00090CF4D915D916D917C9193CDBF92CF92B6
:1012F000DF92EF92FF920F931F93CF93DF93EC0156
:10130000B62EC72E8D85811105C0CE010E94FC032B
:1013100081110EC01B861D861C8680E0DF91CF9157
:101320001F910F91FF90EF90DF90CF90BF900895A5
:1013300040E060EFCE010E94A90301E0E12CD12C36
:1013400011E0CE010E945603F82ECE010E945603F2
:1013500091E0F91218C0813099F51134D8F2DB868A
:10136000D11002C081E08D878B81882399F223966A
:10137000EB2DFC2DCF01089629912193E817F90751
:10138000D9F781E0CBCFEE2DF0E0F8120FC08B85BE
:101390001817A0F4DE01AE0FBF1F13968C918023A7
:1013A00079F4F12C193008F41C87D12EEC0FFD1FB5
:1013B0008381902F9095892383830AC08113F1CF75
:1013C000FE01EE0DF11D8381802B8383FF24F394B6
:1013D0006F2DCE010E947A031F5F000F11F4E3947A
:1013E00001E087E08E1508F0ACCFB7CFEF92FF9207
:1013F0000F931F93CF93DF93CDB7DEB729970FB627
:10140000F894DEBF0FBECDBF8C01FC018081FF24AC
:10141000F394803109F46FC0BE016F5F7F4FC80144
:101420000E943404F82E882309F465C08D818F371B
:1014300009F461C08FE78D838091E9029091EA02FF
:101440000E94FC03B8018091E9029091EA020E9497
:10145000DD0340E06EE48091E9029091EA020E948F
:10146000A90340E06B818091E9029091EA020E9419
:10147000A90340E06C818091E9029091EA020E9408
:10148000A903F8018081803141F040E06D818091B5
:10149000E9029091EA020E94A903E090E60280919D
:1014A000E9029091EA02EE2009F481C00E94FC0357
:1014B000882309F1B8018091E9029091EA020E9423
:1014C000DD034091E00268E48091E9029091EA0234
:1014D0000E94A9038091E00281114FC064E170E095
:1014E00080E090E00E94F2018091E9029091EA028E
:1014F0000E94FC03FE2C8CE08093E3028091E702C3
:10150000823008F462C010E08091E702181708F0FA
:101510005CC08091E3028C3009F457C0E091E9028D
:10152000F091EA02138615861486128611861086BB
:101530001782168215821482138200E0BE016F5F4B
:101540007F4F8091E9029091EA020E9476098823F8
:1015500029F0011779F10F5F101780F78981803129
:1015600091F1CE0101960E94A6049091E302981792
:1015700010F48093E3021F5FC7CF8091E1028823BC
:1015800029F060E08091E2020E94060164E170E0CF
:1015900080E090E00E94F2018091E102882309F44A
:1015A000A3CF61E08091E2020E9406019DCF0E94DC
:1015B000FC03A1CF67E0CE0101960E943F0398850E
:1015C0008913C9CFCBCF8CE0D0CF8F2D29960FB602
:1015D000F894DEBF0FBECDBFDF91CF911F910F9169
:1015E000FF90EF900895CF92DF92EF92FF92CF930A
:1015F000DF93809105030E94DD000197D1F360E045
:10160000809106030E940601C8E1D0E0C12CD12CD4
:10161000760161E0809106030E940601CC0CDD1C7E
:10162000EE1CFF1C809105030E94DD00092E000CBA
:10163000AA0BBB0BC82AD92AEA2AFB2A60E08091B0
:1016400006030E940601219721F7C3E0D0E061E084
:10165000809106030E94060160E0809106030E94CB
:1016600006012197A1F7E7FE02C0FF24FA94C70103
:10167000B601DF91CF91FF90EF90DF90CF9008956A
:10168000BF92CF92DF92EF92FF920F931F93CF936F
:10169000DF93EC01198D1F3F81F0612F45960E9469
:1016A0003505FC018081898F309709F477C0148259
:1016B0008FEF8583BF01812F76C06C0135E0C30EAB
:1016C000D11CE880F9808F89882341F0C6010E94EF
:1016D000C505E62FF72F182F309749F71F89988DEA
:1016E000191324C0103109F459C0110F6D897E8976
:1016F000D701ED91FC91B4E01B9FA0011124C61607
:10170000D70609F044C00190F081E02DBA01C7016D
:101710000995009709F442C020E1F601DC0101902F
:101720000D922A95E1F79E8B8D8B188F0D891E895E
:101730008F8921E0280F2F8BE4E08E9FC0011124B8
:10174000080F191F90E1B92E203111F48FE0B82E47
:10175000F6E0BF9EB0011124D701ED91FC910190FC
:10176000F081E02DC7010995F80193838283892BCD
:1017700009F4B12CD801BC9211961C92012B71F086
:10178000C6010E94C505E62FF72F182F8DCF0480C4
:10179000F581E02DC7010995009729F681E08A833C
:1017A00060E070E08FEFDF91CF911F910F91FF907C
:1017B000EF90DF90CF90BF9008957F928F929F928D
:1017C000AF92BF92CF92DF92EF92FF920F931F934F
:1017D000CF93DF93EC016115710589F4B12CA12C35
:1017E000C501DF91CF911F910F91FF90EF90DF9096
:1017F000CF90BF90AF909F908F907F9008958C81F5
:1018000081112AC080E28C83209741F38FEF888377
:1018100089837A018B016A0185E1C80ED11C688138
:10182000C6010E943505FC01BB24BA94892B09F03E
:10183000B580AA24A39499249394309709F451C0B5
:10184000AA2099F18481843069F08530C9F190E053
:1018500080E0F0E0E0E015C0803209F0BFCF2097D3
:10186000C1F6BCCF0190F081E02D90E080E0309790
:1018700041F0DF010D900020E9F7CD0101978E1BAB
:101880009F0BD8010D900020E9F71197A01BB10B19
:10189000A817B90751F4D8018E0F9F1F8E179F0705
:1018A000C1F031912D913217C9F3A9246B2DC601D6
:1018B0000E943505FC01892B09F4BFCFB580BDCF4F
:1018C0000190F081E02D838190E03496DACF788228
:1018D0002AC06B2DC6010E9435055C01892B09F0D9
:1018E0007FCFC7010E94400B782E4B01672B09F474
:1018F00075CFC7010E94400BF82E962FA92EB72E48
:10190000A114B10409F46ACF84E0F4018483118343
:101910000083F58269816F3FD1F2C6010E943505CF
:10192000DC0115967C92F9825BCF8F929F92AF92E9
:10193000BF92EF92FF920F931F93CF93DF93FC011F
:10194000E380F48081819281009719F18B01658198
:101950007681A7010E94DD0BEC010097D1F0F80120
:1019600080809180A280B380B7010E94F1058EE053
:101970008C8388829982AA82BB8281E0DF91CF9199
:101980001F910F91FF90EF90BF90AF909F908F901D
:10199000089580E0F3CF0F931F93CF93DF93FC0163
:1019A00000811181C8014A96D0E0C0E081F06281D7
:1019B0007381A8010E94DD0BEC01009741F0B80192
:1019C0000E94F10580E28C838FEF88838983BE01BA
:1019D000C801DF91CF911F910F910895CB01BA01FA
:1019E0000C949918CB010C941018CB010C9474171B
:1019F0001F920F920FB60F9211242F933F938F9344
:101A00009F93AF93BF9380913B0290913C02A09132
:101A10003D02B0913E0230913A0223E0230F2D3770
:101A200058F50196A11DB11D20933A0280933B0207
:101A300090933C02A0933D02B0933E0280913F02FE
:101A400090914002A0914102B09142020196A11DE5
:101A5000B11D80933F0290934002A0934102B09346
:101A60004202BF91AF919F918F913F912F910F9023
:101A70000FBE0F901F90189526E8230F0296A11D08
:101A8000B11DD2CF1F920F920FB60F9211242F9338
:101A90003F934F935F936F937F938F939F93AF93F6
:101AA000BF93EF93FF93E0910201F0910301099539
:101AB000FF91EF91BF91AF919F918F917F916F9126
:101AC0005F914F913F912F910F900FBE0F901F90FC
:101AD00018951F920F920FB60F9211242F933F93D8
:101AE0004F935F936F937F938F939F93AF93BF9326
:101AF000EF93FF93E0910001F09101010995FF91AF
:101B0000EF91BF91AF919F918F917F916F915F9175
:101B10004F913F912F910F900FBE0F901F901895EE
:101B20001F920F920FB60F9211242F933F934F9352
:101B30005F936F937F938F939F93AF93BF93EF9335
:101B4000FF9383E492E00E94B002FF91EF91BF9176
:101B5000AF919F918F917F916F915F914F913F9145
:101B60002F910F900FBE0F901F9018951F920F92FC
:101B70000FB60F9211242F938F939F93EF93FF93A0
:101B8000E0915302F09154028081E0915902F0916A
:101B90005A0282FD1BC0908180915C028F5F8F731F
:101BA00020915D02821741F0E0915C02F0E0ED5B74
:101BB000FD4F958F80935C02FF91EF919F918F91E4
:101BC0002F910F900FBE0F901F9018958081F4CF2A
:101BD000E3E4F2E01382128288EE93E0A0E0B0E04A
:101BE00084839583A683B78382E391E09183808386
:101BF00085EC90E09587848784EC90E097878687D2
:101C000080EC90E0918B808B81EC90E0938B828BC9
:101C100082EC90E0958B848B86EC90E0978B868BA2
:101C2000118E128E138E148EE5E0F3E081E1808335
:101C300080E1818360E084E00E943401E2E0F1E031
:101C4000E491A7EFB2E0EC93EEEEF0E0E491F0E087
:101C5000EE0FFF1FE052FF4F8591949112969C93D7
:101C60008E9311971B961C921B971D961C921D9785
:101C70001C961C921C971A961C921A9719961C92E5
:101C8000199718961C92189717961C9217971696E4
:101C90001C92169715961C92159714961C921497E1
:101CA00013961C921397E0EEF2E0168A158A1182C1
:101CB000B287A18717821086108289E0838381E032
:101CC0008483858386830895CF93DF93CDB7DEB772
:101CD0002C970FB6F894DEBF0FBECDBF789484B5B5
:101CE000826084BD84B5816084BD85B5826085BD18
:101CF00085B5816085BD80916E00816080936E00A6
:101D00001092810080918100826080938100809197
:101D10008100816080938100809180008160809348
:101D200080008091B10084608093B1008091B00008
:101D300081608093B00080917A00846080937A0003
:101D400080917A00826080937A0080917A0081602D
:101D500080937A0080917A00806880937A00109254
:101D6000C100E0915302F091540282E08083E0913F
:101D70004F02F09150021082E0915102F091520214
:101D800080E1808310925B02E0915702F09158024B
:101D900086E08083E0915502F09156028081806157
:101DA0008083E0915502F0915602808188608083A3
:101DB000E0915502F0915602808180688083E09125
:101DC0005502F091560280818F7D8083E091E90277
:101DD000F091EA0213861586148612861186108603
:101DE000178216821582148213821092E7021092D3
:101DF000E80211E0BE016F5F7F4F8091E902909190
:101E0000EA020E947609882309F45FC067E0CE01E8
:101E100001960E943F0398858913ECCF8091E702D9
:101E20008F5F8093E7028981883231F008F044C0E7
:101E3000803111F08232F1F68091E8028F5F809359
:101E4000E8028091E002811128C08091E90290911E
:101E5000EA020E94FC03BE016F5F7F4F8091E9029E
:101E60009091EA020E94DD0340E064EB8091E90278
:101E70009091EA020E94A9038091E9029091EA02FE
:101E80000E945603082F8091E9029091EA020E9475
:101E9000FC03011102C01093E0028981803199F0A6
:101EA000CE0101960E94A6049091E302981708F0D3
:101EB000A1CF8093E3029ECF8B3309F4BDCF823450
:101EC00009F098CFB9CF8CE0EFCF80E191E00E948C
:101ED000F60988E091E00E94F6091092E40262E0BF
:101EE000809105030E94340161E0809106030E9405
:101EF000340161E0809106030E94060161E070E018
:101F000080E090E00E94F20160E0809106030E9470
:101F1000060180918100887F81608093810061E06B
:101F200085E00E94340161E08AE00E943401609102
:101F3000050170E085E00E9470016091040170E08D
:101F40008AE00E94700160E082E00E94340185E234
:101F500092E09093010180930001809169008C7F51
:101F6000826080936900E89A60E083E00E94340117
:101F70008BE292E0909303018093020180916900CB
:101F8000837F886080936900E99A60E088E00E941E
:101F9000340161E08FE00E94340161E08EE00E9434
:101FA000340188E19FE00FB6F894A8958093600013
:101FB0000FBE9093600046E050E06DE671E083E470
:101FC00092E00E9432020E946106809132028111E9
:101FD0001FC00E94F30A6057734F854091090E9409
:101FE000D81527EA32E14BEA59E30E948D1620E02A
:101FF00030E04FE254E40E94BC1460932E027093D0
:102000002F02809330029093310281E0809332025C
:1020100080912602811103C081E080932602809185
:102020001E02811121C086E091E09093FF01809310
:10203000FE01109200021092020210920102E3E0EF
:10204000F2E0F0931402E09313021092150284E080
:10205000809316028FEF8093170210921C028093D8
:102060001D0281E080931E028091F201811117C050
:102070008EEF91E09A838983E4E7F1E0FC83EB83C0
:10208000CE0101960E94CB0C6093EE017093EF019C
:102090008093F0019093F10181E08093F2018091AF
:1020A000E601811117C08EEF91E09A838983EAE7F8
:1020B000F1E0FC83EB83CE0101960E94CB0C609390
:1020C000E2017093E3018093E4019093E50181E0E4
:1020D0008093E6012FB7F89480913B0290913C02E7
:1020E000A0913D02B0913E022FBF8093DE019093FC
:1020F000DF01A093E001B093E10181159842AB4666
:10210000BE4E18F0F0E0E0E009958091DE0190917C
:10211000DF01A091E001B091E1014091DA0150911D
:10212000DB016091DC017091DD01841B950BA60B36
:10213000B70B883E9340A105B10508F42BC380E19D
:1021400091E00E94D3046B017C01C092D601D09231
:10215000D701E092D801F092D90188E091E00E9485
:10216000D3044B015C0120E030E04EEF52ECC7019C
:10217000B6010E942915882341F0C092D201D09265
:10218000D301E092D401F092D50120E030E04EEF8F
:1021900052ECC501B4010E942915882341F08092B8
:1021A000CE019092CF01A092D001B092D101809146
:1021B000E9029091EA020E94FC0340E06CEC8091FD
:1021C000E9029091EA020E94A9034091E00264E4CE
:1021D0008091E9029091EA020E94A9038091E402B1
:1021E000882391F1E091E3028091E502882309F4CC
:1021F0004DC38091E002811149C38FB7F894C0901C
:102200003B02D0903C02E0903D02F0903E028FBF36
:102210008091E9029091EA020E9456038130A1F078
:102220002FB7F89480913B0290913C02A0913D021F
:10223000B0913E022FBF8C199D09AE09BF098E3E99
:102240009240A105B10520F38091AC01811115C028
:102250006091DE017091DF018091E0019091E101D8
:102260000E94D6156093A8017093A9018093AA01DA
:102270009093AB0181E08093AC018090D20190906B
:10228000D301A090D401B090D50120E030E040E22D
:1022900052E4C501B4010E9488166FEF70E087FF19
:1022A000FBC020E030E040EA50E4C501B4010E94E8
:1022B000291570E060E018160CF0EEC020E030E068
:1022C00040E850E46091CE017091CF018091D0013F
:1022D0009091D1010E94BD143B018C0120E030E0BF
:1022E00040E252E40E94291587FDF8C270E060E0E8
:1022F00090E282E4272F362F492F582FC501B401D1
:102300000E94BC146B017C016091DE017091DF01C1
:102310008091E0019091E1010E94D6152091A801E1
:102320003091A9014091AA015091AB010E94BC14C7
:102330001B012C018091A6019091A7018F3F91056F
:10234000D1F4A2019101C701B6010E948D169B0133
:10235000AC016091A2017091A3018091A4019091C0
:10236000A5010E94BD146093A2017093A301809304
:10237000A4019093A50120E030E040E85FE3C501AF
:10238000B4010E94BC149B01AC01B301C8010E94BE
:102390008816181644F41092A2011092A30110920C
:1023A000A4011092A5012AE037ED43E25EE36091BB
:1023B000A2017091A3018091A4019091A5010E94B6
:1023C0008D164B015C0120E030E040EF52E4C70184
:1023D000B6010E948D169B01AC01C501B4010E949B
:1023E000BD144B015C0120919E0130919F014091F1
:1023F000A0015091A101C701B6010E94BC14A20125
:1024000091010E942E1520E030E040E850E40E9447
:102410008D169B01AC01C501B4010E94BD1420E0E2
:1024200030E048EC52E40E94BD144B015C0120E016
:1024300030E044EB52E40E9429156AE570E087FD24
:102440001FC020E030E04FE753E4C501B4010E9413
:1024500088166FEF70E018169CF020E030E0A901BC
:10246000C501B4010E94881620E030E040E05FE33F
:1024700087FD39C2C501B4010E94BD140E94A01598
:102480007093A7016093A601C0929E01D0929F0114
:10249000E092A001F092A1016093CD0177278AE03C
:1024A0000E9470014EEF51E060E871E088E192E037
:1024B0000E94DD0B8C01009799F0C0902E02D09005
:1024C0002F02E0903002F09031026EEF71E00E9436
:1024D000F1058EE0F8018483C082D182E282F3822A
:1024E0008091EE019091EF01A091F001B091F10186
:1024F0008A839B83AC83BD8385E891E09F838E8331
:102500006EEC71E0CE0101960E94950C8091EE0177
:102510009091EF01A091F001B091F1018A839B832A
:10252000AC83BD83E9E8F1E0FF83EE8362ED71E007
:10253000CE0101960E94950CC090E201D090E3017B
:10254000E090E401F090E501C114D104C9F0A701C5
:102550006FE871E0C6010E94DD0B8C01009781F0ED
:10256000B090CD01B7010E94F1058AE0F8018483A3
:102570008B2D90E0B0E0A0E080839183A283B383B1
:10258000C090CC018091B801D12CF12CE12C8111AB
:102590000FC0C701B6010E94D6156093B4017093B5
:1025A000B5018093B6019093B70181E08093B801A3
:1025B0002091DE013091DF014091E0015091E10175
:1025C0008091DA019091DB01A091DC01B091DD01F5
:1025D000281B390B4A0B5B0B60E67AEE80E090E03B
:1025E0000E943217C701B6010E94FA160E94D61542
:1025F0002DEC3CEC4CE45FE30E948D166B017C01FA
:102600002CEC3CEC4CE45EE36091B4017091B501BC
:102610008091B6019091B7010E948D169B01AC018B
:10262000C701B6010E94BD146093B4017093B50157
:102630008093B6019093B70169877A878B879C87CF
:102640008091E2019091E301A091E401B091E50154
:102650008A839B83AC83BD8383E991E09F838E83D0
:10266000BE01675F7F4FCE0101960E94950C1091CD
:10267000CB012091DE013091DF014091E0015091CA
:10268000E1018091DA019091DB01A091DC01B09130
:10269000DD01281B390B4A0B5B0B60E87EEE86E3FD
:1026A00090E00E943217A12FB0E00E9454172AEA4E
:1026B00030E040E050E00E943217CA01B9010E94A8
:1026C000D6152DEC3CEC4CE45FE30E948D166B01BB
:1026D0007C012CEC3CEC4CE45EE36091C001709119
:1026E000C1018091C2019091C3010E948D169B018E
:1026F000AC01C701B6010E94BD146093C001709384
:10270000C1018093C2019093C30169877A878B8747
:102710009C878091E2019091E301A091E401B09146
:10272000E5018A839B83AC83BD83E8E9F1E0FF8305
:10273000EE83BE01675F7F4FCE0101960E94950C2C
:1027400083E492E09A8389831C821B828EEF91E05E
:102750009E838D83BE016F5F7F4F88E192E00E9470
:10276000AE060E9461061092CA011092CC0110922E
:10277000CB018091DE019091DF01A091E001B09149
:10278000E1018093DA019093DB01A093DC01B09327
:10279000DD01A8958091DE019091DF01A091E0011B
:1027A000B091E1014091FA015091FB016091FC016F
:1027B0007091FD01841B950BA60BB70B8436910518
:1027C000A105B10508F4B8C00E94F30A6057734F21
:1027D000854091090E94D81527EA32E14BEA59E376
:1027E0000E948D1620E030E04FE254E40E94BC14B9
:1027F00060932E0270932F028093300290933102E7
:102800002091C9012111A5C0C090DE01D090DF0147
:10281000E090E001F090E10120E030E04AEF53EC7D
:102820000E94881618160CF063C08091C8018111AF
:102830000BC081E08093C801C092C401D092C50151
:10284000E092C601F092C7018091C4019091C50148
:10285000A091C601B091C701C81AD90AEA0AFB0AB9
:1028600098EEC91693E0D906E104F10408F454C0C7
:1028700061E08FE00E94060161E08EE00E940601A7
:1028800081E08093C9011092C80146C0E9508EEEE4
:1028900092E0E33038F4F0E0EE0FFF1FE85DFE4F0A
:1028A000808191816C01990FEE08FF088091E1020F
:1028B000882329F060E08091E2020E940601C701AE
:1028C000B6010E94F2018091E102882309F4BCCC98
:1028D00061E08091E2020E940601B6CC762D672D60
:1028E000902F812F07CDC501B4010E94BC14C6CD25
:1028F0008091C4019091C501A091C601B091C7011A
:10290000C81AD90AEA0AFB0AE8EECE16E3E0DE06A8
:10291000E104F10408F0B7CF8091DE019091DF016E
:10292000A091E001B091E1018093FA019093FB0145
:10293000A093FC01B093FD0180E090E0892B09F4A5
:1029400044CB0E949C02882309F43FCB0E940000E4
:102950003CCB20E030E046E154EC0E94291587FF93
:10296000DBCF60E08FE00E94060160E08EE00E9415
:1029700006011092C901D0CF5058BB27AA270E9448
:10298000D4140C944E160E94401638F00E9447163C
:1029900020F039F49F3F19F426F40C943D160EF400
:1029A000E095E7FB0C943716E92F0E945F1658F369
:1029B000BA17620773078407950720F079F4A6F524
:1029C0000C9481160EF4E0950B2EBA2FA02D0B015E
:1029D000B90190010C01CA01A0011124FF27591B64
:1029E00099F0593F50F4503E68F11A16F040A22F6A
:1029F000232F342F4427585FF3CF469537952795DB
:102A0000A795F0405395C9F77EF41F16BA0B620BD9
:102A1000730B840BBAF09150A1F0FF0FBB1F661F20
:102A2000771F881FC2F70EC0BA0F621F731F841F63
:102A300048F4879577956795B795F7959E3F08F089
:102A4000B0CF9395880F08F09927EE0F979587954B
:102A500008950E94131608F481E008950E9442151B
:102A60000C944E160E94471658F00E94401640F0F3
:102A700029F45F3F29F00C94371651110C948216FB
:102A80000C943D160E945F1668F39923B1F3552309
:102A900091F3951B550BBB27AA2762177307840771
:102AA00038F09F5F5F4F220F331F441FAA1FA9F307
:102AB00035D00E2E3AF0E0E832D091505040E695F5
:102AC000001CCAF72BD0FE2F29D0660F771F881F56
:102AD000BB1F261737074807AB07B0E809F0BB0B49
:102AE000802DBF01FF2793585F4F3AF09E3F51055D
:102AF00078F00C9437160C9482165F3FE4F3983EFE
:102B0000D4F3869577956795B795F7959F5FC9F745
:102B1000880F911D9695879597F90895E1E0660FC6
:102B2000771F881FBB1F621773078407BA0720F03F
:102B3000621B730B840BBA0BEE1F88F7E0950895A8
:102B40000E94A7156894B1110C94821608950E94F2
:102B5000671688F09F5798F0B92F9927B751B0F0B2
:102B6000E1F0660F771F881F991F1AF0BA95C9F711
:102B700014C0B13091F00E948116B1E008950C9418
:102B80008116672F782F8827B85F39F0B93FCCF3CB
:102B9000869577956795B395D9F73EF4909580958E
:102BA000709561957F4F8F4F9F4F0895E89409C0AE
:102BB00097FB3EF490958095709561957F4F8F4F70
:102BC0009F4F9923A9F0F92F96E9BB279395F69586
:102BD000879577956795B795F111F8CFFAF4BB0F04
:102BE00011F460FF1BC06F5F7F4F8F4F9F4F16C068
:102BF000882311F096E911C0772321F09EE8872FF2
:102C0000762F05C0662371F096E8862F70E060E0AD
:102C10002AF09A95660F771F881FDAF7880F969526
:102C2000879597F90895990F0008550FAA0BE0E8CA
:102C3000FEEF16161706E807F907C0F0121613067E
:102C4000E407F50798F0621B730B840B950B39F4BE
:102C50000A2661F0232B242B252B21F408950A2624
:102C600009F4A140A6958FEF811D811D089597F964
:102C70009F6780E870E060E008959FEF80EC089522
:102C800000240A941616170618060906089500244B
:102C90000A9412161306140605060895092E0394C5
:102CA000000C11F4882352F0BB0F40F4BF2B11F439
:102CB00060FF04C06F5F7F4F8F4F9F4F089557FD98
:102CC0009058440F551F59F05F3F71F04795880F9A
:102CD00097FB991F61F09F3F79F087950895121631
:102CE00013061406551FF2CF4695F1DF08C01616DD
:102CF00017061806991FF1CF86957105610508948E
:102D00000895E894BB2766277727CB0197F90895A4
:102D10000E94131608F48FEF08950E94A0160C94D9
:102D20004E160E94401638F00E94471620F0952358
:102D300011F00C9437160C943D1611240C94821645
:102D40000E945F1670F3959FC1F3950F50E0551FD9
:102D5000629FF001729FBB27F00DB11D639FAA27F0
:102D6000F00DB11DAA1F649F6627B00DA11D661F3F
:102D7000829F2227B00DA11D621F739FB00DA11D60
:102D8000621F839FA00D611D221F749F3327A00D1A
:102D9000611D231F849F600D211D822F762F6A2FB6
:102DA00011249F5750409AF0F1F088234AF0EE0F1B
:102DB000FF1FBB1F661F771F881F91505040A9F748
:102DC0009E3F510580F00C9437160C9482165F3F9D
:102DD000E4F3983ED4F3869577956795B795F79584
:102DE000E7959F5FC1F7FE2B880F911D96958795FC
:102DF00097F90895DB018F939F930E945417BF9119
:102E0000AF91A29F800D911DA39F900DB29F900D39
:102E100011240895AA1BBB1B51E107C0AA1FBB1FA9
:102E2000A617B70710F0A61BB70B881F991F5A9556
:102E3000A9F780959095BC01CD01089597FB072EC9
:102E400016F4009407D077FD09D00E940A1707FCFA
:102E500005D03EF4909581959F4F089570956195AA
:102E60007F4F0895A1E21A2EAA1BBB1BFD010DC0C6
:102E7000AA1FBB1FEE1FFF1FA217B307E407F5072A
:102E800020F0A21BB30BE40BF50B661F771F881F06
:102E9000991F1A9469F760957095809590959B019C
:102EA000AC01BD01CF0108950E946517A59F900D4B
:102EB000B49F900DA49F800D911D11240895EE0FD5
:102EC000FF1F0590F491E02D0994A29FB001B39FDC
:102ED000C001A39F700D811D1124911DB29F700D23
:102EE000811D1124911D08950F931F93CF93DF939C
:102EF0008230910510F482E090E0E0911103F091AE
:102F0000120330E020E0B0E0A0E0309799F4211502
:102F1000310509F44AC0281B390B24303105D8F596
:102F20008A819B816115710589F1FB0193838283FD
:102F3000FE0111C040815181028113814817590758
:102F4000E0F04817590799F4109761F012960C9326
:102F5000129713961C933296CF01DF91CF911F9158
:102F60000F9108950093110310931203F4CF2115CC
:102F7000310551F04217530738F0A901DB019A01DE
:102F8000BD01DF01F801C1CFEF01F9CF909312032A
:102F900080931103CDCFFE01E20FF31F8193919334
:102FA0002250310939832883D7CF20910F033091E4
:102FB0001003232B41F420911A0130911B0130930F
:102FC000100320930F03209118013091190121154E
:102FD000310541F42DB73EB740911C0150911D01C0
:102FE000241B350BE0910F03F0911003E217F30758
:102FF000A0F42E1B3F0B2817390778F0AC014E5F69
:103000005F4F2417350748F04E0F5F1F5093100392
:1030100040930F03819391939FCFF0E0E0E09CCF2A
:10302000CF93DF930097E9F0FC013297138212826D
:10303000A0911103B0911203ED0130E020E0109750
:10304000A1F420813181820F931F20910F033091D1
:1030500010032817390709F061C0F0931003E093BB
:103060000F03DF91CF910895EA01CE17DF07E8F54E
:103070004A815B819E0141155105B1F7E901FB834E
:10308000EA8349915991C40FD51FEC17FD0761F4EC
:10309000808191810296840F951FE901998388832D
:1030A000828193819B838A83F0E0E0E012968D9188
:1030B0009C9113970097B9F52D913C911197CD01F3
:1030C0000296820F931F20910F033091100328174F
:1030D000390739F6309751F5109212031092110307
:1030E000B0931003A0930F03BCCFD383C28340815E
:1030F0005181840F951FC817D90761F44E5F5F4F48
:1031000088819981480F591F518340838A819B810F
:10311000938382832115310509F0B0CFF093120318
:10312000E09311039ECFFD01DC01C0CF1382128218
:10313000D7CFB0E0A0E0EFE9F8E10C9461198C0181
:10314000009751F4CB010E9474178C01C801CDB7D0
:10315000DEB7E0E10C947D19FC01E60FF71F9C013E
:1031600022503109E217F30708F49DC0D901CD912F
:10317000DC911197C617D70798F0C530D10530F309
:10318000CE0104978617970708F3C61BD70B229723
:10319000C193D1936D937C93CF010E941018D6CF29
:1031A0005B01AC1ABD0A4C018C0E9D1EA09111034F
:1031B000B0911203512C412CF12CE12C109731F5D8
:1031C00080910F03909110038815990509F05CC058
:1031D0004616570608F058C08091180190911901C1
:1031E000009741F48DB79EB740911C0150911D018D
:1031F000841B950BE817F90708F055C0F0931003EE
:10320000E0930F03F90171836083A0CF8D919C91AE
:10321000119712966C90129713967C901397A8159D
:10322000B90559F56C0142E0C40ED11CCA14DB0487
:1032300020F1AC014A195B09DA011296159780F06A
:103240006282738251834083D9016D937C93E11430
:10325000F10471F0D7011396FC93EE93129776CF99
:1032600022968C0F9D1FF90191838083F301EFCF8C
:10327000F0931203E093110369CF4816590608F43E
:103280002C017D01D3019ACFCB010E9474177C01E0
:10329000009749F0AE01B8010E945619C8010E947A
:1032A0001018870153CF10E000E050CFFB01DC0184
:1032B00002C001900D9241505040D8F708952F92CE
:1032C0003F924F925F926F927F928F929F92AF92B6
:1032D000BF92CF92DF92EF92FF920F931F93CF9303
:1032E000DF93CDB7DEB7CA1BDB0B0FB6F894DEBF9A
:1032F0000FBECDBF09942A88398848885F846E84C0
:103300007D848C849B84AA84B984C884DF80EE8009
:10331000FD800C811B81AA81B981CE0FD11D0FB612
:10332000F894DEBF0FBECDBFED010895F894FFCF36
:1033300031023102FAFF220128CCAE46D41B7DC9EE
:1033400028D87946D4762C1700001303800000009B
:103350000000F50CF20CEE0C5E00BC0077010000E2
:103360000000D20232025F021F0390026E0282024C
:103370000D0A002F2F272722225C5C6208660C6E44
:103380000A720D7409005C7530303030006E756C57
:103390006C00747275650066616C73650048656CDD
:1033A0006C6F210074656D707300746163686F00E9
:1033B0006D626172006169720077617465720066A6
:0E33C000616E0070756D7000666C6F770000B6
:107E0000112484B714BE81FFF0D085E080938100F7
:107E100082E08093C00088E18093C10086E0809377
:107E2000C20080E18093C4008EE0C9D0259A86E02C
:107E300020E33CEF91E0309385002093840096BBD3
:107E4000B09BFECF1D9AA8958150A9F7CC24DD24C4
:107E500088248394B5E0AB2EA1E19A2EF3E0BF2EE7
:107E6000A2D0813461F49FD0082FAFD0023811F036
:107E7000013811F484E001C083E08DD089C08234E0
:107E800011F484E103C0853419F485E0A6D080C0E4
:107E9000853579F488D0E82EFF2485D0082F10E0AE
:107EA000102F00270E291F29000F111F8ED06801E7
:107EB0006FC0863521F484E090D080E0DECF843638
:107EC00009F040C070D06FD0082F6DD080E0C81688
:107ED00080E7D80618F4F601B7BEE895C0E0D1E017
:107EE00062D089930C17E1F7F0E0CF16F0E7DF06D8
:107EF00018F0F601B7BEE89568D007B600FCFDCFD4
:107F0000A601A0E0B1E02C9130E011968C91119780
:107F100090E0982F8827822B932B1296FA010C0160
:107F200087BEE89511244E5F5F4FF1E0A038BF0790
:107F300051F7F601A7BEE89507B600FCFDCF97BE46
:107F4000E89526C08437B1F42ED02DD0F82E2BD052
:107F50003CD0F601EF2C8F010F5F1F4F84911BD097
:107F6000EA94F801C1F70894C11CD11CFA94CF0C13
:107F7000D11C0EC0853739F428D08EE10CD085E9AC
:107F80000AD08FE07ACF813511F488E018D01DD067
:107F900080E101D065CF982F8091C00085FFFCCF94
:107FA0009093C60008958091C00087FFFCCF809118
:107FB000C00084FD01C0A8958091C6000895E0E648
:107FC000F0E098E1908380830895EDDF803219F02E
:107FD00088E0F5DFFFCF84E1DECF1F93182FE3DFCA
:107FE0001150E9F7F2DF1F91089580E0E8DFEE27F6
:047FF000FF270994CA
:027FFE00040479
:00000001FF

View File

@ -0,0 +1,89 @@
import serial
import json
from rich import print
import time
def map_fan_range(air_temp, water_temp, max_water_temp=40, min_fan_spd=90, max_fan_spd=250):
if water_temp >= max_water_temp:
return max_fan_spd
temp_diff = water_temp - (air_temp + 2.4)
print(temp_diff)
if water_temp >= max_water_temp:
return max_fan_spd
else:
return round(min(max(temp_diff * (max_fan_spd - min_fan_spd) / 4 + min_fan_spd, min_fan_spd), max_fan_spd))
class fan_PID:
def __init__(self):
self.kp = 80.0
self.ki = 0.08
self.kd = 8.0
self.integral = 0
self.last_error = 0
self.last_time = time.time()
self.max_water_temp = 40
self.min_fan_spd = 90
self.max_fan_spd = 250
self.temp_tgt_offset = 3
self.fan_spd_offset = 10
def update(self, air_temp, water_temp):
if water_temp >= self.max_water_temp:
return self.max_fan_spd
else:
error = water_temp - (min(air_temp + self.temp_tgt_offset, self.max_water_temp))
delta = time.time() - self.last_time
if control_data['f'] != 250:
self.integral = self.integral + (error * delta)
if air_temp + self.temp_tgt_offset > water_temp - 1:
self.integral = 0
derivative = (error - self.last_error) / delta
output = self.kp * error + self.ki * self.integral + self.kd * derivative
self.last_error = error
print(self.integral, derivative, error)
return round(min(max(output + self.min_fan_spd, self.min_fan_spd), self.max_fan_spd))
# very abbreviated to fit in the arduino uno's 64 byte serial receive buffer
# the arduino will crash if the fan speed goes to 70 or below... why? god only knows...
# in addition, running the fans at speeds of over 250 will break the tachometer...
control_data = {
"f": 90,
"p": 255,
"lp": 300,
"hp": 500
}
PID = fan_PID()
while True:
try:
serial_port = serial.Serial('/dev/ttyS0', baudrate=115200)
while True:
try:
# msg = json.dumps(control_data)
# print(msg.encode('ascii'))
# serial_port.write(msg.encode('ascii'))
monitor_stats = json.loads(serial_port.readline())
print(monitor_stats)
time.sleep(1)
# control_data['f'] = map_fan_range(monitor_stats['temps']['air'], monitor_stats['temps']['water'])
# control_data['f'] = PID.update(monitor_stats['temps']['air'], monitor_stats['temps']['water'])
except Exception as e:
print(e)
break
except Exception as e:
print(e)
continue

View File

@ -0,0 +1 @@
X:\Dev\server-watercooling-controller\KiCad Files\server-watercooling-controller\_autosave-watercooler.kicad_sch

View File

@ -0,0 +1,5 @@
(kicad_symbol_lib
(version 20231120)
(generator "kicad_symbol_editor")
(generator_version "8.0")
)

View File

@ -0,0 +1,53 @@
(kicad_symbol_lib
(version 20231120)
(generator "kicad_symbol_editor")
(generator_version "8.0")
(symbol "iSight_PSU_Plug"
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "U"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Value" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Datasheet" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
)
)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,5 @@
(sym_lib_table
(version 7)
(lib (name "Sparkfun_RS232-eagle-import")(type "KiCad")(uri "X:/KiCad/imported parts/Sparkfun_RS232/Sparkfun_RS232-eagle-import.kicad_sym")(options "")(descr ""))
(lib (name "Apple_iSight_PSU")(type "KiCad")(uri "${KIPRJMOD}/Apple_iSight_PSU.kicad_sym")(options "")(descr ""))
)

View File

@ -0,0 +1,53 @@
(kicad_symbol_lib
(version 20231120)
(generator "kicad_symbol_editor")
(generator_version "8.0")
(symbol "iSight_PSU_Plug"
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "U"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Value" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Datasheet" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
)
)

View File

@ -0,0 +1,5 @@
(sym_lib_table
(version 7)
(lib (name "Sparkfun_RS232-eagle-import")(type "KiCad")(uri "X:/KiCad/imported parts/Sparkfun_RS232/Sparkfun_RS232-eagle-import.kicad_sym")(options "")(descr ""))
(lib (name "Apple_iSight_PSU")(type "KiCad")(uri "${KIPRJMOD}/Apple_iSight_PSU.kicad_sym")(options "")(descr ""))
)

View File

@ -0,0 +1,2 @@
(kicad_pcb (version 20240108) (generator "pcbnew") (generator_version "8.0")
)

View File

@ -0,0 +1,83 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "watercooler.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View File

@ -0,0 +1,584 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.05,
"copper_line_width": 0.2,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.1,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.1,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.1,
"min_via_diameter": 0.5,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "watercooler.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"48e0eccb-e58c-4e7e-95f2-96ef6913ea9d",
"Root"
]
],
"text_variables": {}
}

View File

@ -0,0 +1,2 @@
(kicad_pcb (version 20240108) (generator "pcbnew") (generator_version "8.0")
)

View File

@ -0,0 +1,83 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "watercooler.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View File

@ -0,0 +1,584 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.05,
"copper_line_width": 0.2,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.1,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.1,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.1,
"min_via_diameter": 0.5,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "error",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "watercooler.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "X:/Dev/blog.neet.works/content/posts/watercooling-my-homelab/",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"48e0eccb-e58c-4e7e-95f2-96ef6913ea9d",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
{"hostname":"SAKUYA","username":"rawhide"}

View File

@ -0,0 +1 @@
{"hostname":"SAKUYA","username":"rawhide"}

BIN
schematic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

39615
schematic.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 754 KiB