From 4840d3cda5808698b990cb52626756102aa2a392 Mon Sep 17 00:00:00 2001 From: Vincent DEFERT <20.100@defert.com> Date: Mon, 29 May 2023 09:13:10 +0200 Subject: [PATCH 1/6] dump-mcu.c fully automates MCU models extraction from STC-ISP's executable --- doc/reverse-engineering/dump-mcu.c | 453 ++++++++++++++++++++++++++++ doc/reverse-engineering/dump-mcu.py | 40 --- 2 files changed, 453 insertions(+), 40 deletions(-) create mode 100644 doc/reverse-engineering/dump-mcu.c delete mode 100644 doc/reverse-engineering/dump-mcu.py diff --git a/doc/reverse-engineering/dump-mcu.c b/doc/reverse-engineering/dump-mcu.c new file mode 100644 index 0000000..baec222 --- /dev/null +++ b/doc/reverse-engineering/dump-mcu.c @@ -0,0 +1,453 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2022 Vincent DEFERT. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +/** + * This program automates the procedure explained below and generates + * on the standard output the content of the 'models' list of models.py. + * + * It takes the name of the stc-isp executable as argument. + */ +/** + * Manual procedure to read MCU definitions from a new STC-ISP executable + * ======================================================================== + * + * We want to extract 2 tables from the executable, one with MCU names and + * the other with their characteristics, let's call them "Name Table" and + * "Info Table" respectively. + * + * The Info Table appears first in the executable and contains references + * to the MCU name in the Name Table. Each entry in the Name Table is 16 + * bytes long, 32 for the Info Table. New entries are prepended to the + * Info Table, and appended to the Name Table. Of course, both have the + * same number of entries. + * + * This means that the Name Table is very easy to locate, as well as the + * end of the Info Table, but not its beginning, which must be calculated. + * + * Finally, the field of an Info Table entry that references the MCU name + * is expressed as a memory address, not a file position, so we'll need to + * determine the base memory address of the name table. + * + * 1. Dump the content of the executable in a text file. + * + * hexdump -C stc-isp-v6.89G.exe > stc-isp-v6.89G.txt + * + * 2. Locate the first entry of the Name Table. + * + * Search for the following byte sequence: + * 53 54 43 39 30 4c 45 35 31 36 41 44 00 00 00 00 + * (i.e. nul-terminated "STC90LE516AD" string). + * + * Let's call this file position NTS (Name Table Start). + * + * 3. Locate the end of the Name Table. + * + * Search for the following byte sequence: + * 55 4e 4b 4e 4f 57 4e 00 25 30 36 58 00 00 00 00 + * (i.e. nul-terminated "UNKNOWN" and "%06X" strings). + * + * Let's call this file position NTE (Name Table End). + * + * 4. Find the end of the Info Table. + * + * Search for the following byte sequence (fixed last entry): + * 05 46 01 00 xx xx xx xx 90 f1 00 00 00 f8 00 00 + * 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 + * + * Bytes marked as 'xx' must be ignored while searching + * + * [Note: searching for '90 f1 00 00 00 f8 00 00' is sufficient.] + * + * It should be followed by 32 zeroed bytes. Let's call the file position + * of the first zeroed byte ITE (Info Table End). + * + * 5. Find the beginning of the Info Table. + * + * The Info Table start with a block of 32 zeroed bytes except bytes + * 4-7 which point at NTE, i.e. an info block pointing at the 'UNKNOWN' + * MCU name. It's the only reliable way to determine the location of + * the Info Table. + * + * Our first valid info block will thus be the offset of the Unknown + * block + 32. Let's call this file position ITS (Info Table Start). + * + * 6. Calculate the number of MCU definitions (i.e. Info Table entries). + * + * NB_MCU = (ITE - ITS) / 32 + * + * 7. Determine the base memory address of the name table. + * + * Let's suppose 'xx xx xx xx' is '9c f7 4a 00'. As it belongs to the Info + * Table entry describing the first item of the Name Table, we directly + * have what we're looking for, i.e. 0x004af79c. + * + * NTBA = littleEndianOf32bitUnsignedInt('xx xx xx xx') + * + * The index in the Name Table corresponding to a given Info Table item + * is thus: + * + * NAME_IDX = (nameAddressFieldOfInfoTableItem - NTBA) / 0x10 + * + * NOTE: for some reason, the Info Table entries of the STC08XE-3V and + * STC08XE-5V each have 2 distinct mcuId, which gives 1115 Info Table + * entries for 1113 strings in the Name Table. + */ +#include +#include +#include +#include + +// Must be updated with the "UNKNOWN" name offset before use. +static uint8_t infoTableStartSignature[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, +}; + +// 0x90, 0xf1 is the magic number of the STC90LE516AD +// We test only the last 24 byte of its 32-byte entry, as they are +// sufficiently discriminating and do not depend on a particular +// executable release. +static const uint8_t infoTableEndSignature[] = { + 0x90, 0xf1, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +// NUL-terminated "STC90LE516AD" followed by 3 NUL bytes +static const uint8_t nameTableStartSignature[] = { + 0x53, 0x54, 0x43, 0x39, 0x30, 0x4c, 0x45, 0x35, + 0x31, 0x36, 0x41, 0x44, 0x00, 0x00, 0x00, 0x00, +}; + +// NUL-terminated "UNKNOWN" and "%06X" followed by 3 NUL bytes +static const uint8_t nameTableEndSignature[] = { + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x00, + 0x25, 0x30, 0x36, 0x58, 0x00, 0x00, 0x00, 0x00, +}; + +typedef struct { + uint32_t flags; + uint32_t nameAddr; + uint32_t mcuId; + uint32_t flashSize; + uint32_t eepromSize; + uint32_t eepromStartAddr; // STC89 & STC90 only. 0 means IAP. + uint32_t totalSize; + uint32_t unknown2; +} MCUInfo; + +// Bit 1 is 1 for MCU which can accept 5V power supply voltage, be it +// exclusively or not, and 0 for low-voltage only MCU (around 3.3V). +#define FLAG_ACCEPT_5V_SUPPLY_VOLTAGE 0x00000002 + +// Bit 3 is 1 for so-called "IAP" MCU, meaning the start address of the +// flash portion used for EEPROM emulation can be configured. +#define FLAG_CONFIGURABLE_EEPROM_SIZE 0x00000008 + +// Bit 7 is 1 for MCU with an adjustable internal RC oscillator, i.e. +// that supports calibration. When bits 7 and 8 are both 0, the MCU has +// no IRCO at all (external crystal only). +#define FLAG_CONFIGURABLE_IRCO_FREQ 0x00000080 + +// Bit 8 is 1 for MCU with a fixed-frequency internal RC oscillator +// (the old IRC* models). +#define FLAG_FIXED_FREQUENCY_IRCO 0x00000100 + +// Bit 12 is 1 for MCS-251 MCU, i.e. with a flash size that can be +// larger than 64KB. +#define FLAG_IS_MCS251_MCU 0x00001000 + +#define SEARCH_BUFFER_LEN 8192 +#define MCU_NAME_LEN 16 + +#define NO_MATCH -1 +#define FOUND -2 + +/* +// May help to guess the meaning of new flags as they are added. + +void toBits(uint32_t n, char *result) { + *result = '\0'; + int pos = 0; + + for (uint32_t mask = 0x80000000; mask; mask >>= 1, pos++) { + if (pos) { + strcat(result, ","); + } + + if (n & mask) { + strcat(result, "1"); + } else { + strcat(result, "0"); + } + } +} + +static void printCSVHeader() { + printf("name,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,flags (hex),mcuId,flashSize,eepromSize,eepromStartAddr,totalSize,unknown2\n"); +} + +static void printCSVRow(const MCUInfo *info, const char *name) { + char flags[64]; + + toBits(info->flags, flags); + + printf( + "%s,%s,0x%08x,0x%04x,%u,%u,0x%08x,%u,0x%08x\n", + name, + flags, + info->flags, + (uint16_t) info->mcuId, + info->flashSize, + info->eepromSize, + info->eepromStartAddr, + info->totalSize, + info->unknown2 + ); +} +*/ + +static const char *toBool(uint32_t flags, uint32_t mask) { + return (flags & mask) ? "True" : "False"; +} + +static void printMCU(const MCUInfo *info, const char *name) { + printf( + " MCUModel(name='%s', magic=0x%04x, total=%u, code=%u, eeprom=%u, iap=%s, calibrate=%s, mcs251=%s),\n", + name, + (uint16_t) info->mcuId, + info->totalSize, + info->flashSize, + info->eepromSize, + toBool(info->flags, FLAG_CONFIGURABLE_EEPROM_SIZE), + toBool(info->flags, FLAG_CONFIGURABLE_IRCO_FREQ), + toBool(info->flags, FLAG_IS_MCS251_MCU) + ); +} + +int main(int argc, const char **argv) { + int rc = 1; + MCUInfo *infoTable = NULL; + char *nameTable = NULL; + int mcuCount = 0; + uint32_t infoTableStartOffset = 0; + uint32_t infoTableEndOffset = 0; + uint32_t nameTableStartOffset = 0; + uint32_t nameTableEndOffset = 0; + uint32_t baseAddr = 0; + int nameTableSize = 0; + FILE *exeFile = fopen(argv[1], "rb"); + + if (exeFile != NULL) { + rc = 2; + uint8_t *buffer = (uint8_t *) malloc(SEARCH_BUFFER_LEN); + + if (buffer != NULL) { + rc = 3; + int infoTableEndMatch = NO_MATCH; + int nameTableStartMatch = NO_MATCH; + int nameTableEndMatch = NO_MATCH; + uint32_t fileOffset = 0; + int bytesRead = 0; + + while ((bytesRead = fread(buffer, 1, SEARCH_BUFFER_LEN, exeFile)) != 0) { + for (int curByte = 0; curByte < SEARCH_BUFFER_LEN; curByte++) { + int noMatch = 1; + + if (infoTableEndMatch > NO_MATCH) { + if (infoTableEndSignature[infoTableEndMatch + 1] == buffer[curByte]) { + infoTableEndMatch++; + noMatch = 0; + + if (infoTableEndMatch == (sizeof(infoTableEndSignature) -1)) { + infoTableEndMatch = FOUND; + break; + } + } else { + infoTableEndMatch = NO_MATCH; + } + } + + if (nameTableStartMatch > NO_MATCH) { + if (nameTableStartSignature[nameTableStartMatch + 1] == buffer[curByte]) { + nameTableStartMatch++; + noMatch = 0; + + if (nameTableStartMatch == (sizeof(nameTableStartSignature) -1)) { + nameTableStartMatch = FOUND; + break; + } + } else { + nameTableStartMatch = NO_MATCH; + } + } + + if (nameTableEndMatch > NO_MATCH) { + if (nameTableEndSignature[nameTableEndMatch + 1] == buffer[curByte]) { + nameTableEndMatch++; + noMatch = 0; + + if (nameTableEndMatch == (sizeof(nameTableEndSignature) - 1)) { + nameTableEndMatch = FOUND; + break; + } + } else { + nameTableEndMatch = NO_MATCH; + } + } + + if (noMatch) { + if (infoTableEndMatch == NO_MATCH && infoTableEndSignature[0] == buffer[curByte]) { + infoTableEndMatch = 0; + infoTableEndOffset = fileOffset + curByte; + } else if (nameTableStartMatch == NO_MATCH && nameTableStartSignature[0] == buffer[curByte]) { + nameTableStartMatch = 0; + nameTableStartOffset = fileOffset + curByte; + } else if (nameTableEndMatch == NO_MATCH && nameTableEndSignature[0] == buffer[curByte]) { + nameTableEndMatch = 0; + nameTableEndOffset = fileOffset + curByte; + } + } + } + + if (infoTableEndMatch == FOUND && nameTableStartMatch == FOUND && nameTableEndMatch == FOUND) { + rc = 0; + break; + } + + fileOffset += SEARCH_BUFFER_LEN; + } + + if (rc == 0) { + // Point to the byte immediately following the table's last entry. + infoTableEndOffset += sizeof(infoTableEndSignature); + // Read last item of Info Table + fseek(exeFile, infoTableEndOffset - sizeof(MCUInfo), SEEK_SET); + MCUInfo lastItem; + fread(&lastItem, sizeof(MCUInfo), 1, exeFile); + // We need it now in order to calculate the memory address + // corresponding to the UNKNOWN name. + // We'll also need baseAddr later, anyway. + baseAddr = lastItem.nameAddr; + + rc = 4; + int infoTableStartMatch = NO_MATCH; + uint32_t fileOffset = 0; + int bytesRead = 0; + *((uint32_t *)(infoTableStartSignature)) = (baseAddr - nameTableStartOffset) + nameTableEndOffset; + fseek(exeFile, 0, SEEK_SET); + + while ((bytesRead = fread(buffer, 1, SEARCH_BUFFER_LEN, exeFile)) != 0) { + for (int curByte = 0; curByte < SEARCH_BUFFER_LEN; curByte++) { + if (infoTableStartMatch > NO_MATCH) { + if (infoTableStartSignature[infoTableStartMatch + 1] == buffer[curByte]) { + infoTableStartMatch++; + + if (infoTableStartMatch == (sizeof(infoTableStartSignature) - 1)) { + infoTableStartMatch = FOUND; + break; + } + } else { + infoTableStartMatch = NO_MATCH; + } + } + + if (infoTableStartMatch == NO_MATCH && infoTableStartSignature[0] == buffer[curByte]) { + infoTableStartMatch = 0; + infoTableStartOffset = fileOffset + curByte; + } + } + + if (infoTableStartMatch == FOUND) { + // Point to the first entry following the Unknown one. + infoTableStartOffset += sizeof(MCUInfo) - 4; + // Calculate number of entries while we're at it + mcuCount = (infoTableEndOffset - infoTableStartOffset) / sizeof(MCUInfo); + rc = 0; + break; + } + + fileOffset += SEARCH_BUFFER_LEN; + } + } + + free(buffer); + + if (rc == 0) { + nameTableSize = nameTableEndOffset - nameTableStartOffset; + + nameTable = (char *) malloc(nameTableSize); + + if (nameTable == NULL) { + rc = 5; + } + } + + if (rc == 0) { + fseek(exeFile, nameTableStartOffset, SEEK_SET); + fread(nameTable, nameTableSize, 1, exeFile); + + infoTable = (MCUInfo *) malloc(infoTableEndOffset - infoTableStartOffset); + + if (infoTable != NULL) { + fseek(exeFile, infoTableStartOffset, SEEK_SET); + fread(infoTable, infoTableEndOffset - infoTableStartOffset, 1, exeFile); + + } else { + rc = 6; + free(nameTable); + } + } + } + + fclose(exeFile); + } + + if (rc == 0) { + //printCSVHeader(); + + for (int mcu = 0; mcu < mcuCount; mcu++) { + const char *mcuName = &nameTable[infoTable[mcu].nameAddr - baseAddr]; + + if (strncmp(mcuName, "STC12C54", 8) == 0 || strncmp(mcuName, "STC12LE54", 9) == 0) { + // STC12x54xx always have 12KB EEPROM + infoTable[mcu].eepromSize = 12 * 1024; + } + + //printCSVRow(&infoTable[mcu], mcuName); + printMCU(&infoTable[mcu], mcuName); + } + + free(infoTable); + free(nameTable); + } + + return rc; +} diff --git a/doc/reverse-engineering/dump-mcu.py b/doc/reverse-engineering/dump-mcu.py deleted file mode 100644 index 2b3eebd..0000000 --- a/doc/reverse-engineering/dump-mcu.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python3 -# This curious script dumps all model info from STC-ISP. -# Data is directly read from the binary. -# Offsets are for stc-isp-15xx-v6.87P.exe, sha256sum d5413728d87cf5d7a6e036348ade5b38cce13113ae3bb090cfac7a232ba82a53 - -MCU_TABLE_OFFSET = 0x00071c30 -MCU_TABLE_SIZE = 1068 -MCU_RECORD_SIZE = 32 -MCU_NAMES_OFFSET = 0x000924E8 -MCU_NAMES_PTR_OFFSET = 0x004924e8 - -import struct -import sys - -inp = open(sys.argv[1], "rb") - -for i in range(MCU_TABLE_SIZE): - mcu_record_offset = MCU_TABLE_OFFSET + MCU_RECORD_SIZE * i - inp.seek(mcu_record_offset) - mcu_record = inp.read(MCU_RECORD_SIZE) - flags, name_ptr, mcu_id, code_size, ee_size, _, total_size, _ = struct.unpack("<8I", mcu_record) - mcu_id &= 0xffff - - mcu_name_offset = MCU_NAMES_OFFSET + (name_ptr - MCU_NAMES_PTR_OFFSET) - inp.seek(mcu_name_offset) - name_str = inp.read(16).split(b'\00')[0].decode("ascii") - - # TODO: With some MCUs, the amount of available EEPROM depends on the BSL version. - # Generally, newer BSLs free up a KB of additional EEPROM. Currently, always the - # maximum amount (with newer BSL) is reported. - - # STC12x54xx always have 12 KB eeprom - if name_str.startswith("STC12C54") or name_str.startswith("STC12LE54"): - ee_size = 12 * 1024 - - print("MCUModel(name='%s', magic=0x%02x%02x, total=%d, code=%d, eeprom=%d)," % - (name_str, mcu_id >> 8, mcu_id & 0xff, total_size, code_size, ee_size)) - -inp.close() - From 796a17f7cf049c8d0b3eb3f80a37cf280727b983 Mon Sep 17 00:00:00 2001 From: Vincent DEFERT <20.100@defert.com> Date: Mon, 29 May 2023 09:13:25 +0200 Subject: [PATCH 2/6] Attempt at guessing the meaning of MCU flags --- doc/reverse-engineering/models.ods | Bin 0 -> 69248 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/reverse-engineering/models.ods diff --git a/doc/reverse-engineering/models.ods b/doc/reverse-engineering/models.ods new file mode 100644 index 0000000000000000000000000000000000000000..a806577525a6d7c742b458abf6dc2e376ee1d4a7 GIT binary patch literal 69248 zcmb4p18`;Cwr*@Y9iwBrW20l+wrzKubnJ9&+h)hM(XoxU^Z)1KymQ`tb$8WHR?RWS zH}s7;*Q&kbBtgN@fPkQYfcz}am4dClh0_560eyY}OF-7<*2YfmcEVZwsyugMz)5|*2XqYbdGio#`;E%X2!-&a{q)0fcei47T`+A*2cu# z)Y;)LG)E?SCtF)91APbj|DBbIm94&$@&DEe5UKP3?CZR{~X_`lE5(MjLQ`Tt`_@NaT7x7If` zcBB_Hce2*EbNolRP*6~R(FvgcpC35Dm9@T&xrwo(6P<&R$$0#@O&|kO&;@s}@x&58 zJvg`n#b}E~b~kH?8aVxR8p=jzbi9gue(7=c+-{{P^Ja8?`k6lNa71l!j}nU^<=0Vh zvxYy^oNaV11*@DZOO4b7X?Rx_fd$!At*$my-*l6LY1!edChKx3+|q8iW!s5+<~i)e z;RfrYp`h`j1kLaEyuN&!*nu`tm3KPHiFJP<b(Qj1f2yG;c^XHF(mKqIm z3dC)dksM%7x{?3Z^XqJ9NUviyFqd2Jk~(^FY2yc6;l9pRNAf z)h0=TUIx>->~R~H`^Vus-Q)-MPF1~&uoeGAp6PS!Vf{6MvRIXzBqUV*gV_u?Fc456 zC=k%!Gw|=q_t!KUJL%K8SzARZjM=O*AhkbGgR!ZGAyPI<4Z}?d#R&zV6~o?|4DX2= zOU6S;h)is%%92xhQ8;bWnYx&YmY+|E#kcz*t}N5$Vhcd4{YhvX$9P-vmX>rP=T$y` zQkUEs9l3{MD-`?TJfmp66{R|AHC=@zi@RHSQcE|PVaq^5Is~ucTt15lzi!IH3~`Oo zu;HKziPu~agXEU5mf1~5{fLtkQ(LGpGFGa1GTtmM0S5u0(9M$P){_<0=vzsdmp%>= z(*!&B%@r7dimWRl3Pkn}oJZxuQh&mRg)w^*Jd30zpUVwB@n?Gs92iMtfl=m+ftc+# z>Tg8LX-pdBX7-xf;3`qj{xdZn#w8ZscrPP6tI_MTuW=Qfs*jvIB=Vi#K?M>%at`l< zth)teU39pQ0z-@BS#?a^KWfq;tygc}Oe6P>hhkrOa+!V}<7Fg+Av)QKk zx@!~NqX^A0VZYSyVu=@6TA!i{DJljqO46IUj~sMz!Hp&11XLGahI(B!G|{|+e70|` zA;>BW&_3w@v3)QA_B%ScTNyikHgH|zkL@ZO+DB(subsa>DA|eK%%IMWo>(2aS>Uhn z>KJfoc_#VqXyTkQ&xrnDE-o8z%<1RPY#wETt8>%d_Ib7RZEY$aEU;B$o zuH=z2p5f3FphKheq3IeU&D7w$g<};WU$$vzzV*TD8I&`A(P{|TEHpg)UJPljGMuP} zs$`79T#Yj(qF*ppIy)~Im04Lm-;$ufQC&^W3kH@nSgM9)T?xW2dizo)Nc$u6W_M-St)P z@3mG|KPap!@P$Gmrst<}EE5e$YGrIwM}HO1hH1x+ns8=Uu1%!MwOEn?5z~vtUe32j z_&K;4WF=}~&Qga=LB@_HCbtFl8KtZ(iYr5e9~Dp}%ftq!Z#w$de#!3!8Qt#$hdZgh z3uSeSFy=iePP?VJ=AoeYXz^zb>}x$^IE;}$gRnA#;AEkKj?u>InlyD;W8sq-!}_Wx zX(hSGp_%9uc1cKVbi4(wM`)b0OSyiGW*gl%O*6<0cj4RB-h=ErD)4+4qEuEwjT+mHj<%g{ z_aAX0rSm&_kT-KtH75g--;t>s49Ry`v2T|M+fF1WS7|?+*)!mZsN_$~OQMZ~ZJIgx z*)L|^c-AC6_&!i_zn&T%`AJr&@{0BhP1PiZ=^)u%%p=8LQcQlULUgOtfSO1%^qlnkEE?b7A!=?{o{}SWdr>JT&&{%6G?B`bWx*1Dt0>YYZx)e^TR*kz|YNc2fFa*S25bO*u9^H%?cQ0LV^sQUmb0GDSNK=2GnyppIw{3 z_oSXox*=-GQ(e>7DZG7Ge@jP4923Rrd%vESq|X~C9z0y`n48GZ&z{m!zLsyv{X)?v z3@bX}a<+^=j4)Js2B|6Fi3Bf^clJT(w{%@J+RR506|-YK&q;PjIQNa6j5T0ue~b{T zOKs7NTFuzglPtmt9oul);EEx_2Ym9Jz<5mDl5nnL#?0~^n1-)0*iz$mzusdU%Xl&y zTxKNjp7fbHcbt2QlDBgD1zgblUD0_{cfHylVgV@nRQIeF50&_y^x6;UTkk>E!TgGs z*2ObaI>8h>p6!j-)WMVEDlQ;Bp$!sVuOB{MWG;=KvP&4|zn(7`i_ER%e23hRy332$ zab`jnQM>GIO$ZWeu#vDlqU|nMz8<%^gdz7|H=mCX2LBkFeXI8%VwUp0be8^AnPS8? zRZ(2>P&wRd4q5E2U$kL9a<)EZMstXK5O&8K&wkCnie^59;+`AVb!=a3wX}p3Yf9~` zTO0~3`87C4IBF3xRb)|YQ3>i!l#qfR@69KwoNBVFAV(xL+}Zgx2~qTs?wR1J(qjX` zwCH8mWq+m;sK$Mq;CH~~Z|P&RZjd`=IvH@Hcq)+!26OD^v!Usx7Ohajl?&Q}q*!2` zT8d4zC4m9+qnVa8a6Isd;x5j`4=%Z-O|QUMfhszB`pLJ096ZV|5mR>U*9IL|u{Z>T zxD6<@J&^rhBNg%wy zh^_FrKoX9_Y`^Y}|3d}k^@azg0t>G7#$pd+8mdkmYlxRc*Y|WynkFKE1Wry~r9*`* z`KJA49evID3?y8MCbMuYBvdkCw^Q`ox-3Gda00O!q z`=4%gU;$^Pp{-ixIs#I^_I^$mKuj{yM?^tkzT7M&rDlZV;aQ*U!Z*8mKJ&t*cp#N|rD*SDsJw*@ z4zk&M+P-|=SzX+mKOb0S|8T>Dhv<}i*4dL8B9&5Rhf#d45}ZVcevWCp|6WBeYR>t`a>a_RElpijo_ns-XL^Z| z_3Mq2W&{3U7Urp?^>J$fJnN(c-rWXyop0qtO3cjF26LoNRgtlnsx+iLcNYDS5M=dS zkAa*KFHz0p;4au3MJ{=99J`!%X%a`;EdkdO?ke|{qY-QU$C_8CvzXE86z|VDXzf}~ z>MZW#UHRzwR9afHcnTTS3Le*WH>Rk-^3+2MQbMUEVdl!nhWoWR)S`COB-RaFX$QVN zo@BNHGUlwQcpH{Ajhbv2kJ}GkFD7CHXXy{bH>7fq@)Kw?Jv>~E1BcEh zr>Gaf$-GU*3`s+_3`tGKv=ewAq$W}9lL$q-TqusZ>6P5FXL{Xyb{<(RE=m?*F-iD{ zi?COOX(1a1@auJSHM7r}JlxZRH}Q+JwW8@0&!^BKl{IW-_X19SQ)85yNBWk}dG_Zh zqZs-QlPWC@!7rqjk1Chqc;szk>|CCnZ}&PnU5hfO`FXf}rxxtDdiRUthvQ~_mUwOc zU+oQjdpnTmG;HA`om2KA$LBCY=@Sax+3b2+-RcYiMXJIY-wpV&1@JiN z(k9nzf)2%@1GQb#lD!R zhix8W#q-k$%LS@Dbm@~`F;7X}^EF)O9Pz$F8HYxIyQXv>;|Grcqq>Q&>F&lZtAMM? zuQ=KYE8uqvoY_{HGEFH~XE);|)3ishnT{hS+JAWJQmoc*#?9MQ&+ov&e*_$V&KJ zK%8$*S+Y=kS`0{*3|Kp;89qpDpCypWqop!Ztm%yjuE7eid!p5i=9o08F6m&}Y1hpBS+_#IiiWkUvSSzjiWwsE7Si=e#$Fd;bz2@De$okbUhNp#OVy%$A zb~G|aW{#MNnZ{(+3Ir{mgT8s3_6zYTfimeOwc8Of-erYK-c55=kzH>|5lc_uDl^@T z<&lRa_#~{7zkd|-uS98A-ht=*}JhnViZ#kr3 zgb{lN-yre#vJmL$LSLr}GvB2a`Tfr!Tn~GO7tdw8U-C&^5F^KX(%N-i9w+Vly!}~) z%c2iV>N>xtdcp6dGY8j;T8z}i?3us?GV^{PHsrFR z@?epv_kHeGUr?<$^3Sp7uktMLCCAA7$!MvK>MR}0F~q8d^)iRiX-=i+w^3;_87!MB z|1k_DL!8j4A$vHG(7|+7SD!SB!pdVl2e{Fwa|tQ#yOFKyMI&!r2L0Vl){+_42Cf<8 z)SJkwy`9MQKVlbd0;f#3KO=1@|NJ0?BSKpn+!uFz#icFK2YZV+93ZBkh*BU&65*S@ z^u!t$ym3>9I}grrte?Ahy>;{V6pOGI%82!m4>@-etY~xu{(>A0RVo(!c7NhI_S(n5 zhi#(jEv8VEf^o0qjU+77%0o^wah7N@?Lr%AKa92)+S(CPqspBr$=yM9RXUZWTyrnH zAU&U?Tw=4OI0f(I=&+6kz4NTK2tUTq(Z;OnGDSpQ3&M%pVR-$A(~>HVF^OR{;^R2? znK{x&SAnEEygr`qNbHcwcC%C2$6oOxi-N`QzVKWCJ4xv&;`!`8^LiPvE8Bw7f>0j@ zpFXZl+)_Q)9>WW!6#4?k`YJswcs4h{6};crvBU(&d>VT;7j;JRk9piLE$R`c zULPM)c@1A(D$cjw*4lTKTn0BY(eT@g(`2q#QdV${SW*c~^>Gp29&Z4o5<6B)ki<+5 zT|V8s6^R6=;m`h}2&Sx6>cfq=N>ZOAlwdOWb-sGUm8!=3ck<^R2EI97$zz`*AEuQ} zQVn<=x$E~(t#lmB;1PNlDXBLnlG-7^U*LBsrOXabr-cky@K&>R6IozRvJFJbjje3i zrRrm|Q2Gy%7zDs3w8nn==QT~5v}NP0_vHm}hJ0km)y+!sQy(%3P;2cUg^?M;_IY+& zh((NT;n%CSzTQtaqWX!C$>BHaEegEv*Qz8AAY;NZK)nJoa;jyqF=t;4(1)SFq@m*0 z6KD(ytCt%_5Zn(XgW> zY2GchVHjW%aMRJmG=0W_trKLWC_Zd+;%7w&O4wGZLPS8r+D`?v3?F>DOW%@x1-E)o z7gW9=bcs!8nKwjdf-=Ck}s!$kJ+_zy~mr0}fH$d9rWY~#4rRJ$Cyj&C?A#J6a z0@|RoK^rQUt-sJCR6#ohyy>-Erc zz5|{*KQoU8WIj+AXM_GAAf*&y$}T8}t#cC@biq3Obq%9GGdAPdh7`luKlmUTH!L^@ zz!gHaekw3svHdz6bre`M+rVe)BA*Gg+ni)dNwrRRuqsJ4>+@m%tpETADdv&Nki75` zCvA)b?B-08T?2s==;`)vI)1er$)byYf3n6)&`lm*UyBR825*3QGOHj`A$sJb0#sM< zso3Z|?`O+>>f zU?Q(hOj#Vr4tEXCUQ>GeBq&udNUtXlMInZV;IN)ah#tfKSwIH^6YuvZ{ft#>#%+Je zv9BJA{jwRK1?rrE-_1$pkW7ZCZXzb(U}fh3wupu3Hte7K%cQZ=9B9;{=O~exb5k-d z>YyDRJ1(y!4zwRwG<4`k2~Hdj1hus`HlB0S{yIJX7ecEqde^j)Cd>5L7|if`^w^?y z7B+SubA<4I|D`<(gm!Q*pF(Yka+#2&ZEzZME<(xz-w;H;e2MeYVv8fHXJw-YCPxJB zKg7>I6%|W4{B#mRI|rXcJ()>vkne7F|b9>oY+5J~p0;VKLBav_0L=Tw#k zE5*SH_Fg9GHy(SQkVPG6RXUX{a4vD8OFSV%a{&{X zj5rR}pC6C*BtWUkupqHG$mhVrKzLVw(=u%sFpxmkS25k^hs+86z%lznyFDyUihMAc z-LeE|rh@bssIt&UUw6w)^lIQ~Y{X+BF+go|aE?SdXm~wSRfe2p2aG9ZLC~@h!w0-l z7L1HFP-=Q$zgM=lYhO|jHs1?J#8%@V|K%*R4=@A4C5o=p%aH>(;A5UfAbZf)YeHE` z(AQSqNs+WXb44VUqM$z0(zh*p0au&oIg7~e}D zGPHL;PFdm11@b&^PvYH5kPJAyy&x!x3>#q=?9-*ptPHBBuS7Tl)cfnz5Ip`__fzr4 z0a?c=n? ziVpPmznstcjUE-BZoVvyIDjx58 z9D%mL=?`-EK8tbq6_Gal#X08~F&pCj1L8AYDzn8S(}__15pMbF7$-Cl`?I7hxB3^c zGnXubGfk&o)XXb)Ernq7D5U7^(y#eDEDW77tkIB&qOv)2eFUa@_5d5wiGeoi37Zo#!pX4;dHIQ>w7&K< zy5fuV4n4b$i)&P;Ep1x^Rdr9K8}h}ptqIE<57t#{#pVxHCu!)>ui{kwn`G|}yCUtP z$=lxva?m-%Bi$J<;@n$MFblp@PQo92`gYN`Nl7<2pxp%83D_J+8V3z&cbDb06~MJpxS!xBmN^!yj`^w5;& z_VJxR0c_uYU`*rd?&OMKvKDu`n``jf+#ZMmrXj}Cc0(-DdrcDu5|lJrd`oA|(`y{| zp;10>-~{RXEBpDU*4Bo~x@Xm$fE_Yi0!)sRmVh}4xKg{gpMt}#jZK0o9ECM{0fF^t z;P+Fg-A@2zxPJri@~pmT=whD=cbB`dnLHwAi-WGw4)aULp$`!G#+>GM>vCVXwibI| z`}Fu~m+PNR7o9rtHKjmj=JMI!QF`tOKf_OWQ|=E$&*=HIMSPw9E1^jW0ksF zbIO^Y!|rE7SHKV+fVuQs!MM&1fZ7hOcB=T9*?&tjE+uvuv|-^{P}9QdZvGHzMatJC z#LLfPp*}3Uk4A4n9v>IU_f#TWA309r86R6R9yP%ELlJ(QPtAQ5d(OvM_)W0jA9k_T1U|+qDf_+w`WmFpq`%2*y8#qT=qcm`IH={5%Safa)QfOY+ z8h1h4b?C!NGm`xy)U8a9%bhj5A(s_qFa5iP6M+4z(MlX^X!-syrLg6#=<~l?kyv5o z!wLnpoB@MrJQPhwpuOa2A)%1HcTb#MJxE?Hs`V9+q2jDZd|%}OUtk`dRpn4S?Ns5iCJmx zPAeVjU@PkQkwwBGYQ-zXWX~9&pgmFVo@ikt{$aRis0;N_ewoc&5VNR{ZW9d zTtBl424wYkF1;4b;RU8q%HQ@}pZ*K4KB61b_bVr0UojV>!nJ{(kq4gx7hQ)r=GP8F z0Y4U2B#P$z+^}`UgwVf~@^b+;P`vs;7v#sCDq%U(VJ(ps1%Qt^Jv;wuBzi^DKh0ATE)>(ssIcCm_0E z15@5HEDVIKN`b51o!5e?sI^M`T-fS00i`z#OH#|NdU4;A&Tnt|;Q~)pL8GK$FUmz# zAwG2;b7eZ}niq&ji_wKzc+>RQ5jGw+8t`ra3MXus$8DgY*xJ?pt!=7sZqN9#&nzgP z+u9hD@;-@;&!DrQ;Iw~xV+Nh(rdG;W4DTVSdj=tC7K+A@CcYbm@Mu8Py&p)js+xPG zH8#>um$s z$YgInF@ld+b!?|jLw{@eDz37%p0nZoxYUujG!!xy`}_!joqt~=HF)+dA7ecH-3*PC zn$THJ!S_S!uI8wj3$hsauFLfhs3As#$z~F`!A#{AlH{{}{;fR~J&4rP_LfL8Vuw!8 z->~%4)G_Krj=ufG9EUl8nJ#ZWC)lNDv*6)_FB-Zb`qik+x7b7RdzT?ObJT~G<$K*> zpV+dmr|q9(Mxv-)mB*e9RY`nQI0DqjEI;+R`bT_<4 zuJ2^0)U3r9c-kEvQ5&78S1){7g|Edogs(+M#%XZOougMBN$Jzjf1~HB6VbWX=JvsV z#7}-*EZ916^S=7#1sAg|4QG2>8|K{d1}8O{9s$e;+}-Dk&a+NV7~S~a&p z=)q#SfAYn8F+F24kBMqz?%v~$M3{g(2Aio6KIQz>jr>`E4Gefdmw(9NO&YouOFE>Y zJz?e|8pm4iHU@>Yuz6!&rqtz5jsMJERMS$1+u}Aoo2vh{s<&J% z{a7bWN_%5=)hxQNLh;(oEnVOM90oR{LrvJKV{LEBh)|&SV!J|Ry2HBOGRj!Oi3`_A zpmFdLgMqLiz?*IDPJdB|bIdAlhlc}rS8o}e&I~NBGJl!bop@OSfDItOl&Akg*(i9d zLK}veWV!q2*`HH*=IW!?NF$ND0AwMR>I)6T__fI$9}ErFS*n51%yND+Wfrzbtm&ox zvu_#=GgRO%zH)k)RbM<3sr7gl2-~T?;D}0P*L;)T6V$NIzMCIR^tK_|X2q%U{veVv z34!l;-eUdqZ1KuX#qX`|L;x>rT7R7Hj1QxKWwAWXuY#$)-%Zl`LD}nMiWrSv8hVte z#&55m-%dn53{$hDJ!Mpy*Gvk_(eM#Yx8V_Yx9M_2Lq~8r z07*Tim+K)uj*%8{pbwNVRHeGl`nfaOVovw9??vfY?cC$uXrv~isPa+R2YbNJkAZW| zt%}{s(Yw!TTXCa}dMsD@s0T~^qB(c_#fx)SQH*%!jLb79w!wkxj6Z74qrH@~rc$_; z#Ehw6BiR>Ba>z?kAvap{tp;!}%oa)cSyey)c2^;umVhtYD2Tse<`^fsj`50SE0eWO zQpu_K$p*^oN-CRu6TvK1Kg29k;q52AQWi$*MNh0pXH_6ZI|{~QQf$pB8xrAOFypR%m`>M!cbqHo0K;AL=q|qJsaTZas4n za>!EIa=LW5f#M)21M4u6;2n?wQ{$iU57fPS;v#wZqLu%=e=SLh&?;6TVk=H!Econ= zSc6Jwg9o$jQ+rAOh^A761)@@$T_Wr}AdUHdq*1)^y+L%K(P9yT;}zN2l2lJa%2RLU z_Y!25 z*JNytdrJ(3e~r+hv~g>0rsk=#j2FJ&B&eRo>gOM+RbIA~f8;Y%uTtpjAo1t%jVl|H zzu`=oYXWfF4)f31c;V}*(te6nN;5?PIfEMnT3{=Be2%e_Wq}4SBG5OIct?Cf@;$U4 z(zp)qfFH9zABiPxb~%tBwou{qsB3fG76Szg{d6XvIjc}_-xy3XUjE)iQYkk$pVKyTiqb^Z>`baio0O{w=fCVOcUa4 z4)D)064z`WLOWlO%I}`ojMZE1LV|^v`Q~S;^`s>8KLIKjAfzXud;*f=+|ER1r0$1A z1I$vMa#LB$IV{x#e((2lyD^iD4~MDSEQwR)2c*!4t8+!xxnT8c$^AyC7iV@bNWx)T zsb}*ZYfvAHB3NycuY(_FE3S$B;wvQv`JqU$M(aX3cGilMBwo4OilI=mfl0#dN;@#L ztNHN$IIY88d-GH`1!oUJ?~!|m$&<}_D=d2pmznMtWJZd9v`oQc3%2N?8zj`y%-{$6 z5(nE73oCR;w)MOrPSsp3kD0`|I?C&PD?FK+)d$QojmiTM5)yrp0QX?~J}KDIV6_1( zdzrDl97ygKV0yF$1{SnZJZ^I7wT_<^j3LtITaC)qmU;GG^7blV?XUpR+(W5jO+1;h zq8jhj(t^FFt-CF8;Z}WN-ocKSgVTyR)luaw+mH;>Frtog6jJ2Y5XNn2p(}m8PX^n1 z_DH;wB+_1mr`u39YY|_^CM?BvWr6BGIM1%1 zvUU5vxf}_wX?vY;c_MNZaJaBY);$aUOQ&U8!g`Jjw}pLklLPn;!x`)2 z#NnzuCX&{Ofo`;zJ%1ZwIM2#QA)y6;OgtNWeSJ;R#to14D+;r=lBa^tw?DXM=Zv$oH+I~-K_zW>!#XkDr&K@+K z^%KeVoIH(_1IcEXGYk<@1UNSAubvK|HVWIRt9fIOCz?^FHkpo&ndz_<;L{$sIjm#D zzm#oql&Nx9*)&{h*$tjT4agx3Exj9Ecp6Qxzcr4+H+~0i95gAb`)S(9NsX;3S#wv? zw?IQOq|(x(QqsM!Waa#wMX}Lp^u0SlU34PBp)Wz9C!t3AkJss4){p^pBVEnBO$p0? z*JpZs_2$CH{e&{=Qc8<6EL+nnQ_{1vYUD(HJC$-WqYYi?p$0J*MW}E9txy22sF^-y zd90h=`qe|mCNW42z;=E(u+o4a~{xaB(0Vqj-X2lc1?ZvH0?E4@uK70$sl4Sb8rld3jt>ZA1`5zrMN~O1wTidl;htc$;PL zs+Gdan`K%FA$r!3y0r;`oDv2@z~=U)MRm#paW6gObq8yyUjEbMvjOsU5No=?%Vb$ig zM;CXqs$EsJTb16b{a)M$;@?M;gv}~HQt&pl{X+E(89x#&2+lYDt?hR)@ue#=zkqsD zj1%R>E^lTCCJeD3HP2a^ml zc0u;YL*TR{8q`?NiLZM+ZzleBax_nHAVwU)}S6|4~^WD?JTaT(9b#P?3=NQstY` zT61kmauPR;qMkPVbCC~1z2z}d2=KmWt(3C5zp=Sf+E*P6j)|d?^AGK4;iTai;iPsN zhG76OZf(9zta0fm42@(SWc$63{hIRzep1PK422l6q>(wXr-g^~l7CNe&~4b;2>FM0B;JC{it5`g$KVD&Nx< z{7XT)fUh}3$2C@{ zZ!QK6(`9DQ@)8sAkwcDl8{xXXYpYvlVrRX5v%gGR5?#J!*=y)W^cK`!k$L9ZX z+F3UEVl-I8gxHD;{jrq|{b7Rtc4;#t@dNZjxD4cd{}|x%;ZaP7XB>szJN4yP<(Ea! z9)d^ap3UA0-3yZpFpe$Rda7>S%Fk3q`C2ufOPJ=Gan0vMT7O+H?`}c{@Le|j;q2n| z{s`>Ce=Wei85P2P4LirOeWlD!SHDxZ6d9*&JOaDIv}O>8Bw%_w)PCMr3>>ksP%KdQMWSx&FSq zoaD;rb4`9lw+7e3&&HjN=y*6{HGsJKZ?T$W_-}xC_%AW>?!SsTWolUea8xfuHstR% zH|>%JLM?==fR`88XsEfPE&O~|RFgbLEN?KRMT~U+SFwrG`({3Nj|TI?Pm{fW1^+&q znm{IJ`9nh?Z7tpYCnK1JNEyhS0y}LvH;jcuHfKC9xCOkN=1dV?zAQA$E~z2ZT)0Xw zhehHf{JOB&zU#hC$654>szXz=D6A>_!RgH*tA;~U`>NefVA2V7`?;`-)^^YD?KZ{X zL)}~m2wPw6%NZ|!avUIRT;~PRTkb5)N-E}IUWOwO+Fu@2z}VMXH~nJH;%VSn_au@|7*_mTsCr75CtF_EEIIZ`55n z#VZMHDOLgv#iQw9S4rT1pB@ojPYX|~(M(g2^l%<%tKKY^`#tycxjOzqq@~X=PAD6B zz+a>jBxAsE5DB9W|+JKfr?3=gys zm_N6OYh+VqtmzV9zmg>mm=Fddk_B~7`jMlY#dH0e`@d9<*!8I`sogs-=q6Kf2`XI- zCZfilUfmlU`!iBa{UY(&$HUrtRgxUmr)=@r4mmhd;wdr*e@i4pw|yJKyN8wMTn1>R zwU4JZQ5jgSz96(+w_KeMXlfs>r2`SnhEd?i|XF3%a3@Qa(grsycTCu>gnN8;wd%8+iFJF{gNlm=hY4?;D|Ar0by zwN?9{0$`Q^CN2EUB+D>fsz$PBsD-qeq$83CmkcAM9*yZzzXtsi(RNJ8_X414v4JdM z0)1I7&ucFwd}E49iBrl}!)kJ8RD*qax)PK>02&K(e$p7_&wryao7MV{hn? z)IUMo@cR<^io}K#vJ!g$^VlMrzr@$1Gk>J=QLkBIO~ag8k^Ur%VvQ=IxQCx(*}I27 z;7n}Lv3akr7up8#+Vh|#+LX^6PM-V<;@!Urz4p3Qp=^cHRG*WUbaqswNeKKN7HlC} z(DjdBL?@$X8IXpq$OT6U$fZ4Z1A>-7SJ2mfNp5~1$BqMTZB~t#y2831#3eFo4oSE& z?XlgIp0gF7Wm{;`D6GHwQx%EXCN$!p*QoD%i_`OZSU4X4ikj+xMOdHVSEXnb1eTR_ zyJx<%;y@k-0&xqUz_R58o~({T$I4;}9&IY1M7yoeJB-aS?JMCAL7Gx@8g$!*_6Uh8 z@4n5qSL~#XO3x|6;~4_>0Nhg>K>_oKm`1W^8O$o$b-0WBo|K`kSMWXKpa;xsLcOK_ zp?5y2O60D}7?{pJiWKmT6O*-;5m|Q2?~wmReiro!^pq_-_OFh><)PU$kOX9zJ!D>I zi}sZWg`kcoISt#dzptVBCiS+t=wQL+2wf~ z^C72#@%fh~yL}2Ey9PDXzuB~{+7=EWaQPJ58s71A zojpbsS0%nyW^{DShkEylCONECZA^0 zoeyq!`>ggA%%eVub<=Kapu0vqmRq{YAhU1Cjg041zT_pC$UzEGj_0h&KcC&|Kl>De zBSeSi3S{J+iGt@CbWDSbZvd}%-IzVQM@BWPU8Lbn;x0p)K2ybCb1Mw{3{bCU=K=bs8?B@QJ;5l_r8-F(F+Y~>H_1Am1S zu+Zezf+LVOj{9ZCDXlD|Rm=PaY1dpmsWg;AHGmMwC?LlkNI-A|4lHaC9tuQ&4vJ|d z2s?CE>raeVL0tdDO^brT(|07W04bydP9)NV-~6#=YkoPyc|~kRxfuf$7d#IahSlfX zs`!EX)KOpyvf7z~qo3g{Lq%3iCo)ljpaMb{>c_xZl|v*MKEk5Od?`7%Jas6Treccr zUKdKB7C?ex5}4{I-~RrOD8jh`+YZ$z+nmSkn`27RY|1f^TqTRg51(Ss^(VpC;4Z0G zR!6wv1hK1Rvo$wZ5Z_?H{_@WB3}JDuSc-EDfJRYSjj40B9180~IH{T>=z70Wjrm6% z(+k0Cw5RZGt=MMfPu>#`+inJ$i=)S zkETl{5y&;&4D8x!Ptr*Y&dXIm;e(7Na)q3d+5Pz7r_ji+munx`{UaTzi+l9`%fS2C zOW_hr2Dh8bk{1m^XMn$Dyxmu@|% z+$hS%HOfP%+o?YD&fuiU?v`F%;9Nz_U8Omeomu*uwZH}~fi6PBgg&#=bQWE^?AL+M z&7Q}Js>K)fIxGa31+H5+>HXOB_3QuD^;~`aPFi?SBtWJiLESRgBBo+ihaf(!bLO`_y2#3K1&~oTe@_=}tn1tkx`D5jnKm~H`K?8_m zvQ{#}9WcazpNSb@raqf=#oDSsCIYDAuJw;45JQ|}eK7grj&@s^hCo7QFljH8%72~> zD8B>RcU5JId z_<+)zjEn^e)6%L`JgbXI$k%r9ws8IE2ppw4r4L+*foM3X0`jF5IIHXOcmqGqdxq6u zZ^P*K5Lw+=DhIsnK6cQ09HsB7BdJ<(3ShK*g}myYQmR(J#SI_lt87?MEiL6ToJpb+ z=xYnoleUEhHlq%6_YQ(Lt6|PjgyriMTiQq?1Rv-Kl-oAvH&@nFEp^J_y$IdwIMKXz^OF$N5r20P5}R?4eM+urpzWDV8b ziOa_)OZXT}SNmpWZv6TD0la#f{!C}Zoov;f%wLZY4DbV(uKLZ)XaxU|;WgQ8$>#T7 z$iNTif|*csf<&OEv_Xom3;GM3i2AFue|>jP{KMM!o_u1x)YS~zm#P0zOh$X2<4khi z>#eEMOw)b$Q?n+%ZY{OZba&g=SHb`Mw)>wCXb_3KKi{vhvr*Y6PY6*wVV z)deIRoe|6zr*ggcRNvCY>w)XXtUGFH?9S6Q?&XdPR3d3K278X^c4p3eLI&V)tX`d{ z!-=J~B_f>JiphmotShAXpgGDi3o0h7ecYP@3a>}K=W${3&(&=H_ak@UEKI^K;-`7O zQF*BH3Iy6^Q2>UhNVgJ%s;*5`#?l)+r-xy2(e(=kwmJsGDvE<)Fk3f574%E2DDMSg zcJ>8MDR}{*LC~Y?fn@z>OR`=10TZT9AXw0)z=%tMC?!8Y71EJF%B_siAyRrC#R9MP zRSCQBy@8=E@~#0STlS09HKs0O==wdtmli?a1@hRiw=?;AypLHFH431_=@+CEbZbw; zI+V%@`t)53hT9EwTJ;8|vaC&$22u5|W#L;OI-V~B1HN=p_wK^=rOlMnyudn9U}cM~ z3uG(o@Kq0vjnehx(?mErFV-;)BdKqkaolXnviS`<3H!1+=>W{~D%*1z4HXwao1Rls6^pKHr3> z8^DzAzu5o*Scw3UuE*5V2V$Pinxg^3s<#2d`kR1&6(3-L!hh5c7EpN{;K2%gZb$q}tEhXxGnWnSm zsrE4IZEBxH@Y7HAlpj&ezxrg#rr(^Tr#?)0LRTej-@US37$5KyOBnURP5|g90ia(D zfPVaSqP@!i`YB$e7cQR=ttzs6Kd;Rh+VH#>v4m0YQPA~+A0+O1@Y$A)wr=o-ZaaOz zlvtk4dPlT`9*l=zUVM*yf+h%kugzxgt)~1)Sc0!c{lL9NEROj@0GMxrxA>jx3&sbe zZN02@I*CO-tdHBkci=n5H_!^4w>)2kSI3W&Mqk7m2CbB^PA{e-u~Qf2W{^?LsamSn zWIs`Guwx?_C=GTyVE099;v9l>SToN5L)VuFLfN(d7a<8r5)&#R2}PN*hN8_7@B97z!?-`^y3XhNoa>x>IoCak zx;|C zATbq(*grFONd^|-)6;L(=_+a`SyQ$m%Bp*CoidC}I}qy?>X{TO7a)i5XA8LTT)i;w zT!_F2XRC$e7Hx$NHb7Sc++7M7eH*d&;Y(hixnsQAF*K1zi(R&lX>qrx? z@tm8R$T@qH+c3nS$9&p1@!6a2z^qL&pUM=R7(*t7hPo}s?>%j%c+MSlHOdGiarG(Y zKvZF&u_6Vi;B1*oie5!i(J0Dg^6+wk>SwV2j|$S6dvFdb91Y~o4ZVd)Jt3pbw?)N< zo}g%Secryl-R!o~^84UYja`LSdQ+~)_&qCn?q*;WQ45u9C@bcb1zK3X4NU{67GP`S zl5QPQeNE1CcRK6p)8Ds{&tIo;HYE3)QzpB7|0tVFvjI={U`p~UDOZvS zD;jbE)LQ`_Q6I|V=3}GxVQI~=(eb3VqaleLP?M&Cp{6RaN13fjK@IgGYzfRCH3bN< zX~s>MN6;(ss)eNt4+miH{73YkXkA(wz1;JR^hTh6s%PGl-p{3%dLQI|qRk0?4ScS6 zJ>MQG!+gQX{E60}1d;Nj78o)rbfJD-;q6MBn~m3A5_90P+5~g zUT4z}kJH5^970LHFC@$rxiEbcR-C_J|8A&y@`9qVw=j*b-8c780(tM}yfeKXrJSi4 z{S_r$vMa!6VqC|k=#B-B)7&`fRC>eD50`2?jLRkmgYPe)ECWh|&0bDijYi&>w^XpT zqj*R$?>v7s)f%MUY~4dK|Hi!XQ6gnt&HVwg>fz4U*S^?Vj#&EIX7^7cDd}S|HMXcW zDG!FJ5u<>AXvBwqNhQc)+y8pEqsE z=JZU|FHz#i%=d6Svm%h#)Uw++op6!OtYwVPNWa2z1y^plA@?o^&6gMCNYmh2>))Wf zitz^SUYRqtnZtO8nAtLReu}efkHs48U*rgQ9rqYppc022H?v@SFw|Hp$F^jaR|CoY z{PEJXnr~ot_v>3<(jk}tS$KBlrqQ|dAjcJg(XcK0R^pSZh$)FAXSG@_A5OnwnI!sK z8F{sexU*(8S!(n8m??QRaE&lf8>t(kKU!I;tq#p+lD1V_(#;jhck((|ZS}Ml$e<$4 z@U#aCAi3+QGcaNHI$wd(Fk7vgq2Fcvf|2EU=LZ)n1EM~7u;h?Be6uE9cJ?0g>^c=- zorM(0$j|RFe82}l$R${8d-q(WMSdmC;AxSjViU1s*9}LptC4DY0~3w425fmB@RXi* zL94TpLsyFnGeWi!N5PrTDa=QYZrQgaOF2_?1AyvNAUxc;0-1XfJ zmukEB+UQ8tN4GTw?1mt3cO67|I(B}v@v6ioc0CWaV1#pAuK4w;<^Hd)ChW;|`R&_3 zuQEiayfuut+#_@^v+G{u!x>?PENXw$_3QFsS=yTV8n4XshrgQK%d{=OB};>K_wWUPF!tvB^a{wIgb*PlPo zW!fSE^Pdb4m;e*G9Tqie-DX?Bx#sat%sc+(*B&NMm3>U^SO0?BpMmZ49X@_*>Njz2WT3&t7(v+jU5vbuX)D)Gd-j(_o@j>M^LS+_V z^TK{U@5M`5Qgtl^2rByHpo)R?Lt)5%;&&~Fjk&2Gb#|8QFCSUrJI(z@7?R&#`Z$`^ z`3wR4c!x+CLrfY)NT7*}BKb|__JIS=4N=8}-aN#s(NBKi@Z_CU*oVB1-i4oUy-iQu zQ?V4}l}$5Z-#dPT0JUtt|`i_q689KsWC;~ zUp*{nCd>Z1zUHlJ8zTRH-nL$|J?(3aY7I5B>fu)9pJgRGQG_|l3=T_O-V8BBe=1&4 zyIQTp*4Dygi-FQQZM3Ge(5oP)-@Ra+vrc5*kj~*-Qkaqz##X5rPHOg4kK7E}G0X|& z=SbgnGcp4>h~)}(#0SDzzQI?riPX>7_xtbYCC zy%nC69nST9dQHLT)m{K-*Ep6YoO9n#1#0p}neDKuf}W`F1r?t;g%z z{`3L`;F#;s|LTFe+qu8}3u-`FXt@WP((~_Yc(BsgpV0yVTQSf+-2QaWJpEw=f%K^L z;U^FjzUdRMoIEx?&}IVWmC4uae$$Y4w6X!G0vvhofemgYt|6tOVlTjoDb`)YYT&xA zMuWc%+8qgyox99EeF}lvTN49E1}NHx4ZOZDRrcH zT5^n5QTFs@#gtB1d_eJ{Rqw3$Ag3|IowYaA0|>bU+*Qt&qB>a8rj>z{xjXZkW?T=h=u1 zTZAIA@j~lmX#d9p<-i=FoA3}6b$5|%Nb?L^H+V5>3w|9Ag6mEx!q_IQyfJ6_#j9Og z^uM8$yP-FLrXx_cMdZMi#g@mA5cJ&Hk6Uth*GN|nc|UD;mGVAtX&ReT`zF2@ zf!<1cDgVm=akre5$E;@SR(=GRf6cEa3A44c)erA{lSo-K(|b+jryKmlT$k?7#o=&m zwc1%ZK1ek?53Bv!S=Q&Z#?b!_>z>ad|CBNvo*FzUmu~qDjTNN#1SW)IlI?->Rs6_?7#_poN zTB)uyClb)gBDPMfS57Cg=xuFTTi!p-u6vU%%6n1yU|n}zt0DFrHR@s;W&3@uPiMsU z=FUu3;gF9cQ(M_Bne}TVuh>g1d5QE>`YTF7NCK*EtGv#rXsEMg%$0nadX`}&^=C+z z2S+AlC!Mgyb5}dBfX-m#LPBDyuyf%a*-ydK!cwwk5+nWr0B*x5W_L+hcK+;rx>L-+ zaY6qht2dvhfzMKeZodFNx@HZMIx)bB5&mL4yIs-+klp($V(W0G>F*lBg=hHbF5br) zOy6K&gcow8F5-&pc5VoP6#}!)lp+Jf7=~d_OD~oUXONU$ytK}$Mfn28uT04{lAJ)z z(DeL<5LM6gHK2m}MK~p9%-&SNwdXW?hcn)+3a1b4eu5+mz?sf!Q{haXivsnuFf0Cv zEG3u?|EM5dB02EPvL{@Qf?)dmF@V8yPOxPvYod+Ax%-Xo@Lxj%H7JdXL5}9SY|B)| znBLe?DuRlGW%vDXcTqjIWkNgZ^iJP5_gVu|g04=bR?5zd_8{ZW>f4IOKJXlDOW&B; z%Mj>}e@^!IGdEd5gT`0Hc7Cm*-oiGbbc@Rinl-MVEQ(Uy<-YI`oEK7hoIsFm64HooK1i z^j~WjOhoo?5{bYG+1sDP0%C2<1RFFQ1$Q} zG;CLI1w1e|wl4XUogwCmOHQuLmFvi*W{N!z*+d<}eAt@Sq}0Ej&xZ9_Nw_~V-Yr5J z?+UWfaukJ(KwDQ7*xbq$k{n{T9s~~?s(#m)`aYy|PqD{=OtHrJ277|cA;-vC>YihV z*EcVfxw%TIqMHfdOEB<_C>s6MLxHCqEtf(yg8bxu&j!EoQ*n^tvwX?>O9zz&9a}bx zLh3lLqHhT#Fuz44n#PK^8{870J(RG92 z7R;gM;cVM=|MP~;tB#HPGzQF{Z}TdfY!zKh>-|EV_Jjg>6Jq>cszBOpe}~3gvDx2q z!ky1l+N@eNzna`kdlJT(X71k){_nP#Z?p$kHgD&cBz4`SIk>m^z25$2R&AJ2R(`3M z7tb$!Po8xTZSzp*`K+%?%`3#DGmAH^{CKQqqj@s<+$UdT4og^PQ;J z+k_vh0_R7l3s>XdCbTkG1Iqh{ObvVpp%@vTYP8-}LYc7wyOt%!T?y=fhEmBg+rGnY^;`62f@Bri?WL1~U+qx)In^ZQD3 zvf(|?7|(okJKP1|U!y$?uK!G(>j6BrK?pmV$@`Xt1<4G*`iZIM>xef=q9Uo1@ZFzo zJ96jy5O8O*-mx%Y@vy*PJlzc#7I`N8E0SNqd}q%P_tzmwyHvzy(-(XPD;Wn*#pei`2F0NiCN6V7eLR4 zLO>S9anL->^QgG9Z?cax-RH61N!yL$3k+27EoDy8GBen@a4_5MZ{BPq?IyB_&Dc3E3vCL3{R`YSu=&~F2sv4!1OV&gE&_ew&b!;uy@XQCy#XdIA-A0vTvTl*LGg_!l_D6ljjFk)96?}-_H zsAw!Km_>a9%VVefF?bkXA+r0GKuj5vDK|_i< z-|zvW%d+s^0cCjXQlj{Xrcho2>ee<(Nkecf0&Tsv#kNKp$q6~x zdT4pDlk$!pdTm*AY^LsC$UNNVtufnKzh3R^^}>m4H*1kteuI33|w3&3_-+`nx!+;t~yRdZ~9 z7WL`iC?R|Z#o5+z%|@#)C1C0}r)*Ecjh$n;SEo_+aN($uBe}v+UKsVVmgOK%`E1Qw6#au&A;>IPtAX6-ilu=|Iy}ezCXxl_4M|J z0XiwKgaj6p&AKNKtv3@p*sO5_zMdGk;fg_8jwoJu;`SLLAzbsE?wa@MlxLWEqMOt; z67Cxh-9vZ3*nUspdffJ*#P)`c{LdQMnU)w(Io;k96#EP!TYcf>fV?+qz16Mtief@X zS*Pz2i1$LVFCa2bKwH{$=6_)l3E4%zkH7$LafK~P_=qnqYhDJZvP!_7#b=mY#&;Je zC16KOgyN;*oDyh7z|QPIE7?wCSwv@e77G;|)p&i&f^8fb`=7qz|LQA{_kVcAoODGj z57sfaLVmT z9DI7D6K#xUKInQFZ|@xI8`aZjS$B)rybhLIG7u}E`6F*r(7|Ko z*BN43+hZnd`sEj^9Bg=l%o-%Kc)tnS{G*|l85%TnwTngELAA!DrcnE{u1Lw{#sVd- zfy+%yC6|HF6T!vskmTse zlekl?EE3~hurp5(OhkiM`j4BDlsN2Ml?savHp{h51Uq|Hp^EZKlI)Z6Os%OyJ$QpO2B4WPb*{d*=HV=~!C$qWM|DU`ZFK zylN%t{_LeRxEV!g6j7E;8al;a?@LAZo~w`KcOeo*&~FZX#`OE|V6I9P@CywLzia6X z_%-YrZ0eWv^{wBL)}T?;b0zr%jVLqPqJom|@hmL`)7Sn>iL2EG*+K(ZY}Iob?hbbb zoVH?v*A!$;mxbq351580mm zZ~Xv649>!q_pwO0861-FqP_8-L1q<{?DWrRcsbnZ$SN-=xtzfAvS4ic z;K1{q(hZ~9e^5KyFRrd-X3r}va@maVG$Zq(p#DE{fy`_rOKh}%RpX<>oxuQ4T}_S; zXEgtg>+GPorZ&>`Y>V0H;apu2`;Qi3@pR_@7*bs`*ve#K;lRaw+p2#0Lc@Z-i1ZSN%OC(IkaC16k;zgMw2l?{c?aw~q%x-)&Q(J?Ru{f%{q#>&G7748`pGo`Rr(zUB&Z`VUT5$9+gLijP`N?nvD?b8 z`d1MQM#OGSp4R@ejC%j<9TBE!R;O<5pcKtQVO=Ow_6hNKW?hIb|2?YA)BXh!HMQLP z8S!B1Y4kq=n=qgC(XdvD9=mKT_DJ)lcCGr~nw@J`S^dReTsI_V?XZ(08SF@B{13q% zYL@t`L^Bu{)v4={@m%Dey7Tu8CNt)Nc78!jEhj%jIyw|S`xm22(V3%SM}#ydmWzP>)gc4G z#BqYEg1CXj0-DV{WDd=&MZ%_7C_WcGLwOlz12gp^HcRLYkk9L=qTC^8&CjY+F~a|Y zo?SCx>as%4m9m6Tt9gZ|Kvvl-y z^c{X?((HEu8+Axo8zwoVV zK**(yn41vrX?j)^FbqM^R3P8V&TZUIa4%aNZn=S7(v|)n(DWF@+{hjnD5Z>8TLXr` z<75beRH?~kfFZc-1U7a;{trld3^F>gm@jZ1^9kMNbjfq1Uy}Q=apUPFolCDDkK3&n z21A7(4NeY47aDM6mrVN0ma$s` zDjC`MQ361-xro6bZ3$qw;|3tt#MmFX%F^9Puz*}GNMnWMmbuO-@qZ>4-8fuD+ymNE zFfgl?0wp{PUz-7ZSDpBFRNXxD$9D%!p*c`HO~(^8u}jgFNI=bv)ge#eyhmHfv-vCm-?S ze3w%PE^Yk43FArJ{M|z985T#Zv+I%BaoU!0^x2yV7_63<)pO0fP-vFuRTZb2DDrD= zQ<%D`<dGkFSyU za!OhxwlQ}x<(45|HK1x;Ie>k+z=mPWd9x~(S+QwKh$E?4NKRpwXZI)5Pna!BaiIW0 z*wOYFt64Z@|3|=2{gI!3PQ8`k1xXVr(pu5%&3lF8*}y(r;pu*1b*j}{SY`#s8jxC) zR{@T+O~SxJs;kDZg!KvX;Ds8M8CzgMy7bwJfQ_tmFCdEwo~w=6#?=`9pgmj|JZ3|k z)6Zk@Pn=Lf*U#B2H0pXCcV$S6b&cUMZ|VW4*HXS82n+dlSbTY(EPb4WcguDiuBVa} z(Dv<(_y!g^kSkKH+`=-+J8rV8sJr2M-5e1!PMczi$T75!6|-rD(9hds=dB#xMjxnD zT6rVjXD-YJ`GdK!v;ZAhjmITAgTi;J%Ec`esOM?=w+O7M5xyKc?FZ44Q zjf$)2k-vj@VPL>7M#0b;zVS8AI#4s!ROyYNgO|5RJTMkkaDL#IzK_jd9cVnsQQArJ zovM`$L5+;ds+=K9q=e7tmakUXq}(@fC}XXC9WMc`X-)MG;)zMGxqD)D)9Kji8G=~O z&|SGLQ@pCIbWi%x@)R}XTUkQcwJe@tr|b_D8ATtr+nVgJOFvrp3(4TQ;GF&VYzEkU z8$u?ftJSDTQ%b%yXPur=0s8_@!1a1sxxxtR53_}v=$Nh%)nb68B+g`H0-S z|3@c|@ucSRUe<`pr8Awp!8%`m_Md%o#Y(SoTv8wFMk%@6edpOO#(HjXt6~kLV?uKa zSQ$IHqUeZaYWUIbRNCH$4sPAzV}pL52*e%;gkpPpnm>i4bAjS(;6oUlAJdyPK79@ys=GqfOta55LZLgt)?)%>qw(Owu0iH^g)rwK*)alMu@*?CiNl7TVh@&cyZRIl29+9O zLzKo2$i9lDX$cJ~)v!`&QTGLk*)KnGqDBy?uE5?R&2v(G#CA%U)7W6cg9z;%YG1KI zrTgl6Rk7>Kx$R`)i^lxkfl)tf&z*O%;d&`FA;>CTSW?M#uxzomw>!Dn0k(5`Y9jBQ zps@O$!`N0oBYU^kBBXPkV1?f|iAzt|uS%g22ko9=xUxGV58Ucc2=cg?+dT-C*zK*F zrxBMVBNs0T35%xQZ9T^(qD4JRD{jB$JI3U?` zfpt?jBF6&8CibWK{bYh&8s~#t$`bCUj#hC&^S&Xhn~cx6@Ds3q`EHuHV6cq_cHDr2Q?_j12ac}-%9NC<~D#{*e+4QY`6fD%aLJX z4nv@0X{V`wNp5?K9S6J9+6fh;cF9opyEiXO~g zy0RN_$87ocT8Xazfsy|aFisxFuS3)bSI}-_RmLtHr4waaeUlqbqo1wjInH97?4T>W zr;=vbL3h4y^Enx{12A8rI?bcYE;ww8f7IQg*4L$Q5XnJ$YAH&3YOTI+;=B*y;`bUW zqgB6xT>E6NR#a0;(NESV*gp#-wiLp8L#n@xaN%=qUafEjAb>z+D37-yoVk`0jhLTGZ znlLXE+p=gF+X7^}m(lc$cWe}t_WQi!s#M3A6JJWW6CX71J^c^=5JqRq@om-E=@Ke2 z+(b#V_FM@tW#v8y$!jl^IN`LN0_L+eM@!e<$@6c%`zy4q(N?PLC$e^oU)p7!C<@a5 zC+16Itx;J=z~P+pMzgJB!6_{ZF>i%GL5p{aWfThqk;sL(gh8Ay4cT*1o5Yq2J;_fv?MBxPXSalk@P^p`VPWcWK3CKIi@T$mc<0_=tK_!FojY z?a!FTq8bBK$6WsXc#7Sn%A%a&$=s`~VwI{#El#7-Zjz%!Dve*fBz1Prrg5P{3X6WP zNu<~{72zons#FcDt%OqSwtg^qOuN?S0hzSLtf|oivQDJ0WXueo(ow!hie{M*O!#$L zta5-H)l-^2D)N7r8%v_L3c|m22sUu02lD0AG~7?Tw5Q4ivWul$;^wPNQg z4OTFIkSAjymHj&mU~Toi!v}E<5MZPchk;0li@M?$ktygD=cynEKZY_Kyu2ltz!{A+ z6$GySeqtAAZJbyGP#76G=DV?mTZuATn#DWbW8=>%sPG9oGG2)~e2`x9gZdswA`DU) z|Gf)D)kS+S-h=((x)4q`xe(q0Dv+#L-x7iJB%Nm0tY^JJF0lrqtzcXut@wJ1qT=0X zD)p|vFS_Ua(zzV2T@SR#ZVYQB?Y;oX)qNZ5M4<^Vt1BBZgsvi=e1Gbz>jEy;HNY`m z=h@#KV+sC0?(2oN4BB!o__|^#O5ceGv+Z%*e7M)QWP}A&Y5Q0x{~f*E;ju^SPqg zipyh-q=WvOw~}IR>IVUE&R_8LOiJMY@>qH2gMxOjl&Vieo>yP6ut0mI^Ohlw$eZvG zbr9u;S0UPn@@VG7G5dkNom052&6>p&c8<;Qkb=nULPT%!PMRh=UAsst!VT^+`m6{d z@e+MN*cQ^6T-IOeGDVUiHX-vOWzGd+6Tg= zmTisVqR$(|jkdpu8cxp|6sMAH*>8~0uL{hX_njw@;8#2uPWy8j-Y>LJmc* zDr2t;|4bZdYnJ_zQx2)Ndi#gWw)hndXK1@!Llz_V*5i&9KEon(#M;N$6E;`GHZ9-y zur3Tyi(yvXYzf}6k36+3OtVY%x6HSuT5@552^7wGortx?UnBfmR|N+908w~kI?4#K z0N^0qQB7@YS<%TpXyF)(DSh|(sff9w_9Vlt-=Nssvwro6g%#eLa{|V{7#U|BRBSA& z`w;P&A$_)c0`J6(VKJb*IOpbGgB!Mr&aV|LjX4H>q!8(R-jU`7|I(2{I1#P^ zql??`8q(*7Ea(1MUA_Gyp2C?k!(Ud6y%SNB7#q^oO5H^(X1H*#_z_oG{Bb{|Vu+s& z+H*b&zOe#ZS4N}hwL6dd@rYILGT^b5-jY^eaz1a_PRYN}bhP?B?#Nik4Jo;fPe?g0 zMh>3$V%+L=`0n4@lW6Sg->M)a0DdB|6`EjteFm9G=?wHApF$?q0TMGRiRHstymuw& zzGj!A-P*?pSD=1k7_mQ}y>M7+TDem|ndu+qrfADkHfQ#G?l1zUHawW};Z=hjIC(SK zKi=G^^l1D#ht-@C7U#t5!44u@pa#O(A1IrRl7UsV9J~i)*c|2#4>2B}HQk33 z#zwa1!ZuO^@s_lYu5$lK;0MQ7i@dauGBcQk({5|82GfjNK8#A62!rjJGK4-bh7XH`h59$qjRK2BGM}*x7NM15qa(4f&4z3jiW_OSH?>!rU$h%R+PpP) z%P?~)4KV&F7?xJ+5<_ndtgdVxL?>wfoIc3 z%EFPrIeoJHjduj@vZDgO4B7UY_C4&L<5R`4x$@C4;8GeJcDuH$s1i2(;C8An?u%20 zFYm`CA#9kIdWw+0xm4V5kP~Eh9F~ng!Le_jGU04qD(wQy>esb@3%?71iCo2seHch} zXC39K7h@}Li=}S8kSa5T;vY>@!)nm z1@4P=hp(Vbv(V~n7I5iomHn2bzMO2dC;jzlv0~M)F!9V_r9$iMsj*Rj+e9_u@%};f3O+GQ~nd~ zyz@B?SU)wuuAzz^~4k)HXIw%eTvWMU~#IwV*$ zNVjL+0<%&%5V-!nx2a%ixxcR^YxV%=@<}Pl9dSR|pp-Vo_!Z;ZsK@}#_ceA6;IZrD zQRf_CUl$`*rDa)q$ohbw%W zg#}L_QT#*M4waiutSsv}*Pd+EhW zjWi0m)jC2KzaP+THeNjSvBGp0BeLr$@${V#P}gy5{{cP$m#LsX^ddsGaF2bQ*(&_+ zh9KwvG`zV#R$!y*2Ie(OiIJ^l+h<{LOAM(f2OB&U)f;P+5n2oPs!*vYcA)La3%eU= zZnrhuv4ie*@&bjdT zFLp@$5ER>{MyH?#27=k=n9S}HaT`d`arD~|&Fc#3-k#2zeHeJ+b`14zw`kBL)>6%} z04VuS61Q&4S{r@?)$+upHpK>jYQt}$*mag#U0RFc_V59F z5eh3nu|@=clZz~>C2}tUBC$y=ws|jZ7^wERs}r=BC5x*5bJ)NAKaHD##wABbWj7Zm zbj1sRA`m^)txcA_YNI&=6mV&>J;Jy7`?$E|DNtO3yD!MLx$;3Aj%-bF064TV8Uh?T z{&3*L{-?Lly#N<}!OeSU*Ex(ztoFe8$6$p;fL#!Oj7tnvBoA;6pXPzh6Br!^-Cg4z z1=L-u^X!1PHinDie#~H?Bhx_;qL}0#lOUHY0~yp-$-qr?&c<@-&gHKzFN)0Hd%7&n zAdCH(_PXb_LtM~Y;dwAXY*_ukciby>9Ke<9umYD}>Ms5XW_5r^Jm*TIjP zeS@r|W&Nvh-AQ8>vX_?~Fo(CPR-CkrTIIpRdd@uPMcDm@Y z8!MtF0@##a7`c2@7*c~Qg}e`mq~4NyiXOQqxAf3xLF5sh4+P9^&q=MZV@rJUPwX^t zM!~@0n&4KuTeHzI{AbwN8t-~om{C`4k%0J4u!uLdcNZsZgM zEku1mRnSVsc}5;FMZ!|D|80j`xdwaqg9+d6kDA?v_qyn#T8I9S_1W|Jfn9n(cV_#7 z&X3)Gk##zqgPE+=qYkBAlSpO!A<*Yu^yLj z|NlnroFJ+=0I6F3+RcaiA?8KKCbyXd!@kG@6jl@7$3ppgIWN2zW8$uaBH zJ<$=vlWwMomo^XL_EyQ}L>7=^gjswkc4&1vTr#r}n9waQEg@PKqICgW8NqG&=A&~2 zh8dpXwj#CaV0YGum!xR?`{FiV`ZYtE)urPxtOPT-I9Oc+cnLNY!7ao3rYZLXWKT%X zM7U zxu$cl@JBsQ7o{d+BKZcOc!*1fgZ<{ZmrG>giGCY$9C6#A#)0x3#f?3E#=WI~G8qB? zVFKH+_n!N2nk~m*!px@bUsm-*?isUum_Y&Th()XnN`i>D&?2g7qus#q@&fUdz(UFt z>fbEkOx)OMxkosNPpP9W{4#1eG9unD=E_thoFvD-;w-BneOB&0dsLbETh?d8o|gWF zgHbkc^>Dab?Q}R@j_2_GUQ4Q8W@)P%prIMV#Er+ju8%n9E=TF{wX_ss108|;V+X}3 zpWznrg8B>5z-h*5C{>iUfOvJbi3SOYzif(m4YN-v#Ou3!yVqL=0eUJ1dipe+7`qQ0 zTt!$ES;S?qReW`4>8(%bH`ecCoDTV#Fb8J`4b>j^#%dRmUw8O(+j)o**}%`POHp8w zTJCfZ|33~r$A4SoCYWdy#!xhhyE2^?N%fb`?4eELujgWtZUb^L?{kaHtVimB^956p z<#>E9MmG-AudquWblHUXau^9VP3N!UVv_p1Y0`mfG-nIc{NSOA9&V3{E<<|wem7q> zHj(pumr#u4e;PXdJP?LrK9cF*)Z`l4md`Vy4F+_u26Rx&3km1Vxzp0G?x3mGzomC^ zsF9No6h@)pun|D^-Ec^_MO*0m19-%fKjfUg9|$=WkhJ8P#~5a>w)_x(^_S=^^5dzM zd3Q8FsOz{!{`0VQ($Qh#p(yD2S8SZXnR_GewNtzy7gj-6{X1`dhV8!(XUhSHGZD*U zguG#6D0QF{Qy^ug}B<| z!o>xXap2r9_fF_GtyhK^<*kwOomb74ahitPA0&s8Yf_xhClUnZ_1}y)2c{o4%xOdY z|8R~rf4+OC`S4_OzQvSX_4r=o*)QJ}J$mO(gpb#RHGZ8Kcj3-iuTD~B%|0kr(~K_& zJJz{;(kATpx^Ms6Q@?xR@%UW`5`vlCQxem zz9*6zvjj${4}755A1ucVmluar{WmspjQtwkmM8Dw zdVDehoxli0Iq-(Zk8L5Krnn`P)_-Fw-;c0x(}9@t$qMcoGQh~ZQ_726_~9JnkWHG8 z>=I$hO4;0m1JB^ahqONAzeGw5CmG!Zi6bdufH7R}0eToxKz3aI{lJRWek2w4j>&RY zO~_eF_GBP>fecB^5;M&Kf|6h63ly7Os50O6I?iq&upA&TA1$+9-J`$;#WMHZp6==j zxk&k*m=6NxHCenT=2`G10T-b2KNAWVhvg-3h#s!);)6k8Ah;dGVvTmc%ARQU$F<0b zYc0*bNzb7*%HtUl)o!kjnK$bq=K ziL2SfG@$w1OsVz@x$ne`iRocIIZ!x)qwuns5_%6CiQD z=;{RR;rVr735XgtuLhpz?OSXmYSza7?wK?x!3Gw?FCI={yLLr*ffojRc7f$Z&O&HX zRqNg%AE<;!4|@@CqPrh+uyKU${*8`H?6~c-4S0z?X|YjXrC(SH0qkiT;u^#zIxev3 zfb)L0aqg$_)T3n}kgtO+wxV&XXF87?1=geMD&Ujbg`!TmIWa%{R!Pm9*|3nBBB+6^m z6h)MY$++M)>wyQ{v|{rqv~k%jJbS@$l=9$;xo_w(WoUcLobe14PIUDz*nkbEp3B(M zMUDNyqQh9Z7DnoJJy4^^i!EMmxXEqFxD{6+WyEV#p{}g2OxbN&l6J;~i|O7oP0gc| zi&n*R5hp5>OkF2}29H|21AXtfO3vezo6_W_X29Z-_ZtH?;etqJ_6b0AFe_7vNJ>*k zx?#M-x9g+@1;?xNc2pG?k>XF;m!##i%muPeda@ku7uH6`wL^yP>W2OD`e@==kFOa5 zQtw~9-&DnofUc-Sj&1wQ8HYd3WVZ#bUy8&8C`?6|1Qa!QP(URqcM&>CS(~gNfCTUO zZu!==)Uh)K`uZ%?OsTvuG*I9fIs)mwo&8Zm_9}cI#bSM?Kr?=4VcRpn=X~$?atKg; z+q?oc2~(BKOpFqDMF&`Z9F|kWU?~0%2XElkHyOGurH4bnrXtLMDF5i+J3n9;Kb6Xx zH0GX9WG#4_AM@(UPk?|I&ZwM2Vl)j@3Uq?DYaBf2cpLr$H+J1%{CWJCJw`OH@$P|h zG%IVIPAPM{N!0SSFr5;fxnS%$o@8@KHIcrgJ|`-6&S^3SNr;2PL@n$Es%o}MB>dvs ztP%%ESta&z(>G}y$dH9xF$Jk*cQBk8HNqL72tH>|`xW(~$)dfH1C!k;j%W#v?GndB zX=AQbeXa8t8Z}>gHSk@nEpp5-Vl`(#^VB?Twc8TZ`mpNaPJEWl(vRPMrKx7R>I>BN z1*!uo6e(c%H-pdgjOCN1 zJ6RzHby?O!4-6O`^adL9J3-5)9ek21lKuP5Ev2iCNA}AXK_Aqx8;w|_y_KN%F*nsY z)B!g<74&<+eo(MZ20)U%*%^U(qRvz7v(WrGD|<4uu$<=2qjvRsEIUT!EidOrY24zq zgzW|5g2_a=y@XSdp$03aAo-E^6u+-79dReM*G!QAr2OeY#YSGLCirDOPAIyt3GmT- zlh zO)3vkKkME2IHeCDGr`gbO*7Q@%a(i7Ki?g<0lXi1mEUgP_{O(p5AZ9IB!>`bDqx@h#XJamYF3hzx~`lgw)oi{yFI>uHfg8 zZs){}kI|PdGG6RB@)1~OTD`VZ$%(Xaf>HSNBg+m~?}VYbhkIy#hPj2i9kuzO@Wib8 z0&iFH7Zr#UEJS5b?&krr{DU`<=Tm?oMtx^}1edMlKbOzz5Y(*K|D_9re11t8>KHSj zjMu?SRBV*$#<=%=I<0c6C#rZnwd|T&9kGtM$&*dhPnyGgukxIsGyMQ4jPXqRzJvnJ za#JLi+^N|2oaLV}{>@a*-4v%>PF*{4B1V!HMd5Nglh-+CPU$X|R)<1Pgu7ccveX%5U~_A(`moI(0jU#t5TVm|YTGSOG}dq;V{% z%@PfSUbKnWLY!CCR!yfOn4u#0^G)j({Kvdh+&a_ND%RWprv;^!DqSv2c{Uma`djsu z0%a;3L_HhbS9~s65JJ&GO%g*Q*nvJ`|8$5xQJ=UMHqf_J&0%rmYPjo52_USm`(MH? z4zUOj6$FR^N6ogEtBD!j3iJ6|fO1ZS%U>vQ8RK3%oS7RpJcwK##B;IiLsH+wd=KJu zT!jxOUw`h(yEhQPj%Jt)?Tfk`&PY`{T_Z{yy=s@@|55zgx*EprppgcJs}W|5hBa8 zAj>B^n6|Lh@2i`K9NHP68NW^y@~Jdlk1I&I`hOlN7Ou+W!VsHa@Q3<@PS@l)J7hlh znl!G5KP~wIXsxu3<@)mjMSEt}Hxk5CN=Q8`wFRZ&M8k%|?ituJ*3J$UNpTM7>Ww61 zhlJ8e^UL3<+7sk=zU*Pi{gnC~&kn+JRj}y{>!6vCVn}Pu0RQ6XaO-!b-AuUKv|39G zi)d=z4XGQnSSZ>-#){RAkG2l0=M8It?`_`BfbH|s=qB06h4C3vdRmN6k15G^tSl0v z!EKPnu-2mly6TsCHvwDRjxL7YekT_PDG}u_RyzvUT9af;vjo%9VQY*(+TXu+==oXi z6I3Y!`?o_ajB^_2CZpb8b**jwiYg3iH}>e)pn!U^)za%dlpj2EUIS*oN{b^q*^K`Mru_2YBzjA~>H>J+)N_ z<>@)q#2-$;Fa4jhxtzPEh0!|vJDB6@xyaU80F@80nf~!7^JK5yVyu0sUST{G#{E?H z+AyQuIW8%|W3V-Lc_C-_*1%fdy(7W;L9Xg$7w#=;zku%js@eDN>8ReK9N!nx zIa|h$kKTsQHfDagFGNT@B}nHBmkb$t?r70bKsLW#-zQN*N|XH0?VgYQ@YVfs^4q!I zS)|mdNy$f~7Bxpz8nQVT@iGcVcU>>=KMa0#zZg5x-Wl~|NCodV@4bhxmGX7|6#Dh^ zKaAV_a%1XNa{q+q3#5DX@KpwX^sQhbe8SOv_|LUrai(1@HsRWI8M7fgUBVuFavvCZ z;Gy3ZCy10HJn3h~cu%QgDQ^!DTu*Qsv#E0Ip)#>PGP+H8I_dIM^^CT3jUL!w8T0q6ZZveR7OJgCUxzaXW}fT^qD>Z^V#1g0D`N`dtb_R$qxGh(W_5% z1p9kpg8B8ON5)FDI_|IjgI2 zA9XVSk^kIu+Q!B7nb9LRV4W|&X6aaw&V2^?5$-E-xyKo+u-N}vnECaM?<%L~7YkjN zEk&QaNehgls(IbpS!qNle?iDbWu12XXH!D=oOiwutq)K5Ydo2ApPMaKY%&z+GRopJ z6>Pu-37Amtd;{*cByrDOz5mxd_ME>v>;Z5_gs)dD-o0e$#rarY`uWV6{WYTX+b7+<3;9ZXb3Allr>zQ;nuN;3FX3&vWu|DE7kI2t znq!GoBvuPum2KA_Y^`u|Uv$Is465>3bK}{#>Lpc$&(c(0QauTdj=yxUx@^K@PIOylPH$7@8R76IO9%BCpGynPl`mlH*(W_~k#Qd>@x zMqJ3&6rLGPkMy%7`;S>VubzYKB=2<3A)Pp;;2fo!QFUvTnkO)rHf??+-5}qkWRU$8 z3+lr9!baxS>+N@Lrsj*}C8Y!QP-hM6BPk5};muUcC)7Fd7+&SqX4GAgCfGU?&i(#x2pB&v@-M@h^6#D48PLHskP- zFIAOpK%1gXyV(X!t$P!nbC>|7WR0{m8CKk3B%FwBySlLld)b|z}O_IM4D>2+@4 zezhH&Cxydo>oG)=W`jqz*nAP31gZA?`wt~VPv^`a^CSCz^#JW3Jus=XUaEqBtL|M6 zFkwMlct5avXm!}Kk-ZYVc;buGCD7wveL~fcfxdc@xB9=&_(7VJhFnn5lF(FH6N6WX zkgmtSor$GF3I#ZwV zI?y)nj%#?xfo7`gX>ge!;_PyzudUe80GmT%wD)gncHa8#4pd%ixT?z-WMpGUN2k;C zc&Rj-0@6$AI##z4DPCDJk7O-L%zz|fPpTE&MT$#j4tYwGs@|@=P4eDu>J^36XheE?4#92Fy^Y~L>b<-+Yh-H`|1s+Dyh2^kJvL?RIj_%SQojy zuFi(Lgho#MwVmd-s}-B37N3`$YpQ&L9#?QRcf$=NP4iK}nU|5N1h>rY$U|TmxjyqP z4&8{u<_Ew>^=Y&;X##C80#GIDlI&|XKxxZyT#*QPRk4WU=^I0rxa(fieOnKCjwW`g ztTv9j{Z{X?8A9Cmv{7p$c&(g*%i&%0+=cw%JMQkP1|+wDggUU-+?Sc)dsnkODg$aP3BL-&en9 ztn^Ai>~P2;V|T86-3ud~bHR%<&C%NaV8d;QwbZkH)`w_qN>ysY)~=sM#$)lRE^bqX z>%R4j#Fl+jG?a-1Z4X68xC?*B;}JhvG~x&ri%~)LI^oG3{3luw83pT_WitZ!F2_c8~{QfM&B^a z3E&Ey`x%C`NwUgEfN}P5lQQS?@qFM-1-`+O8Mq3iK%Y+x6s@Ul7o2U!( zc%u4C;>)YN8e!NL=& zN5coHKN!nn*zQewXU`S5+oGQQLVO!ooR(_7bam z=wI5%m&^ac92forn?1)`;JaDi2Zxz6`x4tR2T!u$!F}_l=J)*+I1y8A?<=-bcv`L< z{%emCB7`GK-kr2G5SDG1T(Bz^%t5165>dJZ^!jFZp5C6i1 z|1S*sUziXCHt>&Zd&l65_y+DDiZ8C7gW8p^lbEiYG=Dz7rhnlGb-7nT4xego;M5N| zD>3uB7_mEY61X4pp?7SLTb934s>8KI{^nO!b7>UyMfCX&qg}|0K3tfu$M@%|;J+bc zMytyb7lt@7wb;36w36nZ3_9E;&yQzMf?cT%D$&VP__{}+iBWW0VnwoI{}nQ4w_7H-76%D7ef!D~51aGO!$Zu^bOWYfFn34&4B zJbpBamuZi?4C{LEM@Nz|R=Y;fG5=HqOVG%xR|kZ7s`Qixmm?gB@G(6WB-hd1goCd)AGiiF}+;;GP^+gKv~423oHSHJ#@^VK|T z{9k&r;{QXRMIi*CM;qC3YKw2{XwFoLC}4PVbSL15`*OM(JamM9)~1$tI~T?u9aDbg z>oP<;oA+|Lk zh=iYBQiM0K&sKlAHIN%<6Ip?#tPmJTbW<+zv^x{t9y~#Ijlf@3Up1Z^awFLOS4ypRmY>W`#JJ4SyP%QTU>m4{~_%B z!~5V1A@TfHBw+7;XyUH=}G6O#zjhih=HirNnrb3oQn*K4X&aDtz-u|rH~^{ z#IAi{92nFIv^rpxb^ zg(UlW%qcRjbiF(h`|%ecq41(Dv>J*z6wGJ1KxjyZ2{jzJ>0)R^3eaFI!4v9qj0lc? z%U&nJE1Tb&bxX4X(p#r*_zJ;uzS`S^$H0O&)LvobWqV|NW9WyYc4lI--K*!X(0IGx z2QEF0#a*KjtKN(UQE^u{G2iF3t~!qjNdp2?DpMEbIs=#FjI)HG1r|p=Q;9#itq8QY z%)BhsxyIElsAuZ)mxSC@=*HZLKqr6Ws}BOr`Wq2VlS{4%9$dj6u>A_T zjwYIG{ZO@2oDY zF~U68u}4fjAD^cJ@Y93M93rmyTjrf<)d-!rAm52RQcV;9w=2QXmQSvn?2F4qAEO5` z`1T;~7I9J36VfU1i^ZB9jW$i;1lOTtgtwRZn&3&k{G$9g(ci=6Ql5nl4dD9NGdpJb zvn#751NGYmEcEo%j;B|5Jpp&Ub^ex+yK~*RJCRbWx$5(}1O*AC3xW2v8IIL*vX4LA z{qJ6`Uatq9u>PVEty*2`Qj;f5O{%}BN+9WcRaaVaC?Wgule^_C^NwY?%L95-)GHMI z;!7Bla!7sf`Ql$os2PctwnW+cJKO_Z53%2UeTOc2CHw`cK#v+lo5Gh>h#fFgsYxKU znxUN*H@~Flk-kFpjB#$7K}Lcg&5^${r9`<66jt80Mq+!6CBNA>>0$UnZLS$U#-t1M zgxq83CEVMI^yoPlNjyP{e0ucy=A5FgqIWz!^gexB?e=s-Kl|uToaYyp-;3ty{A*Y& z{GQD@dKLSiUGPoit&5e7e(TiW-ETP(%jAxyb^*UYME!S(vg?GijLlDVlXI^*X9Nc9 zOA=7B$U+U4>`U@5b!)Z0(@b+dNv2Px?D}VV)50+0Q0!2s^J*}UCqq^*&w6EaOqlxO z?^rSQ5sW0EF#X;?(?CO>5I`@h+G2)+W~PKP5Qjn`MS)hp@$>zsj@-%0iYL)^#h`NE%)0(rXo8e}tXiO;K z1<$3o04g^O`%VdHUIcZ%cXb%i)V(B7??~1u-swJ&m2*bauME$wUHN}ueasEl^$>R@ z_>@6yVq6oRIKjlmQxJSNE3=D94`^A3@qAO!6M!jM9Ktrn^Ml4akA)UqY0+65Tkg|~ z4CfBJDt~dHCXPtjr*{B!gS|dYA2qCWdqz! zlU#EfjiJeY2)4U7XUS05B9ep0>24+{Qqo!?$ z*AW!$DVV8t_rZ3vTLfBlcXifRa`ASfKVz3K}Uh9?>B zON*vnm>q*8xvP5f*$rsUb`C9++LA7nbO&V~QfbiK3>oN!zLa|ks^kHop#pVKq9Thf!R9NJ7r+r3#je0`_|>?q^O zzz#n1*1O*9dXXj3&T;8_KBH&<#e-+?A$U9)Uiq=ppA|Q6{p3DX`FAuI2cHM-HJkUX zS-95$ZKmV!HWYm2rD>d4gE7MLA0G=d8)sj=jDsqkNcPn*u4gw8J%pL|i{ZS-e>PpT zrR_5GKstE7@H%eQ9U-7~!|kU%q7f!sF#6 z`=yPLQ|XSYp*|WZjN65z*r`)Xzy;}Csu>aec}6mP1rGmkXJOi<>wU&ZVC&|pMky!! z~y_~LVqIe?3dd;zO>IYv)r7tQn? z`6KS847pxOP6w{nfM9iai*TE{G5weyJL@}HJbh)>cPJg(nHu7&B>Kv7I2{G4?~|E3 z_EX>E`TdLBu|G~vl`V>;zln2BJ3)>Y@GrQN8lGXyKOT%Jo32m4N%3E>IX}al))7r- z52E-9O(%xzYl_J>Dw24HRpZ*BHXy-oj$FG4oXBK zgzbRkLh^&ALgM1>fF|sKi~wa;*rAA_4HOY(UJqnoUi}-Q0uPHNxMV&?zT3DYl=5fZ z2t@4rY}7?c*hQL--=)Z`eOe!2(1nOKDg+5}xeCjPHt1EjkV1!ERE1=@47w`gzC&VK z5JG-12pjwCBleYCmfb1DV(uw#X13CT9!-lo)cx&mD>-S>u8MIXX}5mJfno*%-~6iZ z=g*ZZuL)SZBg3gFjSQ1Es&Yekwp(>I5OEVYr43pnOfBOaaM0x$qtx4LE&kX{oY5R+K9#ceIj5@R^2IZyU>$ZIm= zw3bib-|QK}t&B6A46|Os9sHhc<$L&c6lrVkR4pnz3~BBD&p;$A*E2~^rR78`oBO{j zbpH<=`vL+FC5FIFeG8L?Ih|y9|0-IOdw0hw0bBx~)mm{ZM=Ctnw&1P(xHU?u`?x}np5`5dv9;g6q{I3s7XMIx# zNqr$x5Av_xVEHk!y5ENV~w>>G}OdlwK6N{Mg>bIb;W!YbKO}3_ODV z3)0I(CKS|2GackR%zJDo1Ox;qKdVz^NDTMiKNQF(M-wL}3tKZsMmHPl6HN`rO)de{QEF?0pDRnt9dMMx0>C=1Y~4b&36v9*<`V;Nh{33yE522WR;!$MzNHvazZ`PR<}^~G;1Ge}2ufE!d4)J%6~>jwhG!Pu*bbg zWpG1@viB48(FkX9dhBI|u=Ywe_m<*!HaWB3NSz9@NOwgAc%cslo~#euzWfxOC+E!umf{`LHMskwh42 z<>2!CGV$h5BKO<=#TZ zGloK$CMmZc0#m<0_lWTna7gHX2Rr90QX$TjV{6)GJn!|wl$twh@TT%nBU!Qj5``vG z$?n+b$CD!Ji^)?<<`-Yn)$N-Px<@}5q#uP!Hn)D*a8s~D*L}te2wfiSxHRVpa-s%e z-cl?YIkOLs^*($zzr3XVh46bhk82+v27MBZqD()*w<*q5EYolU8tj??*X4KmK9{mp z5IL4*BJZ%ku7uLtrV3DFT$U6LNX9R}^gU*yLDJG|ja>Z{`9(SXNKOjh++mzEIC6(4 z@?%RF(8QetS8sK6sj5Y(JC~tNx&C{+twd_^WnCCS*PNCGi)RU~xaia`q)ZoM0qa_@ zaCHHLsr;%Tha1PxCiV6%+aETWgre2b)8o}Cq+!ajE2S?8TVG}uH|$K2j)PR4_NGpb z3^y+xjuDXo#bR@GnkGRZTt;%HU{j21txF%-2aDF^FXZE~E}{#_C6lw2I$*>`v*O~0 zA7zT~rn0Yolf~+}UB&7G`d7c&(J@qGKUT(mUZecUwPsu5Y){r(HL$$mu(`m`qboPg%JmKk_e2KOiRP1#34($uCHYke3JMwwd5<7K3YS6+ z?eFnH{+TMsDvQCuz#t~QgKtZYKNPQJnc3V90Mg;$&9jmQs`0>Pe{`R&b)1fKUJan+6!Zvm{ zkipAuqNW`R9V_a<=U&^s(o&4f2+%&6>@2V4kuCzgo)Q?%S19cJ?kf_AhYJaRsnC|MFT^q$Zi?$sYUu5@ z;4^nTr*RMVYuXza*zBZ%L1Z$f89k|1jRO)C@0-$btl_H`o~v-Qg1P?XVzJTff?pM! zpfxMl+lNhw*sc4+4J?~$2SlENY84WC7`s?mK#qEU+YDqsrN}{+>Y)$GrB<#2PM#ad*#jnouM|#2+Wa1K z!k~H>e$`S0TvTAH1kB0hnY^_Eb#acU0`6;2&wM-pZU1Lt^iPG5v1;+`jr_V zJ|dOXW86O$4Fet!ewf=*vM%pb;o*O1tcN+%nNS6jT!tmjr11e75N^qjy>hZ%$GGS; z?kS9Q@8nYjb5m`h-~uTW1Soj5GulSY!xsrnLdL)L-tWfz=1hrlZUFE2ZlC1lyRLj) z(VOEs+M7lm?R)3B6A&GKi#c18{E_yXEY12$e*{SYx6!R0r_oq8l(@U ztS&B<`RQ=f7|U%?%!Eox&FPoO5ueGWD54OG4X1~=N>T&|*$Y15@8FN;NWX~FFx($aFW)t-Rh#gOh5nrz9;dxI^6Wf7gI0;n`iM<3m8;4rnpq*!C4>N}&jIPJY@e`z zQMNjP_RH@^+0PANAflN~4v}+kc~FAFV5$%->w)Nv6U;KT1@GsLkO_aDsB>N$f?AB) zHGA$P_p3}1#a+v>2pVGZ+tSs*Ct90?KHf$OB5go)#&YP4nz_}3!B^$Qb^f?Dwj+2i4TqrB?=(uV=?nMS@Q-;?urrcEOfyWt%LSiaE4 z&B5VVKVaNfqCM^#CbF1?jd)4$K0yPzUWzkbiWB{HHWdEf2ZnF5GZC~coawQBu zQ8*4oRc4Ez<(fSYf%|CBd}l8>LXSmx4DG;E#atH=~8l$Lm7yO=CrpP2P=D{;pZz zfl1-bes|Zn16!W;*J|!P>6^SmOJ|wGa_67suJvHT@UPTT;t#oMUoo#v62gA)NYV1+ z4A4ePO%~Vr0csjPX=c6^p7=cb|x?ZsztxD@e1^c8)6h8{=BF(a#)>VMWpunx?K-(Nurwu6%v~j)Ez6 z8yI0VZLj<_xBhHRuE*vYW(0WM4Aoh|o6s)QpcHDFIol-HZ2byOE(7G1J9U7Sk!o=U z7YpwQoZaxpNyOQN8Fg3cD2irs^7hCS*@kGVlI6qh^lnFL7*y1%b-CF~EDV_va@;?c zl1UIY=9RYm*0E{)6N6QwPGIdFw&hV;k=Lq`QDjppYEc#Lb`Jy|2w_8K7wSSPsgkFD z!z?^a!xTwL{$`%XO^8Fd>NHct0w%8Q7j}}O%0}mGeVrI&M5)7#?1qM`XDKks!2SS8 zk{n@|y1wcRO)Fk7vJ+x`3J*}!Y>y?l&R$3)i%i$-jO}08WfLQ>Q+v%2NXVm!iOG6V zJ^ikteUSt4I1NsqS{e8xv@(~2b-l?>U~q9j== zdWUvHpsmGWNDV;QdW>fCwTuQ5P27wWjoqdWox~`no$act^gD+f=^rx}ii0&y{ORtl zMI1xoaw+|)bi`i5*^+vuMulu3Qd-3TItVgjlW^^4gjeLJ%HEZNLn0V{JXo{zMsYW@fu zWy>ZQaP)~%G4`-iGFmm?sx&Kn=u@`V3=5Y)g+i0$jIBo=;sKCuqb7xgowQcwV{UA{{gy&7rUfIc6pV#JwsmU*mNfz~hY; zHx%}Q`duBQ;jQ-jcCN=e4TC28<>0Y|!+^kU;nZ_935rVoOD1n8nER! zAwRTv((^=Y&}aSuX%j{aiV~hcb!)JPmh8ct+8Irx=QWZ)rcBCNfjyRLRVf|8@-9$G ziah7BHjGcmMlro09~*j}kd5Qs&trfe+i(J2G<#Ap2Xn88-7Eyua5-mmaL~esV)F1^ zX~SO3wyrPi#CQOb3A|49dH)|9+s)jcUNE{BhM@2Fv@3&ZQ4iYcVcPmY+T7~6urGW& z=B-Eiq>6$n{n~ayJM84~$oS}2$pth3GiRMm>ooMsrZR#&zd!pzBLl1v6y*drwXUW! z-GoZdRjW{fx=sN6h?FzP!7oz&9M>;-5prX6+_TODa>u;1LO zQmCOZr_&;dm};}I4PJdlnOxeEv%r7?btB(=0Wo~%8~c&=re{m8%3Q#Y`(Mc{Arr zQcoEkN4J4@N$YmBq7;^#^=5;ygBR$j`a+D5szkekHi)w!YoLnEruPq`@21(vJ<;H9-M)ekzL}@5iDG~wZ1Gzkr6%+G5 zU7pRmGlfne9ePu772*Yh;qNY`fDOUuxE-`^?&xp2R>IbTDZ8S!PXhrb%;|jlR(1n8qFy=Q&<(=vjh65< zqP-1>VIB0!pC960y()InB+(7Kjsijxcd=*F~8&q16v@4fOv#;j>@JzQyr%CUA+_`K`N2!KDOpJgh z^=-qgldE@sx+?8&ak(9u5;H>hm>S0h6mDc{moUUP!1$fgFSSYsP-t$Pg86~1+V7A) zj7p;qUN%HorMP_(e|NcIY8Usm(|hB7LPT|l#%pGL&d+;vB2+dT5`4C!oKM1JpV)U8 z-I`xAo?qqBqNdliHmFniole*3zthoV=L}?REW@)u#mpG5rnRps@>7z~Q~}ywtWxtO zO~=B9X^u~N`cZ4{+Y#N#`M%za;<8M3?poC=w#lE=kV52M**|6P#H$^@yEhgeahz_` zzHBpXC(;iSs^>@LPC8R&ySBw$LBW{sk^Xj|9(tc(0_zEA&Q^Yfr02;j>bRV{$Y~OV z-J>v=4?Ay;XabON{2gc|Y?te@UZc^>1yo#K5ISAHOe7*S$9#_@kzgR%+ZWcyJ>_2Q>q zv#kv9%w=Pm>2oReA&Z?0)R+0MFZ}FP{Md^>~566L0v)_e~c;TzI2_FeU7gQW$~IhKF9zews{-_}O1{%MCd7I0cAz^I^nb@9-r3-C@X)Do;YK@kyVQaIY&`VqF}@1&NLn|rL!tEyv|g}w0e^5eYVeizoc&Df z;kXU`WPY(oGCGfM+mbN)tSb3(Ao4+o6DT_O&eH`Hjpat-8jWS%o3nR=MQ%*E`yNN0 z2V$ z8L5>C(IJ2xV5k!z*!vTUqBX9XziN0WrB>fg{j0hG)7MXt$Faj?LpqJAP7&2v%R^x# zN8daz*t45*^QwnWEZKdj;Efc`ZWjhTbK1=(-`6Revr5gV$l3V&L|ereztrUdsm)Ma zc2qzl1Nt<~mE=bPdG8vy&El3y?hrM-7i@UpGkJu3E!;?{mdLB8u4~gpKW9JYg5cU& zWVF}Hq*%?Y)l(>3|In7XO+f5Mo2Owh4=e+(*6ei7bdVJRCef=Sydp$$t&V=DUTsQx zY{MZWH#I(rBBMY&wWimMIBCu-T~&B0&Hk4GbO=?fgK)$ zZ@~ON)ehaojW-gJ$S+&fEWE-CO1yYL@fEiTLJUsTiE#ig)WLLF9>oF#Z_0^=dhx*@$ZdraR0z>zDi~-Y5=}rY#;YUxmaBBfKc(fS9-!9nErs zY3BIWg!kCc(0jS77kR{gb5b)pTN)OL@|>Fcd0wlzoDX-aS}fhc5C>C689(F3zOd6LlYxO zKZwFF$uI^uWOOS{8ve}ZHcp@RQWf_H`+)Hhd5}r!aH%$@)OT_5M$u0?-sA{JCWYT% zgSSAKDegIqBk+*nXA5N^A=-3y=e6B!B9+5Tm?9@i{zEt#T0_|3?yg5{^Ao%Wjp;eew|td|=lS_bId~r5Uuf4&2$%^J;Tk671jcUm9uL&R z54XQLspbLadb=s9uB*2G6q@N~KNiSjsYRSAetoIaYg2Jj0s#U}V8_ zpN{M(%0r|sX<-D#)T(e!$mcKx#^j1$zxA2jTzn(K_mfQdX6-St)5MUJ9YV%YudtNd zT)VT_+Y5dSU+DPZcQ)@ZPHYAf%?=|5 z;Xj#9=+!!Whe3e1_?_I_P!QxG*&9lWtAv-@pYt}JF~)+ZWA{sDMLmdmFhjr2(a^== zGgXZj4W~FS(nxAkdeu-y_q-s3yu--dz3!3uCjf+Zui)4Jk;msu)(=-Kfkzb=OW%j zC0q}paeVAAD8w2_&>41nb|OM+p%&ZhT?PJ;Lw6IhUKwd~a!lPWzD~Ms=u_X zf0(O9AgkV+8-66^x`AWJ-nJ!kQ1 z^vTGo2%QpQqoah(8b%;V4XMYu)1_{L;dYg=VP^VlrKPP2fwvmvA|+`nlpH zfZi9({QMTM5h?*-svP0pf{JC}?gEM9m1CxoW9Rd5>5?!1>WV=(;A*ndLD{Q67Roep z3);ZeGvFFCn1sv#30KNz=uKP1?p(4fIsH^OU|hF&)n2v?`~84TwtBAXOW zn=kH3~Lt${trs?J4VpO`xjSo2!0P!&%E3w@DzhbvbK5}qxrse1htdpNeI}d)yQ;8gucjvHBr*gp@j_%P-S2uVQ z`Bc=ZiY*lo@N0EwfO+1`W5-M%-Y=5*r;F+=+@Jh)e<0;pGR^TT)k>Z`gWgYw`D%7^_;V}S-!;0VYJRz z8CW!qY|gbcVk5l7sfffWgN{mU1i$Y*(V?EePCxG(HoVmr)9R!t15UFsyVkg=Z0aX{Ri!Qm`1A?vckA=xx?l=HPG7@F;uQM5B-p-j1@) z6+5#F5(zh`OSNRFpYgbLftYXON*~+uSqMv5()*{&&J>hQ%x7bsd7g1ELBQTJy-oA8 zKOnR#5baEN#HZ0~84xndjIKxm&5E;v$0tQ5_**Z4rd_M1hE49+Y~b6w$Xg>`&=n|} zF9tb*a3AWiL*)D>nLA^%`@{B6m>g4HBQYKfpE2k#ji(L}Wx-3qS|aTv#uu44q~N%> zel(wt-Ic$|_g`U9^7GaP-0Pn|Wy~AwZYwcyBIU58(>9F3rUr=X zXd7{X+r7l$*);8>vfEjRxtd@=)be`$!ew~%EQA%KXiG=+fZ(k`;mC%}MA$HhH5eb7 z(UZr8cQ<`q@zx>lDxewHzXVCoz@sv<<&~!=cEqt|7f8OK%MDm6ArJPSt_dKuGFOQ_ z(|@M^o)J_af6`(a{lmJEsM4$c+<8a&E#AMh0M;z%8*xLYnDp$~wm!XPY89)dMm<5w zq0$-Wq0IVS`t>JMXBizt=V|em$?)^?D&3p8>p|(7$GJ>Podc2-x_Br+38x2sh(V3; z$Ctc62?TIvt}-gz9YeZkww*Vaa~|+UawaE{(WU<%6Ncw(=V)~!@drJ^x5KM9Ub*L= z>28HEoy_8$)M?Bp)0qgDU!&!bNc;SvW&4$xOf?wbr9&_84MQDqxsUlp``!EouW+(; z`Fu+jFNM616Tg&++}Y2uuOW&ic*OQ9zERZ}E#MGCqB<-hVfOLRjeFZBjIoNzq)#R9f4sS^JsF4}3Azm{} zi2qmHl7JwfFya6>Lp$duJw2e2KbVa=WbyDq(^z&UJRJr)POFMn8+uwV&Yk$0hopG5g@9;(|#=28hMkcFPR316iWlw_R zRoBXvs+xq02V=lq?8<9_D0kO@?l1=dy4>tq1qM@A>W5z}=}Kzp_~%NAY}2XugU3@m z*b|d&V=vwEenp_c)#`Eq+A^8vr zdmFzDJDuyFk%q0mHj23?yuOv?wDV5Ow&UT}c&)$i)nHn6S~_-_@sN(!nYIbCfV=8k zoQaq~T4Utp41O>v$hKX~(Tg>i$(&iM-Wc`wohfzq=hFUq?cD4$8UwKEL%L^|pR(5I zVl6gu2__^=R@Jg~*x8<}u^oH^0wdsRwFLa@dGTbNW34jkmLYS6p$jC^_;;fCn-i0Q z4`@E6*fZs>{VB@oa=Aw2qlfiuc1LnAUrq(ow)5>z1gnclBV_Z(L+2hwITSxZk)3Xbuk0Y$<&H8FX4>yk(c9G!wXxx zEm0AHJ()uT6r;L& zhfb_86P^I*^05p*enR+2YAidzmBdGw=pH%guKS?sA5%tRK?K7;Mxb0J$@{_eN}42LklD$ zc@FR|!#ys>#c=n~$I+BaL&N!oT0$U8?RDYHD_^>{^Pxl4)N`uZ&x%)FwtcO;EiR61 z?N7=hAUL-j^Mr-4`1Up677u7W@egrbv~7JKAA~I?yzYE%)YmsO>fu<>2Xkn$es%HJOgM>BWbFB$yuV z93;3&AgiZxN1^-Z!{qA7Gy!Hp_5ws+7+wr!oCwQ`DIQ6+K_Zv&E`oBHR;kx0 zj53G=@bG>J+?e(Y4Wq~FwOrA{E2%>Ve6u`SEdK^g|(r}Rf)u^R$WXPoeXX~vL51)iyjlCD; z97C@VAB}-&J>4uQP%by3{%h*@I630Qhk+TyNlCk!c_%*>N*3!lX+!75Kiyv+(A!VS z>_zy#mY87~B=blylL3tggt)1aFt@QDMS#2HWG)-IR!7Ti2HU)^^c{QsZI-UF(srfVApQKPhov`|7*=~X~N5d;OKMT*jU z?}X3Aea_7cf+TfOG_bNbkK0_#dCO?(Zq@{e0j59u{y`lG$fwvS-gO z*WQyy&bzsD5O1YNOMqH%gcnPfxlG)?nQw#{*~;`FjH_912QLtOFv46QcXav7h8vW` zvS!<{ik9GK@(O;qFKYC91{5_SXfi31#mdUL?&Upv~$c zd0L#q3ja&1XS~+5*E`xx?h3I-=B?1*H{$AAujU$h-X&(^e+;$muGS$uOcPBYG=+z7 z!Q)Lz1D@#9TcPIjZ(U=%s)KyNpK3jRx;a*N64obp&$HX?=8douV7ZE`0?W0N@RNl$ z8*3cQ_iMo#v@+I#7rLNclqG9e;vlcR=;PskXW@3IA&52IV!UWvOh#Nou1cnm$(b-l zUFM{rbMoscpZ5FrO5!pF#!Yrc1~KQKh(ES>Jf~kQ5gYNDh9!O>r|K4Q<$CoN<57?u z#vq{VHJ7XO~IU8;zfU73ro0qI!4Ja;a6#CcW(I6gKB-l z{Vgncav!|hN}le*I%NS{D$TDEW`3hgo8wcIo517yNIFQ|yCZkaN!@^ghuV?0Mu>4g zdrFY8#kZ0C;Fd$=I)@PEYkX|}4pC&s#6F>IjBl^A^o`H4fVLS^>jXTPY)+W%rcDJI z%|m;KqOpQ7W)FfmuaDQt8e#KZ%?1!S=`TlXO?#-S?A=*u<`KdTtxDswf+j-d*#oQ6 z^q%*URv=3K7cF``8ixvBzZ;vkg|l-XBgYyFx`y3$CnlMM<~d2n#*txn@~xkO z-#24QaaTAdaD5cA1W)9~e2BY(w63?l4<^)7y(o>D*zB5c5aoMVlJr_S_|!oEgUy96 zf8Au0jelDkP>`gUOZ|Ea0FFhqtnD*SZ$EG%&prvl_z>{7tJK%edUt?o2OCMnqyBaq zEly?St97&$N;79!97dvE0>(v^Y9mRy&nu#OxAl2D&_G|KR+t~)=SauB2)i=UJ+zN{ zmN@EiE0Z(SXYA%nSX=Bnnsx)%ecdk1RkchB@7wKcBSXeM#qBKjpA?p(L=clR8XEcE zN3Gr{tvDi6l^&(3Ip;4dJe?mO=h0YE|MBK&+Se$bx4MVrCvfs}%W_R9^(*p>(;|yz z`cZ`YrS7;{Beaf$9u>vkB!V{{cfP0jaGMr)0huariL1#m3em8_1b zRt#@68cQ|@!3NUz5DNOKy7G=OO`#d8{p`QhEnuho)?#pm(EasaW%-YJmpuBMzjq`b zA(1qVFTWjhe0E^K+I>*&^JA!r_+a6=2E{pF)&%1hb_eB}-b5CKsM2-Y3S!zJ+#Fh^ zI9jXVCC)Qqtk5ZFb;`oiq`fTBtE0?__qxbUvoOC6pK6P7AfB6K_H0?d!I1Z%nw%(~ zI%7d-QXdIr6}J6q=8!UNf8i)9`sV5JKH~auMkfNdh(9O5o`y$Qy~AUAu@)kTG&2NJd zeDAu=L6Q7nJP%BoFLv4`$YEnIedEI(!ZeJY^LJ}LRiTvt>h5B>fZCz*gmD-<3^{fh zu?Kb}SX77et!+XAuA0b|FK|<3`fM}zN&arloOfS1KvlezBu`Wtus}&Ia+J^0`tKds z$#_po7Vf`Wz}0vx*qkq%`ql#xqmGR~=!JiTi~hL1W676f%i~|yZIa$*;K55sl~yzT zir8Wf!OI$=Px&v~FF#7de`V$;U-v5I4Bb^kE}tM0%vxG(5!X%y0gTNrHKLR!{`XXv zA3>Od!LoO#_&>7isV3UU=neKOQmUJw*fk#2muRSJ($ViOEOG2#4G99*+(t1IHsS=t zG#XBV-q^m~a4L;O%A}bOn{tPz1)0Tz4(NT5h`6pDfp<&|6cy*>ImBY zeEa2UbdB409SD4zqc(<)JXGt65!r55lMbJ0%&<~dM2fCW;$coiR_ANNLq3_QHoxOt z1|iINrGr-2dT{0X{CV&<;)l?Y=omM+pBo7|GhC$#rnyfT_WZG`^1M%6N|nxu8jWWBsr*LZU4Fv z4>IcZhPoCm#lprU2K^j1T06k>=HpbV9|5CoyH{~|yDIISXE-hKf}=5KRT421B&x8q z$4v~3rjW}>pf`ny%oZ4b)y?+!{yBX)xWmzAW!=E3AHOLvv8;1R7&J37#Fm1nurg#DA~| zgx%qSEUbztKP(Dq!A*4Ft8rx+q@eaAG>tNpprgBz7Ab@ZYl?B$K>6D39TaLg=y?pu zru(m-^sF}(>zH|Rg`ake@$UNyF|&W?TzxiPJmFG?N&L{0=1Xw|{@nM=S+^yz@u$2_ z-`0PC9nkI-(Sj=KtUPc1z!pVP52@JiCRr)z*>6`-T4E6|3GU@0%!!T4Vevwp>EMu3 z7YO|IJS5kAH{;Uda=q}3?HCZNYuZz0A1F8g*DW!!UqyU!>mT<2qaXHDDhndWUjBok zSVmHgs>LS0BB>!zXm-7?JpIaB`c}l2N0X(3TFI;Rq}z3K*RFDzKMp=)6o{c1d2jGE zb3RXt>RcjJ>niAQ3QD>h7_8GXDzLcr@*RGoOzaBHJmQ$$cWcIT;DMJ=2CVqWmJAf}}gU3E!{J=No@@ngc-kt&K@Qicl8^x1xsTywF|VBl4uF1wwm zsgu6p=cN0hsf5>c|C_#}1#EY=8=D+ptW|NTr`Be~gcB#tciTtEU1*lu+3e!mOK!Xh zJYhA3u{{;LBQUQD?d?~GHbrz=!8xR<5J+tD^J-%8VjISR=jjSC~axbG=<|<&DWBI+_o0y z>%H`Go`v&KCC))Qb2mwQWfJFAD9Xse-O9bAF+_9rkH%{4Yl!u@w=Vthsk^%s=XXf>r7n=og*7rEQb2h4-B2Npe2(lxw`l=O4fUwLtao8z_Y+YM=G;A!5ec(V z=72QnaI78FpFUJ+ZpW&~riw7Ge8Exp>72?zykT(^Ecdn+=@U8acc2MBLa4Zw8_GlD zx--PF{p?H4+2!#%x6IVZ8QRNMX6wVRFyDGDzzq7I2n8mITYf~-L8vjcZB<8xW+J4$ z#EnP$U2>F{W5DULyHn){<6FM&oq0hoBrp*z`!ilPv_|t=TY4!8zn{Rp?Y7=mPR36| z=*NF88_g5r8oWNg5BBqfStld!*eh2m+Ofz-{d^mvbYFkzrB9hxzY7FM+=2JrdLcm{ zbI+1G^n^&cDwiwjbd6G3qoGNKNXkQq8a_Xb&!KLpsaUx$;h{B6eNuEHfiIF?~TiRQ@cz0a&*6+*VQKEP-5(9qyBTm95;D<4 z_aoxHNa1=zma5+OEDO)W$m>tCWubgrTrMeoI{^^rLeJDvFrXI#*?**=ly#6O;jNXI z0d`QSE~2dZ>0J_julg~eu_sjg%y8-i?~J8jL9IwZIx%+V@SjrzAkV>*nk3h%N!iVn zj5jm+L}K9Od${)d?*RygL!tFZ6JJKBEc#-%vUe|k7 zWLe{$fd^dm-()^G-7Tj@0*C3SvuVPBKztpcIxY4a(Ni3r8h zBJen3TL^PR8frn?E>%Gkd391L={nZVaJYKYIm8nD%Tj-FBS^~oXdbi!^1XCA$)qbh~td}oc=NFV_J}?9Q=L@PyTYSpKRDvP;5Lq zraTOsKa29hYaJuELOYTlFFVTu2v;6!uYbi8MR~MN6)|O=lsMnoOZCHzJkBKpdZ zlL&94O?&oK_?bSrAY)ttsm;fmkAI@g?#hR2(qw6Pb9-d^OP%&G{#bhv2&TPe^;U;& zn61r=)FxA8K&e$n;06&@GZ|KovX-5mLkYh#eDG$`_R>vU@65SGh%CGtUlSI5zas7D zHLDQp%OTUHFHfTY4Bc&`EKsPH=}Qmdk27m8AMPPy2HUx{)!S|?y4seCc@CfD1>gGF z$ktaaGO*LA%4$Dd2YxcLVYEbVjO6A>iz)s%^onQ^1g8DqjYpKUm$=&7EGC=r8St2OK=$qny`TFOcKwm?9@6Hx-?}momLt&ak5_`+Yl?B z0w_}nhO4k!51<=@m=mY{HivW5vtS8hfjz|MFNleHefysb;?3n*YGEeRn{)5cTCY8n zMp3saUkQD&97(Aw3}BcGZKdjW?7sW^O6dOW2ys1?%^TRlfGB*^Pps>rv%|2gTdpGt z1_b=_1*Cwb0|{k=`07Qmyj80QomK1^yu?d{7Sye2Hiys5(K z+heSY0(?c~G{SOME4;lLLq9^CE9p|cRf zmc-OfsfuC|taI#4C!)@W&cOHKXpDT$kpyo~ySa<_mHO)jkSKkbGtMDe#=a*)9Nk0@ z$ue=~JqIV+wjE^3lsyHsRl$yh?~+zB_pG0XLHsQ%2s@8QS79jJto5~N!%-$|C9`Bm zywa{J>2#jJ-kV?B?yYe&StSzWoo0ZJeTBP#pF z#)Agg40Fzi>ok2v8r(KsBMvrIn~tGuV>{kLgpoJDs)@>9L;aX)&~=w5ym1TT;Jw@o z=9j3_4r$DH9C^00j69Rw9J@~&p#h$Oxkl%5Pmf?S3ldxwrP7Kub?&}*V$_m}qFgir zK%s*y!xg1FI~yG3wo~h{RD$D;$D6OK`F4=K_DM?WR3f@M0^xV4;M+s3x9fHL!uP+j zDmuC9!AhFk7MAcOu;PNvo|~Vrh?ojxjJc)8bH$@^>vnFA+2<3OZ6n!Sgboo337OI!+#h z4m*wDW_x6B0DKmHhqQ~UBD)fjT0q0*`oOHF4N*ei^~_Pc6~Pqp&790I3T@H4? z-AFn>7>YfD;8YP~NwuSGV2PBjU2eNL;RMRO&vt^Cn4}*gl#A*j`NVsIlqPeajeu)d z?;z$C@_=M?RTucokNiy=n2|JpAgJ51JXp%vp=c?%j=MMfKE;s%Q&d~eHKM2krR<#urg!lYf^UhWi%jo2D}V>8&D1pdBqjn%k^KqiC_ z<52MDHn0djn%;KH8#aX+T+pMzt6IR6I4#o_^`1iFK=B(1Xe^nEcRZaW^zFuzX82{G|B66@|1NX&hLT^lz_%=XId{92Z+XH$BiD6-e*@26MY z2f#Hdr`Nh8jq={kq~t1f7&Id2yU5BnzgI(($0l&CDzP3PRem=hnM#Xe{nNU2vhPL?JVE>GIlvK`U+08d3Q{{)*^`) zS)1opzP&TBco6*E+{0KRh{Jd>-p$s!J~d@{v7;%mN(jS54LBP&i<6XaqSKZNxNWI;EKkWP4J%&(Wd_j@i#}a?cz1N?evVTxDG(8}(ZjCbw zxrWf1)T38K+H!PN8S&M??6vG0O=O4IJ<}p?#z$(27Uy^b)ILvSg8`^s>cY9uc~ z-+7eurbTeJ9rX%}Q_ITW%tO$Vr0Lfa8>iIwd}uMrq|O`kZ1$cN3bUEe62khWT*DXj zkSKD%H8Bb=e4;C>2@R_v8kKlu1FB<<<4*rV3#e4by{S@+mL*EIB^>(Roc0bMfqwhe*O!F@9tY(OHJ#YR7vn8OAwzFc`G`pPn~ z&TTO;mFJO?l>#pZ*oH-k%1tSlxBq@0L6s1M+*;uS*AB;e+NsA0tsn;QYIJ_EfQ?dw zYC#w9x*GR>laSh&sPuP$L+|emH$s7ZON1^ZBUYsJ1xeD4P%^9#%zODz^J*^q?aP%w ze>jM_JXiaY1-#6|==2WX=S!-%67>1z*1jyAh+5ut_UUfoj5EUYinoV95_%qR$Otl8 zz$tzuK_R?L^+fLCZL6cY)rqmby!$+)95w0BY-seO!`l92siafY`)`tkW}Ezcl8=wN zj@3XruV*DxvUP^cOkKIQDY8qVQk^Nk=mdXIy=7&-k+Hx0Zk3?UpOF+a6CrW#R$ng2 zsN$P)3T#jAr5X-C;~hUX7`g9^Kb(?fB<<}JkupP6U+cme&WF#(2(U`_VJV_Rfpft! zsBTx}w(%V64U42X`aMu1jVv~KpcbAY#`UP0Oeyu7G33b2oTH5jFZEqX5QMz5Mypun zLit^{na8$rE>U(rle`&*zHr%h+D`cM{1@Quqk}_AW^!J`#7{FP z2>nE`jrS5(&&5%ArW;N43n!`3BUW*oVr#2mKp7zI0w0_XqGSnvB~P_anL z4Bu@>Q*NCi((Mc1_dgp$!2s<3rUXA{JXo3$lLz}*EI}*ZGsP+VY!6=`iTP~^AG=Hk zqw7&HB}6MamU#z1cqm!Vz>H&rp_JD>?8ncQ+4`V55T`$_4YpfUgF`jN6fh!uH$Vog%`2x1uS} znV8`YyLdq?dj41w)q{?8z##8M>M1^*!_tXKGm@iV#$sxt45x^^Ini>pgbm<^Qc7a^ z6j6aiS1IQw=%f13!N6CE7iPv)1EU58=7NIhQv#E`6NSOb@>ATGRmoy#zmyV*keu|P%uplY;T_7^9iCX>Bqk!yM0^8Um9ow ze6Zu0-!OfG2vqBQDNyu;3&atjI39;X3N77&*6k zGJVDheNqbK+hy6o)kJ(+(Zdb9S@%|qpp0MZGe_|m3HqOw0f#~BOvN%*$xxax`>C0I z;Uo%H*@3>}eruf~Ni=Vd6^g;voMt8HZ>INzKyag`l0UJl&vx*PqneNJw(R27Pv7FJ z301Ngn903=Vp(gSGET^<&3xcmF z1$#MZt8h9qOTj)X=-o|v$n~$+9Zq2x51HXj%UC*F=kY*e^w>J+bF9PB_|z_5b}3ovD^DPOnFTP_T(bEFSpR)`52Wp9;S=NTpwd8E$jK)s)cSJ{FA) zRI`4$grx(R{UYs#Vzuf8B=X?y8GwP3{FGK>F7p%n9#u=dsg7$-x19jQoYWkaE79eT zl(X2yzkyWUS7=tnmdTmyfyX|W!9vcxp#mIW#UtLGDk7+@ zG{$%+hr4)a2`gkmXOTkkaH)Tfd9V$9ituN^o^mnc4(>6-Px{cqi`9+$_#`vU)r z!e_m@OX=g*;vML!?X5_~<&MKkN@n;GAWZ+E3p3#j=RvJ#;YY3d{f4~Xnf3%MlJnS8 zYIa^vX8-~Jvpb~AI;RMQ&vE3;xGN~w3W+oZU@levMtBZ=(20W1iy3!yPb0}DBchb? zPR(P&@_trk@*b!9+~Vd>^8vh|rU&t90YB#NNMl?F&|1JMOj~9h@EsX@?lo7K_m*W} zb4|~;X$zL(I9fsxI5*T<+swgBDSdrgyRE3)UWQ-e*un*sDm7b$&LXPUXI}fQ3qJ(! zVd4~X$R{h{2|ydXRq+fvyf&K^E3i{=_w=S-tJFchJ(?zLm4*p zEDx8kJ%9*nLjpS|AWtRSKEXs~J1frIn^s7S8B&dpshDvwZ_CKZ7pJ8d=dkZj?g8R` z9&kuXz45suWQOmzqqEZ`%5PgSM0^a{+V0wTB_N2=*&XoP&<~igkSW6*Gg1v!@iRxk zy3mvXJ!m58D|XRE3QQ`0U?kRRyrnt^u6>3$Kicar1V{ z=~4OUDwzgx4+q;If$fd{#TA|P+W=9@soVsXu{b-Lj130^WIZy%VAUB%Y#RJ*FoJW!7FBY0Oy|7?fxAbUZBh zX$u<}N`B$dbFI%tAn$}m6s*-@J}^dpZVw-b+58%rqHp8R3NptX299^`PJI`I&0$?< zo+|#g6!z|z>LvC4V(kF?9mS7V5g?6w$w*55X7{Z~nT&)6vJxjnU1=|_bK|(129`GM zz8V3<*h!%QRc}qnOWES>oe&JhOQT5(>F}Nk4j)L$Eu%HgpRD_1^N^1|rVaf#uzzDw zJUC|1BlTD0+o4LWnV+#Aq-F&%6!xN{ImO@ZX6M)>>3G9mNx4W<7elVlMkH&DqL1Kp z;qGK>M&h-JU!kFH%J9LG@w-NcO~MCy<**<2$kw^os_juJc?~FO_1X z$N_>!+=C}y>ee;;7f$=bvrGkq6>^twJ+%bMI}2iz&^8=75f9gpmwEo*(7Qym*i*!G9JEUfN@_E3 z2j}UkRj=T0%Nb*IZhDtO?RAcbHkq)vW~PN_UmSe>DPwH(`qsE?=Wny~xkN#X+ey%! z~d=g@KbKA&q(~{7#b5U`g z|K2+ukgtKQSY&b;kAr(fOa+7T$c--vVKmz0Pu+S6!$#*~<+bu@o|-*)(I7Hm4f1}W zy*bq!T*Rg%I^i(v=^kVH)pTX^2Zu7bBvR|eODn6=d}WEFm3RzGM|**lEYVu$pk8XI z#d?Vv6v$bUxOvBVjTN%E!%f^)uDd6wy`8|t_G8T;B~IF%ny@U-RU=erhjP(OVzz~i zI8Xn=6S~qnG1q+yO&*xlC$eT(|K&ZyXwWOZ0N#9>8ndMnTR%qeop{ddm(jC5|1;$D zkEB@05GTKQ9GGYH!|n6;u&=Cbd2a%Fs>YZU@@ebSke?6OHwg{H*x_&Q3?F>tszGsl zJru6RdG!ff(8oswsCT&@Yr^4W6XNxv?~u!8=)0c8JiYhfjK59$dBt;sX=;XVT{Gtl zhfvGk^hZw7`j;}!S*gQ!wVK0wX4hUE+^Q+Ion4)Hv~Bf~pO~IX{+4 z|HNo0v+9`l6^5bM6kyIc42xr5*gQw=W7F|795%B?%jZ$lq%Tx7^v+ix!JM7GX+`eo z7Jz2E_2!m{aAi2&_^$O*MbLe<#e56T)26BY)a|uTw$%bCRQzH`1t%g1P` z7;&jJJyK-iZoS>OP^q|onHdc77sLm0l4;%!HG2(N_+fj_a_pg7gw>Ga0;y*9T@pg) zs=Q&$<@1LrV9?hgR-;5*PYCg(6!)Es(+vG?STbqoWBUHVnKtS>pQ3>XZA*lezlO@D z-{A&sS+2SBTgEb=1e#+J+I*AJ$VZSDRS&pKrEOWKfUxsW1t**SC6R^3yk}s~<}XY5 z+#J$vwaQ&!$C6@wJY8xJ(dQpYeoP+qKtwIJaGP++BziO_X~C|Xyvyv@v4`o=3xwB8 znC|%)(WG0|988STgMk}@<(n!1x!^fdRBRsCC zGXF!m5te2+%Wr-DcLhpjM`Tm4X6i2=y;M(8g~MF6W>V!b<;`p`Jim_h7oFlVdG zN-HHk^gNd|8?LRNBKn0lIYioEU%?qugD6frbZs?cVR@S}``+Lqi|g2_8+{Jk8BSY2 z)%S!#;YTf!X@p@tk&6{sQbhIQ1t0D0V~Y@Fx(W}rem5rE%U-PA?$upR(iBttNOomu z5lcytf5eLtV~z0_PiGS#qnfl@$?9U_hupe?WOaV5V(ITGh^Y{%9Md{Mi;%5rpRB9-_OIRsMGz!vhS#ZU28dc6RGrDk*hs?-T*upl zLmvw*;7yBC1}vHBNjdf>V`mI*TV>|OeDqNFFk;Z!6^EY3MJ!TnWk{BN{7RZWK$vX2 z9QZulrmm%$+^KV5siCT`kDm0dRK2>&-~OQ(M$p7 z!=6{YW0TXv(RrQ^ju*tk4ePT!jA{66W__rtgvcDy~WApH((R)S>FV- zkNJ^o9&{eisi~C7GIiO+#cZDZyI#mrAR$~no(8vo>#cStS350R@N7Jc;^X++6h1ZR z2u1E>Rzf@1dE#S#>3bR^SLq0Md?6WmW9u`@eq*Xakx2Wzq*kUb@w~5xyfyCHB(bk> z!iQ#xwEL+}Jw~(HWOi#*U>lJFe?@2b(}g?m3uJKNGAAFs$T4og50o`@)lUC4>rK`8aiv?yS<;D;pJ|}ybi3ugx zD2+QKX^WEa7Vr4Ls0)G1hNd1mLU8@s@#1@PbiJx7lmhlWr~umPaJ3t2*|6_~G(_Vc z_Yfj9!Yw~3WMYC_jLl&w;AuI2kAp)NFbK%&uQ_&mZLW1|xD8>gdTRmCQj*feVw&%k z37lK7os^>1$)>gd2gwhQnC&Q$E;~ZY&vK^syWIkr&#AED?cjFZp{|)@U#6%GYLhIv zA#)8ra~?g_X%WUxtkzCQ0y*zEdfwqLh#{%tNsirMKNEQVo*jG@4!YPB>R1@I+=3iQ zfb*k$;cO2VrOaSUp6t*YF3cyg@F9^Wg}C0P#9qz)4xcI47A(SkPYL?k1mTuB8$Ha9 z2*j@>p3QXALZV)Dsid~XVmLB2=g3fECxmxQUyCxG+mLct?+=1`AtIr}8Iyf{-fUkC zhOkW7o5|c7})`jmvwX`yq@~4<4^@mnlM`Y6e5%n;)K#lr)I-evSQaQp{&5k0gGnb3j;(YBpNH-Xh>XLo+`g$B3w{qsg=GDiI5FJi9z$zxGB%K8TFA zBxw|WTQ#D1Na>Y0mk#ZO@fn9k?CVc@imsGX4&Sd)i&mOMhL4a6NY+mreapLV17zoa zdS7DW-F#)HjR}*R{W*8>vR;c^E{!(Uu%T@8`|1%jVF;|Tjn`9bVHql+PP-}5m^x;z z2$85TpXsTIn%4ZBKy+pNE1jNqTH|5OviUOMQGM+E{C_J+!pX(H3lz``{cSpL5>7F~ z^5Kp$39FhJG}gz2(?nsoaio*Tx&kkf^EKXDq3LI#G1>kTKjrX6zgp@1X15$x*r(&; zaMIW>r(<#CGVfE_s9>~=M2xV@XG#@BpxvvKAaZ&+6&w+DpShK8pHbp`*>=1^`al!5 zo~1@Ncy038ma{jE`djnVNtoee8LgYoI;5BGO3M*L>)oj7%Da)+lSVFNkRr~Dmg z%1KI1x({s@u9kVfE77r+FSUI?I?tEvZJ&S8PWJ&QM>Gw^(lJ#MYf(CX1+;^$Uurs< zNxJe*&ns>vB(covKybg1kJbb#l5CE((E}S_junw15%?Rh2)=x*b0zgRLEX0=_c?z9 zaFz*gl7^>Ku^6wZJ_np~WTzO%NE=LCqT;8Ptrx@gN}Sz>mCJiBu8iaWac7xKPI@gMLe4OFGA*`4%dDUsw(;xQX>qdwax0^PS4opysAo#qQd zp>B6=BJWq}ci$j6LBD>UADySLCJDmQO)scL&p$&}v~&*?y;6AB%*Q6LM}b%B)X*Z- znb+W}`BEY=ifXkRx_=&rrhK9i#{liSoI*bO3HdfLbcMrimAAt;=lT2PCO|fy&1O<{BLcT;LYCz+a(j3dfAXfpyVonl05uLnVjjX|6UE8 z8u*l&{Bv18CAflslbN%fwUwLupR(Ykv1-m(Acy5xJf!2({hZA_IoFQ`Ba}Iy3~NO6 zPN3HV*PlhAfTKU3AbU{A6sfL4VZzyGUljx$*k} zacR&KB>nS6#=P}vGx4kg?#a6vhtYRyhCq)tr>2Qw&J6^*a@HN$cX0f+%Xkr23l5Ix zUAmeqO~0G3v;u9>e2Y0^ou622UJKbZ7CGw(j>#H*oj+wa{pjYQ?rxh@x9;I^#kSa9 z0%V&++&1Y+bz5-+wL$p7BrX4z?5aBf3wuHV%17i=uWL@e*lvd0*KQTi%TG;dlnEiv z9Hi{`A0Y~TxH3tE14lA^(9aex+RbgVs)7&P9qsOsm7lsBv2eF+o__iDcq>3%FY&6{ zW2TBmN^{@QAjpx*SB3LmyHh5AD)zn!yZ9{xoV&q$^-slK!Yfn+R0Mz3>#`ixiCp#xAcW;E%f42J9kNv6i`_Jo7QTN9#&enD|9!N8HI~QlS`vUGRE{^7A zNP++VRKov;inXJQnY-2hhDz(-P;s(y_V|DGg&t`4&+7=d{m&60To4|JKcxPzV`BU# z5#Wv=_y+!yj+uppm7^6fQ7-@Yas7LbZ2yMRpE*XDIa@jYFM5>mH*^q47aOFNo7?|x zj=uj5B{z37caQ%k9p-h=N#ENnb}ym3CP*GJDDNe{?G9KIz*uQ*mmd|@c3Y$ zc=Vq`1pawF1Bm?}*@3jQ{)_$oYB^o=+A$1hc@t>)@2npMyaF)3*&m7XpREG;@B|0f z2?%!C2?+jFu>R+z1{B41bN6<%`o{qV|Jm+ek3k^$XCvUw8|b!$i?h3x^FKt~e>VKr zdfWd#z~GX9KQrO4mVd47|E$OT&!=jA{O{Gd|Dy8OH2tge_#>D9dA+|u`1ev;UF8}u ULj(jAz>gImbgmHt(@gOH0bK`wSpWb4 literal 0 HcmV?d00001 From 20ae770f8f488d822fb3fd552307f5e957e84fcb Mon Sep 17 00:00:00 2001 From: Vincent DEFERT <20.100@defert.com> Date: Mon, 29 May 2023 09:15:07 +0200 Subject: [PATCH 3/6] Added support for all STC8 and STC32 series --- stcgal/frontend.py | 105 +- stcgal/ihex.py | 15 +- stcgal/models.py | 2260 ++++++++++++++++++++++--------------------- stcgal/options.py | 2 +- stcgal/protocols.py | 593 ++++++++---- 5 files changed, 1650 insertions(+), 1325 deletions(-) diff --git a/stcgal/frontend.py b/stcgal/frontend.py index 31a0978..f1b3d45 100644 --- a/stcgal/frontend.py +++ b/stcgal/frontend.py @@ -33,6 +33,8 @@ from stcgal.protocols import Stc15Protocol from stcgal.protocols import Stc15AProtocol from stcgal.protocols import StcUsb15Protocol from stcgal.protocols import Stc8Protocol +from stcgal.protocols import Stc8dProtocol +from stcgal.protocols import Stc8gProtocol from stcgal.protocols import StcAutoProtocol from stcgal.protocols import StcProtocolException from stcgal.protocols import StcFramingException @@ -43,6 +45,8 @@ class StcGal: def __init__(self, opts): self.opts = opts + self.hexFileType = 8 + self.linearBaseAddress = 0 self.initialize_protocol(opts) def initialize_protocol(self, opts): @@ -56,14 +60,19 @@ class StcGal: elif opts.protocol == "stc12": self.protocol = Stc12Protocol(opts.port, opts.handshake, opts.baud) elif opts.protocol == "stc15a": - self.protocol = Stc15AProtocol(opts.port, opts.handshake, opts.baud, - round(opts.trim * 1000)) + self.protocol = Stc15AProtocol(opts.port, opts.handshake, opts.baud, round(opts.trim * 1000)) elif opts.protocol == "stc15": - self.protocol = Stc15Protocol(opts.port, opts.handshake, opts.baud, - round(opts.trim * 1000)) + self.protocol = Stc15Protocol(opts.port, opts.handshake, opts.baud, round(opts.trim * 1000)) elif opts.protocol == "stc8": - self.protocol = Stc8Protocol(opts.port, opts.handshake, opts.baud, - round(opts.trim * 1000)) + self.protocol = Stc8Protocol(opts.port, opts.handshake, opts.baud, round(opts.trim * 1000)) + elif opts.protocol == "stc8d": + self.protocol = Stc8dProtocol(opts.port, opts.handshake, opts.baud, round(opts.trim * 1000)) + elif opts.protocol == "stc8g": + """FIXME Ugly hack, but works until I fully implement the STC8G protocol""" + if opts.trim < 27360: + self.protocol = Stc8dProtocol(opts.port, opts.handshake, opts.baud, round(opts.trim * 1000)) + else: + self.protocol = Stc8gProtocol(opts.port, opts.handshake, opts.baud, round(opts.trim * 1000)) elif opts.protocol == "usb15": self.protocol = StcUsb15Protocol() else: @@ -90,6 +99,8 @@ class StcGal: fname.endswith(".ihex")): try: hexfile = IHex.read(fileobj) + self.hexFileType = hexfile.get_mode() + self.linearBaseAddress = hexfile.get_linearBaseAddress() binary = hexfile.extract_data() print("%d bytes (Intel HEX)" %len(binary)) return binary @@ -103,45 +114,57 @@ class StcGal: def program_mcu(self): """Execute the standard programming flow.""" - code_size = self.protocol.model.code - ee_size = self.protocol.model.eeprom + if self.opts.option: self.emit_options(self.opts.option) + + if self.protocol.split_code and self.protocol.model.iap: + code_size = self.protocol.split_code + ee_size = self.protocol.split_eeprom + else: + code_size = self.protocol.model.code + ee_size = self.protocol.model.eeprom print("Loading flash: ", end="") sys.stdout.flush() bindata = self.load_file_auto(self.opts.code_image) + + if self.protocol.model.mcs251 and self.hexFileType != 32: + print("Invalid input file. MCU is an MCS-251, input file MUST specify a linear", file=sys.stderr) + print("base address, i.e. contain a type 04 record. More information at:", file=sys.stderr) + print("https://en.wikipedia.org/wiki/Intel_HEX", file=sys.stderr) + else: + self.protocol.linearBaseAddress = self.linearBaseAddress - # warn if it overflows - if len(bindata) > code_size: - print("WARNING: code_image overflows into eeprom segment!", file=sys.stderr) - if len(bindata) > (code_size + ee_size): - print("WARNING: code_image truncated!", file=sys.stderr) - bindata = bindata[0:code_size + ee_size] + # warn if it overflows + if len(bindata) > code_size: + print("WARNING: code_image overflows into eeprom segment!", file=sys.stderr) + if len(bindata) > (code_size + ee_size): + print("WARNING: code_image truncated!", file=sys.stderr) + bindata = bindata[0:code_size + ee_size] - # add eeprom data if supplied - if self.opts.eeprom_image: - print("Loading EEPROM: ", end="") - sys.stdout.flush() - eedata = self.load_file_auto(self.opts.eeprom_image) - if len(eedata) > ee_size: - print("WARNING: eeprom_image truncated!", file=sys.stderr) - eedata = eedata[0:ee_size] - if len(bindata) < code_size: - bindata += bytes([0xff] * (code_size - len(bindata))) - elif len(bindata) > code_size: - print("WARNING: eeprom_image overlaps code_image!", file=sys.stderr) - bindata = bindata[0:code_size] - bindata += eedata + # add eeprom data if supplied + if self.opts.eeprom_image: + print("Loading EEPROM: ", end="") + sys.stdout.flush() + eedata = self.load_file_auto(self.opts.eeprom_image) + if len(eedata) > ee_size: + print("WARNING: eeprom_image truncated!", file=sys.stderr) + eedata = eedata[0:ee_size] + if len(bindata) < code_size: + bindata += bytes([0xff] * (code_size - len(bindata))) + elif len(bindata) > code_size: + print("WARNING: eeprom_image overlaps code_image!", file=sys.stderr) + bindata = bindata[0:code_size] + bindata += eedata - # pad to 512 byte boundary - if len(bindata) % 512: - bindata += b'\xff' * (512 - len(bindata) % 512) + # pad to 512 byte boundary + if len(bindata) % 512: + bindata += b'\xff' * (512 - len(bindata) % 512) - if self.opts.option: self.emit_options(self.opts.option) - - self.protocol.handshake() - self.protocol.erase_flash(len(bindata), code_size) - self.protocol.program_flash(bindata) - self.protocol.program_options() + self.protocol.handshake() + self.protocol.erase_flash(len(bindata), code_size) + self.protocol.program_flash(bindata) + self.protocol.program_options() + self.protocol.disconnect() def erase_mcu(self): @@ -161,7 +184,7 @@ class StcGal: return 0 try: - self.protocol.connect(autoreset=self.opts.autoreset, resetcmd=self.opts.resetcmd) + self.protocol.connect(autoreset=self.opts.autoreset, resetcmd=self.opts.resetcmd, resetpin=self.opts.resetpin) if isinstance(self.protocol, StcAutoProtocol): if not self.protocol.protocol_name: raise StcProtocolException("cannot detect protocol") @@ -240,11 +263,13 @@ def cli(): parser.add_argument("eeprom_image", help="eeprom segment file to flash (BIN/HEX)", type=argparse.FileType("rb"), nargs='?') exclusives.add_argument("-e", "--erase", help="only erase flash memory", action="store_true") parser.add_argument("-a", "--autoreset", help="cycle power automatically by asserting DTR", action="store_true") + parser.add_argument("-A", "--resetpin", help="pin to hold down when using --autoreset (default: DTR)", + choices=["dtr", "rts"], default="dtr") parser.add_argument("-r", "--resetcmd", help="shell command for board power-cycling (instead of DTR assertion)", action="store") parser.add_argument("-P", "--protocol", help="protocol version (default: auto)", - choices=["stc89", "stc12a", "stc12b", "stc12", "stc15a", "stc15", "stc8", "usb15", "auto"], default="auto") + choices=["stc89", "stc12a", "stc12b", "stc12", "stc15a", "stc15", "stc8", "stc8d", "stc8g", "usb15", "auto"], default="auto") parser.add_argument("-p", "--port", help="serial port device", default="/dev/ttyUSB0") - parser.add_argument("-b", "--baud", help="transfer baud rate (default: 19200)", type=BaudType(), default=19200) + parser.add_argument("-b", "--baud", help="transfer baud rate (default: 19200)", type=BaudType(), default=115200) parser.add_argument("-l", "--handshake", help="handshake baud rate (default: 2400)", type=BaudType(), default=2400) parser.add_argument("-o", "--option", help="set option (can be used multiple times, see documentation)", action="append") parser.add_argument("-t", "--trim", help="RC oscillator frequency in kHz (STC15+ series only)", type=float, default=0.0) diff --git a/stcgal/ihex.py b/stcgal/ihex.py index 48ea0f9..b25c962 100644 --- a/stcgal/ihex.py +++ b/stcgal/ihex.py @@ -14,7 +14,6 @@ class IHex: """Read Intel HEX data from string or lines""" ihex = cls() - segbase = 0 for line in lines: line = line.strip() if not line: @@ -22,14 +21,14 @@ class IHex: t, a, d = ihex.parse_line(line) if t == 0x00: - ihex.insert_data(segbase + a, d) + ihex.insert_data(a, d) elif t == 0x01: break # Should we check for garbage after this? elif t == 0x02: ihex.set_mode(16) - segbase = struct.unpack(">H", d[0:2])[0] << 4 + ihex.linearBaseAddress = struct.unpack(">H", d[0:2])[0] << 4 elif t == 0x03: ihex.set_mode(16) @@ -39,7 +38,7 @@ class IHex: elif t == 0x04: ihex.set_mode(32) - segbase = struct.unpack(">H", d[0:2])[0] << 16 + ihex.linearBaseAddress = struct.unpack(">H", d[0:2])[0] << 16 elif t == 0x05: ihex.set_mode(32) @@ -63,6 +62,7 @@ class IHex: self.start = None self.mode = 8 self.row_bytes = 16 + self.linearBaseAddress = 0 def set_row_bytes(self, row_bytes): """Set output hex file row width (bytes represented per row).""" @@ -105,6 +105,12 @@ class IHex: def set_mode(self, mode): self.mode = mode + def get_mode(self): + return self.mode + + def get_linearBaseAddress(self): + return self.linearBaseAddress + def get_area(self, addr): for start, data in self.areas.items(): end = start + len(data) @@ -193,6 +199,7 @@ class IHex: output += self.make_line( 0x04, 0, struct.pack(">H", newsegbase)) segbase = newsegbase + segbase = newsegbase output += self.make_line(0x00, addr, chunk) diff --git a/stcgal/models.py b/stcgal/models.py index 8507409..feba5ad 100644 --- a/stcgal/models.py +++ b/stcgal/models.py @@ -29,1131 +29,1155 @@ class MCUModelDatabase: name, identification code and flash memory sizes. """ - MCUModel = collections.namedtuple("MCUModel", ["name", "magic", "total", "code", "eeprom"]) + MCUModel = collections.namedtuple("MCUModel", ["name", "magic", "total", "code", "eeprom", "iap", "calibrate", "mcs251"]) - models = ( - MCUModel(name='STC12H1K04', magic=0xf7b0, total=36864, code=4096, eeprom=24576), - MCUModel(name='STC12H1K08', magic=0xf7b1, total=36864, code=8192, eeprom=20480), - MCUModel(name='STC12H1K12', magic=0xf7b2, total=36864, code=12288, eeprom=16384), - MCUModel(name='STC12H1K16', magic=0xf7b3, total=36864, code=16384, eeprom=12288), - MCUModel(name='STC12H1K20', magic=0xf7b4, total=36864, code=20480, eeprom=8192), - MCUModel(name='STC12H1K24', magic=0xf7b5, total=36864, code=24576, eeprom=4096), - MCUModel(name='STC12H1K28', magic=0xf7b6, total=36864, code=28672, eeprom=0), - MCUModel(name='STC12H1K33', magic=0xf7b7, total=36864, code=33792, eeprom=0), - MCUModel(name='STC8H2K16T', magic=0xf7c1, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8H2K32T', magic=0xf7c2, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8H2K60T', magic=0xf7c3, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8H2K64T', magic=0xf7c4, total=65536, code=65024, eeprom=512), - MCUModel(name='STC8H3K16S4', magic=0xf741, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8H3K32S4', magic=0xf742, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8H3K60S4', magic=0xf743, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8H3K64S4', magic=0xf744, total=65536, code=65024, eeprom=512), - MCUModel(name='STC8H3K16S2', magic=0xf749, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8H3K32S2', magic=0xf74a, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8H3K60S2', magic=0xf74b, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8H3K64S2', magic=0xf74c, total=65536, code=65024, eeprom=512), - MCUModel(name='STC8H8K16U', magic=0xf781, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8H8K32U', magic=0xf782, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8H8K60U', magic=0xf783, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8H8K64U', magic=0xf784, total=65536, code=65024, eeprom=512), - MCUModel(name='STC8H1K16', magic=0xf721, total=36864, code=16384, eeprom=12288), - MCUModel(name='STC8H1K20', magic=0xf722, total=36864, code=20480, eeprom=8192), - MCUModel(name='STC8H1K24', magic=0xf723, total=36864, code=24576, eeprom=4096), - MCUModel(name='STC8H1K28', magic=0xf724, total=36864, code=28672, eeprom=0), - MCUModel(name='STC8H1K33', magic=0xf725, total=36864, code=33792, eeprom=0), - MCUModel(name='STC8H1K02', magic=0xf731, total=20480, code=2048, eeprom=10240), - MCUModel(name='STC8H1K04', magic=0xf732, total=20480, code=4096, eeprom=8192), - MCUModel(name='STC8H1K06', magic=0xf733, total=20480, code=6144, eeprom=6144), - MCUModel(name='STC8H1K08', magic=0xf734, total=20480, code=8192, eeprom=4096), - MCUModel(name='STC8H1K10', magic=0xf735, total=20480, code=10240, eeprom=2048), - MCUModel(name='STC8H1K12', magic=0xf736, total=20480, code=12288, eeprom=0), - MCUModel(name='STC8H1K17', magic=0xf737, total=20480, code=17408, eeprom=0), - MCUModel(name='STC8G2K16S4', magic=0xf761, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8G2K32S4', magic=0xf762, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8G2K60S4', magic=0xf763, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8G2K64S4', magic=0xf764, total=65536, code=65024, eeprom=512), - MCUModel(name='STC8G2K16S2', magic=0xf769, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8G2K32S2', magic=0xf76a, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8G2K60S2', magic=0xf76b, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8G2K64S2', magic=0xf76c, total=65536, code=65024, eeprom=512), - MCUModel(name='STC8G1K02T', magic=0xf771, total=20480, code=2048, eeprom=10240), - MCUModel(name='STC8G1K04T', magic=0xf772, total=20480, code=4096, eeprom=8192), - MCUModel(name='STC8G1K06T', magic=0xf773, total=20480, code=6144, eeprom=6144), - MCUModel(name='STC8G1K08T', magic=0xf774, total=20480, code=8192, eeprom=4096), - MCUModel(name='STC8G1K10T', magic=0xf775, total=20480, code=10240, eeprom=2048), - MCUModel(name='STC8G1K12T', magic=0xf776, total=20480, code=12288, eeprom=0), - MCUModel(name='STC8G1K17T', magic=0xf777, total=20480, code=17408, eeprom=0), - MCUModel(name='STC8G1K02A-8PIN', magic=0xf791, total=20480, code=2048, eeprom=10240), - MCUModel(name='STC8G1K04A-8PIN', magic=0xf792, total=20480, code=4096, eeprom=8192), - MCUModel(name='STC8G1K06A-8PIN', magic=0xf793, total=20480, code=6144, eeprom=6144), - MCUModel(name='STC8G1K08A-8PIN', magic=0xf794, total=20480, code=8192, eeprom=4096), - MCUModel(name='STC8G1K10A-8PIN', magic=0xf795, total=20480, code=10240, eeprom=2048), - MCUModel(name='STC8G1K12A-8PIN', magic=0xf796, total=20480, code=12288, eeprom=0), - MCUModel(name='STC8G1K17A-8PIN', magic=0xf797, total=20480, code=17408, eeprom=0), - MCUModel(name='STC8G1K02-8PIN', magic=0xf7a1, total=20480, code=2048, eeprom=10240), - MCUModel(name='STC8G1K04-8PIN', magic=0xf7a2, total=20480, code=4096, eeprom=8192), - MCUModel(name='STC8G1K06-8PIN', magic=0xf7a3, total=20480, code=6144, eeprom=6144), - MCUModel(name='STC8G1K08-8PIN', magic=0xf7a4, total=20480, code=8192, eeprom=4096), - MCUModel(name='STC8G1K10-8PIN', magic=0xf7a5, total=20480, code=10240, eeprom=2048), - MCUModel(name='STC8G1K12-8PIN', magic=0xf7a6, total=20480, code=12288, eeprom=0), - MCUModel(name='STC8G1K17-8PIN', magic=0xf7a7, total=20480, code=17408, eeprom=0), - MCUModel(name='STC8G1K02-20/16P', magic=0xf751, total=20480, code=2048, eeprom=10240), - MCUModel(name='STC8G1K04-20/16P', magic=0xf752, total=20480, code=4096, eeprom=8192), - MCUModel(name='STC8G1K06-20/16P', magic=0xf753, total=20480, code=6144, eeprom=6144), - MCUModel(name='STC8G1K08-20/16P', magic=0xf754, total=20480, code=8192, eeprom=4096), - MCUModel(name='STC8G1K10-20/16P', magic=0xf755, total=20480, code=10240, eeprom=2048), - MCUModel(name='STC8G1K12-20/16P', magic=0xf756, total=20480, code=12288, eeprom=0), - MCUModel(name='STC8G1K17-20/16P', magic=0xf757, total=20480, code=17408, eeprom=0), - MCUModel(name='STC8C2K16S4', magic=0xf7d1, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8C2K32S4', magic=0xf7d2, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8C2K60S4', magic=0xf7d3, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8C2K64S4', magic=0xf7d4, total=65536, code=65024, eeprom=512), - MCUModel(name='STC8C1K02', magic=0xf701, total=20480, code=2048, eeprom=10240), - MCUModel(name='STC8C1K04', magic=0xf702, total=20480, code=4096, eeprom=8192), - MCUModel(name='STC8C1K06', magic=0xf703, total=20480, code=6144, eeprom=6144), - MCUModel(name='STC8C1K08', magic=0xf704, total=20480, code=8192, eeprom=4096), - MCUModel(name='STC8C1K10', magic=0xf705, total=20480, code=10240, eeprom=2048), - MCUModel(name='STC8C1K12', magic=0xf706, total=20480, code=12288, eeprom=0), - MCUModel(name='GX8S003', magic=0xf714, total=20480, code=8192, eeprom=4096), - MCUModel(name='GX8S012', magic=0xf716, total=20480, code=12288, eeprom=0), - MCUModel(name='STC8F1K02', magic=0xf671, total=20480, code=2048, eeprom=10240), - MCUModel(name='STC8F1K04', magic=0xf672, total=20480, code=4096, eeprom=8192), - MCUModel(name='STC8F1K06', magic=0xf673, total=20480, code=6144, eeprom=6144), - MCUModel(name='STC8F1K08', magic=0xf674, total=20480, code=8192, eeprom=4096), - MCUModel(name='STC8F1K10', magic=0xf675, total=20480, code=10240, eeprom=2048), - MCUModel(name='STC8F1K12', magic=0xf676, total=20480, code=12288, eeprom=0), - MCUModel(name='STC8F1K17', magic=0xf677, total=20480, code=17408, eeprom=0), - MCUModel(name='STC8F1K02S2', magic=0xf661, total=20480, code=2048, eeprom=10240), - MCUModel(name='STC8F1K04S2', magic=0xf662, total=20480, code=4096, eeprom=8192), - MCUModel(name='STC8F1K06S2', magic=0xf663, total=20480, code=6144, eeprom=6144), - MCUModel(name='STC8F1K08S2', magic=0xf664, total=20480, code=8192, eeprom=4096), - MCUModel(name='STC8F1K10S2', magic=0xf665, total=20480, code=10240, eeprom=2048), - MCUModel(name='STC8F1K12S2', magic=0xf666, total=20480, code=12288, eeprom=0), - MCUModel(name='STC8F1K17S2', magic=0xf667, total=20480, code=17408, eeprom=0), - MCUModel(name='STC8F2K08S2', magic=0xf641, total=65536, code=8192, eeprom=57344), - MCUModel(name='STC8F2K16S2', magic=0xf642, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8F2K24S2', magic=0xf643, total=65536, code=24576, eeprom=40960), - MCUModel(name='STC8F2K32S2', magic=0xf644, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8F2K40S2', magic=0xf645, total=65536, code=40960, eeprom=24576), - MCUModel(name='STC8F2K48S2', magic=0xf646, total=65536, code=49152, eeprom=16384), - MCUModel(name='STC8F2K56S2', magic=0xf647, total=65536, code=57344, eeprom=8192), - MCUModel(name='STC8F2K60S2', magic=0xf649, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8F2K64S2', magic=0xf648, total=65536, code=65024, eeprom=512), - MCUModel(name='STC8F2K08S4', magic=0xf631, total=65536, code=8192, eeprom=57344), - MCUModel(name='STC8F2K16S4', magic=0xf632, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8F2K24S4', magic=0xf633, total=65536, code=24576, eeprom=40960), - MCUModel(name='STC8F2K32S4', magic=0xf634, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8F2K40S4', magic=0xf635, total=65536, code=40960, eeprom=24576), - MCUModel(name='STC8F2K48S4', magic=0xf636, total=65536, code=49152, eeprom=16384), - MCUModel(name='STC8F2K56S4', magic=0xf637, total=65536, code=57344, eeprom=8192), - MCUModel(name='STC8F2K60S4', magic=0xf639, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8F2K64S4', magic=0xf638, total=65536, code=65024, eeprom=512), - MCUModel(name='STC8F8K08S4A12', magic=0xf611, total=65536, code=8192, eeprom=57344), - MCUModel(name='STC8F8K16S4A12', magic=0xf612, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8F8K24S4A12', magic=0xf613, total=65536, code=24576, eeprom=40960), - MCUModel(name='STC8F8K32S4A12', magic=0xf614, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8F8K40S4A12', magic=0xf615, total=65536, code=40960, eeprom=24576), - MCUModel(name='STC8F8K48S4A12', magic=0xf616, total=65536, code=49152, eeprom=16384), - MCUModel(name='STC8F8K56S4A12', magic=0xf617, total=65536, code=57344, eeprom=8192), - MCUModel(name='STC8F8K60S4A12', magic=0xf619, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8F8K64S4A12', magic=0xf618, total=65536, code=65024, eeprom=512), - MCUModel(name='STC8A4K08S2A12', magic=0xf651, total=65536, code=8192, eeprom=57344), - MCUModel(name='STC8A4K16S2A12', magic=0xf652, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8A4K24S2A12', magic=0xf653, total=65536, code=24576, eeprom=40960), - MCUModel(name='STC8A4K32S2A12', magic=0xf654, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8A4K40S2A12', magic=0xf655, total=65536, code=40960, eeprom=24576), - MCUModel(name='STC8A4K48S2A12', magic=0xf656, total=65536, code=49152, eeprom=16384), - MCUModel(name='STC8A4K56S2A12', magic=0xf657, total=65536, code=57344, eeprom=8192), - MCUModel(name='STC8A4K60S2A12', magic=0xf659, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8A4K64S2A12', magic=0xf658, total=65536, code=65024, eeprom=512), - MCUModel(name='STC8A8K08S4A12', magic=0xf621, total=65536, code=8192, eeprom=57344), - MCUModel(name='STC8A8K16S4A12', magic=0xf622, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC8A8K24S4A12', magic=0xf623, total=65536, code=24576, eeprom=40960), - MCUModel(name='STC8A8K32S4A12', magic=0xf624, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC8A8K40S4A12', magic=0xf625, total=65536, code=40960, eeprom=24576), - MCUModel(name='STC8A8K48S4A12', magic=0xf626, total=65536, code=49152, eeprom=16384), - MCUModel(name='STC8A8K56S4A12', magic=0xf627, total=65536, code=57344, eeprom=8192), - MCUModel(name='STC8A8K60S4A12', magic=0xf629, total=65536, code=61440, eeprom=4096), - MCUModel(name='STC8A8K64S4A12', magic=0xf628, total=65536, code=65024, eeprom=512), - MCUModel(name='STC15H4K08S4', magic=0xf601, total=65536, code=8192, eeprom=57344), - MCUModel(name='STC15H4K16S4', magic=0xf602, total=65536, code=16384, eeprom=49152), - MCUModel(name='STC15H4K24S4', magic=0xf603, total=65536, code=24576, eeprom=40960), - MCUModel(name='STC15H4K32S4', magic=0xf604, total=65536, code=32768, eeprom=32768), - MCUModel(name='STC15H4K40S4', magic=0xf605, total=65536, code=40960, eeprom=24576), - MCUModel(name='STC15H4K48S4', magic=0xf606, total=65536, code=49152, eeprom=16384), - MCUModel(name='STC15H4K56S4', magic=0xf607, total=65536, code=57344, eeprom=8192), - MCUModel(name='STC15H4K64S4', magic=0xf608, total=65536, code=65024, eeprom=512), - MCUModel(name='STC15U4K16S4', magic=0xf580, total=65536, code=16384, eeprom=44032), - MCUModel(name='STC15U4K24S4', magic=0xf581, total=65536, code=24576, eeprom=35840), - MCUModel(name='STC15U4K32S4', magic=0xf582, total=65536, code=32768, eeprom=27648), - MCUModel(name='STC15U4K40S4', magic=0xf583, total=65536, code=40960, eeprom=19456), - MCUModel(name='STC15U4K48S4', magic=0xf584, total=65536, code=49152, eeprom=11264), - MCUModel(name='STC15U4K56S4', magic=0xf585, total=65536, code=57344, eeprom=3072), - MCUModel(name='STC15F2K08S2', magic=0xf401, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15F2K16S2', magic=0xf402, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15F2K24S2', magic=0xf403, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15F2K32S2', magic=0xf404, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15F2K40S2', magic=0xf405, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15F2K48S2', magic=0xf406, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15F2K56S2', magic=0xf407, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15F2K60S2', magic=0xf408, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15F2K61S2', magic=0xf449, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15F2K63S2', magic=0xf44a, total=65536, code=65024, eeprom=0), - MCUModel(name='STC15L2K08S2', magic=0xf481, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15L2K16S2', magic=0xf482, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15L2K24S2', magic=0xf483, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15L2K32S2', magic=0xf484, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15L2K40S2', magic=0xf485, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15L2K48S2', magic=0xf486, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15L2K56S2', magic=0xf487, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15L2K60S2', magic=0xf488, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15L2K61S2', magic=0xf4c9, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15L2K63S2', magic=0xf4ca, total=65536, code=65024, eeprom=0), - MCUModel(name='STC15F2K08AS', magic=0xf411, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15F2K16AS', magic=0xf412, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15F2K24AS', magic=0xf413, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15F2K32AS', magic=0xf414, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15F2K40AS', magic=0xf415, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15F2K48AS', magic=0xf416, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15F2K56AS', magic=0xf417, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15F2K60AS', magic=0xf418, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15F2K61AS', magic=0xf459, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15F2K63AS', magic=0xf45a, total=65536, code=65024, eeprom=0), - MCUModel(name='STC15L2K08AS', magic=0xf491, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15L2K16AS', magic=0xf492, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15L2K24AS', magic=0xf493, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15L2K32AS', magic=0xf494, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15L2K40AS', magic=0xf495, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15L2K48AS', magic=0xf496, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15L2K56AS', magic=0xf497, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15L2K60AS', magic=0xf498, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15L2K61AS', magic=0xf4d9, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15L2K63AS', magic=0xf4da, total=65536, code=65024, eeprom=0), - MCUModel(name='STC15F2K08S', magic=0xf421, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15F2K16S', magic=0xf422, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15F2K24S', magic=0xf423, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15F2K32S', magic=0xf424, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15F2K40S', magic=0xf425, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15F2K48S', magic=0xf426, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15F2K56S', magic=0xf427, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15F2K60S', magic=0xf428, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15F2K61S', magic=0xf469, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15F2K63S', magic=0xf46a, total=65536, code=65024, eeprom=0), - MCUModel(name='STC15L2K08S', magic=0xf4a1, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15L2K16S', magic=0xf4a2, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15L2K24S', magic=0xf4a3, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15L2K32S', magic=0xf4a4, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15L2K40S', magic=0xf4a5, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15L2K48S', magic=0xf4a6, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15L2K56S', magic=0xf4a7, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15L2K60S', magic=0xf4a8, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15L2K61S', magic=0xf4e9, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15L2K63S', magic=0xf4ea, total=65536, code=65024, eeprom=0), - MCUModel(name='U7-5V', magic=0xf44b, total=65536, code=62464, eeprom=0), - MCUModel(name='U7-3V', magic=0xf4cb, total=65536, code=62464, eeprom=0), - MCUModel(name='U8-5V', magic=0xf44c, total=65536, code=62464, eeprom=0), - MCUModel(name='U8-3V', magic=0xf4cc, total=65536, code=62464, eeprom=0), - MCUModel(name='STC15F1K08S2', magic=0xf441, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15F1K16S2', magic=0xf442, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15F1K24S2', magic=0xf443, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15F1K32S2', magic=0xf444, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15F1K40S2', magic=0xf445, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15F1K48S2', magic=0xf446, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15F1K56S2', magic=0xf447, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15F1K60S2', magic=0xf448, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15F1K61S2', magic=0xf409, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15F1K63S2', magic=0xf400, total=65536, code=65024, eeprom=0), - MCUModel(name='STC15L1K08S2', magic=0xf4c1, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15L1K16S2', magic=0xf4c2, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15L1K24S2', magic=0xf4c3, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15L1K32S2', magic=0xf4c4, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15L1K40S2', magic=0xf4c5, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15L1K48S2', magic=0xf4c6, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15L1K56S2', magic=0xf4c7, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15L1K60S2', magic=0xf4c8, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15L1K61S2', magic=0xf489, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15L1K63S2', magic=0xf480, total=65536, code=65024, eeprom=0), - MCUModel(name='STC15F1K08AS', magic=0xf451, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15F1K16AS', magic=0xf452, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15F1K24AS', magic=0xf453, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15F1K32AS', magic=0xf454, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15F1K40AS', magic=0xf455, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15F1K48AS', magic=0xf456, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15F1K56AS', magic=0xf457, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15F1K60AS', magic=0xf458, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15F1K61AS', magic=0xf419, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15F1K63AS', magic=0xf410, total=65536, code=65024, eeprom=0), - MCUModel(name='STC15L1K08AS', magic=0xf4d1, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15L1K16AS', magic=0xf4d2, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15L1K24AS', magic=0xf4d3, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15L1K32AS', magic=0xf4d4, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15L1K40AS', magic=0xf4d5, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15L1K48AS', magic=0xf4d6, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15L1K56AS', magic=0xf4d7, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15L1K60AS', magic=0xf4d8, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15L1K61AS', magic=0xf499, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15L1K63AS', magic=0xf490, total=65536, code=65024, eeprom=0), - MCUModel(name='STC15F1K08S', magic=0xf461, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15F1K16S', magic=0xf462, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15F1K24S', magic=0xf463, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15F1K32S', magic=0xf464, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15F1K40S', magic=0xf465, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15F1K48S', magic=0xf466, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15F1K56S', magic=0xf467, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15F1K60S', magic=0xf468, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15F1K61S', magic=0xf429, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15F1K63S', magic=0xf420, total=65536, code=65024, eeprom=0), - MCUModel(name='STC15L1K08S', magic=0xf4e1, total=65536, code=8192, eeprom=54272), - MCUModel(name='STC15L1K16S', magic=0xf4e2, total=65536, code=16384, eeprom=46080), - MCUModel(name='STC15L1K24S', magic=0xf4e3, total=65536, code=24576, eeprom=37888), - MCUModel(name='STC15L1K32S', magic=0xf4e4, total=65536, code=32768, eeprom=29696), - MCUModel(name='STC15L1K40S', magic=0xf4e5, total=65536, code=40960, eeprom=21504), - MCUModel(name='STC15L1K48S', magic=0xf4e6, total=65536, code=49152, eeprom=13312), - MCUModel(name='STC15L1K56S', magic=0xf4e7, total=65536, code=57344, eeprom=5120), - MCUModel(name='STC15L1K60S', magic=0xf4e8, total=65536, code=61440, eeprom=1024), - MCUModel(name='IAP15L1K61S', magic=0xf4a9, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15L1K63S', magic=0xf4a0, total=65536, code=65024, eeprom=0), - MCUModel(name='STC15F404AD', magic=0xf40a, total=65536, code=4096, eeprom=9216), - MCUModel(name='STC15F408AD', magic=0xf40b, total=65536, code=8192, eeprom=5120), - MCUModel(name='STC15F412AD', magic=0xf40c, total=65536, code=12288, eeprom=1024), - MCUModel(name='IAP15F413AD', magic=0xf44d, total=65536, code=13312, eeprom=0), - MCUModel(name='STC15L404AD', magic=0xf48a, total=65536, code=4096, eeprom=9216), - MCUModel(name='STC15L408AD', magic=0xf48b, total=65536, code=8192, eeprom=5120), - MCUModel(name='STC15L412AD', magic=0xf48c, total=65536, code=12288, eeprom=1024), - MCUModel(name='IAP15L413AD', magic=0xf4cd, total=65536, code=13312, eeprom=0), - MCUModel(name='STC15W101SW', magic=0xf501, total=8192, code=1024, eeprom=4096), - MCUModel(name='STC15W102SW', magic=0xf502, total=8192, code=2048, eeprom=3072), - MCUModel(name='STC15W103SW', magic=0xf503, total=8192, code=3072, eeprom=2048), - MCUModel(name='STC15W104SW', magic=0xf504, total=8192, code=4096, eeprom=1024), - MCUModel(name='IAP15W105SW', magic=0xf545, total=8192, code=5120, eeprom=0), - MCUModel(name='STC15W101S', magic=0xf508, total=8192, code=1024, eeprom=4096), - MCUModel(name='STC15W102S', magic=0xf50a, total=8192, code=2048, eeprom=3072), - MCUModel(name='STC15W103S', magic=0xf50b, total=8192, code=3072, eeprom=2048), - MCUModel(name='STC15W104S', magic=0xf50c, total=8192, code=4096, eeprom=1024), - MCUModel(name='IAP15W105S', magic=0xf54d, total=8192, code=5120, eeprom=0), - MCUModel(name='STC15W201S', magic=0xf511, total=8192, code=1024, eeprom=4096), - MCUModel(name='STC15W202S', magic=0xf512, total=8192, code=2048, eeprom=3072), - MCUModel(name='STC15W203S', magic=0xf513, total=8192, code=3072, eeprom=2048), - MCUModel(name='STC15W204S', magic=0xf514, total=8192, code=4096, eeprom=1024), - MCUModel(name='IAP15W205S', magic=0xf555, total=8192, code=5120, eeprom=0), - MCUModel(name='IRC15W207S', magic=0xf556, total=8192, code=7680, eeprom=0), - MCUModel(name='STC15W1K16S', magic=0xf516, total=32768, code=16384, eeprom=13312), - MCUModel(name='STC15W1K24S', magic=0xf517, total=32768, code=24576, eeprom=5120), - MCUModel(name='IAP15W1K29S', magic=0xf558, total=32768, code=29696, eeprom=0), - MCUModel(name='IRC15W1K31S', magic=0xf559, total=32768, code=32256, eeprom=0), - MCUModel(name='STC15W404S', magic=0xf519, total=16384, code=4096, eeprom=9216), - MCUModel(name='STC15W408S', magic=0xf51a, total=16384, code=8192, eeprom=5120), - MCUModel(name='STC15W410S', magic=0xf51b, total=16384, code=10240, eeprom=3072), - MCUModel(name='STC15W412S', magic=0xf51c, total=16384, code=12288, eeprom=1024), - MCUModel(name='IAP15W413S', magic=0xf55d, total=16384, code=13312, eeprom=0), - MCUModel(name='IRC15W415S', magic=0xf55e, total=16384, code=15872, eeprom=0), - MCUModel(name='JX15W415S', magic=0xf55f, total=16384, code=15872, eeprom=0), - MCUModel(name='STC15W401AS', magic=0xf52a, total=16384, code=1024, eeprom=12288), - MCUModel(name='STC15W402AS', magic=0xf52b, total=16384, code=2048, eeprom=11264), - MCUModel(name='STC15W404AS', magic=0xf51e, total=16384, code=4096, eeprom=9216), - MCUModel(name='STC15W408AS', magic=0xf51f, total=16384, code=8192, eeprom=5120), - MCUModel(name='STC15W410AS', magic=0xf520, total=16384, code=10240, eeprom=3072), - MCUModel(name='STC15W412AS', magic=0xf521, total=16384, code=12288, eeprom=1024), - MCUModel(name='IAP15W413AS', magic=0xf562, total=16384, code=13312, eeprom=0), - MCUModel(name='IRC15W415AS', magic=0xf563, total=16384, code=15872, eeprom=0), - MCUModel(name='STC15W1K08PWM', magic=0xf52d, total=65536, code=8192, eeprom=52224), - MCUModel(name='STC15W1K16PWM', magic=0xf52e, total=65536, code=16384, eeprom=44032), - MCUModel(name='STC15W1K20S', magic=0xf52f, total=65536, code=20480, eeprom=39936), - MCUModel(name='STC15W1K20AS', magic=0xf534, total=65536, code=20480, eeprom=39936), - MCUModel(name='STC15W1K32AS', magic=0xf535, total=65536, code=32768, eeprom=27648), - MCUModel(name='STC15W1K48AS', magic=0xf536, total=65536, code=49152, eeprom=11264), - MCUModel(name='STC15W2K32S2', magic=0xf530, total=65536, code=32768, eeprom=27648), - MCUModel(name='STC15W2K48S2', magic=0xf531, total=65536, code=49152, eeprom=11264), - MCUModel(name='STC15W2K32AS', magic=0xf532, total=65536, code=32768, eeprom=27648), - MCUModel(name='STC15W2K48AS', magic=0xf533, total=65536, code=49152, eeprom=11264), - MCUModel(name='STC15W4K16S4', magic=0xf523, total=65536, code=16384, eeprom=44032), - MCUModel(name='STC15W4K24S4', magic=0xf524, total=65536, code=24576, eeprom=35840), - MCUModel(name='STC15W4K32S4', magic=0xf525, total=65536, code=32768, eeprom=27648), - MCUModel(name='STC15W4K40S4', magic=0xf526, total=65536, code=40960, eeprom=19456), - MCUModel(name='STC15W4K48S4', magic=0xf527, total=65536, code=49152, eeprom=11264), - MCUModel(name='STC15W4K56S4', magic=0xf528, total=65536, code=57344, eeprom=3072), - MCUModel(name='IAP15W4K58S4', magic=0xf569, total=65536, code=59392, eeprom=0), - MCUModel(name='IAP15W4K58S4-Stu', magic=0xf56d, total=65536, code=59392, eeprom=0), - MCUModel(name='IAP15W4K61S4', magic=0xf56a, total=65536, code=62464, eeprom=0), - MCUModel(name='IRC15W4K63S4', magic=0xf56b, total=65536, code=65024, eeprom=0), - MCUModel(name='U8W', magic=0xf56c, total=65536, code=62464, eeprom=0), - MCUModel(name='STC15W100', magic=0xf2a0, total=8192, code=512, eeprom=0), - MCUModel(name='STC15W101', magic=0xf2a1, total=8192, code=1024, eeprom=4096), - MCUModel(name='STC15W102', magic=0xf2a2, total=8192, code=2048, eeprom=3072), - MCUModel(name='STC15W103', magic=0xf2a3, total=8192, code=3072, eeprom=2048), - MCUModel(name='STC15W104', magic=0xf2a4, total=8192, code=4096, eeprom=1024), - MCUModel(name='IAP15W105', magic=0xf2a5, total=8192, code=5120, eeprom=0), - MCUModel(name='IRC15W107', magic=0xf2a6, total=8192, code=7168, eeprom=0), - MCUModel(name='STC15F100W', magic=0xf290, total=8192, code=512, eeprom=0), - MCUModel(name='STC15F101W', magic=0xf291, total=8192, code=1024, eeprom=4096), - MCUModel(name='STC15F102W', magic=0xf292, total=8192, code=2048, eeprom=3072), - MCUModel(name='STC15F103W', magic=0xf293, total=8192, code=3072, eeprom=2048), - MCUModel(name='STC15F104W', magic=0xf294, total=8192, code=4096, eeprom=1024), - MCUModel(name='IAP15F105W', magic=0xf2b5, total=8192, code=5120, eeprom=0), - MCUModel(name='IRC15F107W', magic=0xf2b6, total=8192, code=7168, eeprom=0), - MCUModel(name='STC15F100', magic=0xf298, total=8192, code=512, eeprom=0), - MCUModel(name='STC15F101', magic=0xf299, total=8192, code=1024, eeprom=4096), - MCUModel(name='STC15F102', magic=0xf29a, total=8192, code=2048, eeprom=3072), - MCUModel(name='STC15F103', magic=0xf29b, total=8192, code=3072, eeprom=2048), - MCUModel(name='STC15F104', magic=0xf29c, total=8192, code=4096, eeprom=1024), - MCUModel(name='IAP15F105', magic=0xf2bd, total=8192, code=5120, eeprom=0), - MCUModel(name='IRC15F107', magic=0xf2be, total=8192, code=7168, eeprom=0), - MCUModel(name='STC15L100W', magic=0xf2d0, total=8192, code=512, eeprom=0), - MCUModel(name='STC15L101W', magic=0xf2d1, total=8192, code=1024, eeprom=4096), - MCUModel(name='STC15L102W', magic=0xf2d2, total=8192, code=2048, eeprom=3072), - MCUModel(name='STC15L103W', magic=0xf2d3, total=8192, code=3072, eeprom=2048), - MCUModel(name='STC15L104W', magic=0xf2d4, total=8192, code=4096, eeprom=1024), - MCUModel(name='IAP15L105W', magic=0xf2f5, total=8192, code=5120, eeprom=0), - MCUModel(name='IRC15L107W', magic=0xf2f6, total=8192, code=7168, eeprom=0), - MCUModel(name='STC15L100', magic=0xf2d8, total=8192, code=512, eeprom=0), - MCUModel(name='STC15L101', magic=0xf2d9, total=8192, code=1024, eeprom=4096), - MCUModel(name='STC15L102', magic=0xf2da, total=8192, code=2048, eeprom=3072), - MCUModel(name='STC15L103', magic=0xf2db, total=8192, code=3072, eeprom=2048), - MCUModel(name='STC15L104', magic=0xf2dc, total=8192, code=4096, eeprom=1024), - MCUModel(name='IAP15L105', magic=0xf2fd, total=8192, code=5120, eeprom=0), - MCUModel(name='IRC15L107', magic=0xf2fe, total=8192, code=7168, eeprom=0), - MCUModel(name='STC15F104E', magic=0xf294, total=8192, code=4096, eeprom=1024), - MCUModel(name='STC15L104E', magic=0xf2d4, total=8192, code=4096, eeprom=1024), - MCUModel(name='STC15F204EA', magic=0xf394, total=8192, code=4096, eeprom=1024), - MCUModel(name='IAP15F205EA', magic=0xf3b5, total=8192, code=5120, eeprom=0), - MCUModel(name='IRC15F207A', magic=0xf3b6, total=8192, code=7168, eeprom=0), - MCUModel(name='STC15L204EA', magic=0xf3d4, total=8192, code=4096, eeprom=1024), - MCUModel(name='IAP15L205EA', magic=0xf3f5, total=8192, code=5120, eeprom=0), - MCUModel(name='IRC15L207A', magic=0xf3f6, total=8192, code=7168, eeprom=0), - MCUModel(name='STC12C5A08S2', magic=0xd164, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC12C5A16S2', magic=0xd168, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC12C5A32S2', magic=0xd170, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC12C5A40S2', magic=0xd174, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC12C5A48S2', magic=0xd178, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC12C5A52S2', magic=0xd17a, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC12C5A56S2', magic=0xd17c, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC12C5A60S2', magic=0xd17e, total=65536, code=61440, eeprom=2048), - MCUModel(name='STC12C5A08AD', magic=0xd144, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC12C5A16AD', magic=0xd148, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC12C5A32AD', magic=0xd150, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC12C5A40AD', magic=0xd154, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC12C5A48AD', magic=0xd158, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC12C5A52AD', magic=0xd15a, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC12C5A56AD', magic=0xd15c, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC12C5A60AD', magic=0xd15e, total=65536, code=61440, eeprom=2048), - MCUModel(name='STC12C5A08CCP', magic=0xd124, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC12C5A16CCP', magic=0xd128, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC12C5A32CCP', magic=0xd130, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC12C5A40CCP', magic=0xd134, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC12C5A48CCP', magic=0xd138, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC12C5A52CCP', magic=0xd13a, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC12C5A56CCP', magic=0xd13c, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC12C5A60CCP', magic=0xd13e, total=65536, code=61440, eeprom=2048), - MCUModel(name='STC12C5A08X', magic=0xd104, total=65536, code=8192, eeprom=0), - MCUModel(name='STC12C5A16X', magic=0xd108, total=65536, code=16384, eeprom=0), - MCUModel(name='STC12C5A32X', magic=0xd110, total=65536, code=32768, eeprom=0), - MCUModel(name='STC12C5A40X', magic=0xd114, total=65536, code=40960, eeprom=0), - MCUModel(name='STC12C5A48X', magic=0xd118, total=65536, code=49152, eeprom=0), - MCUModel(name='STC12C5A52X', magic=0xd11a, total=65536, code=53248, eeprom=0), - MCUModel(name='STC12C5A56X', magic=0xd11c, total=65536, code=57344, eeprom=0), - MCUModel(name='STC12C5A60X', magic=0xd11e, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP12C5A08S2', magic=0xd163, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP12C5A16S2', magic=0xd167, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP12C5A32S2', magic=0xd16f, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP12C5A40S2', magic=0xd173, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP12C5A48S2', magic=0xd177, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP12C5A52S2', magic=0xd179, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP12C5A56S2', magic=0xd17b, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP12C5A60S2', magic=0xd17d, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP12C5A62S2', magic=0xd17f, total=65536, code=63488, eeprom=0), - MCUModel(name='IAP12C5A08AD', magic=0xd143, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP12C5A16AD', magic=0xd147, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP12C5A32AD', magic=0xd14f, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP12C5A40AD', magic=0xd153, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP12C5A48AD', magic=0xd157, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP12C5A52AD', magic=0xd159, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP12C5A56AD', magic=0xd15b, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP12C5A60AD', magic=0xd15d, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP12C5A62AD', magic=0xd15f, total=65536, code=63488, eeprom=0), - MCUModel(name='IAP12C5A08CCP', magic=0xd123, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP12C5A16CCP', magic=0xd127, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP12C5A32CCP', magic=0xd12f, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP12C5A40CCP', magic=0xd133, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP12C5A48CCP', magic=0xd137, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP12C5A52CCP', magic=0xd139, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP12C5A56CCP', magic=0xd13b, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP12C5A60CCP', magic=0xd13d, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP12C5A62CCP', magic=0xd13f, total=65536, code=63488, eeprom=0), - MCUModel(name='IAP12C5A08', magic=0xd103, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP12C5A16', magic=0xd107, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP12C5A32', magic=0xd10f, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP12C5A40', magic=0xd113, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP12C5A48', magic=0xd117, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP12C5A52', magic=0xd119, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP12C5A56', magic=0xd11b, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP12C5A60', magic=0xd11d, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP12C5A62', magic=0xd11f, total=65536, code=63488, eeprom=0), - MCUModel(name='STC12LE5A08S2', magic=0xd1e4, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC12LE5A16S2', magic=0xd1e8, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC12LE5A32S2', magic=0xd1f0, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC12LE5A40S2', magic=0xd1f4, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC12LE5A48S2', magic=0xd1f8, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC12LE5A52S2', magic=0xd1fa, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC12LE5A56S2', magic=0xd1fc, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC12LE5A60S2', magic=0xd1fe, total=65536, code=61440, eeprom=2048), - MCUModel(name='STC12LE5A08AD', magic=0xd1c4, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC12LE5A16AD', magic=0xd1c8, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC12LE5A32AD', magic=0xd1d0, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC12LE5A40AD', magic=0xd1d4, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC12LE5A48AD', magic=0xd1d8, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC12LE5A52AD', magic=0xd1da, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC12LE5A56AD', magic=0xd1dc, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC12LE5A60AD', magic=0xd1de, total=65536, code=61440, eeprom=2048), - MCUModel(name='STC12LE5A08CCP', magic=0xd1a4, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC12LE5A16CCP', magic=0xd1a8, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC12LE5A32CCP', magic=0xd1b0, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC12LE5A40CCP', magic=0xd1b4, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC12LE5A48CCP', magic=0xd1b8, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC12LE5A52CCP', magic=0xd1ba, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC12LE5A56CCP', magic=0xd1bc, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC12LE5A60CCP', magic=0xd1be, total=65536, code=61440, eeprom=2048), - MCUModel(name='STC12LE5A08X', magic=0xd184, total=65536, code=8192, eeprom=0), - MCUModel(name='STC12LE5A16X', magic=0xd188, total=65536, code=16384, eeprom=0), - MCUModel(name='STC12LE5A32X', magic=0xd190, total=65536, code=32768, eeprom=0), - MCUModel(name='STC12LE5A40X', magic=0xd194, total=65536, code=40960, eeprom=0), - MCUModel(name='STC12LE5A48X', magic=0xd198, total=65536, code=49152, eeprom=0), - MCUModel(name='STC12LE5A52X', magic=0xd19a, total=65536, code=53248, eeprom=0), - MCUModel(name='STC12LE5A56X', magic=0xd19c, total=65536, code=57344, eeprom=0), - MCUModel(name='STC12LE5A60X', magic=0xd19e, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP12LE5A08S2', magic=0xd1e3, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP12LE5A16S2', magic=0xd1e7, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP12LE5A32S2', magic=0xd1ef, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP12LE5A40S2', magic=0xd1f3, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP12LE5A48S2', magic=0xd1f7, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP12LE5A52S2', magic=0xd1f9, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP12LE5A56S2', magic=0xd1fb, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP12LE5A60S2', magic=0xd1fd, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP12LE5A62S2', magic=0xd1ff, total=65536, code=63488, eeprom=0), - MCUModel(name='IAP12LE5A08AD', magic=0xd1c3, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP12LE5A16AD', magic=0xd1c7, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP12LE5A32AD', magic=0xd1cf, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP12LE5A40AD', magic=0xd1d3, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP12LE5A48AD', magic=0xd1d7, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP12LE5A52AD', magic=0xd1d9, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP12LE5A56AD', magic=0xd1db, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP12LE5A60AD', magic=0xd1dd, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP12LE5A62AD', magic=0xd1df, total=65536, code=63488, eeprom=0), - MCUModel(name='IAP12LE5A08CCP', magic=0xd1a3, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP12LE5A16CCP', magic=0xd1a7, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP12LE5A32CCP', magic=0xd1af, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP12LE5A40CCP', magic=0xd1b3, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP12LE5A48CCP', magic=0xd1b7, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP12LE5A52CCP', magic=0xd1b9, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP12LE5A56CCP', magic=0xd1bb, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP12LE5A60CCP', magic=0xd1bd, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP12LE5A62CCP', magic=0xd1bf, total=65536, code=63488, eeprom=0), - MCUModel(name='IAP12LE5A08', magic=0xd183, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP12LE5A16', magic=0xd187, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP12LE5A32', magic=0xd18f, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP12LE5A40', magic=0xd193, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP12LE5A48', magic=0xd197, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP12LE5A52', magic=0xd199, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP12LE5A56', magic=0xd19b, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP12LE5A60', magic=0xd19d, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP12LE5A62', magic=0xd19f, total=65536, code=63488, eeprom=0), - MCUModel(name='STC5A08S2-5V', magic=0xd160, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC5A16S2-5V', magic=0xd161, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC5A32S2-5V', magic=0xd162, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC5A40S2-5V', magic=0xd165, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC5A48S2-5V', magic=0xd166, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC5A52S2-5V', magic=0xd169, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC5A56S2-5V', magic=0xd16a, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC5A60S2-5V', magic=0xd16b, total=65536, code=61440, eeprom=2048), - MCUModel(name='IAP5A62S2-5V', magic=0xd16c, total=65536, code=63488, eeprom=0), - MCUModel(name='STC5A08S2-3V', magic=0xd1e0, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC5A16S2-3V', magic=0xd1e1, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC5A32S2-3V', magic=0xd1e2, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC5A40S2-3V', magic=0xd1e5, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC5A48S2-3V', magic=0xd1e6, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC5A52S2-3V', magic=0xd1e9, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC5A56S2-3V', magic=0xd1ea, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC5A60S2-3V', magic=0xd1eb, total=65536, code=61440, eeprom=2048), - MCUModel(name='IAP5A62S2-3V', magic=0xd1ec, total=65536, code=63488, eeprom=0), - MCUModel(name='STC10F02XE', magic=0xd262, total=16384, code=2048, eeprom=12288), - MCUModel(name='STC10F04XE', magic=0xd264, total=16384, code=4096, eeprom=10240), - MCUModel(name='STC10F06XE', magic=0xd266, total=16384, code=6144, eeprom=8192), - MCUModel(name='STC10F08XE', magic=0xd268, total=16384, code=8192, eeprom=6144), - MCUModel(name='STC10F10XE', magic=0xd26a, total=16384, code=10240, eeprom=4096), - MCUModel(name='STC10F12XE', magic=0xd26c, total=16384, code=12288, eeprom=2048), - MCUModel(name='STC10F02X', magic=0xd242, total=16384, code=2048, eeprom=0), - MCUModel(name='STC10F04X', magic=0xd244, total=16384, code=4096, eeprom=0), - MCUModel(name='STC10F06X', magic=0xd246, total=16384, code=6144, eeprom=0), - MCUModel(name='STC10F08X', magic=0xd248, total=16384, code=8192, eeprom=0), - MCUModel(name='STC10F10X', magic=0xd24a, total=16384, code=10240, eeprom=0), - MCUModel(name='STC10F12X', magic=0xd24c, total=16384, code=12288, eeprom=0), - MCUModel(name='STC10F02', magic=0xd202, total=16384, code=2048, eeprom=0), - MCUModel(name='STC10F04', magic=0xd204, total=16384, code=4096, eeprom=0), - MCUModel(name='STC10F06', magic=0xd206, total=16384, code=6144, eeprom=0), - MCUModel(name='STC10F08', magic=0xd208, total=16384, code=8192, eeprom=0), - MCUModel(name='STC10F10', magic=0xd20a, total=16384, code=10240, eeprom=0), - MCUModel(name='STC10F12', magic=0xd20c, total=16384, code=12288, eeprom=0), - MCUModel(name='IAP10F02XE', magic=0xd272, total=16384, code=2048, eeprom=0), - MCUModel(name='IAP10F04XE', magic=0xd274, total=16384, code=4096, eeprom=0), - MCUModel(name='IAP10F06XE', magic=0xd276, total=16384, code=6144, eeprom=0), - MCUModel(name='IAP10F08XE', magic=0xd278, total=16384, code=8192, eeprom=0), - MCUModel(name='IAP10F10XE', magic=0xd27a, total=16384, code=10240, eeprom=0), - MCUModel(name='IAP10F12XE', magic=0xd27c, total=16384, code=12288, eeprom=0), - MCUModel(name='IAP10F14X', magic=0xd27e, total=16384, code=14336, eeprom=0), - MCUModel(name='IAP10F02', magic=0xd232, total=16384, code=2048, eeprom=0), - MCUModel(name='IAP10F04', magic=0xd234, total=16384, code=4096, eeprom=0), - MCUModel(name='IAP10F06', magic=0xd236, total=16384, code=6144, eeprom=0), - MCUModel(name='IAP10F08', magic=0xd238, total=16384, code=8192, eeprom=0), - MCUModel(name='IAP10F10', magic=0xd23a, total=16384, code=10240, eeprom=0), - MCUModel(name='IAP10F12', magic=0xd23c, total=16384, code=12288, eeprom=0), - MCUModel(name='IAP10F14', magic=0xd23e, total=16384, code=14336, eeprom=0), - MCUModel(name='STC10L02XE', magic=0xd2e2, total=16384, code=2048, eeprom=12288), - MCUModel(name='STC10L04XE', magic=0xd2e4, total=16384, code=4096, eeprom=10240), - MCUModel(name='STC10L06XE', magic=0xd2e6, total=16384, code=6144, eeprom=8192), - MCUModel(name='STC10L08XE', magic=0xd2e8, total=16384, code=8192, eeprom=6144), - MCUModel(name='STC10L10XE', magic=0xd2ea, total=16384, code=10240, eeprom=4096), - MCUModel(name='STC10L12XE', magic=0xd2ec, total=16384, code=12288, eeprom=2048), - MCUModel(name='STC10L02X', magic=0xd2c2, total=16384, code=2048, eeprom=0), - MCUModel(name='STC10L04X', magic=0xd2c4, total=16384, code=4096, eeprom=0), - MCUModel(name='STC10L06X', magic=0xd2c6, total=16384, code=6144, eeprom=0), - MCUModel(name='STC10L08X', magic=0xd2c8, total=16384, code=8192, eeprom=0), - MCUModel(name='STC10L10X', magic=0xd2ca, total=16384, code=10240, eeprom=0), - MCUModel(name='STC10L12X', magic=0xd2cc, total=16384, code=12288, eeprom=0), - MCUModel(name='STC10L02', magic=0xd282, total=16384, code=2048, eeprom=0), - MCUModel(name='STC10L04', magic=0xd284, total=16384, code=4096, eeprom=0), - MCUModel(name='STC10L06', magic=0xd286, total=16384, code=6144, eeprom=0), - MCUModel(name='STC10L08', magic=0xd288, total=16384, code=8192, eeprom=0), - MCUModel(name='STC10L10', magic=0xd28a, total=16384, code=10240, eeprom=0), - MCUModel(name='STC10L12', magic=0xd28c, total=16384, code=12288, eeprom=0), - MCUModel(name='IAP10L02XE', magic=0xd2f2, total=16384, code=2048, eeprom=0), - MCUModel(name='IAP10L04XE', magic=0xd2f4, total=16384, code=4096, eeprom=0), - MCUModel(name='IAP10L06XE', magic=0xd2f6, total=16384, code=6144, eeprom=0), - MCUModel(name='IAP10L08XE', magic=0xd2f8, total=16384, code=8192, eeprom=0), - MCUModel(name='IAP10L10XE', magic=0xd2fa, total=16384, code=10240, eeprom=0), - MCUModel(name='IAP10L12XE', magic=0xd2fc, total=16384, code=12288, eeprom=0), - MCUModel(name='IAP10L14X', magic=0xd2fe, total=16384, code=14336, eeprom=0), - MCUModel(name='IAP10L02', magic=0xd2b2, total=16384, code=2048, eeprom=0), - MCUModel(name='IAP10L04', magic=0xd2b4, total=16384, code=4096, eeprom=0), - MCUModel(name='IAP10L06', magic=0xd2b6, total=16384, code=6144, eeprom=0), - MCUModel(name='IAP10L08', magic=0xd2b8, total=16384, code=8192, eeprom=0), - MCUModel(name='IAP10L10', magic=0xd2ba, total=16384, code=10240, eeprom=0), - MCUModel(name='IAP10L12', magic=0xd2bc, total=16384, code=12288, eeprom=0), - MCUModel(name='IAP10L14', magic=0xd2be, total=16384, code=14336, eeprom=0), - MCUModel(name='STC02XE-5V', magic=0xd260, total=16384, code=2048, eeprom=12288), - MCUModel(name='STC04XE-5V', magic=0xd261, total=16384, code=4096, eeprom=10240), - MCUModel(name='STC06XE-5V', magic=0xd263, total=16384, code=6144, eeprom=8192), - MCUModel(name='STC08XE-5V', magic=0xd265, total=16384, code=8192, eeprom=6144), - MCUModel(name='STC10XE-5V', magic=0xd267, total=16384, code=10240, eeprom=4096), - MCUModel(name='STC12XE-5V', magic=0xd269, total=16384, code=12288, eeprom=2048), - MCUModel(name='IAP14X-5V', magic=0xd26b, total=16384, code=14336, eeprom=0), - MCUModel(name='STC02XE-3V', magic=0xd2e0, total=16384, code=2048, eeprom=12288), - MCUModel(name='STC04XE-3V', magic=0xd2e1, total=16384, code=4096, eeprom=10240), - MCUModel(name='STC06XE-3V', magic=0xd2e3, total=16384, code=6144, eeprom=8192), - MCUModel(name='STC08XE-3V', magic=0xd2e5, total=16384, code=8192, eeprom=6144), - MCUModel(name='STC10XE-3V', magic=0xd2e7, total=16384, code=10240, eeprom=4096), - MCUModel(name='STC12XE-3V', magic=0xd2e9, total=16384, code=12288, eeprom=2048), - MCUModel(name='IAP14X-3V', magic=0xd2eb, total=16384, code=14336, eeprom=0), - MCUModel(name='STC11F01E', magic=0xe221, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC11F02E', magic=0xe222, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC11F03E', magic=0xe223, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC11F04E', magic=0xe224, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC11F05E', magic=0xe265, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC11F01', magic=0xe201, total=8192, code=1024, eeprom=0), - MCUModel(name='STC11F02', magic=0xe202, total=8192, code=2048, eeprom=0), - MCUModel(name='STC11F03', magic=0xe203, total=8192, code=3072, eeprom=0), - MCUModel(name='STC11F04', magic=0xe204, total=8192, code=4096, eeprom=0), - MCUModel(name='STC11F05', magic=0xe245, total=8192, code=5120, eeprom=0), - MCUModel(name='IAP11F01E', magic=0xe231, total=8192, code=1024, eeprom=0), - MCUModel(name='IAP11F02E', magic=0xe232, total=8192, code=2048, eeprom=0), - MCUModel(name='IAP11F03E', magic=0xe233, total=8192, code=3072, eeprom=0), - MCUModel(name='IAP11F04E', magic=0xe234, total=8192, code=4096, eeprom=0), - MCUModel(name='IAP11F05E', magic=0xe275, total=8192, code=5120, eeprom=0), - MCUModel(name='IAP11F01', magic=0xe211, total=8192, code=1024, eeprom=0), - MCUModel(name='IAP11F02', magic=0xe212, total=8192, code=2048, eeprom=0), - MCUModel(name='IAP11F03', magic=0xe213, total=8192, code=3072, eeprom=0), - MCUModel(name='IAP11F04', magic=0xe214, total=8192, code=4096, eeprom=0), - MCUModel(name='IAP11F05', magic=0xe255, total=8192, code=5120, eeprom=0), - MCUModel(name='IAP11F06', magic=0xe276, total=8192, code=6144, eeprom=0), - MCUModel(name='STC11L01E', magic=0xe2a1, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC11L02E', magic=0xe2a2, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC11L03E', magic=0xe2a3, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC11L04E', magic=0xe2a4, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC11L05E', magic=0xe2e5, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC11L01', magic=0xe281, total=8192, code=1024, eeprom=0), - MCUModel(name='STC11L02', magic=0xe282, total=8192, code=2048, eeprom=0), - MCUModel(name='STC11L03', magic=0xe283, total=8192, code=3072, eeprom=0), - MCUModel(name='STC11L04', magic=0xe284, total=8192, code=4096, eeprom=0), - MCUModel(name='STC11L05', magic=0xe2c5, total=8192, code=5120, eeprom=0), - MCUModel(name='IAP11L01E', magic=0xe2b1, total=8192, code=1024, eeprom=0), - MCUModel(name='IAP11L02E', magic=0xe2b2, total=8192, code=2048, eeprom=0), - MCUModel(name='IAP11L03E', magic=0xe2b3, total=8192, code=3072, eeprom=0), - MCUModel(name='IAP11L04E', magic=0xe2b4, total=8192, code=4096, eeprom=0), - MCUModel(name='IAP11L05E', magic=0xe2f5, total=8192, code=5120, eeprom=0), - MCUModel(name='IAP11L01', magic=0xe291, total=8192, code=1024, eeprom=0), - MCUModel(name='IAP11L02', magic=0xe292, total=8192, code=2048, eeprom=0), - MCUModel(name='IAP11L03', magic=0xe293, total=8192, code=3072, eeprom=0), - MCUModel(name='IAP11L04', magic=0xe294, total=8192, code=4096, eeprom=0), - MCUModel(name='IAP11L05', magic=0xe2d5, total=8192, code=5120, eeprom=0), - MCUModel(name='IAP11L06', magic=0xe2f6, total=8192, code=6144, eeprom=0), - MCUModel(name='STC01E-5V', magic=0xe220, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC02E-5V', magic=0xe226, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC03E-5V', magic=0xe227, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC04E-5V', magic=0xe228, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC05E-5V', magic=0xe229, total=8192, code=5120, eeprom=1024), - MCUModel(name='IAP06-5V', magic=0xe22a, total=8192, code=6144, eeprom=0), - MCUModel(name='STC01E-3V', magic=0xe2a0, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC02E-3V', magic=0xe2a6, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC03E-3V', magic=0xe2a7, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC04E-3V', magic=0xe2a8, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC05E-3V', magic=0xe2a9, total=8192, code=5120, eeprom=1024), - MCUModel(name='IAP06-3V', magic=0xe2aa, total=8192, code=6144, eeprom=0), - MCUModel(name='STC11F08XE', magic=0xd364, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC11F16XE', magic=0xd368, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC11F20XE', magic=0xd36a, total=65536, code=20480, eeprom=30720), - MCUModel(name='STC11F32XE', magic=0xd370, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC11F40XE', magic=0xd374, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC11F48XE', magic=0xd378, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC11F52XE', magic=0xd37a, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC11F56XE', magic=0xd37c, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC11F60XE', magic=0xd37e, total=65536, code=61440, eeprom=2048), - MCUModel(name='STC11F08X', magic=0xd344, total=65536, code=8192, eeprom=0), - MCUModel(name='STC11F16X', magic=0xd348, total=65536, code=16384, eeprom=0), - MCUModel(name='STC11F20X', magic=0xd34a, total=65536, code=20480, eeprom=0), - MCUModel(name='STC11F32X', magic=0xd350, total=65536, code=32768, eeprom=0), - MCUModel(name='STC11F40X', magic=0xd354, total=65536, code=40960, eeprom=0), - MCUModel(name='STC11F48X', magic=0xd358, total=65536, code=49152, eeprom=0), - MCUModel(name='STC11F52X', magic=0xd35a, total=65536, code=53248, eeprom=0), - MCUModel(name='STC11F56X', magic=0xd35c, total=65536, code=57344, eeprom=0), - MCUModel(name='STC11F60X', magic=0xd35e, total=65536, code=61440, eeprom=0), - MCUModel(name='STC11F08', magic=0xd304, total=65536, code=8192, eeprom=0), - MCUModel(name='STC11F16', magic=0xd308, total=65536, code=16384, eeprom=0), - MCUModel(name='STC11F20', magic=0xd30a, total=65536, code=20480, eeprom=0), - MCUModel(name='STC11F32', magic=0xd310, total=65536, code=32768, eeprom=0), - MCUModel(name='STC11F40', magic=0xd314, total=65536, code=40960, eeprom=0), - MCUModel(name='STC11F48', magic=0xd318, total=65536, code=49152, eeprom=0), - MCUModel(name='STC11F52', magic=0xd31a, total=65536, code=53248, eeprom=0), - MCUModel(name='STC11F56', magic=0xd31c, total=65536, code=57344, eeprom=0), - MCUModel(name='STC11F60', magic=0xd31e, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP11F08XE', magic=0xd363, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP11F16XE', magic=0xd367, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP11F20XE', magic=0xd369, total=65536, code=20480, eeprom=0), - MCUModel(name='IAP11F32XE', magic=0xd36f, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP11F40XE', magic=0xd373, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP11F48XE', magic=0xd377, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP11F52XE', magic=0xd379, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP11F56XE', magic=0xd37b, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP11F60XE', magic=0xd37d, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP11F08X', magic=0xd343, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP11F16X', magic=0xd347, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP11F20X', magic=0xd349, total=65536, code=20480, eeprom=0), - MCUModel(name='IAP11F32X', magic=0xd34f, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP11F40X', magic=0xd353, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP11F48X', magic=0xd357, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP11F52X', magic=0xd359, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP11F56X', magic=0xd35b, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP11F60X', magic=0xd35d, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP11F62X', magic=0xd35f, total=65536, code=63488, eeprom=0), - MCUModel(name='IAP11F08', magic=0xd303, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP11F16', magic=0xd307, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP11F20', magic=0xd309, total=65536, code=20480, eeprom=0), - MCUModel(name='IAP11F32', magic=0xd30f, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP11F40', magic=0xd313, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP11F48', magic=0xd317, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP11F52', magic=0xd319, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP11F56', magic=0xd31b, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP11F60', magic=0xd31d, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP11F62', magic=0xd31f, total=65536, code=63488, eeprom=0), - MCUModel(name='STC11L08XE', magic=0xd3e4, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC11L16XE', magic=0xd3e8, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC11L20XE', magic=0xd3ea, total=65536, code=20480, eeprom=30720), - MCUModel(name='STC11L32XE', magic=0xd3f0, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC11L40XE', magic=0xd3f4, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC11L48XE', magic=0xd3f8, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC11L52XE', magic=0xd3fa, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC11L56XE', magic=0xd3fc, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC11L60XE', magic=0xd3fe, total=65536, code=61440, eeprom=2048), - MCUModel(name='STC11L08X', magic=0xd3c4, total=65536, code=8192, eeprom=0), - MCUModel(name='STC11L16X', magic=0xd3c8, total=65536, code=16384, eeprom=0), - MCUModel(name='STC11L20X', magic=0xd3ca, total=65536, code=20480, eeprom=0), - MCUModel(name='STC11L32X', magic=0xd3d0, total=65536, code=32768, eeprom=0), - MCUModel(name='STC11L40X', magic=0xd3d4, total=65536, code=40960, eeprom=0), - MCUModel(name='STC11L48X', magic=0xd3d8, total=65536, code=49152, eeprom=0), - MCUModel(name='STC11L52X', magic=0xd3da, total=65536, code=53248, eeprom=0), - MCUModel(name='STC11L56X', magic=0xd3dc, total=65536, code=57344, eeprom=0), - MCUModel(name='STC11L60X', magic=0xd3de, total=65536, code=61440, eeprom=0), - MCUModel(name='STC11L08', magic=0xd384, total=65536, code=8192, eeprom=0), - MCUModel(name='STC11L16', magic=0xd388, total=65536, code=16384, eeprom=0), - MCUModel(name='STC11L20', magic=0xd38a, total=65536, code=20480, eeprom=0), - MCUModel(name='STC11L32', magic=0xd390, total=65536, code=32768, eeprom=0), - MCUModel(name='STC11L40', magic=0xd394, total=65536, code=40960, eeprom=0), - MCUModel(name='STC11L48', magic=0xd398, total=65536, code=49152, eeprom=0), - MCUModel(name='STC11L52', magic=0xd39a, total=65536, code=53248, eeprom=0), - MCUModel(name='STC11L56', magic=0xd39c, total=65536, code=57344, eeprom=0), - MCUModel(name='STC11L60', magic=0xd39e, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP11L08XE', magic=0xd3e3, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP11L16XE', magic=0xd3e7, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP11L20XE', magic=0xd3e9, total=65536, code=20480, eeprom=0), - MCUModel(name='IAP11L32XE', magic=0xd3ef, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP11L40XE', magic=0xd3f3, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP11L48XE', magic=0xd3f7, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP11L52XE', magic=0xd3f9, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP11L56XE', magic=0xd3fb, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP11L60XE', magic=0xd3fd, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP11L08X', magic=0xd3c3, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP11L16X', magic=0xd3c7, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP11L20X', magic=0xd3c9, total=65536, code=20480, eeprom=0), - MCUModel(name='IAP11L32X', magic=0xd3cf, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP11L40X', magic=0xd3d3, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP11L48X', magic=0xd3d7, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP11L52X', magic=0xd3d9, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP11L56X', magic=0xd3db, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP11L60X', magic=0xd3dd, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP11L62X', magic=0xd3df, total=65536, code=63488, eeprom=0), - MCUModel(name='IAP11L08', magic=0xd383, total=65536, code=8192, eeprom=0), - MCUModel(name='IAP11L16', magic=0xd387, total=65536, code=16384, eeprom=0), - MCUModel(name='IAP11L20', magic=0xd389, total=65536, code=20480, eeprom=0), - MCUModel(name='IAP11L32', magic=0xd38f, total=65536, code=32768, eeprom=0), - MCUModel(name='IAP11L40', magic=0xd393, total=65536, code=40960, eeprom=0), - MCUModel(name='IAP11L48', magic=0xd397, total=65536, code=49152, eeprom=0), - MCUModel(name='IAP11L52', magic=0xd399, total=65536, code=53248, eeprom=0), - MCUModel(name='IAP11L56', magic=0xd39b, total=65536, code=57344, eeprom=0), - MCUModel(name='IAP11L60', magic=0xd39d, total=65536, code=61440, eeprom=0), - MCUModel(name='IAP11L62', magic=0xd39f, total=65536, code=63488, eeprom=0), - MCUModel(name='STC08XE-5V', magic=0xd360, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC16XE-5V', magic=0xd361, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC20XE-5V', magic=0xd362, total=65536, code=20480, eeprom=30720), - MCUModel(name='STC32XE-5V', magic=0xd365, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC40XE-5V', magic=0xd366, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC48XE-5V', magic=0xd36b, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC52XE-5V', magic=0xd36c, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC56XE-5V', magic=0xd36d, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC60XE-5V', magic=0xd36e, total=65536, code=61440, eeprom=2048), - MCUModel(name='IAP62X-5V', magic=0xd371, total=65536, code=63488, eeprom=0), - MCUModel(name='STC08XE-3V', magic=0xd3e0, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC16XE-3V', magic=0xd3e1, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC20XE-3V', magic=0xd3e2, total=65536, code=20480, eeprom=30720), - MCUModel(name='STC32XE-3V', magic=0xd3e5, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC40XE-3V', magic=0xd3e6, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC48XE-3V', magic=0xd3eb, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC52XE-3V', magic=0xd3ec, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC56XE-3V', magic=0xd3ed, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC60XE-3V', magic=0xd3ee, total=65536, code=61440, eeprom=2048), - MCUModel(name='IAP62X-3V', magic=0xd3f1, total=65536, code=63488, eeprom=0), - MCUModel(name='STC12C5201AD', magic=0xe161, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC12C5202AD', magic=0xe162, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC12C5203AD', magic=0xe163, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC12C5204AD', magic=0xe164, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC12C5205AD', magic=0xe165, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC12C5206AD', magic=0xe166, total=8192, code=6144, eeprom=0), - MCUModel(name='STC12C5201PWM', magic=0xe121, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC12C5202PWM', magic=0xe122, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC12C5203PWM', magic=0xe123, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC12C5204PWM', magic=0xe124, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC12C5205PWM', magic=0xe125, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC12C5206PWM', magic=0xe126, total=8192, code=6144, eeprom=0), - MCUModel(name='STC12C5201', magic=0xe101, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC12C5202', magic=0xe102, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC12C5203', magic=0xe103, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC12C5204', magic=0xe104, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC12C5205', magic=0xe105, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC12C5206', magic=0xe106, total=8192, code=6144, eeprom=0), - MCUModel(name='STC12LE5201AD', magic=0xe1e1, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC12LE5202AD', magic=0xe1e2, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC12LE5203AD', magic=0xe1e3, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC12LE5204AD', magic=0xe1e4, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC12LE5205AD', magic=0xe1e5, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC12LE5206AD', magic=0xe1e6, total=8192, code=6144, eeprom=0), - MCUModel(name='STC12LE5201PWM', magic=0xe1a1, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC12LE5202PWM', magic=0xe1a2, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC12LE5203PWM', magic=0xe1a3, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC12LE5204PWM', magic=0xe1a4, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC12LE5205PWM', magic=0xe1a5, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC12LE5206PWM', magic=0xe1a6, total=8192, code=6144, eeprom=0), - MCUModel(name='STC12LE5201', magic=0xe181, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC12LE5202', magic=0xe182, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC12LE5203', magic=0xe183, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC12LE5204', magic=0xe184, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC12LE5205', magic=0xe185, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC12LE5206', magic=0xe186, total=8192, code=6144, eeprom=0), - MCUModel(name='STC5201AD-5V', magic=0xe168, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC5202AD-5V', magic=0xe169, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC5203AD-5V', magic=0xe16a, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC5204AD-5V', magic=0xe16b, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC5205AD-5V', magic=0xe16c, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC5206AD-5V', magic=0xe16d, total=8192, code=6144, eeprom=0), - MCUModel(name='STC5201AD-3V', magic=0xe1e8, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC5202AD-3V', magic=0xe1e9, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC5203AD-3V', magic=0xe1ea, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC5204AD-3V', magic=0xe1eb, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC5205AD-3V', magic=0xe1ec, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC5206AD-3V', magic=0xe1ed, total=8192, code=6144, eeprom=0), - MCUModel(name='STC12C5601AD', magic=0xe661, total=32768, code=1024, eeprom=29696), - MCUModel(name='STC12C5602AD', magic=0xe662, total=32768, code=2048, eeprom=28672), - MCUModel(name='STC12C5603AD', magic=0xe663, total=32768, code=3072, eeprom=27648), - MCUModel(name='STC12C5604AD', magic=0xe664, total=32768, code=4096, eeprom=26624), - MCUModel(name='STC12C5605AD', magic=0xe665, total=32768, code=5120, eeprom=0), - MCUModel(name='STC12C5606AD', magic=0xe666, total=32768, code=6144, eeprom=24576), - MCUModel(name='STC12C5608AD', magic=0xe668, total=32768, code=8192, eeprom=22528), - MCUModel(name='STC12C5612AD', magic=0xe66c, total=32768, code=12288, eeprom=0), - MCUModel(name='STC12C5616AD', magic=0xe670, total=32768, code=16384, eeprom=14336), - MCUModel(name='STC12C5620AD', magic=0xe674, total=32768, code=20480, eeprom=10240), - MCUModel(name='STC12C5624AD', magic=0xe678, total=32768, code=24576, eeprom=6144), - MCUModel(name='STC12C5628AD', magic=0xe67c, total=32768, code=28672, eeprom=0), - MCUModel(name='STC12C5630AD', magic=0xe67e, total=32768, code=30720, eeprom=0), - MCUModel(name='STC12C5601', magic=0xe601, total=32768, code=1024, eeprom=29696), - MCUModel(name='STC12C5602', magic=0xe602, total=32768, code=2048, eeprom=28672), - MCUModel(name='STC12C5603', magic=0xe603, total=32768, code=3072, eeprom=27648), - MCUModel(name='STC12C5604', magic=0xe604, total=32768, code=4096, eeprom=26624), - MCUModel(name='STC12C5605', magic=0xe605, total=32768, code=5120, eeprom=0), - MCUModel(name='STC12C5606', magic=0xe606, total=32768, code=6144, eeprom=24576), - MCUModel(name='STC12C5608', magic=0xe608, total=32768, code=8192, eeprom=22528), - MCUModel(name='STC12C5612', magic=0xe60c, total=32768, code=12288, eeprom=0), - MCUModel(name='STC12C5616', magic=0xe610, total=32768, code=16384, eeprom=14336), - MCUModel(name='STC12C5620', magic=0xe614, total=32768, code=20480, eeprom=10240), - MCUModel(name='STC12C5624', magic=0xe618, total=32768, code=24576, eeprom=6144), - MCUModel(name='STC12C5628', magic=0xe61c, total=32768, code=28672, eeprom=0), - MCUModel(name='STC12C5630', magic=0xe61e, total=32768, code=30720, eeprom=0), - MCUModel(name='STC12LE5601AD', magic=0xe6e1, total=32768, code=1024, eeprom=29696), - MCUModel(name='STC12LE5602AD', magic=0xe6e2, total=32768, code=2048, eeprom=28672), - MCUModel(name='STC12LE5603AD', magic=0xe6e3, total=32768, code=3072, eeprom=27648), - MCUModel(name='STC12LE5604AD', magic=0xe6e4, total=32768, code=4096, eeprom=26624), - MCUModel(name='STC12LE5605AD', magic=0xe6e5, total=32768, code=5120, eeprom=0), - MCUModel(name='STC12LE5606AD', magic=0xe6e6, total=32768, code=6144, eeprom=24576), - MCUModel(name='STC12LE5608AD', magic=0xe6e8, total=32768, code=8192, eeprom=22528), - MCUModel(name='STC12LE5612AD', magic=0xe6ec, total=32768, code=12288, eeprom=0), - MCUModel(name='STC12LE5616AD', magic=0xe6f0, total=32768, code=16384, eeprom=14336), - MCUModel(name='STC12LE5620AD', magic=0xe6f4, total=32768, code=20480, eeprom=10240), - MCUModel(name='STC12LE5624AD', magic=0xe6f8, total=32768, code=24576, eeprom=6144), - MCUModel(name='STC12LE5628AD', magic=0xe6fc, total=32768, code=28672, eeprom=0), - MCUModel(name='STC12LE5630AD', magic=0xe6fe, total=32768, code=30720, eeprom=0), - MCUModel(name='STC12LE5601', magic=0xe681, total=32768, code=1024, eeprom=29696), - MCUModel(name='STC12LE5602', magic=0xe682, total=32768, code=2048, eeprom=28672), - MCUModel(name='STC12LE5603', magic=0xe683, total=32768, code=3072, eeprom=27648), - MCUModel(name='STC12LE5604', magic=0xe684, total=32768, code=4096, eeprom=26624), - MCUModel(name='STC12LE5605', magic=0xe685, total=32768, code=5120, eeprom=0), - MCUModel(name='STC12LE5606', magic=0xe686, total=32768, code=6144, eeprom=24576), - MCUModel(name='STC12LE5608', magic=0xe688, total=32768, code=8192, eeprom=22528), - MCUModel(name='STC12LE5612', magic=0xe68c, total=32768, code=12288, eeprom=0), - MCUModel(name='STC12LE5616', magic=0xe690, total=32768, code=16384, eeprom=14336), - MCUModel(name='STC12LE5620', magic=0xe694, total=32768, code=20480, eeprom=10240), - MCUModel(name='STC12LE5624', magic=0xe698, total=32768, code=24576, eeprom=6144), - MCUModel(name='STC12LE5628', magic=0xe69c, total=32768, code=28672, eeprom=0), - MCUModel(name='STC12LE5630', magic=0xe69e, total=32768, code=30720, eeprom=0), - MCUModel(name='STC608AD-5V', magic=0xe667, total=32768, code=8192, eeprom=22528), - MCUModel(name='STC616AD-5V', magic=0xe66a, total=32768, code=16384, eeprom=14336), - MCUModel(name='IAP616AD-5V', magic=0xe669, total=32768, code=16384, eeprom=0), - MCUModel(name='STC608AD-3V', magic=0xe6e7, total=32768, code=8192, eeprom=22528), - MCUModel(name='STC616AD-3V', magic=0xe6ea, total=32768, code=16384, eeprom=14336), - MCUModel(name='IAP616AD-3V', magic=0xe6e9, total=32768, code=16384, eeprom=0), - MCUModel(name='STC12C5401AD', magic=0xe061, total=32768, code=1024, eeprom=12288), - MCUModel(name='STC12C5402AD', magic=0xe062, total=32768, code=2048, eeprom=12288), - MCUModel(name='STC12C5404AD', magic=0xe064, total=32768, code=4096, eeprom=12288), - MCUModel(name='STC12C5406AD', magic=0xe066, total=32768, code=6144, eeprom=12288), - MCUModel(name='STC12C5408AD', magic=0xe068, total=32768, code=8192, eeprom=12288), - MCUModel(name='STC12C5410AD', magic=0xe06a, total=32768, code=10240, eeprom=12288), - MCUModel(name='STC12C5412AD', magic=0xe06c, total=32768, code=12288, eeprom=12288), - MCUModel(name='STC12C5416AD', magic=0xe070, total=32768, code=16384, eeprom=12288), - MCUModel(name='STC12C5420AD', magic=0xe074, total=32768, code=20480, eeprom=12288), - MCUModel(name='STC12C5424AD', magic=0xe078, total=32768, code=24576, eeprom=12288), - MCUModel(name='STC12C5428AD', magic=0xe07c, total=32768, code=28672, eeprom=12288), - MCUModel(name='STC12C5401', magic=0xe001, total=32768, code=1024, eeprom=12288), - MCUModel(name='STC12C5402', magic=0xe002, total=32768, code=2048, eeprom=12288), - MCUModel(name='STC12C5404', magic=0xe004, total=32768, code=4096, eeprom=12288), - MCUModel(name='STC12C5406', magic=0xe006, total=32768, code=6144, eeprom=12288), - MCUModel(name='STC12C5408', magic=0xe008, total=32768, code=8192, eeprom=12288), - MCUModel(name='STC12C5410', magic=0xe00a, total=32768, code=10240, eeprom=12288), - MCUModel(name='STC12C5412', magic=0xe00c, total=32768, code=12288, eeprom=12288), - MCUModel(name='STC12C5416', magic=0xe010, total=32768, code=16384, eeprom=12288), - MCUModel(name='STC12C5420', magic=0xe014, total=32768, code=20480, eeprom=12288), - MCUModel(name='STC12C5424', magic=0xe018, total=32768, code=24576, eeprom=12288), - MCUModel(name='STC12C5428', magic=0xe01c, total=32768, code=28672, eeprom=12288), - MCUModel(name='STC12LE5401AD', magic=0xe0e1, total=32768, code=1024, eeprom=12288), - MCUModel(name='STC12LE5402AD', magic=0xe0e2, total=32768, code=2048, eeprom=12288), - MCUModel(name='STC12LE5404AD', magic=0xe0e4, total=32768, code=4096, eeprom=12288), - MCUModel(name='STC12LE5406AD', magic=0xe0e6, total=32768, code=6144, eeprom=12288), - MCUModel(name='STC12LE5408AD', magic=0xe0e8, total=32768, code=8192, eeprom=12288), - MCUModel(name='STC12LE5410AD', magic=0xe0ea, total=32768, code=10240, eeprom=12288), - MCUModel(name='STC12LE5412AD', magic=0xe0ec, total=32768, code=12288, eeprom=12288), - MCUModel(name='STC12LE5416AD', magic=0xe0f0, total=32768, code=16384, eeprom=12288), - MCUModel(name='STC12LE5420AD', magic=0xe0f4, total=32768, code=20480, eeprom=12288), - MCUModel(name='STC12LE5424AD', magic=0xe0f8, total=32768, code=24576, eeprom=12288), - MCUModel(name='STC12LE5428AD', magic=0xe0fc, total=32768, code=28672, eeprom=12288), - MCUModel(name='STC12LE5401', magic=0xe081, total=32768, code=1024, eeprom=12288), - MCUModel(name='STC12LE5402', magic=0xe082, total=32768, code=2048, eeprom=12288), - MCUModel(name='STC12LE5404', magic=0xe084, total=32768, code=4096, eeprom=12288), - MCUModel(name='STC12LE5406', magic=0xe086, total=32768, code=6144, eeprom=12288), - MCUModel(name='STC12LE5408', magic=0xe088, total=32768, code=8192, eeprom=12288), - MCUModel(name='STC12LE5410', magic=0xe08a, total=32768, code=10240, eeprom=12288), - MCUModel(name='STC12LE5412', magic=0xe08c, total=32768, code=12288, eeprom=12288), - MCUModel(name='STC12LE5416', magic=0xe090, total=32768, code=16384, eeprom=12288), - MCUModel(name='STC12LE5420', magic=0xe094, total=32768, code=20480, eeprom=12288), - MCUModel(name='STC12LE5424', magic=0xe098, total=32768, code=24576, eeprom=12288), - MCUModel(name='STC12LE5428', magic=0xe09c, total=32768, code=28672, eeprom=12288), - MCUModel(name='STC12C1052AD', magic=0xf211, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC12C2052AD', magic=0xf212, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC12C3052AD', magic=0xf213, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC12C4052AD', magic=0xf214, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC12C5052AD', magic=0xf215, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC12C1052', magic=0xf201, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC12C2052', magic=0xf202, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC12C3052', magic=0xf203, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC12C4052', magic=0xf204, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC12C5052', magic=0xf205, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC12LE1052AD', magic=0xf231, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC12LE2052AD', magic=0xf232, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC12LE3052AD', magic=0xf233, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC12LE4052AD', magic=0xf234, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC12LE5052AD', magic=0xf235, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC12LE1052', magic=0xf221, total=8192, code=1024, eeprom=5120), - MCUModel(name='STC12LE2052', magic=0xf222, total=8192, code=2048, eeprom=4096), - MCUModel(name='STC12LE3052', magic=0xf223, total=8192, code=3072, eeprom=3072), - MCUModel(name='STC12LE4052', magic=0xf224, total=8192, code=4096, eeprom=2048), - MCUModel(name='STC12LE5052', magic=0xf225, total=8192, code=5120, eeprom=1024), - MCUModel(name='STC89C51', magic=0xf050, total=16384, code=4096, eeprom=10240), - MCUModel(name='STC89C52', magic=0xf051, total=16384, code=8192, eeprom=6144), - MCUModel(name='STC89C53', magic=0xf052, total=16384, code=12288, eeprom=2048), - MCUModel(name='STC89C14', magic=0xf053, total=16384, code=14336, eeprom=0), - MCUModel(name='STC89LE51', magic=0xf060, total=16384, code=4096, eeprom=10240), - MCUModel(name='STC89LE52', magic=0xf061, total=16384, code=8192, eeprom=6144), - MCUModel(name='STC89LE53', magic=0xf062, total=16384, code=12288, eeprom=2048), - MCUModel(name='STC89LE14', magic=0xf063, total=16384, code=14336, eeprom=0), - MCUModel(name='STC89C54', magic=0xf1a0, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC89C58', magic=0xf1a1, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC89C510', magic=0xf1a2, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC89C512', magic=0xf1a3, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC89C514', magic=0xf1a4, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC89C516', magic=0xf1a5, total=65536, code=63488, eeprom=0), - MCUModel(name='STC89LE54', magic=0xf1b0, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC89LE58', magic=0xf1b1, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC89LE510', magic=0xf1b2, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC89LE512', magic=0xf1b3, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC89LE514', magic=0xf1b4, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC89LE516', magic=0xf1b5, total=65536, code=63488, eeprom=0), - MCUModel(name='STC89C51RC/LE51R', magic=0xf001, total=16384, code=4096, eeprom=10240), - MCUModel(name='STC89C52RC/LE52R', magic=0xf002, total=16384, code=8192, eeprom=6144), - MCUModel(name='STC89C53RC/LE53R', magic=0xf004, total=16384, code=14336, eeprom=0), - MCUModel(name='STC89C06RC/LE06R', magic=0xf006, total=16384, code=6144, eeprom=8192), - MCUModel(name='STC89C07RC/LE07R', magic=0xf007, total=16384, code=7168, eeprom=7168), - MCUModel(name='STC89C10RC/LE10R', magic=0xf00a, total=16384, code=10240, eeprom=4096), - MCUModel(name='STC89C12RC/LE12R', magic=0xf00c, total=16384, code=12288, eeprom=2048), - MCUModel(name='STC89C51RD+/LE51', magic=0xf101, total=65536, code=4096, eeprom=59392), - MCUModel(name='STC89C52RD+/LE52', magic=0xf102, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC89C54RD+/LE54', magic=0xf104, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC89C55RD+/LE55', magic=0xf105, total=65536, code=20480, eeprom=43008), - MCUModel(name='STC89C58RD+/LE58', magic=0xf108, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC89C510RD+/LE5', magic=0xf10a, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC89C512RD+/LE5', magic=0xf10c, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC89C513RD+/LE5', magic=0xf10d, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC89C514RD+/LE5', magic=0xf10e, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC89C516RD+/LE5', magic=0xf110, total=65536, code=63488, eeprom=0), - MCUModel(name='STC89C516RD/LV51', magic=0xffff, total=65536, code=65536, eeprom=0), - MCUModel(name='STC90C51RC', magic=0xf021, total=16384, code=4096, eeprom=10240), - MCUModel(name='STC90C52RC', magic=0xf022, total=16384, code=8192, eeprom=6144), - MCUModel(name='STC90C53RC', magic=0xf024, total=16384, code=14336, eeprom=0), - MCUModel(name='STC90C06RC', magic=0xf026, total=16384, code=6144, eeprom=8192), - MCUModel(name='STC90C07RC', magic=0xf027, total=16384, code=7168, eeprom=7168), - MCUModel(name='STC90C10RC', magic=0xf02a, total=16384, code=10240, eeprom=4096), - MCUModel(name='STC90C12RC', magic=0xf02c, total=16384, code=12288, eeprom=2048), - MCUModel(name='STC90LE51RC', magic=0xf041, total=16384, code=4096, eeprom=10240), - MCUModel(name='STC90LE52RC', magic=0xf042, total=16384, code=8192, eeprom=6144), - MCUModel(name='STC90LE53RC', magic=0xf044, total=16384, code=14336, eeprom=0), - MCUModel(name='STC90LE06RC', magic=0xf046, total=16384, code=6144, eeprom=8192), - MCUModel(name='STC90LE07RC', magic=0xf047, total=16384, code=7168, eeprom=7168), - MCUModel(name='STC90LE10RC', magic=0xf04a, total=16384, code=10240, eeprom=4096), - MCUModel(name='STC90LE12RC', magic=0xf04c, total=16384, code=12288, eeprom=2048), - MCUModel(name='STC90C51RD+', magic=0xf121, total=65536, code=4096, eeprom=59392), - MCUModel(name='STC90C52RD+', magic=0xf122, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC90C54RD+', magic=0xf124, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC90C55RD+', magic=0xf125, total=65536, code=20480, eeprom=43008), - MCUModel(name='STC90C58RD+', magic=0xf128, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC90C510RD+', magic=0xf12a, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC90C512RD+', magic=0xf12c, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC90C513RD+', magic=0xf12d, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC90C514RD+', magic=0xf12e, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC90C516RD+', magic=0xf130, total=65536, code=63488, eeprom=0), - MCUModel(name='STC90LE51RD+', magic=0xf141, total=65536, code=4096, eeprom=59392), - MCUModel(name='STC90LE52RD+', magic=0xf142, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC90LE54RD+', magic=0xf144, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC90LE55RD+', magic=0xf145, total=65536, code=20480, eeprom=43008), - MCUModel(name='STC90LE58RD+', magic=0xf148, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC90LE510RD+', magic=0xf14a, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC90LE512RD+', magic=0xf14c, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC90LE513RD+', magic=0xf14d, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC90LE514RD+', magic=0xf14e, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC90LE516RD+', magic=0xf150, total=65536, code=63488, eeprom=0), - MCUModel(name='STC90C51AD', magic=0xf161, total=65536, code=4096, eeprom=59392), - MCUModel(name='STC90C52AD', magic=0xf162, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC90C54AD', magic=0xf164, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC90C55AD', magic=0xf165, total=65536, code=20480, eeprom=43008), - MCUModel(name='STC90C58AD', magic=0xf168, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC90C510AD', magic=0xf16a, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC90C512AD', magic=0xf16c, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC90C513AD', magic=0xf16d, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC90C514AD', magic=0xf16e, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC90C516AD', magic=0xf170, total=65536, code=63488, eeprom=0), - MCUModel(name='STC90LE51AD', magic=0xf181, total=65536, code=4096, eeprom=59392), - MCUModel(name='STC90LE52AD', magic=0xf182, total=65536, code=8192, eeprom=55296), - MCUModel(name='STC90LE54AD', magic=0xf184, total=65536, code=16384, eeprom=47104), - MCUModel(name='STC90LE55AD', magic=0xf185, total=65536, code=20480, eeprom=43008), - MCUModel(name='STC90LE58AD', magic=0xf188, total=65536, code=32768, eeprom=30720), - MCUModel(name='STC90LE510AD', magic=0xf18a, total=65536, code=40960, eeprom=22528), - MCUModel(name='STC90LE512AD', magic=0xf18c, total=65536, code=49152, eeprom=14336), - MCUModel(name='STC90LE513AD', magic=0xf18d, total=65536, code=53248, eeprom=10240), - MCUModel(name='STC90LE514AD', magic=0xf18e, total=65536, code=57344, eeprom=6144), - MCUModel(name='STC90LE516AD', magic=0xf190, total=65536, code=63488, eeprom=0), - - # Warning, these definitions lack a valid eeprom size. - # XXX: It's unknown whether these actually exist, they were removed in STC-ISP. - MCUModel(name='STC15F04AD', magic=0xd444, total=4096, code=4096, eeprom=0), - MCUModel(name='STC15F06AD', magic=0xd446, total=6144, code=6144, eeprom=0), - MCUModel(name='STC15F08AD', magic=0xd448, total=8192, code=8192, eeprom=0), - MCUModel(name='STC15F10AD', magic=0xd44a, total=10240, code=10240, eeprom=0), - MCUModel(name='STC15F12AD', magic=0xd44c, total=12288, code=12288, eeprom=0), - MCUModel(name='STC15F04CCP', magic=0xd434, total=4096, code=4096, eeprom=0), - MCUModel(name='STC15F06CCP', magic=0xd436, total=6144, code=6144, eeprom=0), - MCUModel(name='STC15F08CCP', magic=0xd438, total=8192, code=8192, eeprom=0), - MCUModel(name='STC15F10CCP', magic=0xd43a, total=10240, code=10240, eeprom=0), - MCUModel(name='STC15F12CCP', magic=0xd43c, total=12288, code=12288, eeprom=0), - MCUModel(name='STC15F04', magic=0xd404, total=4096, code=4096, eeprom=0), - MCUModel(name='STC15F06', magic=0xd406, total=6144, code=6144, eeprom=0), - MCUModel(name='STC15F08', magic=0xd408, total=8192, code=8192, eeprom=0), - MCUModel(name='STC15F10', magic=0xd40a, total=10240, code=10240, eeprom=0), - MCUModel(name='STC15F12', magic=0xd40c, total=12288, code=12288, eeprom=0), - MCUModel(name='IAP15F08AD', magic=0xd458, total=8192, code=8192, eeprom=0), - MCUModel(name='IAP15F10AD', magic=0xd45a, total=10240, code=10240, eeprom=0), - MCUModel(name='IAP15F12AD', magic=0xd45c, total=12288, code=12288, eeprom=0), - MCUModel(name='IAP15F14AD', magic=0xd45e, total=14336, code=14336, eeprom=0), - MCUModel(name='STC15L04AD', magic=0xd4c4, total=4096, code=4096, eeprom=0), - MCUModel(name='STC15L06AD', magic=0xd4c6, total=6144, code=6144, eeprom=0), - MCUModel(name='STC15L08AD', magic=0xd4c8, total=8192, code=8192, eeprom=0), - MCUModel(name='STC15L10AD', magic=0xd4ca, total=10240, code=10240, eeprom=0), - MCUModel(name='STC15L12AD', magic=0xd4cc, total=12288, code=12288, eeprom=0), - MCUModel(name='STC15L04CCP', magic=0xd4b4, total=4096, code=4096, eeprom=0), - MCUModel(name='STC15L06CCP', magic=0xd4b6, total=6144, code=6144, eeprom=0), - MCUModel(name='STC15L08CCP', magic=0xd4b8, total=8192, code=8192, eeprom=0), - MCUModel(name='STC15L10CCP', magic=0xd4ba, total=10240, code=10240, eeprom=0), - MCUModel(name='STC15L12CCP', magic=0xd4bc, total=12288, code=12288, eeprom=0), - MCUModel(name='STC15L04', magic=0xd484, total=4096, code=4096, eeprom=0), - MCUModel(name='STC15L06', magic=0xd486, total=6144, code=6144, eeprom=0), - MCUModel(name='STC15L08', magic=0xd488, total=8192, code=8192, eeprom=0), - MCUModel(name='STC15L10', magic=0xd48a, total=10240, code=10240, eeprom=0), - MCUModel(name='STC15L12', magic=0xd48c, total=12288, code=12288, eeprom=0), - MCUModel(name='IAP15L08AD', magic=0xd4d8, total=8192, code=8192, eeprom=0), - MCUModel(name='IAP15L10AD', magic=0xd4da, total=10240, code=10240, eeprom=0), - MCUModel(name='IAP15L12AD', magic=0xd4dc, total=12288, code=12288, eeprom=0), - MCUModel(name='IAP15L14AD', magic=0xd4de, total=14336, code=14336, eeprom=0), + models =( + MCUModel(name='STC32F12K16', magic=0xf871, total=55296, code=16384, eeprom=38912, iap=False, calibrate=True, mcs251=True), + MCUModel(name='STC32F12K32', magic=0xf872, total=55296, code=32768, eeprom=22528, iap=False, calibrate=True, mcs251=True), + MCUModel(name='STC32F12K48', magic=0xf873, total=55296, code=49152, eeprom=6144, iap=False, calibrate=True, mcs251=True), + MCUModel(name='STC32F12K54', magic=0xf874, total=55296, code=55296, eeprom=0, iap=True, calibrate=True, mcs251=True), + MCUModel(name='STC32F12K59', magic=0xf875, total=60416, code=60416, eeprom=0, iap=True, calibrate=True, mcs251=True), + MCUModel(name='STC32G12K128-Beta', magic=0xf7e1, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True), + MCUModel(name='STC32G12K128', magic=0xf7e3, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True), + MCUModel(name='STC-USB Link1', magic=0xf7ee, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True), + MCUModel(name='STC-USB Writer1', magic=0xf7ef, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True), + MCUModel(name='STC32G8K64-Beta', magic=0xf850, total=65536, code=65536, eeprom=0, iap=True, calibrate=True, mcs251=True), + MCUModel(name='STC32G8K16', magic=0xf851, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=True), + MCUModel(name='STC32G8K32', magic=0xf852, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=True), + MCUModel(name='STC32G8K48', magic=0xf855, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=True), + MCUModel(name='STC32G8K60', magic=0xf853, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=True), + MCUModel(name='STC32G8K64', magic=0xf854, total=65536, code=65536, eeprom=0, iap=True, calibrate=True, mcs251=True), + MCUModel(name='STC8H8K16U', magic=0xf781, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H8K32U', magic=0xf782, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H8K48U', magic=0xf785, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H8K60U', magic=0xf783, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H8K64U', magic=0xf784, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K16TLCD', magic=0xf811, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K32TLCD', magic=0xf812, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K48TLCD', magic=0xf815, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K60TLCD', magic=0xf813, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K64TLCD', magic=0xf814, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H2K16TLCD', magic=0xf819, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H2K32TLCD', magic=0xf81a, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H2K48TLCD', magic=0xf81d, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H2K60TLCD', magic=0xf81b, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H2K64TLCD', magic=0xf81c, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K16LCD', magic=0xf821, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K32LCD', magic=0xf822, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K48LCD', magic=0xf825, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K60LCD', magic=0xf823, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K64LCD', magic=0xf824, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K16TL', magic=0xf831, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K32TL', magic=0xf832, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K48TL', magic=0xf835, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K60TL', magic=0xf833, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K64TL', magic=0xf834, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H2K16TL', magic=0xf839, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H2K32TL', magic=0xf83a, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H2K48TL', magic=0xf83d, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H2K60TL', magic=0xf83b, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H2K64TL', magic=0xf83c, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K16TLR', magic=0xf7c9, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K32TLR', magic=0xf7ca, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K48TLR', magic=0xf7cd, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K60TLR', magic=0xf7cb, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H4K64TLR', magic=0xf7cc, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H3K16S4', magic=0xf741, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H3K32S4', magic=0xf742, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H3K48S4', magic=0xf745, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H3K60S4', magic=0xf743, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H3K64S4', magic=0xf744, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H3K16S2', magic=0xf749, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H3K32S2', magic=0xf74a, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H3K48S2', magic=0xf74d, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H3K60S2', magic=0xf74b, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H3K64S2', magic=0xf74c, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K16', magic=0xf721, total=28672, code=16384, eeprom=12288, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K20', magic=0xf722, total=28672, code=20480, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K24', magic=0xf723, total=28672, code=24576, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K28', magic=0xf724, total=28672, code=28672, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K33', magic=0xf725, total=33792, code=33792, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K02', magic=0xf731, total=12288, code=2048, eeprom=10240, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K04', magic=0xf732, total=12288, code=4096, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K06', magic=0xf733, total=12288, code=6144, eeprom=6144, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K08', magic=0xf734, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K10', magic=0xf735, total=12288, code=10240, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K12', magic=0xf736, total=12288, code=12288, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K17', magic=0xf737, total=17408, code=17408, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K08T-Beta', magic=0xf840, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K17T-Beta', magic=0xf848, total=17408, code=17408, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K02T', magic=0xf841, total=12288, code=2048, eeprom=10240, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K04T', magic=0xf842, total=12288, code=4096, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K06T', magic=0xf843, total=12288, code=6144, eeprom=6144, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K08T', magic=0xf844, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K10T', magic=0xf845, total=12288, code=10240, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K12T', magic=0xf846, total=12288, code=12288, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8H1K17T', magic=0xf847, total=17408, code=17408, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8G2K16S4', magic=0xf761, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G2K32S4', magic=0xf762, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G2K48S4', magic=0xf765, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G2K60S4', magic=0xf763, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G2K64S4', magic=0xf764, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8G2K16S2', magic=0xf769, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G2K32S2', magic=0xf76a, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G2K48S2', magic=0xf76d, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G2K60S2', magic=0xf76b, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G2K64S2', magic=0xf76c, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K02T', magic=0xf771, total=12288, code=2048, eeprom=10240, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K04T', magic=0xf772, total=12288, code=4096, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K06T', magic=0xf773, total=12288, code=6144, eeprom=6144, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K08T', magic=0xf774, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K10T', magic=0xf775, total=12288, code=10240, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K12T', magic=0xf776, total=12288, code=12288, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K17T', magic=0xf777, total=17408, code=17408, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K02A-8PIN', magic=0xf791, total=12288, code=2048, eeprom=10240, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K04A-8PIN', magic=0xf792, total=12288, code=4096, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K06A-8PIN', magic=0xf793, total=12288, code=6144, eeprom=6144, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K08A-8PIN', magic=0xf794, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K10A-8PIN', magic=0xf795, total=12288, code=10240, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K12A-8PIN', magic=0xf796, total=12288, code=12288, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K17A-8PIN', magic=0xf797, total=17408, code=17408, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K02-8PIN', magic=0xf7a1, total=12288, code=2048, eeprom=10240, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K04-8PIN', magic=0xf7a2, total=12288, code=4096, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K06-8PIN', magic=0xf7a3, total=12288, code=6144, eeprom=6144, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K08-8PIN', magic=0xf7a4, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K10-8PIN', magic=0xf7a5, total=12288, code=10240, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K12-8PIN', magic=0xf7a6, total=12288, code=12288, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K17-8PIN', magic=0xf7a7, total=17408, code=17408, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K02-20/16PIN', magic=0xf751, total=12288, code=2048, eeprom=10240, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K04-20/16PIN', magic=0xf752, total=12288, code=4096, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K06-20/16PIN', magic=0xf753, total=12288, code=6144, eeprom=6144, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K08-20/16PIN', magic=0xf754, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K10-20/16PIN', magic=0xf755, total=12288, code=10240, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K12-20/16PIN', magic=0xf756, total=12288, code=12288, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8G1K17-20/16PIN', magic=0xf757, total=17408, code=17408, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8C2K16S4', magic=0xf7d1, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C2K32S4', magic=0xf7d2, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C2K48S4', magic=0xf7d5, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C2K60S4', magic=0xf7d3, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C2K64S4', magic=0xf7d4, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8C2K16S2', magic=0xf7d9, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C2K32S2', magic=0xf7da, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C2K48S2', magic=0xf7dd, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C2K60S2', magic=0xf7db, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C2K64S2', magic=0xf7dc, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8C1K02', magic=0xf701, total=12288, code=2048, eeprom=10240, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C1K04', magic=0xf702, total=12288, code=4096, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C1K06', magic=0xf703, total=12288, code=6144, eeprom=6144, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C1K08', magic=0xf704, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C1K10', magic=0xf705, total=12288, code=10240, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8C1K12', magic=0xf706, total=12288, code=12288, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='GX8S003', magic=0xf714, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='GX8S012', magic=0xf716, total=12288, code=12288, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K02', magic=0xf671, total=12288, code=2048, eeprom=10240, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K04', magic=0xf672, total=12288, code=4096, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K06', magic=0xf673, total=12288, code=6144, eeprom=6144, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K08', magic=0xf674, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K10', magic=0xf675, total=12288, code=10240, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K12', magic=0xf676, total=12288, code=12288, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K17', magic=0xf677, total=17408, code=17408, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K02S2', magic=0xf661, total=12288, code=2048, eeprom=10240, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K04S2', magic=0xf662, total=12288, code=4096, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K06S2', magic=0xf663, total=12288, code=6144, eeprom=6144, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K08S2', magic=0xf664, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K10S2', magic=0xf665, total=12288, code=10240, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K12S2', magic=0xf666, total=12288, code=12288, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8F1K17S2', magic=0xf667, total=17408, code=17408, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K08S2', magic=0xf641, total=65536, code=8192, eeprom=57344, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K16S2', magic=0xf642, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K24S2', magic=0xf643, total=65536, code=24576, eeprom=40960, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K32S2', magic=0xf644, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K40S2', magic=0xf645, total=65536, code=40960, eeprom=24576, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K48S2', magic=0xf646, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K56S2', magic=0xf647, total=65536, code=57344, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K60S2', magic=0xf649, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K64S2', magic=0xf648, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K08S4', magic=0xf631, total=65536, code=8192, eeprom=57344, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K16S4', magic=0xf632, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K24S4', magic=0xf633, total=65536, code=24576, eeprom=40960, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K32S4', magic=0xf634, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K40S4', magic=0xf635, total=65536, code=40960, eeprom=24576, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K48S4', magic=0xf636, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K56S4', magic=0xf637, total=65536, code=57344, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K60S4', magic=0xf639, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F2K64S4', magic=0xf638, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8F8K08S4A12', magic=0xf611, total=65536, code=8192, eeprom=57344, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F8K16S4A12', magic=0xf612, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F8K24S4A12', magic=0xf613, total=65536, code=24576, eeprom=40960, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F8K32S4A12', magic=0xf614, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F8K40S4A12', magic=0xf615, total=65536, code=40960, eeprom=24576, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F8K48S4A12', magic=0xf616, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F8K56S4A12', magic=0xf617, total=65536, code=57344, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F8K60S4A12', magic=0xf619, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8F8K64S4A12', magic=0xf618, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K16D4', magic=0xf7f1, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K32D4', magic=0xf7f2, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K48D4', magic=0xf7f5, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K60D4', magic=0xf7f3, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K64D4', magic=0xf7f4, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8A2K16D4', magic=0xf801, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A2K32D4', magic=0xf802, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A2K48D4', magic=0xf805, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A2K60D4', magic=0xf803, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A2K64D4', magic=0xf804, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8A4K08S2A12', magic=0xf651, total=65536, code=8192, eeprom=57344, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A4K16S2A12', magic=0xf652, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A4K24S2A12', magic=0xf653, total=65536, code=24576, eeprom=40960, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A4K32S2A12', magic=0xf654, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A4K40S2A12', magic=0xf655, total=65536, code=40960, eeprom=24576, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A4K48S2A12', magic=0xf656, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A4K56S2A12', magic=0xf657, total=65536, code=57344, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A4K60S2A12', magic=0xf659, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A4K64S2A12', magic=0xf658, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K08S4A12', magic=0xf621, total=65536, code=8192, eeprom=57344, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K16S4A12', magic=0xf622, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K24S4A12', magic=0xf623, total=65536, code=24576, eeprom=40960, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K32S4A12', magic=0xf624, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K40S4A12', magic=0xf625, total=65536, code=40960, eeprom=24576, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K48S4A12', magic=0xf626, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K56S4A12', magic=0xf627, total=65536, code=57344, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K60S4A12', magic=0xf629, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC8A8K64S4A12', magic=0xf628, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC16F40K128-Beta', magic=0xf7e0, total=126976, code=122880, eeprom=0, iap=False, calibrate=True, mcs251=True), + MCUModel(name='STC15H2K16S4', magic=0xf861, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15H2K32S4', magic=0xf862, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15H2K48S4', magic=0xf865, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15H2K60S4', magic=0xf863, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15H2K64S4', magic=0xf864, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC15H4K08S4', magic=0xf601, total=65536, code=8192, eeprom=57344, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15H4K16S4', magic=0xf602, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15H4K24S4', magic=0xf603, total=65536, code=24576, eeprom=40960, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15H4K32S4', magic=0xf604, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15H4K40S4', magic=0xf605, total=65536, code=40960, eeprom=24576, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15H4K48S4', magic=0xf606, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15H4K56S4', magic=0xf607, total=65536, code=57344, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15H4K64S4', magic=0xf608, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K08S2', magic=0xf401, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K16S2', magic=0xf402, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K24S2', magic=0xf403, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K32S2', magic=0xf404, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K40S2', magic=0xf405, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K48S2', magic=0xf406, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K56S2', magic=0xf407, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K60S2', magic=0xf408, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15F2K61S2', magic=0xf449, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15F2K63S2', magic=0xf44a, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15L2K08S2', magic=0xf481, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K16S2', magic=0xf482, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K24S2', magic=0xf483, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K32S2', magic=0xf484, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K40S2', magic=0xf485, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K48S2', magic=0xf486, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K56S2', magic=0xf487, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K60S2', magic=0xf488, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15L2K61S2', magic=0xf4c9, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15L2K63S2', magic=0xf4ca, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15F2K08AS', magic=0xf411, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K16AS', magic=0xf412, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K24AS', magic=0xf413, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K32AS', magic=0xf414, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K40AS', magic=0xf415, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K48AS', magic=0xf416, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K56AS', magic=0xf417, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K60AS', magic=0xf418, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15F2K61AS', magic=0xf459, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15F2K63AS', magic=0xf45a, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15L2K08AS', magic=0xf491, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K16AS', magic=0xf492, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K24AS', magic=0xf493, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K32AS', magic=0xf494, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K40AS', magic=0xf495, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K48AS', magic=0xf496, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K56AS', magic=0xf497, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K60AS', magic=0xf498, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15L2K61AS', magic=0xf4d9, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15L2K63AS', magic=0xf4da, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15F2K08S', magic=0xf421, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K16S', magic=0xf422, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K24S', magic=0xf423, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K32S', magic=0xf424, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K40S', magic=0xf425, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K48S', magic=0xf426, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K56S', magic=0xf427, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F2K60S', magic=0xf428, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15F2K61S', magic=0xf469, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15F2K63S', magic=0xf46a, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15L2K08S', magic=0xf4a1, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K16S', magic=0xf4a2, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K24S', magic=0xf4a3, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K32S', magic=0xf4a4, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K40S', magic=0xf4a5, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K48S', magic=0xf4a6, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K56S', magic=0xf4a7, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L2K60S', magic=0xf4a8, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15L2K61S', magic=0xf4e9, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15L2K63S', magic=0xf4ea, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='U7-5V', magic=0xf44b, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='U7-3V', magic=0xf4cb, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='U8-5V', magic=0xf44c, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='U8-3V', magic=0xf4cc, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K08S2', magic=0xf441, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K16S2', magic=0xf442, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K24S2', magic=0xf443, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K32S2', magic=0xf444, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K40S2', magic=0xf445, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K48S2', magic=0xf446, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K56S2', magic=0xf447, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K60S2', magic=0xf448, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15F1K61S2', magic=0xf409, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15F1K63S2', magic=0xf400, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15L1K08S2', magic=0xf4c1, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K16S2', magic=0xf4c2, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K24S2', magic=0xf4c3, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K32S2', magic=0xf4c4, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K40S2', magic=0xf4c5, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K48S2', magic=0xf4c6, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K56S2', magic=0xf4c7, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K60S2', magic=0xf4c8, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15L1K61S2', magic=0xf489, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15L1K63S2', magic=0xf480, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15F1K08AS', magic=0xf451, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K16AS', magic=0xf452, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K24AS', magic=0xf453, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K32AS', magic=0xf454, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K40AS', magic=0xf455, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K48AS', magic=0xf456, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K56AS', magic=0xf457, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K60AS', magic=0xf458, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15F1K61AS', magic=0xf419, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15F1K63AS', magic=0xf410, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15L1K08AS', magic=0xf4d1, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K16AS', magic=0xf4d2, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K24AS', magic=0xf4d3, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K32AS', magic=0xf4d4, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K40AS', magic=0xf4d5, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K48AS', magic=0xf4d6, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K56AS', magic=0xf4d7, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K60AS', magic=0xf4d8, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15L1K61AS', magic=0xf499, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15L1K63AS', magic=0xf490, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15F1K08S', magic=0xf461, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K16S', magic=0xf462, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K24S', magic=0xf463, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K32S', magic=0xf464, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K40S', magic=0xf465, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K48S', magic=0xf466, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K56S', magic=0xf467, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F1K60S', magic=0xf468, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15F1K61S', magic=0xf429, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15F1K63S', magic=0xf420, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15L1K08S', magic=0xf4e1, total=62464, code=8192, eeprom=54272, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K16S', magic=0xf4e2, total=62464, code=16384, eeprom=46080, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K24S', magic=0xf4e3, total=62464, code=24576, eeprom=37888, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K32S', magic=0xf4e4, total=62464, code=32768, eeprom=29696, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K40S', magic=0xf4e5, total=62464, code=40960, eeprom=21504, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K48S', magic=0xf4e6, total=62464, code=49152, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K56S', magic=0xf4e7, total=62464, code=57344, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L1K60S', magic=0xf4e8, total=62464, code=61440, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15L1K61S', magic=0xf4a9, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15L1K63S', magic=0xf4a0, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15F404AD', magic=0xf40a, total=13312, code=4096, eeprom=9216, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F408AD', magic=0xf40b, total=13312, code=8192, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F412AD', magic=0xf40c, total=13312, code=12288, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15F413AD', magic=0xf44d, total=13312, code=13312, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC15L404AD', magic=0xf48a, total=13312, code=4096, eeprom=9216, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L408AD', magic=0xf48b, total=13312, code=8192, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L412AD', magic=0xf48c, total=13312, code=12288, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15L413AD', magic=0xf4cd, total=13312, code=13312, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC15W101SW', magic=0xf501, total=5120, code=1024, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W102SW', magic=0xf502, total=5120, code=2048, eeprom=3072, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W103SW', magic=0xf503, total=5120, code=3072, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W104SW', magic=0xf504, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15W105SW', magic=0xf545, total=5120, code=5120, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC15W101S', magic=0xf508, total=5120, code=1024, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W102S', magic=0xf50a, total=5120, code=2048, eeprom=3072, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W103S', magic=0xf50b, total=5120, code=3072, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W104S', magic=0xf50c, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15W105S', magic=0xf54d, total=5120, code=5120, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC15W201S', magic=0xf511, total=5120, code=1024, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W202S', magic=0xf512, total=5120, code=2048, eeprom=3072, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W203S', magic=0xf513, total=5120, code=3072, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W204S', magic=0xf514, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15W205S', magic=0xf555, total=5120, code=5120, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15W207S', magic=0xf556, total=7680, code=7680, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15W1K16S', magic=0xf516, total=29696, code=16384, eeprom=13312, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W1K24S', magic=0xf517, total=29696, code=24576, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15W1K29S', magic=0xf558, total=29696, code=29696, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15W1K31S', magic=0xf559, total=32256, code=32256, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15W404S', magic=0xf519, total=13312, code=4096, eeprom=9216, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W408S', magic=0xf51a, total=13312, code=8192, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W410S', magic=0xf51b, total=13312, code=10240, eeprom=3072, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W412S', magic=0xf51c, total=13312, code=12288, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15W413S', magic=0xf55d, total=13312, code=13312, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15W415S', magic=0xf55e, total=15872, code=15872, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15W401AS', magic=0xf52a, total=13312, code=1024, eeprom=12288, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W402AS', magic=0xf52b, total=13312, code=2048, eeprom=11264, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W404AS', magic=0xf51e, total=13312, code=4096, eeprom=9216, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W408AS', magic=0xf51f, total=13312, code=8192, eeprom=5120, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W410AS', magic=0xf520, total=13312, code=10240, eeprom=3072, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W412AS', magic=0xf521, total=13312, code=12288, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15W413AS', magic=0xf562, total=13312, code=13312, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IAP15W414AS', magic=0xf564, total=14336, code=14336, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15W415AS', magic=0xf563, total=15872, code=15872, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15W1K08PWM', magic=0xf52d, total=60416, code=8192, eeprom=52224, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W1K16PWM', magic=0xf52e, total=60416, code=16384, eeprom=44032, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W1K20S', magic=0xf52f, total=60416, code=20480, eeprom=39936, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W1K20AS', magic=0xf534, total=60416, code=20480, eeprom=39936, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W1K32AS', magic=0xf535, total=60416, code=32768, eeprom=27648, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W1K48AS', magic=0xf536, total=60416, code=49152, eeprom=11264, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W2K32S2', magic=0xf530, total=60416, code=32768, eeprom=27648, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W2K48S2', magic=0xf531, total=60416, code=49152, eeprom=11264, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W2K32AS', magic=0xf532, total=60416, code=32768, eeprom=27648, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W2K48AS', magic=0xf533, total=60416, code=49152, eeprom=11264, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W4K16S4', magic=0xf523, total=60416, code=16384, eeprom=44032, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W4K24S4', magic=0xf524, total=60416, code=24576, eeprom=35840, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W4K32S4', magic=0xf525, total=60416, code=32768, eeprom=27648, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W4K40S4', magic=0xf526, total=60416, code=40960, eeprom=19456, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W4K48S4', magic=0xf527, total=60416, code=49152, eeprom=11264, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W4K56S4', magic=0xf528, total=60416, code=57344, eeprom=3072, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15W4K58S4', magic=0xf569, total=60416, code=59392, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IAP15W4K58S4-Student', magic=0xf56d, total=60416, code=59392, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IAP15W4K61S4', magic=0xf56a, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IAP15W4K62S4', magic=0xf56e, total=63488, code=63488, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15W4K63S4', magic=0xf56b, total=65024, code=65024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='U8W', magic=0xf56c, total=62464, code=62464, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC15W100', magic=0xf2a0, total=5120, code=512, eeprom=0, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W101', magic=0xf2a1, total=5120, code=1024, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W102', magic=0xf2a2, total=5120, code=2048, eeprom=3072, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W103', magic=0xf2a3, total=5120, code=3072, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15W104', magic=0xf2a4, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15W105', magic=0xf2a5, total=5120, code=5120, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15W107', magic=0xf2a6, total=7168, code=7168, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15F100W', magic=0xf290, total=5120, code=512, eeprom=0, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F101W', magic=0xf291, total=5120, code=1024, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F102W', magic=0xf292, total=5120, code=2048, eeprom=3072, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F103W', magic=0xf293, total=5120, code=3072, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F104W', magic=0xf294, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15F105W', magic=0xf2b5, total=5120, code=5120, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15F107W', magic=0xf2b6, total=7168, code=7168, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15F100', magic=0xf298, total=5120, code=512, eeprom=0, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F101', magic=0xf299, total=5120, code=1024, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F102', magic=0xf29a, total=5120, code=2048, eeprom=3072, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F103', magic=0xf29b, total=5120, code=3072, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F104', magic=0xf29c, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15F105', magic=0xf2bd, total=5120, code=5120, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15F107', magic=0xf2be, total=7168, code=7168, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15L100W', magic=0xf2d0, total=5120, code=512, eeprom=0, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L101W', magic=0xf2d1, total=5120, code=1024, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L102W', magic=0xf2d2, total=5120, code=2048, eeprom=3072, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L103W', magic=0xf2d3, total=5120, code=3072, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L104W', magic=0xf2d4, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15L105W', magic=0xf2f5, total=5120, code=5120, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15L107W', magic=0xf2f6, total=7168, code=7168, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15L100', magic=0xf2d8, total=5120, code=512, eeprom=0, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L101', magic=0xf2d9, total=5120, code=1024, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L102', magic=0xf2da, total=5120, code=2048, eeprom=3072, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L103', magic=0xf2db, total=5120, code=3072, eeprom=2048, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L104', magic=0xf2dc, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15L105', magic=0xf2fd, total=5120, code=5120, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15L107', magic=0xf2fe, total=7168, code=7168, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15F104E', magic=0xf294, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15L104E', magic=0xf2d4, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC15F204EA', magic=0xf394, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15F205EA', magic=0xf3b5, total=5120, code=5120, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15F207A', magic=0xf3b6, total=7168, code=7168, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC15L204EA', magic=0xf3d4, total=5120, code=4096, eeprom=1024, iap=False, calibrate=True, mcs251=False), + MCUModel(name='IAP15L205EA', magic=0xf3f5, total=5120, code=5120, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='IRC15L207A', magic=0xf3f6, total=7168, code=7168, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12H1K04', magic=0xf7b0, total=28672, code=4096, eeprom=24576, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC12H1K08', magic=0xf7b1, total=28672, code=8192, eeprom=20480, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC12H1K12', magic=0xf7b2, total=28672, code=12288, eeprom=16384, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC12H1K16', magic=0xf7b3, total=28672, code=16384, eeprom=12288, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC12H1K20', magic=0xf7b4, total=28672, code=20480, eeprom=8192, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC12H1K24', magic=0xf7b5, total=28672, code=24576, eeprom=4096, iap=False, calibrate=True, mcs251=False), + MCUModel(name='STC12H1K28', magic=0xf7b6, total=28672, code=28672, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC12H1K33', magic=0xf7b7, total=33792, code=33792, eeprom=0, iap=True, calibrate=True, mcs251=False), + MCUModel(name='STC12C5A08S2', magic=0xd164, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A16S2', magic=0xd168, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A32S2', magic=0xd170, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A40S2', magic=0xd174, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A48S2', magic=0xd178, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A52S2', magic=0xd17a, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A56S2', magic=0xd17c, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A60S2', magic=0xd17e, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A08AD', magic=0xd144, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A16AD', magic=0xd148, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A32AD', magic=0xd150, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A40AD', magic=0xd154, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A48AD', magic=0xd158, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A52AD', magic=0xd15a, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A56AD', magic=0xd15c, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A60AD', magic=0xd15e, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A08CCP', magic=0xd124, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A16CCP', magic=0xd128, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A32CCP', magic=0xd130, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A40CCP', magic=0xd134, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A48CCP', magic=0xd138, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A52CCP', magic=0xd13a, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A56CCP', magic=0xd13c, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A60CCP', magic=0xd13e, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A08X', magic=0xd104, total=65536, code=8192, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A16X', magic=0xd108, total=65536, code=16384, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A32X', magic=0xd110, total=65536, code=32768, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A40X', magic=0xd114, total=65536, code=40960, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A48X', magic=0xd118, total=65536, code=49152, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A52X', magic=0xd11a, total=65536, code=53248, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A56X', magic=0xd11c, total=65536, code=57344, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5A60X', magic=0xd11e, total=65536, code=61440, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A08S2', magic=0xd163, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A16S2', magic=0xd167, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A32S2', magic=0xd16f, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A40S2', magic=0xd173, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A48S2', magic=0xd177, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A52S2', magic=0xd179, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A56S2', magic=0xd17b, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A60S2', magic=0xd17d, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A62S2', magic=0xd17f, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A08AD', magic=0xd143, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A16AD', magic=0xd147, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A32AD', magic=0xd14f, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A40AD', magic=0xd153, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A48AD', magic=0xd157, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A52AD', magic=0xd159, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A56AD', magic=0xd15b, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A60AD', magic=0xd15d, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A62AD', magic=0xd15f, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A08CCP', magic=0xd123, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A16CCP', magic=0xd127, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A32CCP', magic=0xd12f, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A40CCP', magic=0xd133, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A48CCP', magic=0xd137, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A52CCP', magic=0xd139, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A56CCP', magic=0xd13b, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A60CCP', magic=0xd13d, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A62CCP', magic=0xd13f, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A08', magic=0xd103, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A16', magic=0xd107, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A32', magic=0xd10f, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A40', magic=0xd113, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A48', magic=0xd117, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A52', magic=0xd119, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A56', magic=0xd11b, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A60', magic=0xd11d, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12C5A62', magic=0xd11f, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A08S2', magic=0xd1e4, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A16S2', magic=0xd1e8, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A32S2', magic=0xd1f0, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A40S2', magic=0xd1f4, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A48S2', magic=0xd1f8, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A52S2', magic=0xd1fa, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A56S2', magic=0xd1fc, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A60S2', magic=0xd1fe, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A08AD', magic=0xd1c4, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A16AD', magic=0xd1c8, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A32AD', magic=0xd1d0, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A40AD', magic=0xd1d4, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A48AD', magic=0xd1d8, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A52AD', magic=0xd1da, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A56AD', magic=0xd1dc, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A60AD', magic=0xd1de, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A08CCP', magic=0xd1a4, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A16CCP', magic=0xd1a8, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A32CCP', magic=0xd1b0, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A40CCP', magic=0xd1b4, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A48CCP', magic=0xd1b8, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A52CCP', magic=0xd1ba, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A56CCP', magic=0xd1bc, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A60CCP', magic=0xd1be, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A08X', magic=0xd184, total=65536, code=8192, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A16X', magic=0xd188, total=65536, code=16384, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A32X', magic=0xd190, total=65536, code=32768, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A40X', magic=0xd194, total=65536, code=40960, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A48X', magic=0xd198, total=65536, code=49152, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A52X', magic=0xd19a, total=65536, code=53248, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A56X', magic=0xd19c, total=65536, code=57344, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5A60X', magic=0xd19e, total=65536, code=61440, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A08S2', magic=0xd1e3, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A16S2', magic=0xd1e7, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A32S2', magic=0xd1ef, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A40S2', magic=0xd1f3, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A48S2', magic=0xd1f7, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A52S2', magic=0xd1f9, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A56S2', magic=0xd1fb, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A60S2', magic=0xd1fd, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A62S2', magic=0xd1ff, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A08AD', magic=0xd1c3, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A16AD', magic=0xd1c7, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A32AD', magic=0xd1cf, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A40AD', magic=0xd1d3, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A48AD', magic=0xd1d7, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A52AD', magic=0xd1d9, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A56AD', magic=0xd1db, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A60AD', magic=0xd1dd, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A62AD', magic=0xd1df, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A08CCP', magic=0xd1a3, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A16CCP', magic=0xd1a7, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A32CCP', magic=0xd1af, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A40CCP', magic=0xd1b3, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A48CCP', magic=0xd1b7, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A52CCP', magic=0xd1b9, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A56CCP', magic=0xd1bb, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A60CCP', magic=0xd1bd, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A62CCP', magic=0xd1bf, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A08', magic=0xd183, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A16', magic=0xd187, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A32', magic=0xd18f, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A40', magic=0xd193, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A48', magic=0xd197, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A52', magic=0xd199, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A56', magic=0xd19b, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A60', magic=0xd19d, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP12LE5A62', magic=0xd19f, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC5A08S2-5V', magic=0xd160, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A16S2-5V', magic=0xd161, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A32S2-5V', magic=0xd162, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A40S2-5V', magic=0xd165, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A48S2-5V', magic=0xd166, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A52S2-5V', magic=0xd169, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A56S2-5V', magic=0xd16a, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A60S2-5V', magic=0xd16b, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP5A62S2-5V', magic=0xd16c, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC5A08S2-3V', magic=0xd1e0, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A16S2-3V', magic=0xd1e1, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A32S2-3V', magic=0xd1e2, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A40S2-3V', magic=0xd1e5, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A48S2-3V', magic=0xd1e6, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A52S2-3V', magic=0xd1e9, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A56S2-3V', magic=0xd1ea, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5A60S2-3V', magic=0xd1eb, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP5A62S2-3V', magic=0xd1ec, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC10F02XE', magic=0xd262, total=16384, code=2048, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F04XE', magic=0xd264, total=16384, code=4096, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F06XE', magic=0xd266, total=16384, code=6144, eeprom=8192, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F08XE', magic=0xd268, total=16384, code=8192, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F10XE', magic=0xd26a, total=16384, code=10240, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F12XE', magic=0xd26c, total=16384, code=12288, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F02X', magic=0xd242, total=16384, code=2048, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F04X', magic=0xd244, total=16384, code=4096, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F06X', magic=0xd246, total=16384, code=6144, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F08X', magic=0xd248, total=16384, code=8192, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F10X', magic=0xd24a, total=16384, code=10240, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F12X', magic=0xd24c, total=16384, code=12288, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F02', magic=0xd202, total=16384, code=2048, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F04', magic=0xd204, total=16384, code=4096, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F06', magic=0xd206, total=16384, code=6144, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F08', magic=0xd208, total=16384, code=8192, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F10', magic=0xd20a, total=16384, code=10240, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10F12', magic=0xd20c, total=16384, code=12288, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP10F02XE', magic=0xd272, total=16384, code=2048, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F04XE', magic=0xd274, total=16384, code=4096, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F06XE', magic=0xd276, total=16384, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F08XE', magic=0xd278, total=16384, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F10XE', magic=0xd27a, total=16384, code=10240, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F12XE', magic=0xd27c, total=16384, code=12288, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F14X', magic=0xd27e, total=16384, code=14336, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F02', magic=0xd232, total=16384, code=2048, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F04', magic=0xd234, total=16384, code=4096, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F06', magic=0xd236, total=16384, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F08', magic=0xd238, total=16384, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F10', magic=0xd23a, total=16384, code=10240, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F12', magic=0xd23c, total=16384, code=12288, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10F14', magic=0xd23e, total=16384, code=14336, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC10L02XE', magic=0xd2e2, total=16384, code=2048, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L04XE', magic=0xd2e4, total=16384, code=4096, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L06XE', magic=0xd2e6, total=16384, code=6144, eeprom=8192, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L08XE', magic=0xd2e8, total=16384, code=8192, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L10XE', magic=0xd2ea, total=16384, code=10240, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L12XE', magic=0xd2ec, total=16384, code=12288, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L02X', magic=0xd2c2, total=16384, code=2048, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L04X', magic=0xd2c4, total=16384, code=4096, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L06X', magic=0xd2c6, total=16384, code=6144, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L08X', magic=0xd2c8, total=16384, code=8192, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L10X', magic=0xd2ca, total=16384, code=10240, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L12X', magic=0xd2cc, total=16384, code=12288, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L02', magic=0xd282, total=16384, code=2048, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L04', magic=0xd284, total=16384, code=4096, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L06', magic=0xd286, total=16384, code=6144, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L08', magic=0xd288, total=16384, code=8192, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L10', magic=0xd28a, total=16384, code=10240, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10L12', magic=0xd28c, total=16384, code=12288, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP10L02XE', magic=0xd2f2, total=16384, code=2048, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L04XE', magic=0xd2f4, total=16384, code=4096, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L06XE', magic=0xd2f6, total=16384, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L08XE', magic=0xd2f8, total=16384, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L10XE', magic=0xd2fa, total=16384, code=10240, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L12XE', magic=0xd2fc, total=16384, code=12288, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L14X', magic=0xd2fe, total=16384, code=14336, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L02', magic=0xd2b2, total=16384, code=2048, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L04', magic=0xd2b4, total=16384, code=4096, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L06', magic=0xd2b6, total=16384, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L08', magic=0xd2b8, total=16384, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L10', magic=0xd2ba, total=16384, code=10240, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L12', magic=0xd2bc, total=16384, code=12288, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP10L14', magic=0xd2be, total=16384, code=14336, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC02XE-5V', magic=0xd260, total=16384, code=2048, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC04XE-5V', magic=0xd261, total=16384, code=4096, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC06XE-5V', magic=0xd263, total=16384, code=6144, eeprom=8192, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC08XE-5V', magic=0xd265, total=16384, code=8192, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10XE-5V', magic=0xd267, total=16384, code=10240, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12XE-5V', magic=0xd269, total=16384, code=12288, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP14X-5V', magic=0xd26b, total=16384, code=14336, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC02XE-3V', magic=0xd2e0, total=16384, code=2048, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC04XE-3V', magic=0xd2e1, total=16384, code=4096, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC06XE-3V', magic=0xd2e3, total=16384, code=6144, eeprom=8192, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC08XE-3V', magic=0xd2e5, total=16384, code=8192, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC10XE-3V', magic=0xd2e7, total=16384, code=10240, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12XE-3V', magic=0xd2e9, total=16384, code=12288, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP14X-3V', magic=0xd2eb, total=16384, code=14336, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC11F01E', magic=0xe221, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F02E', magic=0xe222, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F03E', magic=0xe223, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F04E', magic=0xe224, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F05E', magic=0xe265, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F01', magic=0xe201, total=8192, code=1024, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F02', magic=0xe202, total=8192, code=2048, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F03', magic=0xe203, total=8192, code=3072, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F04', magic=0xe204, total=8192, code=4096, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F05', magic=0xe245, total=8192, code=5120, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP11F01E', magic=0xe231, total=8192, code=1024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F02E', magic=0xe232, total=8192, code=2048, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F03E', magic=0xe233, total=8192, code=3072, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F04E', magic=0xe234, total=8192, code=4096, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F05E', magic=0xe275, total=8192, code=5120, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F01', magic=0xe211, total=8192, code=1024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F02', magic=0xe212, total=8192, code=2048, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F03', magic=0xe213, total=8192, code=3072, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F04', magic=0xe214, total=8192, code=4096, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F05', magic=0xe255, total=8192, code=5120, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F06', magic=0xe276, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC11L01E', magic=0xe2a1, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L02E', magic=0xe2a2, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L03E', magic=0xe2a3, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L04E', magic=0xe2a4, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L05E', magic=0xe2e5, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L01', magic=0xe281, total=8192, code=1024, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L02', magic=0xe282, total=8192, code=2048, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L03', magic=0xe283, total=8192, code=3072, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L04', magic=0xe284, total=8192, code=4096, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L05', magic=0xe2c5, total=8192, code=5120, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP11L01E', magic=0xe2b1, total=8192, code=1024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L02E', magic=0xe2b2, total=8192, code=2048, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L03E', magic=0xe2b3, total=8192, code=3072, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L04E', magic=0xe2b4, total=8192, code=4096, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L05E', magic=0xe2f5, total=8192, code=5120, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L01', magic=0xe291, total=8192, code=1024, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L02', magic=0xe292, total=8192, code=2048, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L03', magic=0xe293, total=8192, code=3072, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L04', magic=0xe294, total=8192, code=4096, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L05', magic=0xe2d5, total=8192, code=5120, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L06', magic=0xe2f6, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC01E-5V', magic=0xe220, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC02E-5V', magic=0xe226, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC03E-5V', magic=0xe227, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC04E-5V', magic=0xe228, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC05E-5V', magic=0xe229, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP06-5V', magic=0xe22a, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC01E-3V', magic=0xe2a0, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC02E-3V', magic=0xe2a6, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC03E-3V', magic=0xe2a7, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC04E-3V', magic=0xe2a8, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC05E-3V', magic=0xe2a9, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP06-3V', magic=0xe2aa, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC11F08XE', magic=0xd364, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F16XE', magic=0xd368, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F20XE', magic=0xd36a, total=65536, code=20480, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F32XE', magic=0xd370, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F40XE', magic=0xd374, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F48XE', magic=0xd378, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F52XE', magic=0xd37a, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F56XE', magic=0xd37c, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F60XE', magic=0xd37e, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F08X', magic=0xd344, total=65536, code=8192, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F16X', magic=0xd348, total=65536, code=16384, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F20X', magic=0xd34a, total=65536, code=20480, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F32X', magic=0xd350, total=65536, code=32768, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F40X', magic=0xd354, total=65536, code=40960, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F48X', magic=0xd358, total=65536, code=49152, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F52X', magic=0xd35a, total=65536, code=53248, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F56X', magic=0xd35c, total=65536, code=57344, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F60X', magic=0xd35e, total=65536, code=61440, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F08', magic=0xd304, total=65536, code=8192, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F16', magic=0xd308, total=65536, code=16384, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F20', magic=0xd30a, total=65536, code=20480, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F32', magic=0xd310, total=65536, code=32768, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F40', magic=0xd314, total=65536, code=40960, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F48', magic=0xd318, total=65536, code=49152, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F52', magic=0xd31a, total=65536, code=53248, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F56', magic=0xd31c, total=65536, code=57344, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11F60', magic=0xd31e, total=65536, code=61440, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP11F08XE', magic=0xd363, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F16XE', magic=0xd367, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F20XE', magic=0xd369, total=65536, code=20480, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F32XE', magic=0xd36f, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F40XE', magic=0xd373, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F48XE', magic=0xd377, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F52XE', magic=0xd379, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F56XE', magic=0xd37b, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F60XE', magic=0xd37d, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F08X', magic=0xd343, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F16X', magic=0xd347, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F20X', magic=0xd349, total=65536, code=20480, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F32X', magic=0xd34f, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F40X', magic=0xd353, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F48X', magic=0xd357, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F52X', magic=0xd359, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F56X', magic=0xd35b, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F60X', magic=0xd35d, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F62X', magic=0xd35f, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F08', magic=0xd303, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F16', magic=0xd307, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F20', magic=0xd309, total=65536, code=20480, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F32', magic=0xd30f, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F40', magic=0xd313, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F48', magic=0xd317, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F52', magic=0xd319, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F56', magic=0xd31b, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F60', magic=0xd31d, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11F62', magic=0xd31f, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC11L08XE', magic=0xd3e4, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L16XE', magic=0xd3e8, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L20XE', magic=0xd3ea, total=65536, code=20480, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L32XE', magic=0xd3f0, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L40XE', magic=0xd3f4, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L48XE', magic=0xd3f8, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L52XE', magic=0xd3fa, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L56XE', magic=0xd3fc, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L60XE', magic=0xd3fe, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L08X', magic=0xd3c4, total=65536, code=8192, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L16X', magic=0xd3c8, total=65536, code=16384, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L20X', magic=0xd3ca, total=65536, code=20480, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L32X', magic=0xd3d0, total=65536, code=32768, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L40X', magic=0xd3d4, total=65536, code=40960, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L48X', magic=0xd3d8, total=65536, code=49152, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L52X', magic=0xd3da, total=65536, code=53248, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L56X', magic=0xd3dc, total=65536, code=57344, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L60X', magic=0xd3de, total=65536, code=61440, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L08', magic=0xd384, total=65536, code=8192, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L16', magic=0xd388, total=65536, code=16384, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L20', magic=0xd38a, total=65536, code=20480, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L32', magic=0xd390, total=65536, code=32768, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L40', magic=0xd394, total=65536, code=40960, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L48', magic=0xd398, total=65536, code=49152, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L52', magic=0xd39a, total=65536, code=53248, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L56', magic=0xd39c, total=65536, code=57344, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC11L60', magic=0xd39e, total=65536, code=61440, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP11L08XE', magic=0xd3e3, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L16XE', magic=0xd3e7, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L20XE', magic=0xd3e9, total=65536, code=20480, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L32XE', magic=0xd3ef, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L40XE', magic=0xd3f3, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L48XE', magic=0xd3f7, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L52XE', magic=0xd3f9, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L56XE', magic=0xd3fb, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L60XE', magic=0xd3fd, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L08X', magic=0xd3c3, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L16X', magic=0xd3c7, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L20X', magic=0xd3c9, total=65536, code=20480, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L32X', magic=0xd3cf, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L40X', magic=0xd3d3, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L48X', magic=0xd3d7, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L52X', magic=0xd3d9, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L56X', magic=0xd3db, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L60X', magic=0xd3dd, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L62X', magic=0xd3df, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L08', magic=0xd383, total=65536, code=8192, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L16', magic=0xd387, total=65536, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L20', magic=0xd389, total=65536, code=20480, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L32', magic=0xd38f, total=65536, code=32768, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L40', magic=0xd393, total=65536, code=40960, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L48', magic=0xd397, total=65536, code=49152, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L52', magic=0xd399, total=65536, code=53248, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L56', magic=0xd39b, total=65536, code=57344, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L60', magic=0xd39d, total=65536, code=61440, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='IAP11L62', magic=0xd39f, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC08XE-5V', magic=0xd360, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC16XE-5V', magic=0xd361, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC20XE-5V', magic=0xd362, total=65536, code=20480, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC32XE-5V', magic=0xd365, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC40XE-5V', magic=0xd366, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC48XE-5V', magic=0xd36b, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC52XE-5V', magic=0xd36c, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC56XE-5V', magic=0xd36d, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC60XE-5V', magic=0xd36e, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP62X-5V', magic=0xd371, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC08XE-3V', magic=0xd3e0, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC16XE-3V', magic=0xd3e1, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC20XE-3V', magic=0xd3e2, total=65536, code=20480, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC32XE-3V', magic=0xd3e5, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC40XE-3V', magic=0xd3e6, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC48XE-3V', magic=0xd3eb, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC52XE-3V', magic=0xd3ec, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC56XE-3V', magic=0xd3ed, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC60XE-3V', magic=0xd3ee, total=65536, code=61440, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP62X-3V', magic=0xd3f1, total=65536, code=63488, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5201AD', magic=0xe161, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5202AD', magic=0xe162, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5203AD', magic=0xe163, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5204AD', magic=0xe164, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5205AD', magic=0xe165, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5206AD', magic=0xe166, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5201PWM', magic=0xe121, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5202PWM', magic=0xe122, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5203PWM', magic=0xe123, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5204PWM', magic=0xe124, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5205PWM', magic=0xe125, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5206PWM', magic=0xe126, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5201', magic=0xe101, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5202', magic=0xe102, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5203', magic=0xe103, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5204', magic=0xe104, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5205', magic=0xe105, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5206', magic=0xe106, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5201AD', magic=0xe1e1, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5202AD', magic=0xe1e2, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5203AD', magic=0xe1e3, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5204AD', magic=0xe1e4, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5205AD', magic=0xe1e5, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5206AD', magic=0xe1e6, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5201PWM', magic=0xe1a1, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5202PWM', magic=0xe1a2, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5203PWM', magic=0xe1a3, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5204PWM', magic=0xe1a4, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5205PWM', magic=0xe1a5, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5206PWM', magic=0xe1a6, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5201', magic=0xe181, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5202', magic=0xe182, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5203', magic=0xe183, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5204', magic=0xe184, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5205', magic=0xe185, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5206', magic=0xe186, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC5201AD-5V', magic=0xe168, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5202AD-5V', magic=0xe169, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5203AD-5V', magic=0xe16a, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5204AD-5V', magic=0xe16b, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5205AD-5V', magic=0xe16c, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5206AD-5V', magic=0xe16d, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC5201AD-3V', magic=0xe1e8, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5202AD-3V', magic=0xe1e9, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5203AD-3V', magic=0xe1ea, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5204AD-3V', magic=0xe1eb, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5205AD-3V', magic=0xe1ec, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC5206AD-3V', magic=0xe1ed, total=8192, code=6144, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5601AD', magic=0xe661, total=32768, code=1024, eeprom=29696, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5602AD', magic=0xe662, total=32768, code=2048, eeprom=28672, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5603AD', magic=0xe663, total=32768, code=3072, eeprom=27648, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5604AD', magic=0xe664, total=32768, code=4096, eeprom=26624, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5605AD', magic=0xe665, total=32768, code=5120, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5606AD', magic=0xe666, total=32768, code=6144, eeprom=24576, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5608AD', magic=0xe668, total=32768, code=8192, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5612AD', magic=0xe66c, total=32768, code=12288, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5616AD', magic=0xe670, total=32768, code=16384, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5620AD', magic=0xe674, total=32768, code=20480, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5624AD', magic=0xe678, total=32768, code=24576, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5628AD', magic=0xe67c, total=32768, code=28672, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5630AD', magic=0xe67e, total=32768, code=30720, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5601', magic=0xe601, total=32768, code=1024, eeprom=29696, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5602', magic=0xe602, total=32768, code=2048, eeprom=28672, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5603', magic=0xe603, total=32768, code=3072, eeprom=27648, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5604', magic=0xe604, total=32768, code=4096, eeprom=26624, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5605', magic=0xe605, total=32768, code=5120, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5606', magic=0xe606, total=32768, code=6144, eeprom=24576, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5608', magic=0xe608, total=32768, code=8192, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5612', magic=0xe60c, total=32768, code=12288, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5616', magic=0xe610, total=32768, code=16384, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5620', magic=0xe614, total=32768, code=20480, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5624', magic=0xe618, total=32768, code=24576, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5628', magic=0xe61c, total=32768, code=28672, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5630', magic=0xe61e, total=32768, code=30720, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5601AD', magic=0xe6e1, total=32768, code=1024, eeprom=29696, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5602AD', magic=0xe6e2, total=32768, code=2048, eeprom=28672, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5603AD', magic=0xe6e3, total=32768, code=3072, eeprom=27648, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5604AD', magic=0xe6e4, total=32768, code=4096, eeprom=26624, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5605AD', magic=0xe6e5, total=32768, code=5120, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5606AD', magic=0xe6e6, total=32768, code=6144, eeprom=24576, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5608AD', magic=0xe6e8, total=32768, code=8192, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5612AD', magic=0xe6ec, total=32768, code=12288, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5616AD', magic=0xe6f0, total=32768, code=16384, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5620AD', magic=0xe6f4, total=32768, code=20480, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5624AD', magic=0xe6f8, total=32768, code=24576, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5628AD', magic=0xe6fc, total=32768, code=28672, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5630AD', magic=0xe6fe, total=32768, code=30720, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5601', magic=0xe681, total=32768, code=1024, eeprom=29696, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5602', magic=0xe682, total=32768, code=2048, eeprom=28672, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5603', magic=0xe683, total=32768, code=3072, eeprom=27648, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5604', magic=0xe684, total=32768, code=4096, eeprom=26624, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5605', magic=0xe685, total=32768, code=5120, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5606', magic=0xe686, total=32768, code=6144, eeprom=24576, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5608', magic=0xe688, total=32768, code=8192, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5612', magic=0xe68c, total=32768, code=12288, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5616', magic=0xe690, total=32768, code=16384, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5620', magic=0xe694, total=32768, code=20480, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5624', magic=0xe698, total=32768, code=24576, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5628', magic=0xe69c, total=32768, code=28672, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5630', magic=0xe69e, total=32768, code=30720, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC608AD-5V', magic=0xe667, total=32768, code=8192, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC616AD-5V', magic=0xe66a, total=32768, code=16384, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP616AD-5V', magic=0xe669, total=32768, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC608AD-3V', magic=0xe6e7, total=32768, code=8192, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC616AD-3V', magic=0xe6ea, total=32768, code=16384, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='IAP616AD-3V', magic=0xe6e9, total=32768, code=16384, eeprom=0, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5401AD', magic=0xe061, total=32768, code=1024, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5402AD', magic=0xe062, total=32768, code=2048, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5404AD', magic=0xe064, total=32768, code=4096, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5406AD', magic=0xe066, total=32768, code=6144, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5408AD', magic=0xe068, total=32768, code=8192, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5410AD', magic=0xe06a, total=32768, code=10240, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5412AD', magic=0xe06c, total=32768, code=12288, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5416AD', magic=0xe070, total=32768, code=16384, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5420AD', magic=0xe074, total=32768, code=20480, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5424AD', magic=0xe078, total=32768, code=24576, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5428AD', magic=0xe07c, total=32768, code=28672, eeprom=12288, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C5401', magic=0xe001, total=32768, code=1024, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5402', magic=0xe002, total=32768, code=2048, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5404', magic=0xe004, total=32768, code=4096, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5406', magic=0xe006, total=32768, code=6144, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5408', magic=0xe008, total=32768, code=8192, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5410', magic=0xe00a, total=32768, code=10240, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5412', magic=0xe00c, total=32768, code=12288, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5416', magic=0xe010, total=32768, code=16384, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5420', magic=0xe014, total=32768, code=20480, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5424', magic=0xe018, total=32768, code=24576, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5428', magic=0xe01c, total=32768, code=28672, eeprom=12288, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5401AD', magic=0xe0e1, total=32768, code=1024, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5402AD', magic=0xe0e2, total=32768, code=2048, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5404AD', magic=0xe0e4, total=32768, code=4096, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5406AD', magic=0xe0e6, total=32768, code=6144, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5408AD', magic=0xe0e8, total=32768, code=8192, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5410AD', magic=0xe0ea, total=32768, code=10240, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5412AD', magic=0xe0ec, total=32768, code=12288, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5416AD', magic=0xe0f0, total=32768, code=16384, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5420AD', magic=0xe0f4, total=32768, code=20480, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5424AD', magic=0xe0f8, total=32768, code=24576, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5428AD', magic=0xe0fc, total=32768, code=28672, eeprom=12288, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5401', magic=0xe081, total=32768, code=1024, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5402', magic=0xe082, total=32768, code=2048, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5404', magic=0xe084, total=32768, code=4096, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5406', magic=0xe086, total=32768, code=6144, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5408', magic=0xe088, total=32768, code=8192, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5410', magic=0xe08a, total=32768, code=10240, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5412', magic=0xe08c, total=32768, code=12288, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5416', magic=0xe090, total=32768, code=16384, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5420', magic=0xe094, total=32768, code=20480, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5424', magic=0xe098, total=32768, code=24576, eeprom=12288, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5428', magic=0xe09c, total=32768, code=28672, eeprom=12288, iap=True, calibrate=False, mcs251=False), + MCUModel(name='STC12C1052AD', magic=0xf211, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C2052AD', magic=0xf212, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C3052AD', magic=0xf213, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C4052AD', magic=0xf214, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5052AD', magic=0xf215, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C1052', magic=0xf201, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C2052', magic=0xf202, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C3052', magic=0xf203, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C4052', magic=0xf204, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12C5052', magic=0xf205, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE1052AD', magic=0xf231, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE2052AD', magic=0xf232, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE3052AD', magic=0xf233, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE4052AD', magic=0xf234, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5052AD', magic=0xf235, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE1052', magic=0xf221, total=8192, code=1024, eeprom=5120, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE2052', magic=0xf222, total=8192, code=2048, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE3052', magic=0xf223, total=8192, code=3072, eeprom=3072, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE4052', magic=0xf224, total=8192, code=4096, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC12LE5052', magic=0xf225, total=8192, code=5120, eeprom=1024, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C51', magic=0xf050, total=16384, code=4096, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C52', magic=0xf051, total=16384, code=8192, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C53', magic=0xf052, total=16384, code=12288, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C14', magic=0xf053, total=16384, code=14336, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89LE51', magic=0xf060, total=16384, code=4096, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89LE52', magic=0xf061, total=16384, code=8192, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89LE53', magic=0xf062, total=16384, code=12288, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89LE14', magic=0xf063, total=16384, code=14336, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C54', magic=0xf1a0, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C58', magic=0xf1a1, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C510', magic=0xf1a2, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C512', magic=0xf1a3, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C514', magic=0xf1a4, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C516', magic=0xf1a5, total=65536, code=63488, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89LE54', magic=0xf1b0, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89LE58', magic=0xf1b1, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89LE510', magic=0xf1b2, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89LE512', magic=0xf1b3, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89LE514', magic=0xf1b4, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89LE516', magic=0xf1b5, total=65536, code=63488, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C51RC/LE51RC', magic=0xf001, total=16384, code=4096, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C52RC/LE52RC', magic=0xf002, total=16384, code=8192, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C53RC/LE53RC', magic=0xf004, total=16384, code=14336, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C06RC/LE06RC', magic=0xf006, total=16384, code=6144, eeprom=8192, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C07RC/LE07RC', magic=0xf007, total=16384, code=7168, eeprom=7168, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C10RC/LE10RC', magic=0xf00a, total=16384, code=10240, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C12RC/LE12RC', magic=0xf00c, total=16384, code=12288, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C51RD+/LE51RD+', magic=0xf101, total=65536, code=4096, eeprom=59392, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C52RD+/LE52RD+', magic=0xf102, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C54RD+/LE54RD+', magic=0xf104, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C55RD+/LE55RD+', magic=0xf105, total=65536, code=20480, eeprom=43008, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C58RD+/LE58RD+', magic=0xf108, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C510RD+/LE510RD+', magic=0xf10a, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C512RD+/LE512RD+', magic=0xf10c, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C513RD+/LE513RD+', magic=0xf10d, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C514RD+/LE514RD+', magic=0xf10e, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C516RD+/LE516RD+', magic=0xf110, total=65536, code=63488, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC89C516RD/LV516RD', magic=0xffff, total=65536, code=65536, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C51RC', magic=0xf021, total=16384, code=4096, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C52RC', magic=0xf022, total=16384, code=8192, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C53RC', magic=0xf024, total=16384, code=14336, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C06RC', magic=0xf026, total=16384, code=6144, eeprom=8192, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C07RC', magic=0xf027, total=16384, code=7168, eeprom=7168, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C10RC', magic=0xf02a, total=16384, code=10240, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C12RC', magic=0xf02c, total=16384, code=12288, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE51RC', magic=0xf041, total=16384, code=4096, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE52RC', magic=0xf042, total=16384, code=8192, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE53RC', magic=0xf044, total=16384, code=14336, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE06RC', magic=0xf046, total=16384, code=6144, eeprom=8192, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE07RC', magic=0xf047, total=16384, code=7168, eeprom=7168, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE10RC', magic=0xf04a, total=16384, code=10240, eeprom=4096, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE12RC', magic=0xf04c, total=16384, code=12288, eeprom=2048, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C51RD+', magic=0xf121, total=65536, code=4096, eeprom=59392, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C52RD+', magic=0xf122, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C54RD+', magic=0xf124, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C55RD+', magic=0xf125, total=65536, code=20480, eeprom=43008, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C58RD+', magic=0xf128, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C510RD+', magic=0xf12a, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C512RD+', magic=0xf12c, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C513RD+', magic=0xf12d, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C514RD+', magic=0xf12e, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C516RD+', magic=0xf130, total=65536, code=63488, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE51RD+', magic=0xf141, total=65536, code=4096, eeprom=59392, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE52RD+', magic=0xf142, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE54RD+', magic=0xf144, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE55RD+', magic=0xf145, total=65536, code=20480, eeprom=43008, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE58RD+', magic=0xf148, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE510RD+', magic=0xf14a, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE512RD+', magic=0xf14c, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE513RD+', magic=0xf14d, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE514RD+', magic=0xf14e, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE516RD+', magic=0xf150, total=65536, code=63488, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C51AD', magic=0xf161, total=65536, code=4096, eeprom=59392, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C52AD', magic=0xf162, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C54AD', magic=0xf164, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C55AD', magic=0xf165, total=65536, code=20480, eeprom=43008, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C58AD', magic=0xf168, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C510AD', magic=0xf16a, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C512AD', magic=0xf16c, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C513AD', magic=0xf16d, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C514AD', magic=0xf16e, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90C516AD', magic=0xf170, total=65536, code=63488, eeprom=0, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE51AD', magic=0xf181, total=65536, code=4096, eeprom=59392, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE52AD', magic=0xf182, total=65536, code=8192, eeprom=55296, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE54AD', magic=0xf184, total=65536, code=16384, eeprom=47104, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE55AD', magic=0xf185, total=65536, code=20480, eeprom=43008, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE58AD', magic=0xf188, total=65536, code=32768, eeprom=30720, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE510AD', magic=0xf18a, total=65536, code=40960, eeprom=22528, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE512AD', magic=0xf18c, total=65536, code=49152, eeprom=14336, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE513AD', magic=0xf18d, total=65536, code=53248, eeprom=10240, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE514AD', magic=0xf18e, total=65536, code=57344, eeprom=6144, iap=False, calibrate=False, mcs251=False), + MCUModel(name='STC90LE516AD', magic=0xf190, total=65536, code=63488, eeprom=0, iap=False, calibrate=False, mcs251=False), ) - @classmethod - def check_model(self, model): - # User reported bricked MCUs, GH #63 - if model.name.startswith("STC8G"): - raise ValueError("MCU model {} is blacklisted".format(model.name)) - @classmethod def find_model(self, magic): for model in self.models: if model.magic == magic: - self.check_model(model) return model raise NameError diff --git a/stcgal/options.py b/stcgal/options.py index 703f288..6437305 100644 --- a/stcgal/options.py +++ b/stcgal/options.py @@ -788,4 +788,4 @@ class Stc8Option(BaseOption): num_val = Utils.to_int(val) if num_val < 512 or num_val > 65024 or (num_val % 512) != 0: raise ValueError("must be between 512 and 65024 bytes and a multiple of 512 bytes") - self.msr[4] = num_val // 256 \ No newline at end of file + self.msr[4] = num_val // 256 diff --git a/stcgal/protocols.py b/stcgal/protocols.py index 52a4262..9bd12de 100644 --- a/stcgal/protocols.py +++ b/stcgal/protocols.py @@ -86,12 +86,15 @@ class StcBaseProtocol(ABC): self.mcu_bsl_version = "" self.options = None self.model = None + self.split_eeprom = None + self.split_code = None self.uid = None self.debug = False self.status_packet = None self.protocol_name = None self.progress = None self.progress_cb = self.progress_bar_cb + self.linearBaseAddress = 0 def progress_text_cb(self, current, written, maximum): print(current, written, maximum) @@ -133,7 +136,7 @@ class StcBaseProtocol(ABC): return packet[5:-1] @abstractmethod - def write_packet(self, packet_data): + def write_packet(self, packet_data, epilogue_len = 0): pass def read_packet(self): @@ -262,13 +265,23 @@ class StcBaseProtocol(ABC): def set_option(self, name, value): self.options.set_option(name, value) - def reset_device(self, resetcmd=False): + def reset_device(self, resetcmd=False, resetpin=False): if not resetcmd: print("Cycling power: ", end="") sys.stdout.flush() - self.ser.setDTR(True) - time.sleep(0.5) - self.ser.setDTR(False) + + if resetpin == "rts": + self.ser.setRTS(True) + else: + self.ser.setDTR(True) + + time.sleep(0.25) + + if resetpin == "rts": + self.ser.setRTS(False) + else: + self.ser.setDTR(False) + time.sleep(0.030) print("done") else: @@ -278,7 +291,7 @@ class StcBaseProtocol(ABC): print("Waiting for MCU: ", end="") sys.stdout.flush() - def connect(self, autoreset=False, resetcmd=False): + def connect(self, autoreset=False, resetcmd=False, resetpin=False): """Connect to MCU and initialize communication. Set up serial port, send sync sequence and get part info. @@ -297,7 +310,7 @@ class StcBaseProtocol(ABC): self.ser.flushInput() if autoreset: - self.reset_device(resetcmd) + self.reset_device(resetcmd, resetpin) else: print("Waiting for MCU, please cycle power: ", end="") sys.stdout.flush() @@ -377,7 +390,12 @@ class StcAutoProtocol(StcBaseProtocol): ("stc12", r"(STC|IAP)(10|11|12)\D"), ("stc15a", r"(STC|IAP)15[FL][012]0\d(E|EA|)$"), ("stc15", r"(STC|IAP|IRC)15\D"), - ("stc8", r"(STC|IAP|IRC)8")] + ("stc8d", r"STC8H(3|4|8)K"), + ("stc8d", r"STC32G"), + ("stc8d", r"STC8A8K\d\dD4"), + ("stc8g", r"STC8H"), + ("stc8g", r"STC8G"), + ("stc8", r"STC8\D")] for protocol_name, pattern in protocol_database: if re.match(pattern, self.model.name): @@ -392,7 +410,7 @@ class StcAutoProtocol(StcBaseProtocol): def initialize_status(self, status_packet): raise NotImplementedError - def write_packet(self, packet_data): + def write_packet(self, packet_data, epilogue_len = 0): raise NotImplementedError @@ -422,7 +440,7 @@ class Stc89Protocol(StcBaseProtocol): payload = StcBaseProtocol.extract_payload(self, packet) return payload[:-1] - def write_packet(self, packet_data): + def write_packet(self, packet_data, epilogue_len = 0): """Send packet to MCU. Constructs a packet with supplied payload and sends it to the MCU. @@ -817,7 +835,7 @@ class Stc12BaseProtocol(StcBaseProtocol): payload = StcBaseProtocol.extract_payload(self, packet) return payload[:-2] - def write_packet(self, packet_data): + def write_packet(self, packet_data, epilogue_len = 0): """Send packet to MCU. Constructs a packet with supplied payload and sends it to the MCU. @@ -835,6 +853,11 @@ class Stc12BaseProtocol(StcBaseProtocol): # checksum and end code packet += struct.pack(">H", sum(packet[2:]) & 0xffff) packet += self.PACKET_END + + i = 0 + while i < epilogue_len: + packet += bytes([0x66]) + i += 1 self.dump_packet(packet, receive=False) self.ser.write(packet) @@ -1561,156 +1584,6 @@ class Stc15Protocol(Stc15AProtocol): print("Target UID: %s" % Utils.hexstr(self.uid)) -class Stc8Protocol(Stc15Protocol): - """Protocol handler for STC8 series""" - - def __init__(self, port, handshake, baud, trim): - Stc15Protocol.__init__(self, port, handshake, baud, trim) - self.trim_divider = None - self.reference_voltage = None - self.mfg_date = () - - def initialize_options(self, status_packet): - """Initialize options""" - if len(status_packet) < 17: - raise StcProtocolException("invalid options in status packet") - - # create option state - self.options = Stc8Option(status_packet[9:12] + status_packet[15:17]) - self.options.print() - - def initialize_status(self, packet): - """Decode status packet and store basic MCU info""" - - if len(packet) < 39: - raise StcProtocolException("invalid status packet") - - self.mcu_clock_hz, = struct.unpack(">I", packet[1:5]) - self.external_clock = False - # all ones means no calibration - # new chips are shipped without any calibration - # XXX: somehow check if that still holds - if self.mcu_clock_hz == 0xffffffff: self.mcu_clock_hz = 0 - - # wakeup timer factory value - self.wakeup_freq, = struct.unpack(">H", packet[23:25]) - self.reference_voltage, = struct.unpack(">H", packet[35:37]) - self.mfg_date = ( - 2000 + Utils.decode_packed_bcd(packet[37]), - Utils.decode_packed_bcd(packet[38]), - Utils.decode_packed_bcd(packet[39]) - ) - - bl_version, bl_stepping = struct.unpack("BB", packet[17:19]) - bl_minor = packet[22] & 0x0f - self.mcu_bsl_version = "%d.%d.%d%s" % (bl_version >> 4, bl_version & 0x0f, - bl_minor, chr(bl_stepping)) - self.bsl_version = bl_version - - def print_mcu_info(self): - """Print additional STC8 info""" - super().print_mcu_info() - print("Target ref. voltage: %d mV" % self.reference_voltage) - print("Target mfg. date: %04d-%02d-%02d" % self.mfg_date) - - def calibrate(self): - """Calibrate selected user frequency frequency and switch to selected baudrate.""" - - # handle uncalibrated chips - if self.mcu_clock_hz == 0 and self.trim_frequency <= 0: - raise StcProtocolException("uncalibrated, please provide a trim value") - - # determine target counter - user_speed = self.trim_frequency - if user_speed <= 0: user_speed = self.mcu_clock_hz - target_user_count = round(user_speed / (self.baud_handshake/2)) - - # calibration, round 1 - print("Trimming frequency: ", end="") - sys.stdout.flush() - packet = bytes([0x00]) - packet += struct.pack(">B", 12) - packet += bytes([0x00, 0x00, 23*1, 0x00, 23*2, 0x00]) - packet += bytes([23*3, 0x00, 23*4, 0x00, 23*5, 0x00]) - packet += bytes([23*6, 0x00, 23*7, 0x00, 23*8, 0x00]) - packet += bytes([23*9, 0x00, 23*10, 0x00, 255, 0x00]) - self.write_packet(packet) - self.pulse(b"\xfe", timeout=1.0) - response = self.read_packet() - if len(response) < 2 or response[0] != 0x00: - raise StcProtocolException("incorrect magic in handshake packet") - - # select ranges and trim values - for divider in (1, 2, 3, 4, 5): - user_trim = self.choose_range(packet, response, target_user_count * divider) - if user_trim is not None: - self.trim_divider = divider - break - if user_trim is None: - raise StcProtocolException("frequency trimming unsuccessful") - - # calibration, round 2 - packet = bytes([0x00]) - packet += struct.pack(">B", 12) - for i in range(user_trim[0] - 1, user_trim[0] + 2): - packet += bytes([i & 0xff, 0x00]) - for i in range(user_trim[0] - 1, user_trim[0] + 2): - packet += bytes([i & 0xff, 0x01]) - for i in range(user_trim[0] - 1, user_trim[0] + 2): - packet += bytes([i & 0xff, 0x02]) - for i in range(user_trim[0] - 1, user_trim[0] + 2): - packet += bytes([i & 0xff, 0x03]) - self.write_packet(packet) - self.pulse(b"\xfe", timeout=1.0) - response = self.read_packet() - if len(response) < 2 or response[0] != 0x00: - raise StcProtocolException("incorrect magic in handshake packet") - - # select final values - user_trim, user_count = self.choose_trim(packet, response, target_user_count) - self.trim_value = user_trim - self.trim_frequency = round(user_count * (self.baud_handshake / 2) / self.trim_divider) - print("%.03f MHz" % (self.trim_frequency / 1E6)) - - # switch to programming frequency - print("Switching to %d baud: " % self.baud_transfer, end="") - sys.stdout.flush() - packet = bytes([0x01, 0x00, 0x00]) - bauds = self.baud_transfer * 4 - packet += struct.pack(">H", round(65536 - 24E6 / bauds)) - packet += bytes([user_trim[1], user_trim[0]]) - iap_wait = self.get_iap_delay(24E6) - packet += bytes([iap_wait]) - self.write_packet(packet) - response = self.read_packet() - if len(response) < 1 or response[0] != 0x01: - raise StcProtocolException("incorrect magic in handshake packet") - self.ser.baudrate = self.baud_transfer - - def build_options(self): - """Build a packet of option data from the current configuration.""" - - msr = self.options.get_msr() - packet = 40 * bytearray([0xff]) - packet[3] = 0 - packet[6] = 0 - packet[22] = 0 - packet[24:28] = struct.pack(">I", self.trim_frequency) - packet[28:30] = self.trim_value - packet[30] = self.trim_divider - packet[32] = msr[0] - packet[36:40] = msr[1:5] - return bytes(packet) - - def disconnect(self): - """Disconnect from MCU""" - - # reset mcu - packet = bytes([0xff]) - self.write_packet(packet) - self.ser.close() - print("Disconnected!") - class StcUsb15Protocol(Stc15Protocol): """USB should use large blocks""" PROGRAM_BLOCKSIZE = 128 @@ -1772,7 +1645,7 @@ class StcUsb15Protocol(Stc15Protocol): host2dev = usb.util.CTRL_TYPE_VENDOR | usb.util.CTRL_RECIPIENT_DEVICE | usb.util.CTRL_OUT self.dev.ctrl_transfer(host2dev, request, value, index, chunks) - def connect(self, autoreset=False, resetcmd=False): + def connect(self, autoreset=False, resetcmd=False, resetpin=False): """Connect to USB device and read info packet""" # USB support is optional. Provide an error if pyusb is not available. @@ -1874,3 +1747,399 @@ class StcUsb15Protocol(Stc15Protocol): if self.dev: self.write_packet(0xff) print("Disconnected!") + + +class Stc8Protocol(Stc15Protocol): + """Protocol handler for STC8 series""" + + def __init__(self, port, handshake, baud, trim): + Stc15Protocol.__init__(self, port, handshake, baud, trim) + self.trim_divider = None + self.reference_voltage = None + self.mfg_date = () + + def initialize_options(self, status_packet): + """Initialize options""" + if len(status_packet) < 17: + raise StcProtocolException("invalid options in status packet") + + # create option state + self.options = Stc8Option(status_packet[9:12] + status_packet[15:17]) + self.options.print() + + def initialize_status(self, packet): + """Decode status packet and store basic MCU info""" + + if len(packet) < 39: + raise StcProtocolException("invalid status packet") + + self.mcu_clock_hz, = struct.unpack(">I", packet[1:5]) + self.external_clock = False + # all ones means no calibration + # new chips are shipped without any calibration + # XXX: somehow check if that still holds + if self.mcu_clock_hz == 0xffffffff: self.mcu_clock_hz = 0 + + # wakeup timer factory value + self.wakeup_freq, = struct.unpack(">H", packet[23:25]) + self.reference_voltage, = struct.unpack(">H", packet[35:37]) + self.mfg_date = ( + 2000 + Utils.decode_packed_bcd(packet[37]), + Utils.decode_packed_bcd(packet[38]), + Utils.decode_packed_bcd(packet[39]) + ) + + bl_version, bl_stepping = struct.unpack("BB", packet[17:19]) + bl_minor = packet[22] & 0x0f + self.mcu_bsl_version = "%d.%d.%d%s" % (bl_version >> 4, bl_version & 0x0f, + bl_minor, chr(bl_stepping)) + self.bsl_version = bl_version + + def print_mcu_info(self): + """Print additional STC8 info""" + super().print_mcu_info() + print("Target ref. voltage: %d mV" % self.reference_voltage) + print("Target mfg. date: %04d-%02d-%02d" % self.mfg_date) + + def set_option(self, name, value): + super().set_option(name, value) + + def calibrate(self): + """Calibrate selected user frequency frequency and switch to selected baudrate.""" + + # handle uncalibrated chips + if self.mcu_clock_hz == 0 and self.trim_frequency <= 0: + raise StcProtocolException("uncalibrated, please provide a trim value") + + # determine target counter + user_speed = self.trim_frequency + if user_speed <= 0: user_speed = self.mcu_clock_hz + target_user_count = round(user_speed / (self.baud_handshake/2)) + + # calibration, round 1 + print("Trimming frequency: ", end="") + sys.stdout.flush() + packet = bytes([0x00]) + packet += struct.pack(">B", 12) + packet += bytes([0x00, 0x00, 23*1, 0x00, 23*2, 0x00]) + packet += bytes([23*3, 0x00, 23*4, 0x00, 23*5, 0x00]) + packet += bytes([23*6, 0x00, 23*7, 0x00, 23*8, 0x00]) + packet += bytes([23*9, 0x00, 23*10, 0x00, 255, 0x00]) + self.write_packet(packet) + self.pulse(b"\xfe", timeout=1.0) + response = self.read_packet() + if len(response) < 2 or response[0] != 0x00: + raise StcProtocolException("incorrect magic in handshake packet") + + # select ranges and trim values + for divider in (1, 2, 3, 4, 5): + user_trim = self.choose_range(packet, response, target_user_count * divider) + if user_trim is not None: + self.trim_divider = divider + break + if user_trim is None: + raise StcProtocolException("frequency trimming unsuccessful") + + # calibration, round 2 + packet = bytes([0x00]) + packet += struct.pack(">B", 12) + for i in range(user_trim[0] - 1, user_trim[0] + 2): + packet += bytes([i & 0xff, 0x00]) + for i in range(user_trim[0] - 1, user_trim[0] + 2): + packet += bytes([i & 0xff, 0x01]) + for i in range(user_trim[0] - 1, user_trim[0] + 2): + packet += bytes([i & 0xff, 0x02]) + for i in range(user_trim[0] - 1, user_trim[0] + 2): + packet += bytes([i & 0xff, 0x03]) + self.write_packet(packet) + self.pulse(b"\xfe", timeout=1.0) + response = self.read_packet() + if len(response) < 2 or response[0] != 0x00: + raise StcProtocolException("incorrect magic in handshake packet") + + # select final values + user_trim, user_count = self.choose_trim(packet, response, target_user_count) + self.trim_value = user_trim + self.trim_frequency = round(user_count * (self.baud_handshake / 2) / self.trim_divider) + print("%.03f MHz" % (self.trim_frequency / 1E6)) + + # switch to programming frequency + print("Switching to %d baud: " % self.baud_transfer, end="") + sys.stdout.flush() + packet = bytes([0x01, 0x00, 0x00]) + bauds = self.baud_transfer * 4 + packet += struct.pack(">H", round(65536 - 24E6 / bauds)) + packet += bytes([user_trim[1], user_trim[0]]) + iap_wait = self.get_iap_delay(24E6) + packet += bytes([iap_wait]) + self.write_packet(packet) + response = self.read_packet() + if len(response) < 1 or response[0] != 0x01: + raise StcProtocolException("incorrect magic in handshake packet") + self.ser.baudrate = self.baud_transfer + + def build_options(self): + """Build a packet of option data from the current configuration.""" + + msr = self.options.get_msr() + packet = 40 * bytearray([0xff]) + packet[3] = 0 + packet[6] = 0 + packet[22] = 0 + packet[24:28] = struct.pack(">I", self.trim_frequency) + packet[28:30] = self.trim_value + packet[30] = self.trim_divider + packet[32] = msr[0] + packet[36:40] = msr[1:5] + return bytes(packet) + + def disconnect(self): + """Disconnect from MCU""" + + # reset mcu + packet = bytes([0xff]) + self.write_packet(packet) + self.ser.close() + print("Disconnected!") + + +class Stc8dProtocol(Stc8Protocol): + """Protocol handler for STC8A8K64D4 series""" + + def __init__(self, port, handshake, baud, trim): + Stc8Protocol.__init__(self, port, handshake, baud, trim) + + def set_option(self, name, value): + super().set_option(name, value) + if name=='program_eeprom_split': + split_point = Utils.to_int(value); + + if self.model.mcs251: + """Minimum size is 1K in STC-ISP""" + if split_point == 0 and self.model.iap: + split_point = 0x400; + + # CODE starts at 0xFF0000 + self.split_code = 0x10000; + # EEPROM starts at 0xFE0000 + self.split_eeprom = split_point; + else: + if split_point == 0 and self.model.iap: + split_point = self.model.code; + + self.split_code = split_point; + self.split_eeprom = self.model.total - self.split_code; + + def choose_range(self, packet, response, target_count): + """Choose appropriate trim value mean for next round from challenge + responses.""" + + + challenge_data = packet[2:] + calib_data = response[2:] + calib_len = response[1] + if len(calib_data) < 2 * calib_len: + raise StcProtocolException("range calibration data missing") + for i in range(calib_len >> 1): + count_a, count_b = struct.unpack( + ">HH", calib_data[4 * i: 4 * i + 4]) + trim_a, trim_b, trim_range = struct.unpack( + ">BxBB", challenge_data[4 * i:4 * i + 4]) + if ((count_a <= target_count and count_b >= target_count)): + target_trim = round( + (target_count - count_a) * (trim_b - trim_a) / (count_b - count_a) + trim_a) + # target_trim will be set at the center of packet in the 2nd calibration + if target_trim < 6 or target_trim > 255 - 5: + raise StcProtocolException("frequency trimming failed") + return (target_trim, trim_range) + return None + + def choose_trim(self, packet, response, target_count): + """Choose best trim for given target count from challenge + responses.""" + calib_data = response[2:] + challenge_data = packet[2:] + calib_len = response[1] + if len(calib_data) < 2 * calib_len: + raise StcProtocolException("trim calibration data missing") + best = None + best_count = sys.maxsize + for i in range(calib_len): + count, = struct.unpack(">H", calib_data[2 * i: 2 * i + 2]) + trim_adj, trim_range = struct.unpack( + ">BB", challenge_data[2 * i: 2 * i + 2]) + if abs(count - target_count) < best_count: + best_count = abs(count - target_count) + best = (trim_adj, trim_range), count + if not best: + raise StcProtocolException("frequency trimming failed") + return best + + + def calibrate(self): + """Calibrate selected user frequency frequency and switch to selected baudrate.""" + + # handle uncalibrated chips + if self.mcu_clock_hz == 0 and self.trim_frequency <= 0: + raise StcProtocolException( + "uncalibrated, please provide a trim value") + + # determine target counter + user_speed = self.trim_frequency + if user_speed <= 0: + user_speed = self.mcu_clock_hz + target_user_count = round(user_speed / self.baud_handshake) + + # calibration, round 1 + print("Target frequency: ", end="") + sys.stdout.flush() + packet = bytes([0x00, 0x08]) + packet += bytes([0x00, 0x00, 0xFF, 0x00]) + packet += bytes([0x00, 0x10, 0xFF, 0x10]) + packet += bytes([0x00, 0x20, 0xFF, 0x20]) + packet += bytes([0x00, 0x30, 0xFF, 0x30]) + self.write_packet(packet) + self.pulse(b"\xfe", timeout=1.0) + response = self.read_packet() + if len(response) < 2 or response[0] != 0x00: + raise StcProtocolException("incorrect magic in handshake packet") + + # select ranges and trim values + for divider in range(1, 6): + user_trim = self.choose_range( + packet, response, target_user_count * divider) + if user_trim is not None: + self.trim_divider = divider + break + if user_trim is None: + raise StcProtocolException("frequency trimming unsuccessful") + + # calibration, round 2 + packet = bytes([0x00, 0x0C]) + for i in range(-6, 6): + packet += bytes([user_trim[0] + i, user_trim[1]]) + self.write_packet(packet) + self.pulse(b"\xfe", timeout=1.0) + response = self.read_packet() + if len(response) < 2 or response[0] != 0x00: + raise StcProtocolException("incorrect magic in handshake packet") + + # select final values + user_trim, user_count = self.choose_trim( + packet, response, target_user_count * self.trim_divider) + self.trim_value = user_trim + self.trim_frequency = round( + user_count * self.baud_handshake/self.trim_divider) + print("Target %.03f MHz" % (user_speed / 1E6)) + print("Adjusted frequency: %.03f MHz(%.03f%%)" % ( + (self.trim_frequency / 1E6), (self.trim_frequency*100/user_speed-100))) + + # switch to programming frequency + print("Switching to %d baud: " % self.baud_transfer, end="") + sys.stdout.flush() + packet = bytes([0x01, 0x00, 0x00]) + bauds = self.baud_transfer * 4 + packet += struct.pack(">H", round(65536 - 24E6 / bauds)) + packet += bytes([user_trim[1], user_trim[0]]) + # iap_wait = self.get_iap_delay(24E6) + iap_wait = 0x98 # iap_wait for "STC8A8K64D4" + packet += bytes([iap_wait]) + self.write_packet(packet) + response = self.read_packet() + if len(response) < 1 or response[0] != 0x01: + raise StcProtocolException("incorrect magic in handshake packet") + self.ser.baudrate = self.baud_transfer + + def build_options(self): + """Build a packet of option data from the current configuration.""" + msr = self.options.get_msr() + packet = 40 * bytearray([0xff]) + packet[3] = 0x00 + packet[6] = 0x00 + packet[22] = 0x00 + packet[24:28] = struct.pack(">I", self.trim_frequency) + packet[28:30] = self.trim_value + packet[30] = self.trim_divider + packet[32] = msr[0] + packet[36:40] = msr[1:5] + return bytes(packet) + + +class Stc8gProtocol(Stc8dProtocol): + """Protocol handler for STC8G series""" + + def __init__(self, port, handshake, baud, trim): + Stc8dProtocol.__init__(self, port, handshake, baud, trim) + + def calibrate(self): + """Calibrate selected user frequency frequency and switch to selected baudrate.""" + + # handle uncalibrated chips + if self.mcu_clock_hz == 0 and self.trim_frequency <= 0: + raise StcProtocolException( + "uncalibrated, please provide a trim value") + + # determine target counter + user_speed = self.trim_frequency + if user_speed <= 0: + user_speed = self.mcu_clock_hz + target_user_count = round(user_speed / self.baud_handshake) + + # calibration, round 1 + print("Target frequency: ", end="") + sys.stdout.flush() + packet = bytes([0x00, 0x05]) + packet += bytes([0x00, 0x00, 0x80, 0x00]) + packet += bytes([0x00, 0x80, 0x80, 0x80]) + packet += bytes([0xFF, 0x00]) + self.write_packet(packet, 12) + self.pulse(b"\xfe", timeout=1.0) + response = self.read_packet() + if len(response) < 2 or response[0] != 0x00: + raise StcProtocolException("incorrect magic in handshake packet") + + # select ranges and trim values + for divider in range(1, 6): + user_trim = self.choose_range( + packet, response, target_user_count * divider) + if user_trim is not None: + self.trim_divider = divider + break + if user_trim is None: + raise StcProtocolException("frequency trimming unsuccessful") + + # calibration, round 2 + packet = bytes([0x00, 0x0C]) + for i in range(-6, 6): + packet += bytes([user_trim[0] + i, user_trim[1]]) + self.write_packet(packet, 19) + self.pulse(b"\xfe", timeout=1.0) + response = self.read_packet() + if len(response) < 2 or response[0] != 0x00: + raise StcProtocolException("incorrect magic in handshake packet") + + # select final values + user_trim, user_count = self.choose_trim( + packet, response, target_user_count * self.trim_divider) + self.trim_value = user_trim + self.trim_frequency = round( + user_count * self.baud_handshake/self.trim_divider) + print("Target %.03f MHz" % (user_speed / 1E6)) + print("Adjusted frequency: %.03f MHz(%.03f%%)" % ( + (self.trim_frequency / 1E6), (self.trim_frequency*100/user_speed-100))) + + # switch to programming frequency + print("Switching to %d baud: " % self.baud_transfer, end="") + sys.stdout.flush() + packet = bytes([0x01, 0x00, 0x00]) + bauds = self.baud_transfer * 4 + packet += struct.pack(">H", round(65536 - 24E6 / bauds)) + packet += bytes([user_trim[1], user_trim[0]]) + # iap_wait = self.get_iap_delay(24E6) + iap_wait = 0x98 # iap_wait for "STC8A8K64D4" + packet += bytes([iap_wait]) + self.write_packet(packet) + response = self.read_packet() + if len(response) < 1 or response[0] != 0x01: + raise StcProtocolException("incorrect magic in handshake packet") + self.ser.baudrate = self.baud_transfer From b43792ccd8ec6eb634e3bc1dce8097523926b0d0 Mon Sep 17 00:00:00 2001 From: Vincent DEFERT <20.100@defert.com> Date: Mon, 29 May 2023 09:30:44 +0200 Subject: [PATCH 4/6] Added Loader argument to yaml.load --- tests/test_fuzzing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_fuzzing.py b/tests/test_fuzzing.py index 5482f7d..6701f03 100644 --- a/tests/test_fuzzing.py +++ b/tests/test_fuzzing.py @@ -99,7 +99,7 @@ class TestProgramFuzzed(unittest.TestCase): def single_fuzz(self, yml, serial_mock, fuzzer, read_mock, err, out, sleep_mock, write_mock): """Test a single programming cycle with fuzzing""" with open(yml) as test_file: - test_data = yaml.load(test_file.read()) + test_data = yaml.load(test_file.read(), Loader=yaml.SafeLoader) for _ in range(1000): with self.subTest(): opts = get_default_opts() From 86bee9141af9c0d4634bbad4e38122beee90cebd Mon Sep 17 00:00:00 2001 From: Vincent DEFERT <20.100@defert.com> Date: Mon, 29 May 2023 09:34:48 +0200 Subject: [PATCH 5/6] Removed Python 3.5 (no loonger available) --- .github/workflows/python.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 506bf2a..2c77d9a 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -9,7 +9,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.5, 3.7, 3.8] + python-version: [3.7, 3.8] steps: - uses: actions/checkout@v2 @@ -47,4 +47,4 @@ jobs: pip3 install --upgrade coveralls coveralls --finish env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 1468d600057eb3a67a3320364bff8259e054ba0a Mon Sep 17 00:00:00 2001 From: Vincent DEFERT <20.100@defert.com> Date: Thu, 1 Jun 2023 08:50:30 +0200 Subject: [PATCH 6/6] Minor corrections after review --- stcgal/frontend.py | 4 ---- stcgal/protocols.py | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/stcgal/frontend.py b/stcgal/frontend.py index f1b3d45..48c5f60 100644 --- a/stcgal/frontend.py +++ b/stcgal/frontend.py @@ -46,7 +46,6 @@ class StcGal: def __init__(self, opts): self.opts = opts self.hexFileType = 8 - self.linearBaseAddress = 0 self.initialize_protocol(opts) def initialize_protocol(self, opts): @@ -100,7 +99,6 @@ class StcGal: try: hexfile = IHex.read(fileobj) self.hexFileType = hexfile.get_mode() - self.linearBaseAddress = hexfile.get_linearBaseAddress() binary = hexfile.extract_data() print("%d bytes (Intel HEX)" %len(binary)) return binary @@ -132,8 +130,6 @@ class StcGal: print("base address, i.e. contain a type 04 record. More information at:", file=sys.stderr) print("https://en.wikipedia.org/wiki/Intel_HEX", file=sys.stderr) else: - self.protocol.linearBaseAddress = self.linearBaseAddress - # warn if it overflows if len(bindata) > code_size: print("WARNING: code_image overflows into eeprom segment!", file=sys.stderr) diff --git a/stcgal/protocols.py b/stcgal/protocols.py index 9bd12de..e9ba8f6 100644 --- a/stcgal/protocols.py +++ b/stcgal/protocols.py @@ -1911,7 +1911,7 @@ class Stc8dProtocol(Stc8Protocol): def set_option(self, name, value): super().set_option(name, value) - if name=='program_eeprom_split': + if name == 'program_eeprom_split': split_point = Utils.to_int(value); if self.model.mcs251: