Serial encoding support (#263)

* 'Single waveform play' support on auxDMA

* Desktop UI for serial encoding checkbox + connections

* on textChanged() and on_toggeled() handlers for serial encoding

* New vendor request command (0xb2) on usb control endpoint for sending serial data

* ANSI escape code filter: no handler exists in serialDecoder

* New firmware update

* Backup/restore legacy waveform when enabling/disabling txUart
This commit is contained in:
Michael Mehari 2025-01-12 10:22:17 +01:00 committed by GitHub
parent 10484cc119
commit e9d4298e57
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 1941 additions and 23 deletions

View File

@ -1116,6 +1116,7 @@ static bool udc_reqvend(void){
}
return 1;
case 0xa2: //CH2 waveform
repeat_forever = true;
TC_AUXDAC.CTRLA = 0x00;
TC_AUXDAC.PERBUF = udd_g_ctrlreq.req.wValue;
TC_AUXDAC.CTRLA = (unsigned char) udd_g_ctrlreq.req.wIndex & 0x0F;
@ -1125,6 +1126,15 @@ static bool udc_reqvend(void){
tiny_dma_delayed_set(global_mode);
}
return 1;
case 0xb2: //CH2 UART waveform
repeat_forever = false;
TC_AUXDAC.CTRLA = 0x00;
TC_AUXDAC.PERBUF = udd_g_ctrlreq.req.wValue;
TC_AUXDAC.CTRLA = (unsigned char) udd_g_ctrlreq.req.wIndex & 0x0F;
udd_set_setup_payload(dacBuf_CH2, udd_g_ctrlreq.req.wLength);
auxDacBufLen = udd_g_ctrlreq.req.wLength;
tiny_dma_delayed_set(global_mode);
return 1;
case 0xa3: //PSU voltage control
TC_PSU.CCA = 0;
PSU_target = udd_g_ctrlreq.req.wValue;

View File

@ -13,7 +13,7 @@
//#define VERO
#define OVERCLOCK 48
#define FIRMWARE_VERSION_ID 0x0006
#define FIRMWARE_VERSION_ID 0x0007
#define ATMEL_DFU_OFFSET 0x01fc
#define TC_SPISLAVE TCD0
@ -48,6 +48,7 @@ extern volatile uint16_t auxDacBufLen;
extern volatile unsigned char dummy;
extern volatile unsigned char global_mode;
extern volatile bool repeat_forever;
extern volatile char PSU_target;

View File

@ -31,6 +31,7 @@ volatile uint16_t dacBuf_len = 128;
volatile uint16_t auxDacBufLen = 128;
volatile unsigned char dummy = 0x55;
volatile unsigned char global_mode = 255;
volatile bool repeat_forever = true;
volatile char PSU_target = 0;

View File

@ -63,8 +63,18 @@ void tiny_dma_set_mode_0(void){
tiny_dma_flush();
DMA.CH2.REPCNT = 0; //Repeat forever!
DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
// TX UART waveform
if(!repeat_forever)
{
DMA.CH2.REPCNT = 1; //Do not repeat
DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm;
}
// Remaining waveforms
else
{
DMA.CH2.REPCNT = 0; //Repeat forever!
DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
}
DMA.CH2.CTRLB = 0x00; //No interrupt for DacBuf!!
DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address.
DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER
@ -157,8 +167,18 @@ void tiny_dma_set_mode_1(void){
USARTC0.DATA = 0x55;
USARTC0.DATA = 0x55;
DMA.CH3.REPCNT = 0; //Repeat forever!
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
// TX UART waveform
if(!repeat_forever)
{
DMA.CH3.REPCNT = 1; //Do not repeat
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm;
}
// Remaining waveforms
else
{
DMA.CH3.REPCNT = 0; //Repeat forever!
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
}
DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!!
DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address.
DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER
@ -220,8 +240,18 @@ void tiny_dma_set_mode_2(void){
tiny_dma_flush();
DMA.CH2.REPCNT = 0; //Repeat forever!
DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
// TX UART waveform
if(!repeat_forever)
{
DMA.CH2.REPCNT = 1; //Do not repeat
DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm;
}
// Remaining waveforms
else
{
DMA.CH2.REPCNT = 0; //Repeat forever!
DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
}
DMA.CH2.CTRLB = 0x00; //No interrupt for DacBuf!!
DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address.
DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER
@ -308,8 +338,18 @@ void tiny_dma_set_mode_3(void){
global_mode = 3;
tiny_dma_flush();
DMA.CH3.REPCNT = 0; //Repeat forever!
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
// TX UART waveform
if(!repeat_forever)
{
DMA.CH3.REPCNT = 1; //Do not repeat
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm;
}
// Remaining waveforms
else
{
DMA.CH3.REPCNT = 0; //Repeat forever!
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
}
DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!!
DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address.
DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER
@ -429,8 +469,18 @@ void tiny_dma_set_mode_4(void){
USARTC0.DATA = 0x55;
DMA.CH3.REPCNT = 0; //Repeat forever!
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
// TX UART waveform
if(!repeat_forever)
{
DMA.CH3.REPCNT = 1; //Do not repeat
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm;
}
// Remaining waveforms
else
{
DMA.CH3.REPCNT = 0; //Repeat forever!
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
}
DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!!
DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address.
DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER
@ -520,8 +570,18 @@ void tiny_dma_set_mode_6(void){
//Must enable last for REPCNT won't work!
DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable!
DMA.CH3.REPCNT = 0; //Repeat forever!
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
// TX UART waveform
if(!repeat_forever)
{
DMA.CH3.REPCNT = 1; //Do not repeat
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm;
}
// Remaining waveforms
else
{
DMA.CH3.REPCNT = 0; //Repeat forever!
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
}
DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!!
DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address.
DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER
@ -591,8 +651,18 @@ void tiny_dma_set_mode_7(void){
//Must enable last for REPCNT won't work!
DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable!
DMA.CH3.REPCNT = 0; //Repeat forever!
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
// TX UART waveform
if(!repeat_forever)
{
DMA.CH3.REPCNT = 1; //Do not repeat
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm;
}
// Remaining waveforms
else
{
DMA.CH3.REPCNT = 0; //Repeat forever!
DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm;
}
DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!!
DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address.
DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER

View File

@ -0,0 +1,754 @@
:1000000020C100003AC1000038C1000036C1000024
:1000100034C1000032C100000C94560A0C94650AE9
:100020002CC100002AC1000028C1000026C1000028
:1000300024C1000022C1000020C100001EC1000038
:100040001CC100001AC1000018C1000016C1000048
:1000500014C1000012C1000010C100000EC1000058
:100060000C94410B0C944C0B08C1000006C100001D
:1000700004C1000002C1000000C10000FEC0000079
:10008000FCC00000FAC00000F8C00000F6C000008C
:10009000F4C00000F2C00000F0C00000EEC000009C
:1000A000ECC00000EAC00000E8C00000E6C00000AC
:1000B000E4C00000E2C00000E0C00000DEC00000BC
:1000C000DCC00000DAC00000D8C00000D6C00000CC
:1000D000D4C00000D2C00000D0C00000CEC00000DC
:1000E000CCC00000CAC00000C8C00000C6C00000EC
:1000F000C4C00000C2C00000C0C00000BEC00000FC
:10010000BCC00000BAC00000B8C00000B6C000000B
:10011000B4C00000B2C00000B0C00000AAC400001B
:10012000ACC00000AAC00000A8C00000A6C000002B
:10013000A4C00000A2C00000A0C000009EC000003B
:100140009CC000009AC0000098C000000C94B60A41
:1001500094C0000092C0000090C000008EC000005B
:100160008CC000008AC0000088C0000086C000006B
:1001700084C0000082C0000080C000007EC000007B
:100180007CC000007AC0000078C0000076C000008B
:1001900074C0000072C0000070C000006EC000009B
:1001A0006CC000006AC0000068C0000066C00000AB
:1001B00064C0000062C0000060C000005EC00000BB
:1001C0005CC000005AC0000058C0000056C00000CB
:1001D00054C0000052C0000050C000004EC00000DB
:1001E0004CC000004AC0000048C0000046C00000EB
:1001F00044C000000C945C150C94141616041804EA
:100200001A041C041E04200422042404180D3E0DAC
:10021000650DAD0DB60DBB0D0E0E130E320E390E63
:10022000410E450E450E450E450E450E450E450E3A
:100230008A0DC70DD10DDB0DE90DEB0DED0DF70DA1
:10024000010E11241FBECFEFCDBFDFE2DEBF10E2F3
:10025000A0E0B0E2EAE4FEE202C005900D92AA3B03
:10026000B107D9F72DE2AAEBB0E201C01D92AC3F75
:10027000B207E1F791D20C942317C2CE84E08093A9
:1002800056008CE1BED3809363008BEB80936600B5
:1002900080E88093650081E08093600088ED84BFF2
:1002A0001092410083E08093500080915100833090
:1002B000E1F78091500081608093500088E1809345
:1002C00055008091510080FFFCCF809150008061EB
:1002D000809350008091510084FFFCCF88ED84BF53
:1002E00084E0809340000895E0E7F0E085818E7F10
:1002F0008583E0E0FAE08FEB9DE586A397A380EE8F
:100300009EE280A391A382E0808308958091200AD9
:100310009091210A813E2EE2920718F020919E23AF
:1003200006C0803E2EE2920721F020919B2320936D
:100330006A0020910520222321F080910520815020
:1003400033C0885F9A42813D974080F11092BA2075
:100350008091BB209091BC20A091BD20B091BE2087
:100360000196A11DB11D8093BB209093BC20A0934A
:10037000BD20B093BE208091BB209091BC20A09165
:10038000BD20B091BE20892F9A2FAB2FBB27809321
:10039000BE238091BB209091BC20A091BD20B09144
:1003A000BE208093BD2386E08093052080910720A6
:1003B000909108200196B1F480910A208F3F91F02E
:1003C00080910620811106C0809106208150809383
:1003D00006200895809114019091150180930720C3
:1003E000909308200895009709F45EC00CF457C05C
:1003F00040E020916B0030E020939C2330939D23BC
:1004000020919C2330919D233695322F22273795BA
:10041000279520939C2330939D2350916A0020912F
:100420009C2330919D23250F311D20939C233093D5
:100430009D23000020919C2330919D23281739078C
:1004400028F410929C2310929D23089520919C23C0
:1004500030919D23280F391F2115304238F08FEF3E
:100460009FE180939C2390939D23089520919C234A
:1004700030919D23442329F0A901481B590BCA013F
:1004800002C0820F931F80939C2390939D238091A1
:100490009C2390919D238F7780936A000895919576
:1004A0008195910941E0A5CF0895CF93DF93C09145
:1004B000200AD091210A80910320909104209E016E
:1004C000281B390B20939F233093A0238091BA20BF
:1004D00081114BC080919F239091A0238E3C9F4F10
:1004E000D4F480919F239091A0238B369F4F9CF052
:1004F00080910220882321F080910220815008C041
:1005000080916A0080939E2381E08093BA208CE0E2
:10051000809302202AC08CE08093022080919F2348
:100520009091A0238A369F4F1CF08FEF9FEF02C05F
:1005300081E090E08093992390939A2380919F2368
:100540009091A0232091992330919A2360E370E049
:100550000E94FA16261B370B2093992330939A2377
:100560008091992390919A233EDF8091BA20813027
:1005700029F580919F239091A023C39794F08091B7
:100580000220882331F08091022081508093022044
:1005900015C080916A0080939B2383E08093BA20EA
:1005A0000DC080919F239091A023873991051CF461
:1005B00081E090E002C08FEF9FEF15DFC093032032
:1005C000D0930420DF91CF9108958617970779F093
:1005D0006817790728F49C01261B370BB90109C05D
:1005E0008617970718F4681B790B03C0089560E01D
:1005F00070E0CB010895CF93DF938091002090911C
:100600000120892B51F080910020909101200197C9
:10061000809300209093012043C080E490E0809379
:10062000002090930120809107209091082001964E
:10063000B9F1809114019091150120910A20263082
:1006400018F467E771E002C06EEE72E00E94E616F1
:10065000EC0180910720909108208C179D0758F499
:100660006091072070910820CE01AFDF029718F04B
:1006700080EC9DE511C08091072090910820C8175B
:10068000D90770F46091072070910820CE019DDF9A
:10069000029730F08FEB9DE58093360A9093370AEE
:1006A000DF91CF910895AC01460F571F861B970B22
:1006B0002091200A3091210A24173507C8F720918C
:1006C000200A3091210A8217930790F70895E0E8F5
:1006D000F6E08FE0808385E0848308951F93CF93B5
:1006E000DF93C0E4D0E0198180E4898340E250E0E8
:1006F00064ED7DE280E290E00E94A8101983DF9112
:10070000CF911F9108951F93CF93DF93C0E4D0E062
:10071000198180E4898387ED97E20E94DE1081E0F1
:100720000E94F0101983DF91CF911F9108950895D1
:100730000F931F93842F50E0415851099DE7949FD8
:100740009001959F300D112490910A20953048F426
:10075000843810F029583E4F9091C42067E771E02B
:1007600004C09091C4206EEE72E0969FA001979F06
:10077000500D1124420F531F4850584D08E913E003
:100780002DE730E060E00E9499141F910F910895C9
:100790001CBEEEEFF0E40994A1DF8091D42D8823F4
:1007A00069F080E2E4EDFDE2A7EDB7E201900D9281
:1007B0008A95E1F71092D727A6DFEADF87E08093DA
:1007C000A20078945BDDB3DF0E94A70C65D188D1CD
:1007D00060E080E01FD10BD18CE0FFD085D629D717
:1007E00042D775DF60EA70E28AEA93E20E941C1742
:1007F00000000000000000000000000000000000F9
:100800000000000000000000000000008091BF20F8
:10081000882371F3E091D6258E2F90E088309105E2
:10082000A0F4FC01E250FF4F0C940D1784D10DC0D1
:1008300016D20BC0D1D209C084D307C042D405C0A0
:1008400001D503C000D501C097D51092BF20D0CFED
:1008500008950895809114018093B3238091150128
:100860008093B423809124018093B5238091250146
:100870008093B6238091200A8093BF238091210A20
:100880008093C0238091140190911501863491408A
:1008900080F08091140190911501893A914048F4BB
:1008A00080911401909115018093F42D9093F52D72
:1008B00000008091C220882339F016DD1092C220FA
:1008C00081E08093C12008958091C120882341F068
:1008D0008091BA20833019F419DD8DDE01C0E5DD89
:1008E0008091C020882351F08091140190911501CE
:1008F0008093F42D9093F52D1092C02080910A20C2
:100900002091140130911501853028F481E02737BA
:10091000314030F004C081E02E3E324008F080E0EB
:100920008093C42008950F931F9381E08093C72084
:100930008093C22008E913E02DE730E048EF57E24A
:1009400060E081E80E9499142DE730E045E758E225
:1009500060E082E80E9499142DE730E042EF58E20F
:1009600060E083E80E9499142DE730E04FE659E2F9
:1009700060E084E80E9499142DE730E04CEE59E2E3
:1009800060E085E80E9499142DE730E049E65AE2DC
:1009900060E086E80E94991481E01F910F9108950C
:1009A0001092C720089581E0089581E00895109283
:1009B0002002982F9C7193689093200287FF03C0B8
:1009C00080E192E002C080E090E0892B80932102D8
:1009D00010922202109226020895E0E0F2E010AA9E
:1009E000836880AB80E181AB12AA16AA0895E0E08B
:1009F000F2E010A683E880A78FE281A712A616A6D0
:100A00000895AAECB1E092E09C93E82FF0E0849185
:100A10001C920895909171009D7F909371001092A7
:100A20000002623011F09CE101C09EE1909301024E
:100A300090E490930202811102C080E401C080EC36
:100A400080930302613011F084E001C083E0809361
:100A5000040280E2D6DF80930C0281E2D2DF809331
:100A60000D02109218021092190281E08093000288
:100A7000BECF1F920F920FB60F9211248F930000DA
:100A800000000000000081E0809323028F910F900E
:100A90000FBE0F901F901895CF93DF93E0E7F0E023
:100AA00082818B7F8283C0E2D3E08DE0888380E403
:100AB000898389E08A8383E3A4DF888782E3A1DFD7
:100AC000898787E39EDF8A8786E39BDF8B87E0E267
:100AD000F6E08081836080831482DF91CF91089556
:100AE000E0E7F0E080818E7F808383E880930001DF
:100AF0000895E0E0F1E0108A80E4808B10A280A3EA
:100B000010AA80ABE0E4F1E0108280831092C6204E
:100B10001092C5201092C4201092A8231092A923ED
:100B20001092A6231092A72308958093D62581E0E2
:100B30008093BF20089510920A20DBDF8091092066
:100B4000811105C081E08093360184E003C01092DA
:100B5000360184E2809330011092310139E53093FF
:100B6000320122E02093330180910C2090910D20DE
:100B7000809334019093350187ED95E2809338019D
:100B80009093390110923A018BE380933C0193E0FA
:100B900090933D0110923E018091300180688093D6
:100BA00030011092460184E280934001109241018D
:100BB000309342019093430140910E2050910F20B9
:100BC000409344015093450146EC53E24093480161
:100BD0005093490110924A0139E330934C019093AC
:100BE0004D0110924E019091400190689093400108
:100BF0001092100190E490931001809310011092D4
:100C0000110195E99093120190E1909313014EEE3A
:100C100052E04093140150931501809318012093E2
:100C2000190110921A0188EF97E280931C019093AA
:100C30001D0110921E0168EC70E084EF91E033DD3D
:100C400088EC90E0809307209093082081E08093C7
:100C50000620809110018068809310010895CF9341
:100C6000C1E0C0930A2045DF1092300180E48093F8
:100C7000300194E0909330011092310110923201D2
:100C80008BE480933301109234011092350110925D
:100C900036012BE030E22093380130933901109275
:100CA0003A0180EA80933C0188E080933D011092F4
:100CB0003E0180913001806A8093300185E5809308
:100CC000A0088093A00880910920811105C0C093DD
:100CD00046019093400105C01092460184E2809342
:100CE00040011092410189E58093420192E0909386
:100CF000430120910C2030910D202093440130932A
:100D0000450127ED35E220934801309349011092C7
:100D10004A018BE380934C0183E080934D01109254
:100D20004E018091400180688093400184E280936D
:100D300020011092210145E9409322012BE42093E8
:100D400023012EEE32E0209324013093250150EA56
:100D50005093280158E05093290110922A0166EE21
:100D60007AE260932C0170932D0110922E018093F2
:100D70001001109211014093120140E140931301C0
:100D80002093140130931501809318019093190159
:100D900010921A0188EF97E280931C0190931D0135
:100DA00010921E0168EC70E084EF91E07CDC88EC2E
:100DB00090E0809307209093082081E080930620A4
:100DC00080912001806880932001809110018068CB
:100DD00080931001CF91089582E080930A2089DEEC
:100DE00080910920811105C081E08093360184E063
:100DF00003C01092360184E28093300110923101D9
:100E000039E53093320192E09093330140910C2008
:100E100050910D20409334015093350147ED55E238
:100E2000409338015093390110923A018BE380933B
:100E30003C0123E020933D0110923E01809130015E
:100E40008068809330011092460184E280934001D3
:100E500010924101309342012093430140910E20B2
:100E600050910F20409344015093450146EC53E2CA
:100E7000409348015093490110924A0139E330935D
:100E80004C0120934D0110924E01209140012068A9
:100E9000209340011092100120E4209310018093D0
:100EA00010011092110155E95093120140E1409355
:100EB00013012EEE32E0209314013093150180933C
:100EC00018019093190110921A0168EF77E260936C
:100ED0001C0170931D0110921E018093200110923D
:100EE0002101509322014093230120932401309348
:100EF000250184E3809328019093290110922A010F
:100F000086EE9AE280932C0190932D0110922E018F
:100F100068EC70E084EF91E0C6DB88EC90E08093B1
:100F200007209093082081E0809306208091100193
:100F30008068809310018091200180688093200157
:100F4000089583E080930A20D4DD809109208111E7
:100F500005C081E08093460184E003C01092460101
:100F600084E2809340011092410129E520934201DF
:100F700082E08093430180910C2090910D2080931A
:100F800044019093450187ED95E280934801909349
:100F9000490110924A018BE380934C0183E08093D6
:100FA0004D0110924E019091400190689093400144
:100FB0001092360144E240933001109231012093A7
:100FC00032018093330120910E2030910F20209325
:100FD00034013093350126EC33E22093380130930D
:100FE000390110923A0199E390933C0180933D01BD
:100FF00010923E0180913001806880933001109200
:10100000200150E45093200184E08093200110924D
:101010002101109222013BE430932301109224011C
:1010200010922501109226018BE090E28093280116
:101030009093290110922A0120EA20932C0198E034
:1010400090932D0110922E0180912001806A80934F
:10105000200185E58093A0081092100150931001A3
:10106000409310011092110185E980931201309391
:1010700013014EEE52E0409314015093150120935A
:1010800018019093190110921A0188EF97E280934A
:101090001C0190931D0110921E0168EC70E084EF1A
:1010A00091E001DB88EC90E080930720909308208A
:1010B00081E0809306208091100180688093100168
:1010C0000895CF93C4E0C0930A2013DD109230013D
:1010D00080E480933001C09330011092310110926E
:1010E00032018BE480933301109234011092350168
:1010F000109236018BE090E2809338019093390191
:1011000010923A0180EA80933C0188E080933D018F
:1011100010923E0180913001806A8093300185E514
:101120008093A00880910920811106C081E08093FE
:101130004601C093400105C01092460184E28093AD
:1011400040011092410189E58093420182E0809341
:10115000430180910C2090910D2080934401909345
:10116000450187ED95E280934801909349011092E3
:101170004A018BE380934C0183E080934D011092F0
:101180004E018091400180688093400144E2409389
:1011900010011092110195E9909312018BE4809354
:1011A00013012EEE32E0209314013093150180EAF2
:1011B0008093180188E08093190110921A0168EF5A
:1011C00077E260931C0170931D0110921E01409301
:1011D000200110922101909322019AE4909323011F
:1011E000209324013093250193EC90932801809360
:1011F000290110922A0186EE9AE280932C019093A5
:101200002D0110922E0168EC70E084EF91E04BDA32
:1012100088EC90E0809307209093082081E08093F1
:101220000620809110018068809310018091200138
:10123000806880932001809110018061809310016B
:10124000CF910895FFCF86E080930A2052DC109260
:10125000360194E2909330011092310189E5809338
:10126000320183E08093330120910E2030910F20D2
:10127000209334013093350126EC33E2209338017A
:101280003093390110923A0129E320933C01809375
:101290003D0110923E0180913001806880933001C1
:1012A00080910920811107C081E08093460184E08C
:1012B0008093400104C01092460190934001109227
:1012C000410189E58093420192E09093430120918E
:1012D0000C2030910D20209344013093450127EDDF
:1012E00035E2209348013093490110924A018BE383
:1012F00080934C0183E080934D0110924E018091C8
:1013000040018068809340011092100180E4809336
:10131000100184E2809310011092110125E92093BD
:10132000120120E1209313012CED35E020931401EC
:1013300030931501809318019093190110921A01AE
:1013400088EF97E280931C0190931D0110921E017B
:1013500068EC70E084EF91E0A6D980E991E0809399
:1013600007209093082081E080930620809110014F
:10137000806880931001089587E080930A20B9DB8C
:101380001092360194E2909330011092310189E578
:101390008093320183E08093330120910E203091BD
:1013A0000F20209334013093350126EC33E2209353
:1013B00038013093390110923A0129E320933C011E
:1013C00080933D0110923E018091300180688093AE
:1013D000300180910920811107C081E0809346018E
:1013E00084E08093400104C0109246019093400134
:1013F0001092410189E58093420192E0909343016C
:1014000020910C2030910D20209344013093450110
:1014100027ED35E2209348013093490110924A01AB
:101420008BE380934C0183E080934D0110924E0139
:10143000809140018068809340011092100180E407
:101440008093100185E2809310011092110185E9CB
:101450008093120180E1809313012CED35E02093FD
:1014600014013093150184E28093180190931901BF
:1014700010921A0188EF97E280931C0190931D014E
:1014800010921E0168EC70E084EF91E00CD980E9C5
:1014900091E0809307209093082081E080930620BC
:1014A0008091100180688093100108951F920F921F
:1014B0000FB60F9211248F9381E0809303018F91D7
:1014C0000F900FBE0F901F9018951F920F920FB69E
:1014D0000F9211248F9382E0809303018F910F90DC
:1014E0000FBE0F901F901895E0E7F0E083818C7F8E
:1014F000838384818C7F848380818D7F8083E0E8F7
:10150000F1E080EC8283128688EC81831186A0E072
:10151000B8E034E03C9323E011962C931197149695
:101520001C92149785ED91E096968D939C939797D6
:1015300016961C921697E0E4F8E03083218314821B
:1015400086A397A31682E0E6F6E08081806180831F
:10155000E0E4F9E083E18183148282E08683A6A33C
:10156000B7A310A611A681E0808308951F920F9261
:101570000FB60F9211242F933F934F935F938F9346
:101580009F93CF93DF931F92CDB7DEB78FEF8093FA
:101590004C0980910A20873031F480912C02898394
:1015A00090912D0202C090912C028091C320891B42
:1015B000209168093091690982308CF02A3F3740C8
:1015C00070F4209168093091690989301CF481E038
:1015D00090E002C086E090E0820F931F18C0209137
:1015E0006809309169098F3FB4F42730310598F0CC
:1015F0002091680930916909883F1CF081E090E0F2
:1016000002C086E090E0A901481B590BCA018093F3
:101610007809909379090F90DF91CF919F918F91E5
:101620005F914F913F912F910F900FBE0F901F90A0
:101630001895E0E7F0E083818F7E8383E0E4F6E0B5
:1016400080818A6A80838FEF848388E5828BE0EAD9
:10165000F8E080E3838384EC858387E086831782C8
:1016600088E184830895E0E7F0E08381877F8383C6
:10167000E0ECF8E0118288E58093550680E68083EF
:1016800008951F920F920FB60F92112400000F9031
:101690000FBE0F901F9018951F920F920FB60F92CA
:1016A00011248F93EF93FF93E0EAF8E08081808329
:1016B000FF91EF918F910F900FBE0F901F90189593
:1016C0009FB7F894A0E5B0E016968C911697897FA5
:1016D00016968C931697E0E6F0E080E885838BEB16
:1016E000868316968C911697846016968C938081CB
:1016F000816080839FBF08959FB7F894E82FF0E042
:10170000E059FF4F60958081682360839FBF0895F3
:10171000CF93863011F0C0E001C0C8E18091510044
:1017200081FD0DC09FB7F894809150008260809336
:1017300050009FBF8091510081FFFCCFC1DF6C2F13
:10174000636084E490E0E9D460E480E0CF91D4CF9A
:101750008091C82008958091C820813009F420C963
:101760000895F0D0FC0183818093C820811101C0CD
:10177000DAC881E008959091C625892F807697FF79
:1017800007C0803491F48091C72581110EC00DC926
:10179000803459F48091C725811107C08091CC25F0
:1017A0009091CD25892B09F0FEC880E008958091A5
:1017B000C8258F770C9423149091D020911102C0EA
:1017C00080E00895E091CD20F091CE200190F0814D
:1017D000E02D94818917A0F7E093CB20F093CC20E3
:1017E000228133812E0F3F1FE217F30798F4918176
:1017F000943061F49281891309C09381691306C002
:10180000E093CB20F093CC2081E008959081E90F04
:10181000F11DEACFE093CB20F093CC20D1CFE09123
:10182000CD20F091CE200190F081E02D22813381F6
:101830002E0F3F1FFC014081E40FF11DE217F3075B
:1018400048F48181843031F0853039F08081E80FAF
:10185000F11DF4CF80E090E00895CF0108951F932B
:10186000CF93DF93182FA8DF882339F1C091CB20C5
:10187000D091CC20CE01D3DFEC01892B41F04C81FB
:101880005D816B818A81ECD78111F4CF16C0E09124
:10189000CD20F091CE2092818381E92FF82FE10FA6
:1018A000F11DE10FF11D0190F081E02D0190F0811B
:1018B000E02DDF91CF911F91099480E0DF91CF91CE
:1018C0001F910895EF92FF921F93CF93DF93C82F3C
:1018D00060E072DF811102C010E02DC0E091CD20E8
:1018E000F091CE2092818381E92FF82FEC0FF11D2A
:1018F000EC0FF11DE080F180D7011696ED91FC917F
:1019000017970995682F8C2F57DF182F882321F3FD
:10191000C091CB20D091CC20CE0181DFEC01892B6E
:1019200021F08A810E944315F7CFD7011296ED91DD
:10193000FC9113970995812FDF91CF911F91FF9013
:10194000EF9008958091CB209091CC2008950FC7FF
:10195000CF938091D020882311F0C0E008C010926E
:10196000D0201092D4201092D520CF910895E091EC
:10197000CD20F091CE200190F081E02D8481C81718
:1019800070F78C2F9FDFCF5FF2CFCF938091D02065
:101990008823F1F0C0E0E091CD20F091CE20A0812D
:1019A000B18114968C91C81798F492818381E92FA4
:1019B000F82FEC0FF11DEC0FF11D0190F081E02DDF
:1019C0000084F185E02D309709F00995CF5FE3CFD2
:1019D000CF9108950F931F93CF93DF931092D0254B
:1019E0001092D1251092D2251092D3251092D42591
:1019F0001092D5258091C62587FF07C02091CC2560
:101A00003091CD25232B09F482C38076803409F0F0
:101A10003CC1E091C7258E2F90E0FC01E05AF1090E
:101A2000E331F10508F031C1EA5FFE4F0C940D1768
:101A300081E08093C02080910720909108208093BE
:101A4000B72380910720909108209093B82380912C
:101A50009E238093B92380919B238093BA23809106
:101A60006A008093BB2380916B008093BC236091BC
:101A7000CC257091CD258AEA93E201C1109200082D
:101A80008091C8259091C925809336089093370896
:101A90008091CA258F70809300086091CC25709149
:101AA000CD2586EC93E2D5D68091CC259091CD259D
:101AB00020910E2030910F208217930709F4F2C273
:101AC00080930E2090930F2045C081E080930920E1
:101AD000109240088091C8259091C925809376087E
:101AE000909377088091CA258F7080934008609109
:101AF000CC257091CD2587ED95E2ABD68091CC2594
:101B00009091CD2520910C2030910D2082179307C4
:101B1000E9F4C8C210920920109240088091C825AB
:101B20009091C92580937608909377088091CA2573
:101B30008F70809340086091CC257091CD2587ED02
:101B400095E287D68091CC259091CD2580930C206D
:101B500090930D2080910A205EC010926809109227
:101B600069098091C8258093C3209CC28091C825B3
:101B70008093240697C2E091C825F091C925E830EA
:101B8000F10508F082C0E75EFE4F0C940D1760E08F
:101B900080E00E940A058091CA250E94D70480E057
:101BA0003AC060E080E00E940A058091CA250E9448
:101BB000D70481E030C061E081E00E940A05809195
:101BC000CA250E94D7048091CB250E94ED0482E0B3
:101BD00022C083E020C084E01EC060E080E00E945C
:101BE0000A058091CA250E94D70485E014C061E0EF
:101BF00080E00E940A058091CA250E94D70486E0F1
:101C00000AC062E080E00E940A058091CA258068CF
:101C10000E94D70487E00E94950544C28091C825A0
:101C2000809384063FC28091C8259091C925892B55
:101C300091F00E946E0380E2E4EDFDE2A7EDB7E2D1
:101C400001900D928A95E1F781E08093D7270E9459
:101C500083030E946E03E9E7F0E091E088EDF894D9
:101C600084BF90836091CC257091CD258AEA90E263
:101C700006C06091CC257091CD2589EA90E2E9D526
:101C800011C20E94930481110DC28091C625982F24
:101C9000907609F0C9C187FFFBC02091CC25309117
:101CA000CD252115310509F4BFC18F7109F09EC002
:101CB0008091C725863071F0883009F48EC081117B
:101CC000B3C12230310509F0AFC162E070E084EDAC
:101CD00090E2D5CF8091C8259091C925292F33272F
:101CE00022303105A1F060F42130310509F09CC1AA
:101CF00080911A2090911B20DC016C9170E05BC0F8
:101D00002330310589F12F30310509F18DC1E09182
:101D10001A20F0911B202189821708F085C199278C
:101D2000880F991F880F991FE0911C20F0911D20AA
:101D3000E80FF91F80819181FC016281738189D54F
:101D4000E091CE25F091CF2582E0818335C080914E
:101D50001E2090911F20009709F466C1DC011296A5
:101D60006D917C91139727C099278130910569F077
:101D700038F0029709F058C168E08AE890E208C09C
:101D800064E070E08CE990E216C067E083E990E2DD
:101D9000282FAAE7B0E2FC01819190E08D939D93FA
:101DA0008E2F821B8617C0F3660F6E5F60937820BC
:101DB00070E088E790E24DD58091CC259091CD25BB
:101DC0002091D0253091D1258217930708F06AC160
:101DD0008093D0259093D12565C12130310509F03C
:101DE00023C161E070E080ED90E249CF8130C1F520
:101DF0008091C7258A3009F017C12130310509F0DB
:101E000013C18091D020882309F40EC1C091CA2546
:101E1000D091CB250091CD201091CE20D801ED910D
:101E2000FC918481C81708F0FFC060E08C2FC4DCEF
:101E3000882309F4F9C0DD27CC0FDD1FF80182816A
:101E40009381C80FD91FE881F9810680F781E02DC1
:101E500009958093D22061E070E082ED90E20FCF8F
:101E6000823009F0E1C08091C7258111DDC02230A8
:101E7000310509F0D9C08091CA253BD590E0809307
:101E8000C9209093CA2062E070E089EC90E2F7CE1E
:101E90008F7109F07DC08091C725833009F4C4C0DB
:101EA00018F48130A1F0C0C0853019F0893039F1C3
:101EB000BBC08091CC259091CD25892B09F0B4C071
:101EC00087ED9BE08093D2259093D325EBC0809142
:101ED000CC259091CD25892B09F0A6C08091C825ED
:101EE0009091C925019709F09FC08091D4209091CD
:101EF000D5208D7F8093D4209093D520D3C080911E
:101F0000CC259091CD25892B09F08EC09FD48823B4
:101F100009F48AC02091C8253091C9253327E09162
:101F20001A20F0911B20818990E08217930708F412
:101F30007BC00EDD8091C8259091C9258093D0206B
:101F4000882309F4AFC099278150904C880F991FBE
:101F5000880F991F20911C2030911D20820F931F04
:101F60008093CD209093CE20C0E0E091CD20F091E1
:101F7000CE200190F081E02D8481C81708F092C036
:101F800060E08C2F6CDC882309F44EC0CF5FEDCF6E
:101F90008130E9F48091C7258B3009F045C08091EC
:101FA000CC259091CD25892B09F03EC08091D02081
:101FB000882309F439C0C091CA25D091C8258C2F37
:101FC00081DC882389F16D2F8C2F49DC2BC0823076
:101FD00059F58091C725813019F0833089F024C0EC
:101FE0008091CC259091CD25892BF1F48091C82545
:101FF0009091C925892BC1F48091CA2581D412C042
:102000008091CC259091CD25892B71F48091C825A4
:102010009091C925892B41F48091CA2504D58091DE
:10202000CA253AD581113EC08091C6258F71813075
:10203000D9F58091D020882309F469C0C091CA25C0
:10204000D091CB250091CD201091CE20D801ED91DB
:10205000FC918481C81708F05AC060E08C2FACDB7B
:10206000882311F1FE01FF27EE0FFF1FD801129602
:102070008D919C911397E80FF91F00811181D80170
:102080001696ED91FC9117970995682F8C2F94DB8C
:10209000882351F0D8011496ED91FC91159709957C
:1020A000882311F081E034C08091C6258F71823081
:1020B00071F58091D020882351F1C0E0E091CD20CE
:1020C000F091CE20A081B18114968C91C817F8F4BC
:1020D00092818381E92FF82FEC0FF11DEC0FF11D98
:1020E00000811181D8011696ED91FC911797099501
:1020F000682F8C2F61DB882351F0D8011496ED9165
:10210000FC91159709958111CDCFCF5FD7CF80E096
:10211000DF91CF911F910F9108951BBEFC0128ED17
:1021200024BF608308958091CF0187FDFCCF08957F
:102130001F93CF93DF93C0ECD1E01A858A8761E0CB
:102140008BEC91E0EADF1A87DF91CF911F91089520
:10215000CF92DF92EF92FF920F931F93CF93DF9373
:102160008C017B016A01DFDFCCECD1E088818860E3
:102170008883B801705FA601C70155D68881877F23
:102180008883DF91CF911F910F91FF90EF90DF90A7
:10219000CF900895CF93DF93C82FD62FC4DFACEC38
:1021A000B1E08C9188608C93EC2FF0E0F05FD083ED
:1021B0008C91877F8C93DF91CF9108950F931F931C
:1021C000CF938C01B0DFC0E0F80161918F018C2FBB
:1021D000E1DFCF5FC032C1F7CF911F910F9108951A
:1021E000CF93C82FA0DF20E2C29FC0011124E0ECF2
:1021F000F1E012829183808385E3CF9199CF409162
:10220000CA01E62FF72F8093CA0184914093CA0137
:102210000895E82FF0E0EA50F24D80818F3F09F4F5
:10222000FFCF9FB7F89480818F5F80839FBF089511
:10223000E82FF0E0EA50F24D8081811101C0FFCF1C
:102240009FB7F8948081815080839FBF0895CF937A
:10225000C82F80919823C11105C0882339F081E0EF
:10226000E7DF04C0811102C081E0D3DFC09398236F
:10227000CF910895282F2F70082E000C990B392F1D
:10228000331F3327331F832F90E0820F911D820F5E
:10229000911D23E0880F991F2A95E1F78C5D9C4DD5
:1022A00008950F93E8ECF4E080818F7D8083808136
:1022B0008F7D8083ECE2F3E202E0059310922E23FF
:1022C00010922F2300E2069300E40693E4E2F3E287
:1022D00000E2069300E40693E6ECF5E21486158628
:1022E0001686178612861386109207230F9108957B
:1022F0000F9385E080930723EDE2F3E204E005937A
:10230000E5E2F3E204E005930F9108950F9383E073
:102310008093072310922E2310922F23ECE2F3E2F6
:1023200002E006930F910895E091D225F091D32514
:10233000309709F009940895282F2F70082E000C6B
:10234000990B392F331F3327331F832F90E0820FD0
:10235000911D820F911D029749E0489F9001499F6E
:10236000300D1124C901895A9D4D0895AF92BF9235
:10237000DF92EF92FF920F931F93CF93DF93D82EAC
:10238000DBDFEC018D2D76DF7C01DC011196EC9119
:10239000E770E150E73040F4F0E0EE0FFF1FE45546
:1023A000FF4D0081118102C008E010E02D813E81C7
:1023B0008B819C814881D7FE4AC0F7016681778175
:1023C000260F371F2D833E8328173907A1F1BC0143
:1023D000621B730B9B01211574E0370738F02FEF58
:1023E00033E0C901B801F2D4281B390B41FF0AC000
:1023F000C901B801EBD4AC0191E0452B09F090E0A4
:10240000892F01C080E0988180FB91F99883D701E2
:1024100016961D921C92179712962D933C93139724
:1024200029813A818D819E81820F931F14968D930D
:102430009C93159708C041FF78C04D7F4883168252
:10244000178212821382F70102E0069385C0D7013A
:102450001296AD90BC90139742FF0FC0E981FA81AC
:10246000B801B4D4B0E4DB9EB001112469567F4DAD
:10247000AC01CF01820F931FD6D42D813E812A0D4E
:102480003B1D2D833E838B819C818217930710F423
:102490008D839E83F70126813781A216B30609F04A
:1024A00044C02D813E818217930709F43EC0AC01E0
:1024B000421B530B9A01211554E0350750F02FEFC2
:1024C00033E0C901B80182D4B901681B790BCB0193
:1024D00007C0C901B8017AD4D901A81BB90BCD0135
:1024E000F701128213828017910798F48881846023
:1024F0008883F0E4DF9EC001112489569F4DD701E7
:1025000014968D939C93159716960D931C9317977D
:102510009ACF49815A812D813E81240F351FF701C1
:1025200024833583868397838ECF888180FF14C070
:102530008E7F8883EF81F885309771F06D817E8181
:102540004D2D80E0DF91CF911F910F91FF90EF9083
:10255000DF90BF90AF900994DF91CF911F910F91C1
:10256000FF90EF90DF90BF90AF9008950F93CF93BF
:10257000DF9380910723833029F4D6DEDF91CF915A
:102580000F918FCE2091032330910423C091D02549
:10259000D091D125C21BD30B61F580910523909179
:1025A0000623820F931F8093052390930623209187
:1025B000CC253091CD258217930721F08091D6202C
:1025C000882331F084E080930723E4E2F3E236C00D
:1025D000E091D425F091D525309799F0099588237D
:1025E00081F01092032310920423C091D025D09142
:1025F000D125C034D10528F01092D620C0E4D0E017
:1026000003C081E08093D620C0932E23D0932F2344
:1026100080910323909104232091CE253091CF25E2
:10262000280F391F2093302330933123C80FD91F2F
:10263000C0930323D0930423ECE2F3E202E0069379
:10264000DF91CF910F9108950F93CF938091CC0498
:1026500080FF63C021E02093CC0484E293E2FC017C
:1026600000E80693ECE2F3E200E806932093CA0444
:10267000FC0100E1069380910723882329F0835011
:10268000823008F451DE0DDE8091262390912723BD
:10269000089709F044C088E0E3ECF2E2A6ECB5E26A
:1026A00001900D928A95E1F78091C8048062809331
:1026B000C8048091C80480628093C8048BD9C82F55
:1026C000811102C015DE2BC08091C62587FF0DC089
:1026D00010920523109206231092032310920423D4
:1026E00082E08093072342DF1BC08091CC2590912C
:1026F000CD25892B11F40ADE13C010920523109208
:102700000623109203231092042381E08093072371
:10271000E4E2F3E202E0069303C0C0E001C0C1E0DE
:102720008C2FCF910F910895CF93CFB7F89481E07C
:102730008EDDEAECF4E080E4808380E28083E1ECEB
:10274000F4E0808181608083A9ECB4E08C918260A8
:102750008C93E8ECF4E08081806480838C918160CC
:102760008C93808180688083CFBFCF910895CF9371
:102770001092600080E30E94880B8091C004806406
:102780008093C00481E080936000CFB7F89480E02C
:1027900090E0FC0123E0EE0FFF1F2A95E1F7E85FD0
:1027A000FC4D158E01968E30910599F780E090E0F2
:1027B00039E0389FF001399FF00D1124E95AFD4DA1
:1027C00020812E7F208301968C30910591F76AE15C
:1027D00070E082E014DD8F3F09F48FE18093FA040A
:1027E0006BE170E082E00BDD8F3F09F48FE18093B5
:1027F000FB048091C00486608093C0048091C00473
:1028000080688093C0048091C00480618093C0047C
:1028100084E293E28093C6049093C7048091C0043D
:1028200080628093C0048FEF8093C5048091C804B8
:1028300082608093C8041092982385E0EADC74DFFC
:10284000CFBFCF9108958093C30408958091C304AE
:102850000895E6ECF5E28087918762877387089593
:102860001F93CF93DF93162FEA0104DDFC018181D2
:10287000807CD1F5612F6370613019F020F080E821
:1028800003C080EC01C080E4C038D105E1F050F411
:10289000C032D105A1F0C034D10599F06097C9F4D8
:1028A00091E018C0C11592E0D90779F0CF3F93E0CD
:1028B000D90769F0C115D14061F495E00BC092E0F1
:1028C00009C093E007C094E005C096E003C097E01C
:1028D00001C090E0118226E02083982B91838181B2
:1028E0008062818381E001C080E0DF91CF911F9100
:1028F0000895C0DCFC01818182FB882780F908955E
:10290000CF93C82FB7DCFC01818182FF0FC081818A
:102910008B7F81838C2F10DDFC01908190FF06C09E
:102920009E7F90830780F085E02D099581E0CF910F
:102930000895AF92BF92CF92DF92EF92FF920F93E2
:102940001F93CF93DF93D82EC62E5A017901F4DC62
:10295000EC018D2D8FDC9C01DC0111968C9111977F
:10296000807C09F454C011968C911197807C803C36
:1029700021F011968C9182FD4AC09FB7F89488810E
:1029800080FF02C09FBF43C0816088839FBFA98230
:10299000BA82EB82FC821D821E820F83188791E02F
:1029A000C11004C0E114F10409F090E0888190FBAB
:1029B00081F98B7F8883D7FE02C0F90122C0D9013B
:1029C00011968C911197807C803CC1F41196EC910A
:1029D000E770E150E73040F4F0E0EE0FFF1FE45500
:1029E000FF4D6081718102C068E070E0C701EED1E7
:1029F000892B21F088818E7F888309C0F90112829A
:102A00001382168217828D2DB1DC81E001C080E037
:102A1000DF91CF911F910F91FF90EF90DF90CF90BA
:102A2000BF90AF900895EF92FF920F93CF93C82F6E
:102A300021DC7C018C2F80DCDC01F70102E00593B6
:102A40009C9190FF1BC09E7F9C931796ED91FC91EB
:102A50001897309799F0D701C7FF05C016966D916A
:102A60007C91179704C012966D917C9113974C2F0F
:102A700081E0CF910F91FF90EF900994CF910F914A
:102A8000FF90EF900895CF93C82FCDDF8C2FF2DB0E
:102A9000FC011182CF9108950F93CF93C82FEADBE9
:102AA000FC0181818460818301E006938C2FBBDF70
:102AB00081E0CF910F9108951F920F920FB60F9260
:102AC00011240F932F933F934F935F936F937F93B3
:102AD0008F939F93AF93BF93CF93EF93FF93809187
:102AE000CB0487FF08C080E88093CA040E94C50C0D
:102AF0000E942A0486C08091CB0482FF18C084E023
:102B00008093CA0480912C2386FF7BC08091CC04E3
:102B100081FD77C099DD811174C0809107238130D8
:102B200011F4F4DB6EC0843009F06BC021C08091D9
:102B3000CB0481FF26C082E08093CA0480912423C5
:102B400086FF5FC08091CC0481FD5BC07DDD81117B
:102B500058C080910723823041F484E0809307239A
:102B6000E4E2F3E202E006934CC0833009F049C08E
:102B7000EDE2F3E204E00593E5E2F3E204E005931D
:102B800040C08091CB0484FF25C080E18093CA04BB
:102B9000C1E08C2F48DF8C2F806845DFCF5FC630C7
:102BA000C1F70E94A80C1092C30410922523C09371
:102BB000242383E48093252310922D23C0932C2378
:102BC00080932D2383EC92E28093282390932923F2
:102BD00068DB17C08091CB0486FF08C080E4809337
:102BE000CA0480E034DB0E9428040BC08091CB042F
:102BF00085FF07C080E28093CA0481E028DB0E9441
:102C00002904FF91EF91CF91BF91AF919F918F9147
:102C10007F916F915F914F913F912F910F910F9005
:102C20000FBE0F901F9018951F920F920FB60F9224
:102C300011240F931F932F933F934F935F936F93A1
:102C40007F938F939F93AF93BF93CF93DF93EF9334
:102C5000FF938091CC0481FF1AC082E08093CC0462
:102C60008091C5048195880FE4E2F3E2E81BF10945
:102C7000208131812452334283E0369527958A950D
:102C8000E1F7822F869520FD06C0C0E005C0DCDCA0
:102C9000882319F386C0C0E8C80F8C2FEBDAFC013B
:102CA000208125FF7EC000E20693C11174C080918F
:102CB0000723843019F438DBF4DA73C0009126233B
:102CC000109127238091D0259091D125C091032385
:102CD000D091042398012C0F3D1F8217930718F4FD
:102CE0008C010C1B1D0B8091CE259091CF25A80146
:102CF00063EC72E28C0F9D1F96D0C00FD11FC09362
:102D00000323D09304230034110569F48091052333
:102D1000909106238C0F9D1F2091CC253091CD25BD
:102D20008217930788F0C093D025D093D125E091E6
:102D3000D425F091D525309729F00995811102C04D
:102D4000D7DA2FC0E3DA2DC08091D0259091D1251C
:102D5000C817D907D9F4E091D425F091D52530973B
:102D600079F30995882361F3209105233091062397
:102D70008091032390910423820F931F8093052356
:102D8000909306231092032310920423E4E2F3E2CB
:102D900002E0069306C0C03811F4E8DB02C08C2FB5
:102DA000E5DAFF91EF91DF91CF91BF91AF919F91C4
:102DB0008F917F916F915F914F913F912F911F91D3
:102DC0000F910F900FBE0F901F901895AA1BBB1B61
:102DD00051E107C0AA1FBB1FA617B70710F0A61B1B
:102DE000B70B881F991F5A95A9F780959095BC013C
:102DF000CD01089597FB072E16F4009406D077FDB9
:102E000008D0E4DF07FC05D03EF4909581959F4FF4
:102E10000895709561957F4F0895EE0FFF1F0590FF
:102E2000F491E02D0994FB01DC0102C001900D92A8
:102E300041505040D8F70895FB01DC0101900D92FC
:0A2E40000020E1F70895F894FFCF99
:102E4A0040000CE02E0AFFFFFF01FF5580008000C2
:102E5A00B10BAB0BBB0BA80B0000642020200000B9
:102E6A00282024201020000009023C0001010080D3
:102E7A00FA0904000006FFFFFF0007058101800030
:102E8A00010705820180000107058301800001070F
:102E9A000584018000010705850180000107058678
:102EAA00018000011201000200000040EB0394BA05
:102EBA0000020102000100000003000000000000FF
:102ECA00000000000000000000004C6162726164B2
:102EDA006F72004573706F54656B00000403090438
:102EEA006465627567313233000107001000200003
:0A2EFA004000800000010002FF0309
:00000001FF

View File

@ -0,0 +1,753 @@
:1000000028C1000042C1000040C100003EC1000004
:100010003CC100003AC100000C94340A0C94640AFC
:1000200034C1000032C1000030C100002EC1000008
:100030002CC100002AC1000028C1000026C1000018
:1000400024C1000022C1000020C100001EC1000028
:100050001CC100001AC1000018C1000016C1000038
:100060000C94610B0C946C0B10C100000EC10000CD
:100070000CC100000AC1000008C1000006C1000058
:1000800004C1000002C1000000C10000FEC0000069
:10009000FCC00000FAC00000F8C00000F6C000007C
:1000A000F4C00000F2C00000F0C00000EEC000008C
:1000B000ECC00000EAC00000E8C00000E6C000009C
:1000C000E4C00000E2C00000E0C00000DEC00000AC
:1000D000DCC00000DAC00000D8C00000D6C00000BC
:1000E000D4C00000D2C00000D0C00000CEC00000CC
:1000F000CCC00000CAC00000C8C00000C6C00000DC
:10010000C4C00000C2C00000C0C00000BEC00000EB
:10011000BCC00000BAC00000B8C000007EC400002F
:10012000B4C00000B2C00000B0C00000AEC000000B
:10013000ACC00000AAC00000A8C00000A6C000001B
:10014000A4C00000A2C00000A0C000000C94D60A09
:100150009CC000009AC0000098C0000096C000003B
:1001600094C0000092C0000090C000008EC000004B
:100170008CC000008AC0000088C0000086C000005B
:1001800084C0000082C0000080C000007EC000006B
:100190007CC000007AC0000078C0000076C000007B
:1001A00074C0000072C0000070C000006EC000008B
:1001B0006CC000006AC0000068C0000066C000009B
:1001C00064C0000062C0000060C000005EC00000AB
:1001D0005CC000005AC0000058C0000056C00000BB
:1001E00054C0000052C0000050C000004EC00000CB
:1001F0004CC000000C946E150C941C1606040804E8
:100200000A040C040E041004120414042604280426
:100210002A042C042E04330430043204380D5E0DFD
:10022000850DCD0DD60DDB0D2E0E330E520E590E53
:10023000610E650E650E650E650E650E650E650E2A
:10024000AA0DE70DF10DFB0D090E0B0E0D0E170E8D
:10025000210E11241FBECFEFCDBFDFE2DEBF10E2C3
:10026000A0E0B0E2EAE5FEE202C005900D92AA39F4
:10027000B107D9F72BE2AAE9B0E201C01D92A03E76
:10028000B207E1F779D20C942B17BACE84E08093B1
:1002900056008CE18AD3809363008BEB80936600D9
:1002A00080E88093650081E08093600088ED84BFE2
:1002B0001092410083E08093500080915100833080
:1002C000E1F78091500081608093500088E1809335
:1002D00055008091510080FFFCCF809150008061DB
:1002E000809350008091510084FFFCCF88ED84BF43
:1002F00084E0809340000895E0E7F0E085818E7F00
:100300008583E0E0FAE08FEB9DE586A397A380EE7E
:100310009EE280A391A382E0808308958091200AC9
:100320009091210A813E2EE2920718F020918221BD
:1003300006C0803E2EE2920721F020917F2120937B
:100340006A0020910520222321F080910520815010
:1003500033C0885F9A42813D974080F110929A2085
:1003600080919B2090919C20A0919D20B0919E20F7
:100370000196A11DB11D80939B2090939C20A0937A
:100380009D20B0939E2080919B2090919C20A091D5
:100390009D20B0919E20892F9A2FAB2FBB27809351
:1003A000A22180919B2090919C20A0919D20B091B2
:1003B0009E208093A12186E08093052080910720D4
:1003C000909108200196B1F480910A208F3F91F01E
:1003D00080910620811106C0809106208150809373
:1003E00006200895809114019091150180930720B3
:1003F000909308200895009709F45EC00CF457C04C
:1004000040E020916B0030E02093802130938121E7
:1004100020918021309181213695322F22273795E6
:100420002795209380213093812150916A0020915B
:10043000802130918121250F311D2093802130931F
:1004400081210000209180213091812128173907D6
:1004500028F410928021109281210895209180210A
:1004600030918121280F391F2115304238F08FEF4C
:100470009FE1809380219093812108952091802194
:1004800030918121442329F0A901481B590BCA014D
:1004900002C0820F931F80938021909381218091CD
:1004A0008021909181218F7780936A0008959195A2
:1004B0008195910941E0A5CF0895CF93DF93C09135
:1004C000200AD091210A80910320909104209E015E
:1004D000281B390B209383213093842180919A200B
:1004E00081114BC080918321909184218E3C9F4F3C
:1004F000D4F480918321909184218B369F4F9CF07E
:1005000080910220882321F080910220815008C030
:1005100080916A008093822181E080939A208CE010
:10052000809302202AC08CE0809302208091832156
:10053000909184218A369F4F1CF08FEF9FEF02C06D
:1005400081E090E080937D2190937E2180918321B2
:100550009091842120917D2130917E2160E370E093
:100560000E940217261B370B20937D2130937E219A
:1005700080917D2190917E213EDF80919A20813073
:1005800029F58091832190918421C39794F08091E3
:100590000220882331F08091022081508093022034
:1005A00015C080916A0080937F2183E080939A2018
:1005B0000DC08091832190918421873991051CF48D
:1005C00081E090E002C08FEF9FEF15DFC093032022
:1005D000D0930420DF91CF9108958617970779F083
:1005E0006817790728F49C01261B370BB90109C04D
:1005F0008617970718F4681B790B03C0089560E00D
:1006000070E0CB010895CF93DF938091002090910B
:100610000120892B51F080910020909101200197B9
:10062000809300209093012043C080E490E0809369
:10063000002090930120809107209091082001963E
:10064000B9F1809114019091150120910A20263072
:1006500018F467E771E002C06EEE72E00E94EE16D9
:10066000EC0180910720909108208C179D0758F489
:100670006091072070910820CE01AFDF029718F03B
:1006800080EC9DE511C08091072090910820C8174B
:10069000D90770F46091072070910820CE019DDF8A
:1006A000029730F08FEB9DE58093360A9093370ADE
:1006B000DF91CF910895AC01460F571F861B970B12
:1006C0002091200A3091210A24173507C8F720917C
:1006D000200A3091210A8217930790F70895E0E8E5
:1006E000F6E08FE0808385E0848308951F93CF93A5
:1006F000DF93C0E4D0E0198180E4898340E250E0D8
:1007000068EB7BE280E290E00E94C8101983DF91E1
:10071000CF911F9108951F93CF93DF93C0E4D0E052
:10072000198180E489838BEB95E20E94FE1081E0C1
:100730000E9410111983DF91CF911F9108950895A0
:100740000F931F932091A4208EEE92E0289FA0018A
:10075000299F500D112444525A4D00EA13E02EEE09
:1007600032E060E081E80E94AB141F910F91089580
:100770001CBEEEEFF0E40994B9DF8091B82B88231A
:1007800069F080E2E8EBFBE2ABEBB5E201900D92A1
:100790008A95E1F71092BB25BEDFEADF87E0809300
:1007A000A200789473DDCBDF0E94C70C49D16CD1D5
:1007B00060E080E003D1EFD08CE0E3D0B5D659D72C
:1007C00072D78DDF60E870E28EE891E20E94241714
:1007D0000000000000000000000000000000000019
:1007E00000000000000000000000000080919F2039
:1007F000882371F3E091BA238E2F90E08830910521
:10080000A0F4FC01E250FF4F0C94151768D10DC005
:10081000FCD10BC0B9D209C06ED307C02DD405C01E
:10082000EDD403C0ECD401C084D510929F20D0CF6A
:1008300008950895E0910A208E2F90E08830910568
:1008400090F4FC01EA5FFE4F0C941517DDD10BC04C
:100850009AD209C04FD307C00ED405C0CED403C06E
:1008600067D501C000D680911401809397218091B3
:100870001501809398218091240180939921809182
:10088000250180939A218091200A8093A321809151
:10089000210A8093A421809114019091150186343E
:1008A000914080F08091140190911501893A914016
:1008B00048F480911401909115018093D82B909366
:1008C000D92B00008091A220882339F015DD1092E9
:1008D000A22081E08093A12008958091A120882307
:1008E00041F080919A20833019F418DD8CDE01C02C
:1008F000E4DD8091A020882351F080911401909133
:1009000015018093D82B9093D92B1092A020909111
:10091000A42081E0911180E08093A42008950F939A
:100920001F9381E08093A7208093A22000EA13E028
:100930002DE730E04CED55E260E081E80E94AB1419
:1009400081E01F910F9108951092A720089581E0F2
:10095000089581E0089510922002982F9C71936869
:100960009093200287FF03C080E192E002C080E004
:1009700090E0892B8093210210922202109226028D
:100980000895E0E0F2E010AA836880AB80E181ABDB
:1009900012AA16AA0895E0E0F2E010A683E880A764
:1009A0008FE281A712A616A60895AAECB1E092E004
:1009B0009C93E82FF0E084911C920895909171002F
:1009C0009D7F9093710010920002623011F09CE1C3
:1009D00001C09EE19093010290E490930202811184
:1009E00002C080E401C080EC80930302613011F00A
:1009F00084E001C083E08093040280E2D6DF80932C
:100A00000C0281E2D2DF80930D0210921802109244
:100A1000190281E080930002BECF1F920F920FB6A1
:100A20000F9211248F93000000000000000081E06D
:100A3000809323028F910F900FBE0F901F901895F7
:100A4000CF93DF93E0E7F0E082818B7F8283C0E287
:100A5000D3E08DE0888380E4898389E08A8383E31F
:100A6000A4DF888782E3A1DF898787E39EDF8A8707
:100A700086E39BDF8B87E0E2F6E080818360808302
:100A80001482DF91CF910895E0E7F0E080818E7FBE
:100A9000808380E8809300010895E0E0F1E0108A0F
:100AA00080E4808B10A280A310AA80ABE0E4F1E088
:100AB000108280831092A6201092A5201092A4206C
:100AC00010928C2110928D2110928A2110928B21EC
:100AD00008958093BA2381E080939F200895109217
:100AE0000A20DBDF80910920811105C081E080931D
:100AF000360184E003C01092360184E28093300115
:100B00001092310149E54093320122E020933301F4
:100B100080910C2090910D208093340190933501A9
:100B20008BEB93E2809338019093390110923A0154
:100B30008BE380933C0183E080933D0110923E0162
:100B4000909130019068909330011092460134E208
:100B50003093400110924101409342018093430140
:100B600040910E2050910F20409344015093450135
:100B70004AEA51E2409348015093490110924A01D8
:100B800099E390934C0180934D0110924E01909106
:100B900040019068909340011092100190E490936E
:100BA000100194E0909310018093110185E98093E6
:100BB000120180E18093130187E791E08093140193
:100BC00090931501309318012093190110921A0186
:100BD0008CED95E280931C0190931D0110921E01F3
:100BE00068EC70E084EF91E066DD88EC90E0809343
:100BF00007209093082081E08093062080911001C7
:100C000080688093100108950895CF93C1E0C09348
:100C10000A2043DF1092300180E48093300194E099
:100C20009093300110923101109232018BE4809345
:100C300033011092340110923501109236012BE0ED
:100C400030E2209338013093390110923A0180EA62
:100C500080933C0188E080933D0110923E01809199
:100C60003001806A8093300185E58093A0088093ED
:100C7000A00880910920811105C0C093460190937E
:100C8000400105C01092460184E280934001109219
:100C9000410189E58093420122E020934301809144
:100CA0000C2090910D2080934401909345018BEB93
:100CB00093E2809348019093490110924A018BE39B
:100CC00080934C0183E080934D0110924E019091EE
:100CD000400190689093400134E03093200180936C
:100CE000210195E9909322014BE44093230147E7CA
:100CF00051E0409324015093250160EA609328015C
:100D000068E06093290110922A016AEC78E260930E
:100D10002C0170932D0110922E01309310018093BD
:100D200011019093120180E180931301409314010B
:100D30005093150184E280931801209319011092B9
:100D40001A018CED95E280931C0190931D01109285
:100D50001E0168EC70E084EF91E0ADDC88EC90E07F
:100D6000809307209093082081E080930620809153
:100D70002001806880932001809110018068809319
:100D80001001CF910895089582E080930A2085DEB6
:100D900080910920811105C081E08093360184E0B3
:100DA00003C01092360184E2809330011092310129
:100DB00039E53093320192E09093330140910C2059
:100DC00050910D2040933401509335014BEB53E289
:100DD000409338015093390110923A018BE380938C
:100DE0003C0183E080933D0110923E01209130014F
:100DF0002068209330011092460174E27093400104
:100E000010924101309342018093430120910E20C2
:100E100030910F2020934401309345012AEA31E2BA
:100E2000209348013093490110924A0129E320930D
:100E30004C0180934D0110924E0120914001206899
:100E4000209340011092100120E42093100164E0EF
:100E5000609310018093110155E95093120140E114
:100E60004093130127E731E02093140130931501DB
:100E7000709318019093190110921A01ECEDF5E2AC
:100E8000E0931C01F0931D0110921E01609320015C
:100E90008093210150932201409323012093240148
:100EA0003093250184E380932801909329011092C7
:100EB0002A018AEC98E280932C0190932D011092E4
:100EC0002E0168EC70E084EF91E0F5DB88EC90E0B7
:100ED000809307209093082081E0809306208091E2
:100EE00010018068809310018091200180688093B8
:100EF00020010895089583E080930A20CEDD80913B
:100F00000920811105C081E08093460184E003C07F
:100F10001092460184E2809340011092410129E53C
:100F20002093420182E08093430180910C209091B4
:100F30000D2080934401909345018BEB93E28093C5
:100F400048019093490110924A018BE380934C0130
:100F500083E080934D0110924E0190914001906882
:100F6000909340011092360194E2909330011092D8
:100F70003101209332018093330120910E20309172
:100F80000F2020933401309335012AEA31E2209377
:100F900038013093390110923A0199E390933C0162
:100FA00080933D0110923E019091300190689093A2
:100FB00030011092200160E46093200154E05093CE
:100FC000200110922101109222014BE44093230151
:100FD0001092240110922501109226012BE030E29C
:100FE000209328013093290110922A0130EA30938E
:100FF0002C0128E020932D0110922E0190912001C8
:10100000906A9093200195E59093A00810921001AA
:1010100060931001509310018093110185E9809332
:1010200012014093130187E791E08093140190939C
:101030001501309318012093190110921A018CEDBB
:1010400095E280931C0190931D0110921E0168ECA3
:1010500070E084EF91E02FDB88EC90E08093072034
:101060009093082081E08093062080911001806891
:101070008093100108950895CF93C4E0C0930A208F
:101080000CDD1092300180E480933001C093300178
:1010900010923101109232018BE48093330110924F
:1010A000340110923501109236018BE090E280936A
:1010B00038019093390110923A0180EA80933C0103
:1010C00088E080933D0110923E0180913001806A5A
:1010D0008093300185E58093A008809109208111DB
:1010E00006C081E080934601C093400105C0109284
:1010F000460184E2809340011092410189E580938A
:10110000420182E08093430180910C2090910D2058
:1011100080934401909345018BEB93E280934801C7
:101120009093490110924A018BE380934C0183E034
:1011300080934D0110924E019091400190689093E0
:10114000400154E0509310018093110145E9409310
:1011500012019BE49093130127E731E020931401DF
:101160003093150190EA9093180198E0909319013B
:1011700010921A016CED75E260931C0170931D01D1
:1011800010921E015093200180932101409322016F
:101190008AE480932301209324013093250183EC7A
:1011A000809328019093290110922A018AEC98E2F9
:1011B00080932C0190932D0110922E0168EC70E029
:1011C00084EF91E078DA88EC90E0809307209093A8
:1011D000082081E080930620809110018068809330
:1011E000100180912001806880932001809110017E
:1011F000806180931001CF9108950895FFCF86E01C
:1012000080930A204ADC1092360194E290933001D8
:101210001092310189E58093320183E0809333019C
:1012200020910E2030910F2020933401309335010E
:101230002AEA31E2209338013093390110923A01C1
:1012400029E320933C0180933D0110923E0180915F
:10125000300180688093300180910920811107C09E
:1012600081E08093460184E08093400104C01092A5
:101270004601909340011092410189E5809342011B
:1012800092E09093430120910C2030910D20209307
:101290004401309345012BEB33E220934801309316
:1012A000490110924A018BE380934C0183E08093C3
:1012B0004D0110924E018091400180688093400161
:1012C0001092100180E48093100184E28093100159
:1012D0001092110125E92093120120E120931301BE
:1012E0002CED35E020931401309315018093180103
:1012F0009093190110921A018CED95E280931C01D4
:1013000090931D0110921E0168EC70E084EF91E053
:10131000D2D980E991E0809307209093082081E062
:1013200080930620809110018068809310010895B9
:10133000089587E080930A20B0DB1092360194E292
:10134000909330011092310189E58093320183E05E
:101350008093330120910E2030910F20209334018F
:10136000309335012AEA31E2209338013093390174
:1013700010923A0129E320933C0180933D011092A1
:101380003E01809130018068809330018091092076
:10139000811107C081E08093460184E08093400181
:1013A00004C010924601909340011092410189E5DA
:1013B0008093420192E09093430120910C20309160
:1013C0000D2020934401309345012BEB33E2209311
:1013D00048013093490110924A018BE380934C01FC
:1013E00083E080934D0110924E018091400180680E
:1013F000809340011092100180E48093100185E2F7
:10140000809310011092110185E98093120180E10F
:10141000809313012CED35E02093140130931501D6
:1014200084E2809318019093190110921A018CEDB7
:1014300095E280931C0190931D0110921E0168ECAF
:1014400070E084EF91E037D980E991E08093072044
:101450009093082081E0809306208091100180689D
:1014600080931001089508951F920F920FB60F9266
:1014700011248F939F9381E08093030110921001B8
:1014800084E08093100187E791E0809314019093AA
:1014900015018091A420811103C08EEE92E002C05C
:1014A00080E090E084529A4D80931C0190931D013E
:1014B000809110018068809310019F918F910F900F
:1014C0000FBE0F901F9018951F920F920FB60F929C
:1014D00011248F939F9382E0809303011092200147
:1014E00084E08093200187E791E08093240190932A
:1014F00025018091A420811103C085E694E002C0FB
:1015000087E791E084529A4D80932C0190932D01AE
:10151000809120018068809320019F918F910F908E
:101520000FBE0F901F901895E0E7F0E083818C7F4D
:10153000838384818C7F848380818D7F8083E0E8B6
:10154000F1E080EC8283128688EC81831186A0E032
:10155000B8E034E03C9323E011962C931197149655
:101560001C92149785ED91E096968D939C93979796
:1015700016961C921697E0E4F8E0308321831482DB
:1015800086A397A31682E0E6F6E0808180618083DF
:10159000E0E4F9E083E18183148282E08683A6A3FC
:1015A000B7A310A611A681E0808308951F920F9221
:1015B0000FB60F9211242F933F934F935F938F9306
:1015C0009F93CF93DF931F92CDB7DEB78FEF8093BA
:1015D0004C0980910A20873031F480912C02898354
:1015E00090912D0202C090912C028091A320891B22
:1015F000209168093091690982308CF02A3F374088
:1016000070F4209168093091690989301CF481E0F7
:1016100090E002C086E090E0820F931F18C02091F6
:101620006809309169098F3FB4F42730310598F08B
:101630002091680930916909883F1CF081E090E0B1
:1016400002C086E090E0A901481B590BCA018093B3
:101650007809909379090F90DF91CF919F918F91A5
:101660005F914F913F912F910F900FBE0F901F9060
:101670001895E0E7F0E083818F7E8383E0E4F6E075
:1016800080818A6A80838FEF848388E5828BE0EA99
:10169000F8E080E3838384EC858387E08683178288
:1016A00088E184830895E0E7F0E08381877F838386
:1016B000E0ECF8E0118288E58093550680E68083AF
:1016C00008951F920F920FB60F92112400000F90F1
:1016D0000FBE0F901F9018951F920F920FB60F928A
:1016E00011248F93EF93FF93E0EAF8E080818083E9
:1016F000FF91EF918F910F900FBE0F901F90189553
:101700009FB7F894A0E5B0E016968C911697897F64
:1017100016968C931697E0E6F0E080E885838BEBD5
:10172000868316968C911697846016968C9380818A
:10173000816080839FBF08959FB7F894E82FF0E001
:10174000E059FF4F60958081682360839FBF0895B3
:10175000CF93863011F0C0E001C0C8E18091510004
:1017600081FD0DC09FB7F8948091500082608093F6
:1017700050009FBF8091510081FFFCCFC1DF6C2FD3
:10178000636084E490E0E9D460E480E0CF91D4CF5A
:101790008091A82008958091A820813009F4D4C8B0
:1017A0000895F0D0FC0183818093A820811101C0AD
:1017B000B6C881E008959091AA23892F807697FF7B
:1017C00007C0803491F48091AB2381110EC0C1C851
:1017D000803459F48091AB23811107C08091B023EC
:1017E0009091B123892B09F0B2C880E008958091CF
:1017F000AC238F770C9435149091B020911102C0D6
:1018000080E00895E091AD20F091AE200190F0814C
:10181000E02D94818917A0F7E093AB20F093AC20E2
:10182000228133812E0F3F1FE217F30798F4918135
:10183000943061F49281891309C09381691306C0C1
:10184000E093AB20F093AC2081E008959081E90F04
:10185000F11DEACFE093AB20F093AC20D1CFE09123
:10186000AD20F091AE200190F081E02D22813381F6
:101870002E0F3F1FFC014081E40FF11DE217F3071B
:1018800048F48181843031F0853039F08081E80F6F
:10189000F11DF4CF80E090E00895CF0108951F93EB
:1018A000CF93DF93182FA8DF882339F1C091AB20A5
:1018B000D091AC20CE01D3DFEC01892B41F04C81DB
:1018C0005D816B818A81DED78111F4CF16C0E091F2
:1018D000AD20F091AE2092818381E92FF82FE10FA6
:1018E000F11DE10FF11D0190F081E02D0190F081DB
:1018F000E02DDF91CF911F91099480E0DF91CF918E
:101900001F910895EF92FF921F93CF93DF93C82FFB
:1019100060E072DF811102C010E02DC0E091AD20C7
:10192000F091AE2092818381E92FF82FEC0FF11D09
:10193000EC0FF11DE080F180D7011696ED91FC913E
:1019400017970995682F8C2F57DF182F882321F3BD
:10195000C091AB20D091AC20CE0181DFEC01892B6E
:1019600021F08A810E945515F7CFD7011296ED918B
:10197000FC9113970995812FDF91CF911F91FF90D3
:10198000EF9008958091AB209091AC2008950FC7FF
:10199000CF938091B020882311F0C0E008C010924E
:1019A000B0201092B4201092B520CF910895E0910C
:1019B000AD20F091AE200190F081E02D8481C81718
:1019C00070F78C2F9FDFCF5FF2CFCF938091B02045
:1019D0008823F1F0C0E0E091AD20F091AE20A0812D
:1019E000B18114968C91C81798F492818381E92F64
:1019F000F82FEC0FF11DEC0FF11D0190F081E02D9F
:101A00000084F185E02D309709F00995CF5FE3CF91
:101A1000CF9108950F931F93CF93DF931092B42328
:101A20001092B5231092B6231092B7231092B823C8
:101A30001092B9238091AA2387FF07C02091B02379
:101A40003091B123232B09F482C38076803409F0CE
:101A50003CC1E091AB238E2F90E0FC01E05AF109EC
:101A6000E331F10508F031C1E25FFE4F0C94151728
:101A700081E08093A020809107209091082080939E
:101A80009B21809107209091082090939C21809128
:101A9000822180939D2180917F2180939E2180913E
:101AA0006A0080939F2180916B008093A0216091B8
:101AB000B0237091B1238EE891E201C11092000829
:101AC0008091AC239091AD23809336089093370892
:101AD0008091AE238F70809300086091B023709145
:101AE000B1238AEA91E2C7D68091B0239091B123C5
:101AF00020910E2030910F208217930709F4F2C233
:101B000080930E2090930F2045C081E080930920A0
:101B1000109240088091AC239091AD238093760879
:101B2000909377088091AE238F70809340086091E6
:101B3000B0237091B1238BEB93E29DD68091B023BB
:101B40009091B12320910C2030910D2082179307A2
:101B5000E9F4C8C210920920109240088091AC2389
:101B60009091AD2380937608909377088091AE236F
:101B70008F70809340086091B0237091B1238BEBFC
:101B800093E279D68091B0239091B12380930C2079
:101B900090930D2080910A205EC0109268091092E7
:101BA00069098091AC238093A3209CC28091AC23CF
:101BB0008093240697C2E091AC23F091AD23E830E6
:101BC000F10508F082C0EF5DFE4F0C94151760E040
:101BD00080E00E94DE048091AE230E94AB0480E08E
:101BE0003AC060E080E00E94DE048091AE230E9453
:101BF000AB0481E030C061E081E00E94DE048091AE
:101C0000AE230E94AB048091AF230E94C10482E006
:101C100022C083E020C084E01EC060E080E00E941B
:101C2000DE048091AE230E94AB0485E014C061E025
:101C300080E00E94DE048091AE230E94AB0486E027
:101C40000AC062E080E00E94DE048091AE238068DA
:101C50000E94AB0487E00E94690544C28091AC23D6
:101C6000809384063FC28091AC239091AD23892B51
:101C700091F00E94760380E2E8EBFBE2ABEBB5E289
:101C800001900D928A95E1F781E08093BB250E9437
:101C90008B030E947603E9E7F0E091E088EDF89489
:101CA00084BF90836091B0237091B1238AE890E261
:101CB00006C06091B0237091B12389E890E2DBD532
:101CC00011C20E948F0481110DC28091AA23982F06
:101CD000907609F0C9C187FFFBC02091B0233091F5
:101CE000B1232115310509F4BFC18F7109F09EC0E0
:101CF0008091AB23863071F0883009F48EC0811159
:101D0000B3C12230310509F0AFC162E070E084EB6D
:101D100090E2D5CF8091AC239091AD23292F33272A
:101D200022303105A1F060F42130310509F09CC169
:101D300080911A2090911B20DC016C9170E05BC0B7
:101D40002330310589F12F30310509F18DC1E09142
:101D50001A20F0911B202189821708F085C199274C
:101D6000880F991F880F991FE0911C20F0911D206A
:101D7000E80FF91F80819181FC01628173817BD51D
:101D8000E091B223F091B32382E0818335C080914A
:101D90001E2090911F20009709F466C1DC01129665
:101DA0006D917C91139727C099278130910569F037
:101DB00038F0029709F058C168E08AE690E208C05E
:101DC00064E070E08CE790E216C067E083E790E2A1
:101DD000282FAAE5B0E2FC01819190E08D939D93BC
:101DE0008E2F821B8617C0F3660F6E5F609358209C
:101DF00070E088E590E23FD58091B0239091B123C7
:101E00002091B4233091B5238217930708F06AC15B
:101E10008093B4239093B52365C12130310509F037
:101E200023C161E070E080EB90E249CF8130C1F5E1
:101E30008091AB238A3009F017C12130310509F0B8
:101E400013C18091B020882309F40EC1C091AE2344
:101E5000D091AF230091AD201091AE20D801ED912B
:101E6000FC918481C81708F0FFC060E08C2FC4DCAF
:101E7000882309F4F9C0DD27CC0FDD1FF80182812A
:101E80009381C80FD91FE881F9810680F781E02D81
:101E900009958093B22061E070E082EB90E20FCF71
:101EA000823009F0E1C08091AB238111DDC0223086
:101EB000310509F0D9C08091AE232DD590E08093F3
:101EC000A9209093AA2062E070E089EA90E2F7CE20
:101ED0008F7109F07DC08091AB23833009F4C4C0B9
:101EE00018F48130A1F0C0C0853019F0893039F183
:101EF000BBC08091B0239091B123892B09F0B4C06D
:101F000087EF9BE08093B6239093B723EBC080913B
:101F1000B0239091B123892B09F0A6C08091AC2306
:101F20009091AD23019709F09FC08091B4209091CA
:101F3000B5208D7F8093B4209093B520D3C080913D
:101F4000B0239091B123892B09F08EC091D48823BE
:101F500009F48AC02091AC233091AD233327E0915E
:101F60001A20F0911B20818990E08217930708F4D2
:101F70007BC00EDD8091AC239091AD238093B02087
:101F8000882309F4AFC099278150904C880F991F7E
:101F9000880F991F20911C2030911D20820F931FC4
:101FA0008093AD209093AE20C0E0E091AD20F09101
:101FB000AE200190F081E02D8481C81708F092C016
:101FC00060E08C2F6CDC882309F44EC0CF5FEDCF2E
:101FD0008130E9F48091AB238B3009F045C08091CA
:101FE000B0239091B123892B09F03EC08091B0209D
:101FF000882309F439C0C091AE23D091AC238C2F33
:1020000081DC882389F16D2F8C2F49DC2BC0823035
:1020100059F58091AB23813019F0833089F024C0C9
:102020008091B0239091B123892BF1F48091AC235E
:102030009091AD23892BC1F48091AE2373D412C04B
:102040008091B0239091B123892B71F48091AC23BE
:102050009091AD23892B41F48091AE23F6D48091E9
:10206000AE232CD581113EC08091AA238F7181307F
:10207000D9F58091B020882309F469C0C091AE23BE
:10208000D091AF230091AD201091AE20D801ED91F9
:10209000FC918481C81708F05AC060E08C2FACDB3B
:1020A000882311F1FE01FF27EE0FFF1FD8011296C2
:1020B0008D919C911397E80FF91F00811181D80130
:1020C0001696ED91FC9117970995682F8C2F94DB4C
:1020D000882351F0D8011496ED91FC91159709953C
:1020E000882311F081E034C08091AA238F7182305F
:1020F00071F58091B020882351F1C0E0E091AD20CE
:10210000F091AE20A081B18114968C91C817F8F49B
:1021100092818381E92FF82FEC0FF11DEC0FF11D57
:1021200000811181D8011696ED91FC9117970995C0
:10213000682F8C2F61DB882351F0D8011496ED9124
:10214000FC91159709958111CDCFCF5FD7CF80E056
:10215000DF91CF911F910F9108951BBEFC0128EDD7
:1021600024BF608308958091CF0187FDFCCF08953F
:102170001F93CF93DF93C0ECD1E01A858A8761E08B
:102180008BEC91E0EADF1A87DF91CF911F910895E0
:10219000CF92DF92EF92FF920F931F93CF93DF9333
:1021A0008C017B016A01DFDFCCECD1E088818860A3
:1021B0008883B801705FA601C7013DD68881877FFB
:1021C0008883DF91CF911F910F91FF90EF90DF9067
:1021D000CF900895CF93DF93C82FD62FC4DFACECF8
:1021E000B1E08C9188608C93EC2FF0E0F05FD083AD
:1021F0008C91877F8C93DF91CF9108950F931F93DC
:10220000CF938C01B0DFC0E0F80161918F018C2F7A
:10221000E1DFCF5FC032C1F7CF911F910F910895D9
:10222000CF93C82FA0DF20E2C29FC0011124E0ECB1
:10223000F1E012829183808385E3CF9199CF409121
:10224000CA01E62FF72F8093CA0184914093CA01F7
:102250000895E82FF0E0E652F44D80818F3F09F4B5
:10226000FFCF9FB7F89480818F5F80839FBF0895D1
:10227000E82FF0E0E652F44D8081811101C0FFCFDC
:102280009FB7F8948081815080839FBF0895CF933A
:10229000C82F80917C21C11105C0882339F081E0CD
:1022A000E7DF04C0811102C081E0D3DFC0937C214D
:1022B000CF910895282F2F70082E000C990B392FDD
:1022C000331F3327331F832F90E0820F911D820F1E
:1022D000911D23E0880F991F2A95E1F7885A9E4D9A
:1022E00008950F93E8ECF4E080818F7D80838081F6
:1022F0008F7D8083E0E6F1E202E005931092622197
:102300001092632100E2069300E40693E8E5F1E20F
:1023100000E2069300E40693EAEAF3E214861586E7
:10232000168617861286138610924D210F910895F6
:102330000F9385E080934D21E1E6F1E204E00593FF
:10234000E9E5F1E204E005930F9108950F9383E02E
:1023500080934D211092622110926321E0E6F1E218
:1023600002E006930F910895E091B623F091B72310
:10237000309709F009940895282F2F70082E000C2B
:10238000990B392F331F3327331F832F90E0820F90
:10239000911D820F911D029749E0489F9001499F2E
:1023A000300D1124C90189509F4D0895AF92BF92FD
:1023B000DF92EF92FF920F931F93CF93DF93D82E6C
:1023C000DBDFEC018D2D76DF7C01DC011196EC91D9
:1023D000E770E150E73040F4F0E0EE0FFF1FE45704
:1023E000FF4D0081118102C008E010E02D813E8187
:1023F0008B819C814881D7FE4AC0F7016681778135
:10240000260F371F2D833E8328173907A1F1BC0102
:10241000621B730B9B01211574E0370738F02FEF17
:1024200033E0C901B801DAD4281B390B41FF0AC0D7
:10243000C901B801D3D4AC0191E0452B09F090E07B
:10244000892F01C080E0988180FB91F99883D701A2
:1024500016961D921C92179712962D933C931397E4
:1024600029813A818D819E81820F931F14968D93CD
:102470009C93159708C041FF78C04D7F4883168212
:10248000178212821382F70102E0069385C0D701FA
:102490001296AD90BC90139742FF0FC0E981FA816C
:1024A000B8019CD4B0E4DB9EB001112469587F4D83
:1024B000AC01CF01820F931FBED42D813E812A0D26
:1024C0003B1D2D833E838B819C818217930710F4E3
:1024D0008D839E83F70126813781A216B30609F00A
:1024E00044C02D813E818217930709F43EC0AC01A0
:1024F000421B530B9A01211554E0350750F02FEF82
:1025000033E0C901B8016AD4B901681B790BCB016A
:1025100007C0C901B80162D4D901A81BB90BCD010C
:10252000F701128213828017910798F488818460E2
:102530008883F0E4DF9EC001112489589F4DD701A4
:1025400014968D939C93159716960D931C9317973D
:102550009ACF49815A812D813E81240F351FF70181
:1025600024833583868397838ECF888180FF14C030
:102570008E7F8883EF81F885309771F06D817E8141
:102580004D2D80E0DF91CF911F910F91FF90EF9043
:10259000DF90BF90AF900994DF91CF911F910F9181
:1025A000FF90EF90DF90BF90AF9008950F93CF937F
:1025B000DF9380914D21833029F4D6DEDF91CF91D6
:1025C0000F918FCE2091492130914A21C091B4239F
:1025D000D091B523C21BD30B61F580914B21909113
:1025E0004C21820F931F80934B2190934C2120917B
:1025F000B0233091B1238217930721F08091B62048
:10260000882331F084E080934D21E8E5F1E236C083
:10261000E091B823F091B923309799F00995882378
:1026200081F01092492110924A21C091B423D09197
:10263000B523C034D10528F01092B620C0E4D0E014
:1026400003C081E08093B620C0936221D0936321C0
:102650008091492190914A212091B2233091B32356
:10266000280F391F2093642130936521C80FD91F8B
:10267000C0934921D0934A21E0E6F1E202E00693BB
:10268000DF91CF910F9108950F93CF938091CC0458
:1026900080FF63C021E02093CC0488E591E2FC0137
:1026A00000E80693E0E6F1E200E806932093CA040E
:1026B000FC0100E1069380914D21882329F083508D
:1026C000823008F451DE0DDE80915A2190915B2119
:1026D000089709F044C088E0E9E0F1E2AAEAB3E231
:1026E00001900D928A95E1F78091C80480628093F1
:1026F000C8048091C80480628093C8048BD9C82F15
:10270000811102C015DE2BC08091AA2387FF0DC066
:1027100010924B2110924C211092492110924A2183
:1027200082E080934D2142DF1BC08091B0239091C5
:10273000B123892B11F40ADE13C010924B211092A1
:102740004C211092492110924A2181E080934D2121
:10275000E8E5F1E202E0069303C0C0E001C0C1E099
:102760008C2FCF910F910895CF93CFB7F89481E03C
:102770008EDDEAECF4E080E4808380E28083E1ECAB
:10278000F4E0808181608083A9ECB4E08C91826068
:102790008C93E8ECF4E08081806480838C9181608C
:1027A0008C93808180688083CFBFCF910895CF9331
:1027B0001092600080E30E94A80B8091C0048064A6
:1027C0008093C00481E080936000CFB7F8941092AA
:1027D00059211092612110926921109271218091EA
:1027E000F7208E7F8093F720809100218E7F809349
:1027F00000216AE170E082E022DD8F3F09F48FE181
:102800008093FA046BE170E082E019DD8F3F09F4F8
:102810008FE18093FB048091C00481608093C004A9
:102820008091C00480688093C0048091C00480615E
:102830008093C00488E591E28093C6049093C70416
:102840008091C00480628093C0048FEF8093C504A0
:102850008091C80482608093C80410927C2185E036
:10286000F8DC82DFCFBFCF9108958093C304089531
:102870008091C3040895EAEAF3E280879187628732
:10288000738708951F93CF93DF93162FEA0112DD0C
:10289000FC018181807CD1F5612F6370613019F07A
:1028A00020F080E803C080EC01C080E4C038D1058E
:1028B000E1F050F4C032D105A1F0C034D10599F057
:1028C0006097C9F491E018C0C11592E0D90779F07A
:1028D000CF3F93E0D90769F0C115D14061F495E08D
:1028E0000BC092E009C093E007C094E005C096E0F9
:1028F00003C097E001C090E0118226E02083982B6E
:10290000918381818062818381E001C080E0DF91D9
:10291000CF911F910895CEDCFC01818182FB882735
:1029200080F90895CF93C82FC5DCFC01818182FF17
:102930000FC081818B7F81838C2F1EDDFC019081F4
:1029400090FF06C09E7F90830780F085E02D09955B
:1029500081E0CF910895AF92BF92CF92DF92EF9234
:10296000FF920F931F93CF93DF93D82EC62E5A0159
:10297000790102DDEC018D2D9DDC9C01DC011196BD
:102980008C911197807C09F454C011968C91119709
:10299000807C803C21F011968C9182FD4AC09FB7CB
:1029A000F894888180FF02C09FBF43C08160888304
:1029B0009FBFA982BA82EB82FC821D821E820F8396
:1029C000188791E0C11004C0E114F10409F090E00F
:1029D000888190FB81F98B7F8883D7FE02C0F90143
:1029E00022C0D90111968C911197807C803CC1F452
:1029F0001196EC91E770E150E73040F4F0E0EE0F13
:102A0000FF1FE457FF4D6081718102C068E070E0F4
:102A1000C701E4D1892B21F088818E7F888309C08A
:102A2000F90112821382168217828D2DBFDC81E09C
:102A300001C080E0DF91CF911F910F91FF90EF9047
:102A4000DF90CF90BF90AF900895EF92FF920F93D9
:102A5000CF93C82F2FDC7C018C2F8EDCDC01F7019B
:102A600002E005939C9190FF1BC09E7F9C9317965C
:102A7000ED91FC911897309799F0D701C7FF05C0E9
:102A800016966D917C91179704C012966D917C916A
:102A900013974C2F81E0CF910F91FF90EF90099405
:102AA000CF910F91FF90EF900895CF93C82FCDDF76
:102AB0008C2F00DCFC011182CF9108950F93CF93EE
:102AC000C82FF8DBFC0181818460818301E00693DB
:102AD0008C2FBBDF81E0CF910F9108951F920F9251
:102AE0000FB60F9211240F932F933F934F935F9341
:102AF0006F937F938F939F93AF93BF93EF93FF93C6
:102B00008091CB0487FF08C080E88093CA040E94AC
:102B1000E50C0E941A047EC08091CB0482FF18C08D
:102B200084E08093CA048091602186FF73C0809105
:102B3000CC0481FD6FC0A8DD81116CC080914D2156
:102B4000813011F403DC66C0843009F063C021C019
:102B50008091CB0481FF26C082E08093CA048091DB
:102B6000582186FF57C08091CC0481FD53C08CDD75
:102B7000811150C080914D21823041F484E08093D6
:102B80004D21E8E5F1E202E0069344C0833009F00C
:102B900041C0E1E6F1E204E00593E9E5F1E204E099
:102BA000059338C08091CB0484FF1DC080E18093E1
:102BB000CA040E94C80C1092C3041092592196E0D6
:102BC0009093582183E4809359211092612190932E
:102BD00060218093612189E091E280935C21909350
:102BE0005D217FDB17C08091CB0486FF08C080E4A5
:102BF0008093CA0480E04BDB0E9418040BC08091D4
:102C0000CB0485FF07C080E28093CA0481E03FDBEC
:102C10000E941904FF91EF91BF91AF919F918F9105
:102C20007F916F915F914F913F912F910F910F90F5
:102C30000FBE0F901F9018951F920F920FB60F9214
:102C400011240F931F932F933F934F935F936F9391
:102C50007F938F939F93AF93BF93CF93DF93EF9324
:102C6000FF938091CC0481FF1AC082E08093CC0452
:102C70008091C5048195880FE8E5F1E2E81BF10930
:102C8000208131812855314283E0369527958A95F8
:102C9000E1F7822F869520FD06C0C0E005C0F4DC78
:102CA000882319F386C0C0E8C80F8C2F03DBFC0112
:102CB000208125FF7EC000E20693C11174C080917F
:102CC0004D21843019F450DB0CDB73C000915A2184
:102CD00010915B218091B4239091B523C09149213B
:102CE000D0914A2198012C0F3D1F8217930718F4A9
:102CF0008C010C1B1D0B8091B2239091B323A80172
:102D000069E071E28C0F9D1F96D0C00FD11FC09358
:102D10004921D0934A210034110569F480914B2157
:102D200090914C218C0F9D1F2091B0233091B123A5
:102D30008217930788F0C093B423D093B523E09112
:102D4000B823F091B923309729F00995811102C079
:102D5000EFDA2FC0FBDA2DC08091B4239091B52318
:102D6000C817D907D9F4E091B823F091B923309767
:102D700079F30995882361F320914B2130914C21FF
:102D80008091492190914A21820F931F80934B217A
:102D900090934C211092492110924A21E8E5F1E2EA
:102DA00002E0069306C0C03811F400DC02C08C2F8C
:102DB000FDDAFF91EF91DF91CF91BF91AF919F919C
:102DC0008F917F916F915F914F913F912F911F91C3
:102DD0000F910F900FBE0F901F901895AA1BBB1B51
:102DE00051E107C0AA1FBB1FA617B70710F0A61B0B
:102DF000B70B881F991F5A95A9F780959095BC012C
:102E0000CD01089597FB072E16F4009406D077FDA8
:102E100008D0E4DF07FC05D03EF4909581959F4FE4
:102E20000895709561957F4F0895EE0FFF1F0590EF
:102E3000F491E02D0994FB01DC0102C001900D9298
:102E400041505040D8F70895FB01DC0101900D92EC
:0A2E50000020E1F70895F894FFCF89
:102E5A0040000CE02E0AFFFFFF01FF5580008000B2
:102E6A00D10BCB0BDB0BC80B000044202020000049
:102E7A0028202420102000000902190001010080E6
:102E8A00FA0904000001FFFFFF0007058101FF03A3
:102E9A00010000001201000200000040EB0394BA96
:102EAA00000201020001000000030000000000000F
:102EBA00000000000000000000004C6162726164C2
:102ECA006F72004573706F54656B00000403090448
:102EDA006465627567313233000207001000200012
:0A2EEA004000800000010002FF0319
:00000001FF

View File

@ -10,6 +10,7 @@ ChannelData const& SingleChannelController::getData() const {
void SingleChannelController::waveformName(QString newName)
{
qDebug() << "newName = " << newName;
m_data.waveform = newName;
newName.append(".tlw");
int length;
@ -93,6 +94,7 @@ void SingleChannelController::waveformName(QString newName)
dataStringCurrent += strcspn(dataStringCurrent, "\t") + 1;
m_data.samples[i] = static_cast<uint8_t>(dummy);
}
m_data.repeat_forever = true;
free(dataString);
fclose(fptr);
@ -111,6 +113,7 @@ void SingleChannelController::freqUpdate(double newFreq)
{
qDebug() << "newFreq = " << newFreq;
m_data.freq = newFreq;
m_data.repeat_forever = true;
notifyUpdate(this);
}
@ -118,6 +121,7 @@ void SingleChannelController::amplitudeUpdate(double newAmplitude)
{
qDebug() << "newAmplitude = " << newAmplitude;
m_data.amplitude = newAmplitude;
m_data.repeat_forever = true;
notifyUpdate(this);
}
@ -125,9 +129,33 @@ void SingleChannelController::offsetUpdate(double newOffset)
{
qDebug() << "newOffset = " << newOffset;
m_data.offset = newOffset;
m_data.repeat_forever = true;
notifyUpdate(this);
}
void SingleChannelController::txuartUpdate(int baudRate, std::vector<uint8_t> samples)
{
// Update txUart data
int length = samples.size();
m_data.samples.resize(length);
m_data.samples = samples;
m_data.freq = baudRate/length;
m_data.repeat_forever = false;
notifyUpdate(this);
}
void SingleChannelController::backup_waveform()
{
m_data.freq2 = m_data.freq;
}
void SingleChannelController::restore_waveform()
{
m_data.freq = m_data.freq2;
waveformName(m_data.waveform);
}
DualChannelController::DualChannelController(QWidget *parent) : QLabel(parent)
{
@ -186,6 +214,21 @@ void DualChannelController::offsetUpdate(ChannelID channelID, double newOffset)
getChannelController(channelID)->offsetUpdate(newOffset);
}
void DualChannelController::txuartUpdate(ChannelID channelID, int baudRate, std::vector<uint8_t> samples)
{
getChannelController(channelID)->txuartUpdate(baudRate, samples);
}
void DualChannelController::backup_waveform(ChannelID channelID)
{
getChannelController(channelID)->backup_waveform();
}
void DualChannelController::restore_waveform(ChannelID channelID)
{
getChannelController(channelID)->restore_waveform();
}
void DualChannelController::waveformName_CH1(QString newName)
{

View File

@ -24,8 +24,10 @@ enum class ChannelID
struct ChannelData
{
std::vector<uint8_t> samples;
QString waveform;
bool repeat_forever;
int divisibility;
double freq = 1000.0;
double freq = 1000.0, freq2 = 1000.0;
double amplitude = 0.0;
double offset = 0.0;
};
@ -47,6 +49,9 @@ public slots:
void freqUpdate(double newFreq);
void amplitudeUpdate(double newAmplitude);
void offsetUpdate(double newOffset);
void txuartUpdate(int baudRate, std::vector<uint8_t> samples);
void backup_waveform();
void restore_waveform();
private:
ChannelData m_data;
@ -60,6 +65,9 @@ public:
public:
SingleChannelController* getChannelController(ChannelID channelID);
void txuartUpdate(ChannelID channelID, int baudRate, std::vector<uint8_t> samples);
void backup_waveform(ChannelID channelID);
void restore_waveform(ChannelID channelID);
signals:
void functionGenToUpdate(ChannelID channel, SingleChannelController* fGenControl);

View File

@ -232,9 +232,16 @@ void genericUsbDriver::sendFunctionGenData(functionGen::ChannelID channelID)
if (channelID == functionGen::ChannelID::CH2)
{
usbSendControl(0x40, 0xa1, timerPeriod, clkSetting, channelData.samples.size(), channelData.samples.data());
}
else
usbSendControl(0x40, 0xa2, timerPeriod, clkSetting, channelData.samples.size(), channelData.samples.data());
{
if(channelData.repeat_forever)
usbSendControl(0x40, 0xa2, timerPeriod, clkSetting, channelData.samples.size(), channelData.samples.data());
else
usbSendControl(0x40, 0xb2, timerPeriod, clkSetting, channelData.samples.size(), channelData.samples.data());
}
return;

View File

@ -16,7 +16,7 @@
//#include "buffercontrol.h"
#include "unified_debug_structure.h"
#define EXPECTED_FIRMWARE_VERSION 0x0006
#define EXPECTED_FIRMWARE_VERSION 0x0007
#ifdef WINDOWS_64_BIT
#define DEFINED_EXPECTED_VARIANT 1
@ -76,6 +76,7 @@ public:
virtual char *isoRead(unsigned int *newLength) = 0;
//void setBufferPtr(bufferControl *newPtr);
void saveState(int *_out_deviceMode, double *_out_scopeGain, double *_out_currentPsuVoltage, int *_out_digitalPinState);
void setTxUart(int baudRate_CH1, std::vector<uint8_t> samples, functionGen::ChannelID channelID, functionGen::SingleChannelController* fGenControl);
virtual void usbSendControl(uint8_t RequestType, uint8_t Request, uint16_t Value, uint16_t Index, uint16_t Length, unsigned char *LDATA) = 0;
virtual void manualFirmwareRecovery(void) = 0;
double psu_offset = 0;

View File

@ -88,7 +88,7 @@ MainWindow::MainWindow(QWidget *parent) :
// layout->addWidget(sizeGrip, 0,0,1,1,Qt::AlignBottom | Qt::AlignLeft);
// }
for (const auto & console : {ui->console1, ui->console2})
for (const auto & console : {ui->console1, ui->console2, ui->txuart})
{
QFont font("Monospace");
font.setStyleHint(QFont::Monospace);
@ -99,6 +99,7 @@ MainWindow::MainWindow(QWidget *parent) :
ui->kickstartIsoButton->setVisible(0);
ui->console1->setVisible(0);
ui->console2->setVisible(0);
ui->txuart->setVisible(0);
#endif
ui->timeBaseSlider->setVisible(0);
@ -2572,3 +2573,141 @@ void MainWindow::on_actionFrequency_Spectrum_triggered(bool checked)
else
MAX_WINDOW_SIZE = 10;
}
std::vector<uint8_t> MainWindow::uartEncode(const QString& text, UartParity parity)
{
std::vector<uint8_t> uartData;
int i;
// Prepend Initialization data
for (i = 0; i < 300; i++)
uartData.push_back(255);
for (const QChar& character : text)
{
// Convert character to ASCII value
int ascii = character.toLatin1();
// Append start bit
uartData.push_back(0);
// Append data bits (least significant bit first)
for (i = 0; i < 8; i++)
{
if((ascii >> i) & 1)
uartData.push_back(255);
else
uartData.push_back(0);
}
if(parity == UartParity::Even || parity == UartParity::Odd)
{
// Calculate and append parity bit
int numOneBits = 0;
for (bool bit : uartData)
{
if (bit)
numOneBits++;
}
if(parity == UartParity::Even)
{
if(numOneBits % 2 == 0)
uartData.push_back(0);
else
uartData.push_back(255);
}
else
{
if(numOneBits % 2 == 0)
uartData.push_back(255);
else
uartData.push_back(0);
}
}
// Append stop bit
uartData.push_back(255);
}
return uartData;
}
void MainWindow::on_serialEncodingCheck_CH1_toggled(bool checked)
{
int baudRate_CH1;
UartParity parity_CH1;
std::vector<uint8_t> data;
// If uart encoding is enabled
using functionGen::ChannelID;
if(checked)
{
// Backup waveform on CH1
ui->controller_fg->backup_waveform(ChannelID::CH1);
// Enable uart decoding
ui->serialDecodingCheck_CH1->setChecked(true);
/* transmit IDLE signal */
// txuart parameters
baudRate_CH1 = ui->controller_iso->baudRate_CH1;
parity_CH1 = ui->controller_iso->parity_CH1;
// Encode txuart data
data = uartEncode("\r\n", parity_CH1);
// Transmit txuart data
ui->controller_fg->txuartUpdate(ChannelID::CH1, baudRate_CH1, data);
}
else
{
// Restore waveform on CH1
ui->controller_fg->restore_waveform(ChannelID::CH1);
}
}
void MainWindow::on_txuart_textChanged()
{
QString text, new_char;
int baudRate_CH1;
UartParity parity_CH1;
std::vector<uint8_t> data;
// Retrieve text displayed
text = ui->txuart->toPlainText();
// Check if key pressed in backspace
if (text.length() == prev_text.length()-1)
new_char = '\b';
else
new_char = text.right(1);
// txuart parameters
baudRate_CH1 = ui->controller_iso->baudRate_CH1;
parity_CH1 = ui->controller_iso->parity_CH1;
// Encode txuart data
if (new_char == '\n')
new_char = "\r\n";
data = uartEncode(new_char, parity_CH1);
// Transmit txuart data
using functionGen::ChannelID;
ui->controller_fg->txuartUpdate(ChannelID::CH1, baudRate_CH1, data);
// Check if the last character is newline
if (new_char == '\r')
{
// Clear txuart screen
ui->txuart->clear();
// Update previous text
prev_text = "";
}
else
{
// Update previous text
prev_text = text;
}
}

View File

@ -228,6 +228,9 @@ private slots:
void on_actionShow_Debug_Console_triggered(bool checked);
void on_actionFrequency_Spectrum_triggered(bool checked);
void on_serialEncodingCheck_CH1_toggled(bool checked);
void on_txuart_textChanged();
private:
//Generic Vars
Ui::MainWindow *ui;
@ -250,6 +253,7 @@ private:
QPalette defaultPalette;
QString defaultStyleName;
QString prev_text;
//Generic Functions
void initialisePlot();
@ -258,6 +262,8 @@ private:
void initShortcuts();
void readSettingsFile();
void setDarkMode(bool dark);
std::vector<uint8_t> uartEncode(const QString& line, UartParity parity);
std::vector<uint8_t> resampler(std::vector<uint8_t>, int input_baudRate, int output_baudRate);
//Shortcut pointers
QActionGroup *gainGroup;

View File

@ -146,14 +146,27 @@ void uartStyleDecoder::decodeNextUartBit(bool bitValue)
parityCheckFailed = false;
}
if (m_hexDisplay)
// Start + body of escape code
if(decodedDatabit == 0x1b || (escape_code_started && !((decodedDatabit >= 'A' && decodedDatabit <= 'Z') || (decodedDatabit >= 'a' && decodedDatabit <= 'z'))))
{
m_serialBuffer.insert_hex(decodedDatabit);
m_serialBuffer.insert(" ");
escape_code_started = true;
}
// End of escape code
else if(escape_code_started && ((decodedDatabit >= 'A' && decodedDatabit <= 'Z') || (decodedDatabit >= 'a' && decodedDatabit <= 'z')))
{
escape_code_started = false;
}
else
{
m_serialBuffer.insert(decodedDatabit);
if (m_hexDisplay)
{
m_serialBuffer.insert_hex(decodedDatabit);
m_serialBuffer.insert(" ");
}
else
{
m_serialBuffer.insert(decodedDatabit);
}
}
currentUartSymbol = 0;

View File

@ -43,6 +43,7 @@ private:
bool jitterCompensationProcedure(bool current_bit);
bool m_hexDisplay = false;
bool escape_code_started = false;
QPlainTextEdit *console;
isoBufferBuffer m_serialBuffer;

View File

@ -140,6 +140,37 @@
</property>
</widget>
</item>
<item>
<widget class="QPlainTextEdit" name="txuart">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPlainTextEdit" name="console2">
<property name="sizePolicy">
@ -1350,6 +1381,22 @@
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="serialEncodingCheck_CH1">
<property name="title">
<string>Serial Encoding</string>
</property>
<property name="flat">
<bool>true</bool>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
@ -4491,6 +4538,70 @@
</hint>
</hints>
</connection>
<connection>
<sender>serialEncodingCheck_CH1</sender>
<signal>toggled(bool)</signal>
<receiver>txuart</receiver>
<slot>setVisible(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>1394</x>
<y>982</y>
</hint>
<hint type="destinationlabel">
<x>411</x>
<y>1122</y>
</hint>
</hints>
</connection>
<connection>
<sender>serialEncodingCheck_CH1</sender>
<signal>toggled(bool)</signal>
<receiver>waveformSelect_CH1</receiver>
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>1394</x>
<y>982</y>
</hint>
<hint type="destinationlabel">
<x>985</x>
<y>1039</y>
</hint>
</hints>
</connection>
<connection>
<sender>serialEncodingCheck_CH1</sender>
<signal>toggled(bool)</signal>
<receiver>frequencyValue_CH1</receiver>
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>1394</x>
<y>982</y>
</hint>
<hint type="destinationlabel">
<x>985</x>
<y>1068</y>
</hint>
</hints>
</connection>
<connection>
<sender>serialEncodingCheck_CH1</sender>
<signal>toggled(bool)</signal>
<receiver>dcOffsetValue_CH1</receiver>
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>1394</x>
<y>982</y>
</hint>
<hint type="destinationlabel">
<x>985</x>
<y>1126</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>timeBaseNeedsChanging(bool)</slot>