@modular-circuit/transpiler 0.0.77 → 0.0.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/build/builder/graph_to_kicad/do_convert_graph_to_kicad_project.js +108 -19
  2. package/build/builder/graph_to_kicad/index.js +59 -4
  3. package/build/converter/graph_to_netlist/graph_converter.js +171 -51
  4. package/build/converter/kicad_sexpr/eeschema/drawing_sheet/sch_default_drawing_sheet.js +1 -1
  5. package/build/converter/kicad_sexpr/eeschema/printer.js +290 -245
  6. package/build/converter/link_to_netlist/converter.js +135 -77
  7. package/build/converter/link_to_netlist/links/converter_base.js +131 -38
  8. package/build/converter/link_to_netlist/links/converters.js +554 -316
  9. package/build/converter/netlist_to_kicad/calc_boxes_pos.d.ts +1 -1
  10. package/build/converter/netlist_to_kicad/calc_boxes_pos.d.ts.map +1 -1
  11. package/build/converter/netlist_to_kicad/calc_boxes_pos.js +106 -35
  12. package/build/converter/netlist_to_kicad/layout.js +32 -28
  13. package/build/converter/netlist_to_kicad/netlist_converter.d.ts +1 -1
  14. package/build/converter/netlist_to_kicad/netlist_converter.d.ts.map +1 -1
  15. package/build/converter/netlist_to_kicad/netlist_converter.js +300 -128
  16. package/build/kicad/constraints/index.js +1 -1
  17. package/build/kicad/label/net_label.js +2 -2
  18. package/build/kicad/label/sheet_pin.js +19 -11
  19. package/build/kicad/project/kicad_prl.js +3 -3
  20. package/build/kicad/project/kicad_pro.js +4 -4
  21. package/build/kicad/project/kicad_project_achieve.js +45 -31
  22. package/build/kicad/project/wildcards_and_files_ext.js +61 -61
  23. package/build/kicad/sheet/sheet.js +3 -3
  24. package/build/kicad/symbols/lib_symbol/gnd.js +6 -6
  25. package/build/kicad/symbols/lib_symbol/vcc.js +7 -7
  26. package/build/kicad/symbols/sch_symbol/gnd.js +9 -9
  27. package/build/kicad/symbols/sch_symbol/vcc.js +9 -9
  28. package/build/kicad/symbols/symbol_utils.js +1 -1
  29. package/build/kicad/wire/gen_wire.js +4 -4
  30. package/build/utils/collect_sub_sheets.js +151 -37
  31. package/build/utils/constraints.js +6 -6
  32. package/build/utils/filter_null_undefined.js +31 -2
  33. package/build/utils/string_formatter.js +29 -23
  34. package/package.json +5 -5
@@ -1,26 +1,115 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
23
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ var __values = (this && this.__values) || function(o) {
49
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
50
+ if (m) return m.call(o);
51
+ if (o && typeof o.length === "number") return {
52
+ next: function () {
53
+ if (o && i >= o.length) o = void 0;
54
+ return { value: o && o[i++], done: !o };
55
+ }
56
+ };
57
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
58
+ };
59
+ var __read = (this && this.__read) || function (o, n) {
60
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
61
+ if (!m) return o;
62
+ var i = m.call(o), r, ar = [], e;
63
+ try {
64
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
65
+ }
66
+ catch (error) { e = { error: error }; }
67
+ finally {
68
+ try {
69
+ if (r && !r.done && (m = i["return"])) m.call(i);
70
+ }
71
+ finally { if (e) throw e.error; }
72
+ }
73
+ return ar;
74
+ };
1
75
  import { MODULAR_CIRCUIT_SCH_EXT } from '@modular-circuit/ir';
2
76
  import { GraphConverter, SCHEMATIC_PRINTER, } from '../../converter';
3
77
  import { NetListConverter } from '../../converter/netlist_to_kicad';
4
78
  import { KiCadProjectAchieve, KiCadSchematicFileExtension } from '../../kicad/project';
5
79
  import { collect_sub_sheets } from '../../utils/collect_sub_sheets';
6
- export async function do_convert_graph_to_kicad_project(ctx) {
7
- const { sheets } = await collect_sub_sheets(ctx.project.dependencies, ctx.module_resolver);
8
- const netlist = new GraphConverter({
9
- ...ctx,
10
- }).convert_to_netlist();
11
- const converted_sheets = new NetListConverter({
12
- ...ctx,
13
- netlist,
14
- }).convert_to_kicad();
15
- const sexpr_printer = new SCHEMATIC_PRINTER();
16
- for (const [k, v] of Object.entries(converted_sheets)) {
17
- if (k in sheets) {
18
- console.error(`Duplicated sheet file name found ${k}`);
19
- }
20
- sheets[k.replace(MODULAR_CIRCUIT_SCH_EXT, KiCadSchematicFileExtension)] = sexpr_printer.schematic(v);
21
- }
22
- const kicad_project = new KiCadProjectAchieve(ctx.project.name, {
23
- ...sheets,
80
+ export function do_convert_graph_to_kicad_project(ctx) {
81
+ return __awaiter(this, void 0, void 0, function () {
82
+ var sheets, netlist, converted_sheets, sexpr_printer, _a, _b, _c, k, v, kicad_project;
83
+ var e_1, _d;
84
+ return __generator(this, function (_e) {
85
+ switch (_e.label) {
86
+ case 0: return [4 /*yield*/, collect_sub_sheets(ctx.project.dependencies, ctx.module_resolver)];
87
+ case 1:
88
+ sheets = (_e.sent()).sheets;
89
+ netlist = new GraphConverter(__assign({}, ctx)).convert_to_netlist();
90
+ return [4 /*yield*/, new NetListConverter(__assign(__assign({}, ctx), { netlist: netlist })).convert_to_kicad()];
91
+ case 2:
92
+ converted_sheets = _e.sent();
93
+ sexpr_printer = new SCHEMATIC_PRINTER();
94
+ try {
95
+ for (_a = __values(Object.entries(converted_sheets)), _b = _a.next(); !_b.done; _b = _a.next()) {
96
+ _c = __read(_b.value, 2), k = _c[0], v = _c[1];
97
+ if (k in sheets) {
98
+ console.error("Duplicated sheet file name found ".concat(k));
99
+ }
100
+ sheets[k.replace(MODULAR_CIRCUIT_SCH_EXT, KiCadSchematicFileExtension)] = sexpr_printer.schematic(v);
101
+ }
102
+ }
103
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
104
+ finally {
105
+ try {
106
+ if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
107
+ }
108
+ finally { if (e_1) throw e_1.error; }
109
+ }
110
+ kicad_project = new KiCadProjectAchieve(ctx.project.name, __assign({}, sheets));
111
+ return [2 /*return*/, kicad_project.toZip()];
112
+ }
113
+ });
24
114
  });
25
- return kicad_project.toZip();
26
115
  }
@@ -1,8 +1,63 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
23
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
1
48
  import { build_connection_graph } from '@modular-circuit/perc';
2
49
  import { do_convert_graph_to_kicad_project } from './do_convert_graph_to_kicad_project';
3
- export async function convert_graph_to_kicad_project(ctx) {
4
- return do_convert_graph_to_kicad_project({
5
- ...ctx,
6
- ...(await build_connection_graph({ ...ctx, dependencies: ctx.project.dependencies })),
50
+ export function convert_graph_to_kicad_project(ctx) {
51
+ return __awaiter(this, void 0, void 0, function () {
52
+ var _a, _b;
53
+ return __generator(this, function (_c) {
54
+ switch (_c.label) {
55
+ case 0:
56
+ _a = do_convert_graph_to_kicad_project;
57
+ _b = [__assign({}, ctx)];
58
+ return [4 /*yield*/, build_connection_graph(__assign(__assign({}, ctx), { dependencies: ctx.project.dependencies }))];
59
+ case 1: return [2 /*return*/, _a.apply(void 0, [__assign.apply(void 0, _b.concat([(_c.sent())]))])];
60
+ }
61
+ });
7
62
  });
8
63
  }
@@ -1,72 +1,192 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __values = (this && this.__values) || function(o) {
13
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
14
+ if (m) return m.call(o);
15
+ if (o && typeof o.length === "number") return {
16
+ next: function () {
17
+ if (o && i >= o.length) o = void 0;
18
+ return { value: o && o[i++], done: !o };
19
+ }
20
+ };
21
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
22
+ };
23
+ var __read = (this && this.__read) || function (o, n) {
24
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
25
+ if (!m) return o;
26
+ var i = m.call(o), r, ar = [], e;
27
+ try {
28
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
29
+ }
30
+ catch (error) { e = { error: error }; }
31
+ finally {
32
+ try {
33
+ if (r && !r.done && (m = i["return"])) m.call(i);
34
+ }
35
+ finally { if (e) throw e.error; }
36
+ }
37
+ return ar;
38
+ };
1
39
  import { ConnectionNodeType, } from '@modular-circuit/electronics-model';
2
40
  import { LINK_CONVERTER } from '../link_to_netlist';
3
- export class GraphConverter {
4
- ctx;
5
- constructor(ctx) {
41
+ var GraphConverter = /** @class */ (function () {
42
+ function GraphConverter(ctx) {
6
43
  this.ctx = ctx;
7
44
  }
8
- convert_to_netlist() {
9
- let pin_count = 0;
10
- const nl_netlist = {
45
+ GraphConverter.prototype.convert_to_netlist = function () {
46
+ var e_1, _a, e_2, _b, e_3, _c, e_4, _d, e_5, _e, e_6, _f, e_7, _g, e_8, _h;
47
+ var pin_count = 0;
48
+ var nl_netlist = {
11
49
  nets: [],
12
50
  schematics: {},
13
51
  };
14
- const pin_map = {};
15
- const port_map = new Map();
16
- const pin_shapes = {};
17
- for (const sub of this.ctx.connection_graph.subgraphs) {
18
- for (const node of sub.nodes) {
19
- if (node.type === ConnectionNodeType.Port) {
20
- const port_id = node.uuid;
21
- port_map.set(node.param, port_id);
22
- for (const [label_name, shape] of Object.entries(node.label_shapes)) {
23
- const pin_id = `pin-${++pin_count}`;
24
- pin_shapes[pin_id] = shape;
25
- if (!(port_id in pin_map)) {
26
- pin_map[port_id] = {};
52
+ var pin_map = {};
53
+ var port_map = new Map();
54
+ var pin_shapes = {};
55
+ try {
56
+ for (var _j = __values(this.ctx.connection_graph.subgraphs), _k = _j.next(); !_k.done; _k = _j.next()) {
57
+ var sub = _k.value;
58
+ try {
59
+ for (var _l = (e_2 = void 0, __values(sub.nodes)), _m = _l.next(); !_m.done; _m = _l.next()) {
60
+ var node = _m.value;
61
+ if (node.type === ConnectionNodeType.Port) {
62
+ var port_id = node.uuid;
63
+ port_map.set(node.param, port_id);
64
+ try {
65
+ for (var _o = (e_3 = void 0, __values(Object.entries(node.label_shapes))), _p = _o.next(); !_p.done; _p = _o.next()) {
66
+ var _q = __read(_p.value, 2), label_name = _q[0], shape = _q[1];
67
+ var pin_id = "pin-".concat(++pin_count);
68
+ pin_shapes[pin_id] = shape;
69
+ if (!(port_id in pin_map)) {
70
+ pin_map[port_id] = {};
71
+ }
72
+ pin_map[port_id][label_name] = pin_id;
73
+ }
74
+ }
75
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
76
+ finally {
77
+ try {
78
+ if (_p && !_p.done && (_c = _o.return)) _c.call(_o);
79
+ }
80
+ finally { if (e_3) throw e_3.error; }
81
+ }
27
82
  }
28
- pin_map[port_id][label_name] = pin_id;
29
83
  }
30
84
  }
85
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
86
+ finally {
87
+ try {
88
+ if (_m && !_m.done && (_b = _l.return)) _b.call(_l);
89
+ }
90
+ finally { if (e_2) throw e_2.error; }
91
+ }
92
+ }
93
+ }
94
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
95
+ finally {
96
+ try {
97
+ if (_k && !_k.done && (_a = _j.return)) _a.call(_j);
31
98
  }
99
+ finally { if (e_1) throw e_1.error; }
32
100
  }
33
- for (const [filename, sch] of Object.entries(this.ctx.cg_schematics)) {
34
- const { uuid, powers, sheets } = sch;
35
- const sheet_symbols = [];
36
- for (const sheet of sheets) {
37
- const pins = [];
38
- for (const port_id of sheet.ports) {
39
- if (!(port_id in pin_map)) {
40
- console.error(`Port ${port_id} not found in pin_map`);
41
- continue;
101
+ try {
102
+ for (var _r = __values(Object.entries(this.ctx.cg_schematics)), _s = _r.next(); !_s.done; _s = _r.next()) {
103
+ var _t = __read(_s.value, 2), filename = _t[0], sch = _t[1];
104
+ var uuid = sch.uuid, powers = sch.powers, sheets = sch.sheets;
105
+ var sheet_symbols = [];
106
+ try {
107
+ for (var sheets_1 = (e_5 = void 0, __values(sheets)), sheets_1_1 = sheets_1.next(); !sheets_1_1.done; sheets_1_1 = sheets_1.next()) {
108
+ var sheet = sheets_1_1.value;
109
+ var pins = [];
110
+ try {
111
+ for (var _u = (e_6 = void 0, __values(sheet.ports)), _v = _u.next(); !_v.done; _v = _u.next()) {
112
+ var port_id = _v.value;
113
+ if (!(port_id in pin_map)) {
114
+ console.error("Port ".concat(port_id, " not found in pin_map"));
115
+ continue;
116
+ }
117
+ try {
118
+ for (var _w = (e_7 = void 0, __values(Object.entries(pin_map[port_id]))), _x = _w.next(); !_x.done; _x = _w.next()) {
119
+ var _y = __read(_x.value, 2), label_name = _y[0], pin_id = _y[1];
120
+ pins.push({
121
+ uuid: pin_id,
122
+ name: label_name,
123
+ shape: pin_shapes[pin_id],
124
+ });
125
+ }
126
+ }
127
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
128
+ finally {
129
+ try {
130
+ if (_x && !_x.done && (_g = _w.return)) _g.call(_w);
131
+ }
132
+ finally { if (e_7) throw e_7.error; }
133
+ }
134
+ }
135
+ }
136
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
137
+ finally {
138
+ try {
139
+ if (_v && !_v.done && (_f = _u.return)) _f.call(_u);
140
+ }
141
+ finally { if (e_6) throw e_6.error; }
142
+ }
143
+ sheet_symbols.push(__assign(__assign({}, sheet), { pins: pins }));
42
144
  }
43
- for (const [label_name, pin_id] of Object.entries(pin_map[port_id])) {
44
- pins.push({
45
- uuid: pin_id,
46
- name: label_name,
47
- shape: pin_shapes[pin_id],
48
- });
145
+ }
146
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
147
+ finally {
148
+ try {
149
+ if (sheets_1_1 && !sheets_1_1.done && (_e = sheets_1.return)) _e.call(sheets_1);
49
150
  }
151
+ finally { if (e_5) throw e_5.error; }
50
152
  }
51
- sheet_symbols.push({ ...sheet, pins });
153
+ nl_netlist.schematics[filename] = {
154
+ uuid: uuid,
155
+ filename: filename,
156
+ powers: powers,
157
+ sheet_symbols: sheet_symbols,
158
+ hiera_labels: [],
159
+ };
160
+ }
161
+ }
162
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
163
+ finally {
164
+ try {
165
+ if (_s && !_s.done && (_d = _r.return)) _d.call(_r);
52
166
  }
53
- nl_netlist.schematics[filename] = {
54
- uuid,
55
- filename,
56
- powers,
57
- sheet_symbols,
58
- hiera_labels: [],
59
- };
167
+ finally { if (e_4) throw e_4.error; }
60
168
  }
61
- const link_converter = new LINK_CONVERTER({
62
- pin_map,
63
- nl_netlist,
64
- port_map,
169
+ var link_converter = new LINK_CONVERTER({
170
+ pin_map: pin_map,
171
+ nl_netlist: nl_netlist,
172
+ port_map: port_map,
65
173
  net_names_count: new Map(),
66
174
  });
67
- for (const sub of this.ctx.connection_graph.subgraphs) {
68
- link_converter.visit_cc(sub);
175
+ try {
176
+ for (var _z = __values(this.ctx.connection_graph.subgraphs), _0 = _z.next(); !_0.done; _0 = _z.next()) {
177
+ var sub = _0.value;
178
+ link_converter.visit_cc(sub);
179
+ }
180
+ }
181
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
182
+ finally {
183
+ try {
184
+ if (_0 && !_0.done && (_h = _z.return)) _h.call(_z);
185
+ }
186
+ finally { if (e_8) throw e_8.error; }
69
187
  }
70
188
  return nl_netlist;
71
- }
72
- }
189
+ };
190
+ return GraphConverter;
191
+ }());
192
+ export { GraphConverter };
@@ -1 +1 @@
1
- export const BASE_64_ENCODED_SCH_DEFAULT_DRAWING_SHEET = 'KGtpY2FkX3drcwoJKHZlcnNpb24gMjAyMzExMTgpCgkoZ2VuZXJhdG9yICJwbF9lZGl0b3IiKQoJKGdlbmVyYXRvcl92ZXJzaW9uICI4LjAiKQoJKHNldHVwCgkJKHRleHRzaXplIDEuNSAxLjUpCgkJKGxpbmV3aWR0aCAwLjE1KQoJCSh0ZXh0bGluZXdpZHRoIDAuMTUpCgkJKGxlZnRfbWFyZ2luIDEwKQoJCShyaWdodF9tYXJnaW4gMTApCgkJKHRvcF9tYXJnaW4gMTApCgkJKGJvdHRvbV9tYXJnaW4gMTApCgkpCgkocmVjdAoJCShuYW1lICIiKQoJCShzdGFydCAxMzUuNjY5IDM0LjI3MjIpCgkJKGVuZCAyIDIuMDAwMikKCQkoY29tbWVudCAicmVjdCBhcm91bmQgdGhlIHRpdGxlIGJsb2NrIikKCSkKCShyZWN0CgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDAgMCBsdGNvcm5lcikKCQkoZW5kIDAgMCkKCQkocmVwZWF0IDIpCgkJKGluY3J4IDIpCgkJKGluY3J5IDIpCgkpCgkobGluZQoJCShuYW1lICIiKQoJCShzdGFydCA1MCAyIGx0Y29ybmVyKQoJCShlbmQgNTAgMCBsdGNvcm5lcikKCQkocmVwZWF0IDMwKQoJCShpbmNyeCA1MCkKCSkKCSh0YnRleHQgIjEiCgkJKG5hbWUgIiIpCgkJKHBvcyAyNSAxIGx0Y29ybmVyKQoJCShmb250CgkJCShzaXplIDEuMyAxLjMpCgkJKQoJCShyZXBlYXQgMTAwKQoJCShpbmNyeCA1MCkKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDUwIDIgbGJjb3JuZXIpCgkJKGVuZCA1MCAwIGxiY29ybmVyKQoJCShyZXBlYXQgMzApCgkJKGluY3J4IDUwKQoJKQoJKHRidGV4dCAiMSIKCQkobmFtZSAiIikKCQkocG9zIDI1IDEgbGJjb3JuZXIpCgkJKGZvbnQKCQkJKHNpemUgMS4zIDEuMykKCQkpCgkJKHJlcGVhdCAxMDApCgkJKGluY3J4IDUwKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMCA1MCBsdGNvcm5lcikKCQkoZW5kIDIgNTAgbHRjb3JuZXIpCgkJKHJlcGVhdCAzMCkKCQkoaW5jcnkgNTApCgkpCgkodGJ0ZXh0ICJBIgoJCShuYW1lICIiKQoJCShwb3MgMSAyNSBsdGNvcm5lcikKCQkoZm9udAoJCQkoc2l6ZSAxLjMgMS4zKQoJCSkKCQkoanVzdGlmeSBjZW50ZXIpCgkJKHJlcGVhdCAxMDApCgkJKGluY3J5IDUwKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMCA1MCBydGNvcm5lcikKCQkoZW5kIDIgNTAgcnRjb3JuZXIpCgkJKHJlcGVhdCAzMCkKCQkoaW5jcnkgNTApCgkpCgkodGJ0ZXh0ICJBIgoJCShuYW1lICIiKQoJCShwb3MgMSAyNSBydGNvcm5lcikKCQkoZm9udAoJCQkoc2l6ZSAxLjMgMS4zKQoJCSkKCQkoanVzdGlmeSBjZW50ZXIpCgkJKHJlcGVhdCAxMDApCgkJKGluY3J5IDUwKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMTM1LjY2OSAyOS4xOTIpCgkJKGVuZCA0OS4zMDkgMjkuMTkyKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMTM1LjY2OSAyNC4xMTIpCgkJKGVuZCA0OS4zMDkgMjQuMTEyKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMTM1LjY2OSAxOS4wMzIpCgkJKGVuZCAyIDE5LjAzMikKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDQ5LjMwOSAzNC4yNzIyKQoJCShlbmQgNDkuMzA5IDE5LjAzMjIpCgkpCgkodGJ0ZXh0ICJEb2N1bWVudCBOYW1lOiIKCQkobmFtZSAiIikKCQkocG9zIDEzNC4zOTkgMzEuNzMyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKSBib2xkKQoJKQoJKHRidGV4dCAiJHtUSVRMRX0iCgkJKG5hbWUgIiIpCgkJKHBvcyAxMTYuNjk5IDMxLjczMjIpCgkJKGZvbnQKCQkJKGZhY2UgIkFyaWFsIikKCQkpCgkpCgkodGJ0ZXh0ICJQcm9qZWN0IE5hbWU6IgoJCShuYW1lICIiKQoJCShwb3MgMTM0LjM5OSAyNi42NTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke0NPTU1FTlQzfSIKCQkobmFtZSAiIikKCQkocG9zIDExOS42OTkgMjYuNjUyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCSh0YnRleHQgIlNoZWV0IE5hbWU6IgoJCShuYW1lICIiKQoJCShwb3MgMTM0LjM5OSAyMS41NzIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke0ZJTEVOQU1FfSIKCQkobmFtZSAiIikKCQkocG9zIDEyMS4wOTkgMjEuNTcyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDEzNS42NjkgMTMuOTUyKQoJCShlbmQgMiAxMy45NTIpCgkpCgkodGJ0ZXh0ICJBdXRob3I6IgoJCShuYW1lICIiKQoJCShwb3MgMTM0LjM5OSAxNi40OTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke0NPTU1FTlQyfSIKCQkobmFtZSAiIikKCQkocG9zIDEyNi4xOTkgMTYuNDkyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDEzNS42NjkgOC44NzIpCgkJKGVuZCAyIDguODcyKQoJKQoJKHRidGV4dCAiRGF0ZToiCgkJKG5hbWUgIiIpCgkJKHBvcyA0OC4wMzkgMTEuNDEyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKSBib2xkKQoJKQoJKHRidGV4dCAiJHtJU1NVRV9EQVRFfSIKCQkobmFtZSAiIikKCQkocG9zIDQyLjEzOSAxMS40MTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpCgkJKQoJKQoJKHRidGV4dCAiU2hlZXQgTnVtYmVyOiIKCQkobmFtZSAiIikKCQkocG9zIDEzNC4zOTkgMTEuNDEyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKSBib2xkKQoJKQoJKHRidGV4dCAiJHsjfSBvZiAkeyMjfSIKCQkobmFtZSAiIikKCQkocG9zIDExOC42OTkgMTEuNDEyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCSh0YnRleHQgIlJldmlzaW9uOiIKCQkobmFtZSAiIikKCQkocG9zIDg3LjQwOSAxMS40MTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke1JFVklTSU9OfSIKCQkobmFtZSAiIikKCQkocG9zIDc3LjIwOSAxMS40MTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpCgkJKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgNDkuMzA5IDEzLjk1MjIpCgkJKGVuZCA0OS4zMDkgOC44NzIyKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgODguNjc5IDEzLjk1MjIpCgkJKGVuZCA4OC42NzkgOC44NzIyKQoJKQoJKHRidGV4dCAiTW9kdWxhciBDaXJjdWl0IERlc2lnbiBTdHVkaW8gZGVzaWducyBhcmUgbWFjaGluZS1nZW5lcmF0ZWQgZHJhZnRzIGFuZCByZXF1aXJlIHZlcmlmaWNhdGlvbiBieSBxdWFsaWZpZWQgc3BlY2lhbGlzdHMuIFxuQnkgdXNpbmcgdGhlc2UgZGVzaWducywgeW91IGFncmVlIHRvIHRoZSBlZGEuY24gVGVybXMgb2YgVXNlOiAke0NPTU1FTlQxfSIKCQkobmFtZSAiIikKCQkocG9zIDEzNC4zOTkgNi4zMzIpCgkJKGZvbnQKCQkJKGZhY2UgIkFyaWFsIikKCQkpCgkpCgkoYml0bWFwCgkJKG5hbWUgIiIpCgkJKHBvcyAyNS40MDggMjYuOTA2KQoJCShzY2FsZSAwLjc1ODA2NDUxNjEpCgkJKGRhdGEgImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFJNEFBQUF5Q0FZQUFBQ0s5ZU1HQUFBQUNYQklXWE1BQUE3REFBQU93d0hIYjZoa0FBQUEiCgkJCSJHWFJGV0hSVGIyWjBkMkZ5WlFCM2QzY3VhVzVyYzJOaGNHVXViM0pubSs0OEdnQUFFRUJKUkVGVWVKenRuWG1jVk5XVng3Ky9WKzlWIgoJCQkiSXlJRUJISDdtQmhsSERmOFJCcG5rb3hMM0dmVWNaMDJ4R1Zzc0xzS25lQVN0OEc0a01SdEpDUXFoSDdkOE1HNEQrNUxOSTY0eHkxMiIKCQkJImswR05ZK0lXTUFoK1JDR3lTSGRWdlROL3ZOZnQ2K3JhZXFOUitINCs5YUhlZmZlZWM2dnJjTis1NTU1N1MyWkdNVnFrbllEamdYOEIiCgkJCSJkZ1oyQUFZWGJkQzN0QUhMZ1NVR1R4bzhNTjdzZnplUWJpUnQ3Y0UzT3BYQitsYXpQK2JWRytuQjErTmxHVmhtWmg5dWdHNjI5eUVKIgoJCQkialBKZ2xNRzJCbHRtemU0dDE4NlZUbkJnWkx3c0EvZVoyWXF5T2dzWnppSnBod3hjTHBnSXVOMzREUDJLWUVFQUYxV2IvYUcvZFhuUyIKCQkJIkU4Q2hlY1dYWjh4K0dpOUlTdlVHZmw2OWFSbXpLMHZKbDdTbG1hMHQxdzlKUTEyWWFqRFVnU0VHV3dGRGdPSFJ2OXRFNytOOG1ESGIiCgkJCSJvWnhzVDJvR3huWFNCOVZ0WmkzbDJuWXhpb1hTa1FaM0NZYVZhN3loTVRoVThHcUxkT2s0cyt2NlM0OHJuYTQ4b3hGOGtJR2Y5MWEyIgoJCQkicENFdVhKQ0EweVh0Wm1hWk1rMkdBQmNMS1A1czJQQTQ4WXRtS1dYd0NCdWgwY1JJQU5jdWxHN3FEK0dTdGhaTXp5OFA0SHd6VzljTCIKCQkJInVYS2wwMTE0QjdoQ3NITWlkQU8rbEhRWXprTHBDTUZNd2k5bW84ZmdQMXFrYy9wU3BpVEhoVnVCVVhtM2ZwTTF1NmVuY2ozcFFCZCsiCgkJCSJML2cxTUxwREgwenBxY3dDL0E1NHdHQXU4S3VZN2g5NTBvZnRyNlIwYzRWOVBpemV6cE1XeHUrN0FDM1NTT0F1TmlKL3BrS210MGhQIgoJCQkialRON3ZTK0V1ZkFUNEovemlsZGs0Y3lleUt1U3hnWndEZUhrb2dzRzIwc2FabVovS3lIbU0rQWl3YWNCckJTc0JLWUIrOGNyWmN6MiIKCQkJIkw5ZzY5SW0yaStuY3VwSytHd3hTckYwKzdZWnlPZkMxU2dSdVpMakExY0F4dlJZa0hTK1ltbDl1a0RLejVkMlJaYkJUVXJyVjRBZmsiCgkJCSJ1UU1SYTRGcmN2QnpNMXRmVXBiWkd1RDZlSmtubmRlZC92UUg3dXZTY0NCVnBwNFpQTzdBVTBDcC94MTlob0VyMk5WZ0FyQnRpYXBIIgoJCQkidnlydE9UNXZtdHdkWE9rb3dSMkE4bTQ5bXpXN3I3dnlCTFZGSEZrVDNKT0JDODFzY2ZkN3V2SGd0c0xSZ21TSk9xc05UcWcyVzdEQiIKCQkJImVoWGpOZW15VE9oM0ZIVWtFM0FzMENQRGlZem1IbUJRZ2R1ZjlVUm1FWjRITG00emU2a1BaUTRZanVESVVoVUVadzJVMFFDTU5WdTciCgkJCSJPaHp5M3lwUjdmQ2V5RTVLWndydXA3RFJsRVRTSUZjNnpTQmRwdXFUd0VFWnN3TXlYeEdqZ2RCSDJLbkUvZVg3aGtQNGdIS1EyZnFXIgoJCQkiY1BvOXE5QjlLLzBadWlCcEt3OW1HNXpTelhZSkZ3NDBPTW1GNzlNMThCYm5NZUJuR2JNWHU2TWpuNlIwZGdCajQyVU9qTTEvRkNhbCIKCQkJIitlM3ZEZDdMbUYzU0c3M2xjSUh0Uzl4L0hiT2dQenRRS1FhTDhoMlFHRVc5LzN3a0RVbkFRb05kdTZOL2tEVEdoUmVBVVNYNkVlcUEiCgkJCSJ1amF6T2QyUlh3eURJNVRuL0JmeW53eitMWFpaTnZMYlcxeEtETk1HWFR6K0Z1a3lZTDhpOWQrcE5xdkk0MitXSmloOEJGVWt4NEgxIgoJCQkiSlNLbkZUOXF6R3hOVW1vdVlEaC9BbllyMWk2QW9YU043eFNyKzFHeGU0T2tYYkt3Yjd3c0J3K1pXV3Nsc3Z1WUxyNnRRVlVsRFhzUyIKCQkJInQ5a1BPTHJRRGNIQ1F1VkYySzJQNUhTYkRKem5odkdhWVFBR2pRN01NK2l1RC9JbThCZUt4R2tLa1lOVEZNWmgyc2tDVzNSVGI1OGciCgkJCSJHRmJnUCtOV2xiUXRGR1A0eW1ObXk2TXZiNDNCcVZtekZGQnV6YWlkVDZMbzdQNFpzejBGRDNaTE4reVlkLzJCbVdXTDFVL0ErWUpxIgoJCQkiUWJYQmFVV3FyVFNvYVg4QkZmazNGbzZpK1dVVkxUZDkyU0xGZlVZR2JxcUNoOWFidlZ0aC9hVXVISjZGcDB0OTBSRkZINTNLYzNRRiIKCQkJIjc1Y1N0TjdzbmZiM1NlbmJSUjdYbjJmTjdpN1RwODc5Q0JkYnV4aUo4bEpFaXJISkdrNzA1VmRrTkZIOTVZVDVRWlZ3blNmdFFXY2YiCgkJCSJNU0hZRy9pSFRuTERSMTJsRkZ0V1FOSWdEMzVnY0h3V1RqU3p0bEtDUE5qTHVnWThFZXhaU1VjMldjUHBLd0pZbS8vWFY1ajBkbVYrIgoJCQkiM1VLamhlRC9LdEVUTGNBZVZPVDIxaTU4WUZGU2xnZG5BSTJSL0llQmpxUXlnL2FJOWQ2RkJGazBJdVpna1JkYlVRakNaWklPTmh0TyIKCQkJIkw4bkJNeTZzcGtLbk1vL1dSQmlBTElzTEJ4SW1iUldpaXM2em9Vc2wzV3htYlZGU1ZxSHArY0ZGWkkyVk5OTE1saEFaWHlFMlNlZTQiCgkJCSJMekd6cFlTencyYkNHVklsdEFLTERHb3E5YkVpcDdjVXkySjFkNHBHbllKSXFyTGlNOEZFQW80bzE1L05JMDRQU0VxM0dld2VLL280IgoJCQkiWXphK3YvUkpjbDA0TVZhVW8ydmUxQnpnc3RqMTFQWlJKMTllWkJoZFpsUWQrdUE0NFBaU2ZlcHJ3OW1sUlhxNGtvcUN2K3RqM2IwaSIKCQkJIkE0dTl2Q3lCbUQ5QVh2bnVkQTdpTFN0VXI2OUloT3VKOGVEalM4QS94ZXNJSGpHb0pacnVHM3c5N3V2azFmMVJHWlhIU3RvaEdrMEwiCgkJCSIwdGVHTTR3aVFiMk5uU2l6ditnemZTQVJUSTVkZmdZOFI1N2hFSTVDYzRFclltV1g1bzg2bnZRZDRJQzh0bGs2MjRMbndpVEN4TGFDIgoJCQkiYkpLUHFxUTB6bnFYL0pXL05yYVZKMTNaQzNuUFpNeWVLWFJEMGpmY3poa01DeWdTck14Q2t3dVhFbjJ2Qm04QUk0akNDTkhNN1BvQyIKCQkJIlRYOUNPTnJHZDBiOFVOSU54YklUTjBuRElkd1Nja1haV3BVenBBL2tQVk9vMEEzVE5qb21NWUxmRk1zR01MT2xYdWdxRENYY3l0TnAiCgkJCSJaZDZES1FiZnlXdTJPZ3MzdWVEUjJVY2E2Y0tGd0k4TDZkbzhxOXFJVVppZEdjLzN5V1hnMFZKdHNuQjZ4dXpRZktPcGtzWWEvS3hBIgoJCQkia3lZelc1V0ZKc0xIWFp6ekpCV01KRzgybkkwWUY4Nmw4N0xBRStYeW42TWM1VTVJR3BtREI0QXQ4MjZ0eThJdm9uWWZDUEozZnc1MiIKCQkJIllaNmtMbmF5cVQ2cVd1aThRdDFkNnVuczU2eWhkNXYxbmlsVXFIQkJ0UU9EZWQwVkhLMUozVThZemM3bkNqUDdhL3VGQTFOellScHUiCgkJCSJQSmo0UFE5K0NOd1FiOWpYaHJPQ0NpT2hoSDdHdm1WcjlRTWxvcWtWNFVuSDBObHdWcGZiOHRzVDJzeHU5S1R0Q0ZlN2wwYWpSc1ZJIgoJCQkiMnRJTmx4enlaMkFBaTdKNXhyRGU3RjFQdXBIUXQrbkE0SHBQV2hSMzRQdmFjSmFNTTZ1dnBHS3pkS1VHeUhDK1RHUmhhaUxNT3Z4eiIKCQkJInVZWExPSkpHdVdIS3g3Y0xpUlhVRnRwK25JV3JYRGlkMk1aQlFzZDV2cVQ5ek93dnNObkgyZWd4TTh0Qk9sc2szN29RVmRKZUNYaUYiCgkJCSJ3a2FENEp5MklnYzNSTlB2TStpNkpqdktoZjlST0FKdU5wd3ZBMmFXcmVSa2kzWUNhRkJobndaZ2VwdlpyNHJjQXlCajlsdnlIbU1SIgoJCQkiWTF4NFF0S296WWJ6RmNRSm5mZENCeVRjbDRXTEs1R1JEZjJxUWltOG81S3d6V2JEK1FyU2F2YW00UHk4NG51emNJcFZ1R3ZGekZxeiIKCQkJImNJdzZyOWQ5NU1BaHJXWi8zR3c0WDFIYXpIeUZCMGtBM0ppRm1uTDcxUE14c3c4VnBsOThLdmdnQWZ1M21yMEJtMjRjcDdjOFJ5eXIiCgkJCSJUdkRKQnRiL082RFR3VktaQW1tdEdUakxnd1Z0Wm5ON3FxalY3TTJrZEZRQ1B2cmNyQ00vK2t0ak9EbFlxdkJrcXM4RW93MzJJY3dyIgoJCQkiMlZCbkVuYVFxWER2V0QvcVgwQzQyRmtTTTF0SnVHTGVLOXJNWHM0djY0bmgvTDdZRFF0UG02cVVQeEdlL2xXUm5QRmhxUDIvNG1VdCIKCQkJIjBqREJoUVlYZFVQdlp2cUNabmk3R2F6UTYxVjR6TXpZV0Y3eklmRWlqSGdhM0hqNXEvRGRnZTVic1ZjcWxUcTFQK1hYMTlkN0EvRzUiCgkJCSJISXM5cS9OUk4vZFg5eGV2U3VOYnBFZStDV3VUOE1sV3NLNUZlcnhaK2k1QXRka0xBOTNIWWxnL0huSUpJT25KZERxOVIzL3FLSVJUIgoJCQkiWmtQWXJzM1NRUnVxTTRWWUtKM3FoSnY5aitLTHhUY1BPRnp3YkxNMGFlQjZOL0FrazhuREdob2EzdXlOakZRcTVhVlNxVzRkR0twWCIKCQkJIjRmdUNPMHZVV1d4d2NMWFplNzNwWEU5b2tmWW0zRDFRNnVDbmpNRysxZEUwc1J3MU5UV0o0Y09IdjlEVzFuYmt2SG56VnRYWDEvOHIiCgkJCSJjR2hqWStNVWdQcjYranNrdlM5cGNVTkRRMk5OVFUxaXhJZ1JUNXZaSWI3dloxS3AxSm5BanBKMmIyaG9PQmtnblU3L01naUMrWTJOIgoJCQkialMvVzFkWHQ3RGpPTk4vM1R3ZElwVkxMQ0JPLzY4M3NOYy96VG1wcmF4dmpPTTRCdnU5ZkZlazhSOUkydnU5ZldsZFhOemFSU013MCIKCQkJInN6Rm05clNrZi9kOVAxTmZYejhldU1weG5CSEFUNE1nT0xLeHNYRnlLcFZxY2h6bmhpQUlqZzJDNExtbXBxYm5JNzBQQmtGd1ExTlQiCgkJCSIwMVB0bjcyK3Z2NElTVk9Cb1daMmUyTmo0L1IwT24yeW1jMG1uR1Fzek9WeUUrYk1tYk00bFVyZEd1bS9BRmdzNlJJenU1WXdwM21LIgoJCQkicS9BY2w4OHB2dkg5NjRLRnpkS3NCRHhsc0txU0w2aW5HS3dhOThXV2tZc3BiVFFBWHBSOFhWdUovUG56NStmUzZYUkxWVlhWaWNCYyIKCQkJIlNST0EvVk9wMUNXZTUyMGhhVmRKMXdWQjBBZzBEaDgrL0FBejIwZlNZY0NqWm5aS01wazhJNVBKUERWcDBxVHRYZGY5R0RndU90MzgiCgkJCSJSVWtuU29vblVXMExMSzJxcXRxeHRiWDEwbXcyZTBFaWtYald6RHF5K0tLRXJaSFIrMm96TzlmMy9ZV3BWR3FHbWRWTW1qVHBJZGQxIgoJCQkicHdNbkRoNDhlTzJhTld0dWNSeW5mVWxoZERhYnJYSWNaNmRFSXZHMW1Nd2RFb2xFUi81Tk9wM2VSOUpjNEVUUDg5N0paRExuMU5YViIKCQkJImpYVWM1MnJDck1BbFFGTWlrV2dFanBDMHU2VDMxcTFiTjM3dzRNRjNBVE9BWTRJZytNZEVJakhOR1dmMk4wRzVNNE9IQ2FZR3NNQ2ciCgkJCSJ1WjlmVjhYMEhsS0pNVkI4YzFsQmNybmNyV1kyb2JhMmRoQ3dsNlFHTXp1NnJhM3RXRE9iMzlEUXNFaFNWVHFkSGlQcEpFbG5tOW1FIgoJCQkidXJxNjBaSnM1c3laaTRFN1hkZXRrWFFJWWZaY2RTcVY4aVFkNjdwdWZCLzNDdC8zZjNIampUZCtGZ1RCL2NDWVVuM0xack1QU3pvbyIKCQkJIm5VNy8wc3kyQm5ieFBPOElTWS82dnI5aXhvd1puMHNxbWtSZWdsUE5iSjd2KzYvTW5EbnpFOS8zTDNjYzV6Qko5L20rLzVidisrc2MiCgkJCSJ4NWtPSERabHlwU2gwZC9wNWx0dXVXV3RtZjNXekY2TzZqeHZaanM3QUI1Y1M1aExzekVRWDJNcGRlSlZuTkhscTN4QlUxUFR5OEIyIgoJCQkibnVkTkJCN01ack8zU2pwWjBnbEJFTFIvNmJjR1FUQWhDSUl4RFEwTnQwbmExWEdjVXhXZGZDWHAxNFNuY3AwUUJNRWRoTmw1WndBciIKCQkJIlo4NmNHUThJeGxNaE1vUS9neEFRQzRXWVdRSmcyclJwanVkNVR3SnZPbzR6RzFnUlpkOGx6S3pjR1VEV0xpZTZjUE51dGtwYW5WZjIiCgkJCSJlUkFFUTlxdmM3bmNXaURudW00R0lBaUMxdWl6WnFLKzQvdCtCbkFjZ0wzTlZncE95UHVRQTRJNkc4c0hGVGI3YS9rcVhiaGQwaldTIgoJCQkiN3Bnelo4NWl3aFROcXVnOXJ1dmVMdWxjU1FzQXpPeCs0RDh0T2lpN29hSGhiU0F3c3gyYm1wcmVsM1M3cE9sbTl0OFRKMDRjTlhIaSIKCQkJInhGS0hNTDBMakt1dHJSMTA5dGxuYnl2cEpJQWxTNVpzQ1F6OTlOTlBueG85ZXZTN2tzWUFKQktKWjRIYSt2cjZBeWRQbnJ5Tm1SVTYiCgkJCSJHUHh0b29TdHVycTZnNEU5QU00Ly8vd3R6anJyckc4NmpuT1hwSnBVS2pXc3RyWjJVRHFkbmlicEVVa0hUWjQ4ZWE5VUtqVVl1TWpNIgoJCQkiWnMrWU1lUHpjbis4anJXcWZjMmVOemlMcmduTEc1cjQxTEtpakRmQlF6M1FjeHZ3UlB1TXhNem1FVXZObkRWcjFuTGdidGQxN3dSdyIKCQkJIlhmZE9NN3ZiOS8yT2tkbk1acG5aN1FDUm5NYzh6M3ZRODd5VFhOYzlEa0RTa3BqT2RjQzd2dSsvQmR5YlRDYmZ5MmF6VDVyWlRjQ1MiCgkJCSJ1WFBucmdadUdqNTgrRXZMbGkxN0dWaHRaaXVqdmt5VmRFY1FCSzlMaXVmU3ZBdXNjMTNYQi80K2xVb3RkeHpuUXVEcVhDNjNhdlhxIgoJCQkiMWRYWmJQYmMyYk5udnhFRXdTWEFYWjduTFFEVytiNi9STkpwWm5ZRDhJcmpPR3RXclZwMVh2VFpsaWFUeVN4QUVBUWZTNHFIYlY3ciIKCQkJIjh1c3g3VDhDd2dEK25vTURlMzdMN00wL1NLTUNlSTNTNXh4L0hNRFk4ZDA4eFByTHpLUkprN2IzUE8raGhvYUc2b0hxUTVmVjhYM0QiCgkJCSJKSjdkS2J4ZFlvTVFSSHVVdm1YMmNiUTV2dGhXMUk4TWp0NlVqR1pqb1dCYXhUaXpaZVBNNm9Nd2kyd0s4RGp3WndvbkIvVUhOZTJCIgoJCQkidmVpM3FmWTArSEYwUnQ5N3dNdUNLOXRnajJxem9tdG5YMVdHRFJ1Mk1ucnNEQmovRDJLVHp6ZGJvdlp5QUFBQUFFbEZUa1N1UW1DQyIKCQkpCgkpCikK';
1
+ export var BASE_64_ENCODED_SCH_DEFAULT_DRAWING_SHEET = 'KGtpY2FkX3drcwoJKHZlcnNpb24gMjAyMzExMTgpCgkoZ2VuZXJhdG9yICJwbF9lZGl0b3IiKQoJKGdlbmVyYXRvcl92ZXJzaW9uICI4LjAiKQoJKHNldHVwCgkJKHRleHRzaXplIDEuNSAxLjUpCgkJKGxpbmV3aWR0aCAwLjE1KQoJCSh0ZXh0bGluZXdpZHRoIDAuMTUpCgkJKGxlZnRfbWFyZ2luIDEwKQoJCShyaWdodF9tYXJnaW4gMTApCgkJKHRvcF9tYXJnaW4gMTApCgkJKGJvdHRvbV9tYXJnaW4gMTApCgkpCgkocmVjdAoJCShuYW1lICIiKQoJCShzdGFydCAxMzUuNjY5IDM0LjI3MjIpCgkJKGVuZCAyIDIuMDAwMikKCQkoY29tbWVudCAicmVjdCBhcm91bmQgdGhlIHRpdGxlIGJsb2NrIikKCSkKCShyZWN0CgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDAgMCBsdGNvcm5lcikKCQkoZW5kIDAgMCkKCQkocmVwZWF0IDIpCgkJKGluY3J4IDIpCgkJKGluY3J5IDIpCgkpCgkobGluZQoJCShuYW1lICIiKQoJCShzdGFydCA1MCAyIGx0Y29ybmVyKQoJCShlbmQgNTAgMCBsdGNvcm5lcikKCQkocmVwZWF0IDMwKQoJCShpbmNyeCA1MCkKCSkKCSh0YnRleHQgIjEiCgkJKG5hbWUgIiIpCgkJKHBvcyAyNSAxIGx0Y29ybmVyKQoJCShmb250CgkJCShzaXplIDEuMyAxLjMpCgkJKQoJCShyZXBlYXQgMTAwKQoJCShpbmNyeCA1MCkKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDUwIDIgbGJjb3JuZXIpCgkJKGVuZCA1MCAwIGxiY29ybmVyKQoJCShyZXBlYXQgMzApCgkJKGluY3J4IDUwKQoJKQoJKHRidGV4dCAiMSIKCQkobmFtZSAiIikKCQkocG9zIDI1IDEgbGJjb3JuZXIpCgkJKGZvbnQKCQkJKHNpemUgMS4zIDEuMykKCQkpCgkJKHJlcGVhdCAxMDApCgkJKGluY3J4IDUwKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMCA1MCBsdGNvcm5lcikKCQkoZW5kIDIgNTAgbHRjb3JuZXIpCgkJKHJlcGVhdCAzMCkKCQkoaW5jcnkgNTApCgkpCgkodGJ0ZXh0ICJBIgoJCShuYW1lICIiKQoJCShwb3MgMSAyNSBsdGNvcm5lcikKCQkoZm9udAoJCQkoc2l6ZSAxLjMgMS4zKQoJCSkKCQkoanVzdGlmeSBjZW50ZXIpCgkJKHJlcGVhdCAxMDApCgkJKGluY3J5IDUwKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMCA1MCBydGNvcm5lcikKCQkoZW5kIDIgNTAgcnRjb3JuZXIpCgkJKHJlcGVhdCAzMCkKCQkoaW5jcnkgNTApCgkpCgkodGJ0ZXh0ICJBIgoJCShuYW1lICIiKQoJCShwb3MgMSAyNSBydGNvcm5lcikKCQkoZm9udAoJCQkoc2l6ZSAxLjMgMS4zKQoJCSkKCQkoanVzdGlmeSBjZW50ZXIpCgkJKHJlcGVhdCAxMDApCgkJKGluY3J5IDUwKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMTM1LjY2OSAyOS4xOTIpCgkJKGVuZCA0OS4zMDkgMjkuMTkyKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMTM1LjY2OSAyNC4xMTIpCgkJKGVuZCA0OS4zMDkgMjQuMTEyKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMTM1LjY2OSAxOS4wMzIpCgkJKGVuZCAyIDE5LjAzMikKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDQ5LjMwOSAzNC4yNzIyKQoJCShlbmQgNDkuMzA5IDE5LjAzMjIpCgkpCgkodGJ0ZXh0ICJEb2N1bWVudCBOYW1lOiIKCQkobmFtZSAiIikKCQkocG9zIDEzNC4zOTkgMzEuNzMyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKSBib2xkKQoJKQoJKHRidGV4dCAiJHtUSVRMRX0iCgkJKG5hbWUgIiIpCgkJKHBvcyAxMTYuNjk5IDMxLjczMjIpCgkJKGZvbnQKCQkJKGZhY2UgIkFyaWFsIikKCQkpCgkpCgkodGJ0ZXh0ICJQcm9qZWN0IE5hbWU6IgoJCShuYW1lICIiKQoJCShwb3MgMTM0LjM5OSAyNi42NTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke0NPTU1FTlQzfSIKCQkobmFtZSAiIikKCQkocG9zIDExOS42OTkgMjYuNjUyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCSh0YnRleHQgIlNoZWV0IE5hbWU6IgoJCShuYW1lICIiKQoJCShwb3MgMTM0LjM5OSAyMS41NzIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke0ZJTEVOQU1FfSIKCQkobmFtZSAiIikKCQkocG9zIDEyMS4wOTkgMjEuNTcyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDEzNS42NjkgMTMuOTUyKQoJCShlbmQgMiAxMy45NTIpCgkpCgkodGJ0ZXh0ICJBdXRob3I6IgoJCShuYW1lICIiKQoJCShwb3MgMTM0LjM5OSAxNi40OTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke0NPTU1FTlQyfSIKCQkobmFtZSAiIikKCQkocG9zIDEyNi4xOTkgMTYuNDkyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDEzNS42NjkgOC44NzIpCgkJKGVuZCAyIDguODcyKQoJKQoJKHRidGV4dCAiRGF0ZToiCgkJKG5hbWUgIiIpCgkJKHBvcyA0OC4wMzkgMTEuNDEyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKSBib2xkKQoJKQoJKHRidGV4dCAiJHtJU1NVRV9EQVRFfSIKCQkobmFtZSAiIikKCQkocG9zIDQyLjEzOSAxMS40MTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpCgkJKQoJKQoJKHRidGV4dCAiU2hlZXQgTnVtYmVyOiIKCQkobmFtZSAiIikKCQkocG9zIDEzNC4zOTkgMTEuNDEyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKSBib2xkKQoJKQoJKHRidGV4dCAiJHsjfSBvZiAkeyMjfSIKCQkobmFtZSAiIikKCQkocG9zIDExOC42OTkgMTEuNDEyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCSh0YnRleHQgIlJldmlzaW9uOiIKCQkobmFtZSAiIikKCQkocG9zIDg3LjQwOSAxMS40MTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke1JFVklTSU9OfSIKCQkobmFtZSAiIikKCQkocG9zIDc3LjIwOSAxMS40MTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpCgkJKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgNDkuMzA5IDEzLjk1MjIpCgkJKGVuZCA0OS4zMDkgOC44NzIyKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgODguNjc5IDEzLjk1MjIpCgkJKGVuZCA4OC42NzkgOC44NzIyKQoJKQoJKHRidGV4dCAiTW9kdWxhciBDaXJjdWl0IERlc2lnbiBTdHVkaW8gZGVzaWducyBhcmUgbWFjaGluZS1nZW5lcmF0ZWQgZHJhZnRzIGFuZCByZXF1aXJlIHZlcmlmaWNhdGlvbiBieSBxdWFsaWZpZWQgc3BlY2lhbGlzdHMuIFxuQnkgdXNpbmcgdGhlc2UgZGVzaWducywgeW91IGFncmVlIHRvIHRoZSBlZGEuY24gVGVybXMgb2YgVXNlOiAke0NPTU1FTlQxfSIKCQkobmFtZSAiIikKCQkocG9zIDEzNC4zOTkgNi4zMzIpCgkJKGZvbnQKCQkJKGZhY2UgIkFyaWFsIikKCQkpCgkpCgkoYml0bWFwCgkJKG5hbWUgIiIpCgkJKHBvcyAyNS40MDggMjYuOTA2KQoJCShzY2FsZSAwLjc1ODA2NDUxNjEpCgkJKGRhdGEgImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFJNEFBQUF5Q0FZQUFBQ0s5ZU1HQUFBQUNYQklXWE1BQUE3REFBQU93d0hIYjZoa0FBQUEiCgkJCSJHWFJGV0hSVGIyWjBkMkZ5WlFCM2QzY3VhVzVyYzJOaGNHVXViM0pubSs0OEdnQUFFRUJKUkVGVWVKenRuWG1jVk5XVng3Ky9WKzlWIgoJCQkiSXlJRUJISDdtQmhsSERmOFJCcG5rb3hMM0dmVWNaMDJ4R1Zzc0xzS25lQVN0OEc0a01SdEpDUXFoSDdkOE1HNEQrNUxOSTY0eHkxMiIKCQkJImswR05ZK0lXTUFoK1JDR3lTSGRWdlROL3ZOZnQ2K3JhZXFOUitINCs5YUhlZmZlZWM2dnJjTis1NTU1N1MyWkdNVnFrbllEamdYOEIiCgkJCSJkZ1oyQUFZWGJkQzN0QUhMZ1NVR1R4bzhNTjdzZnplUWJpUnQ3Y0UzT3BYQitsYXpQK2JWRytuQjErTmxHVmhtWmg5dWdHNjI5eUVKIgoJCQkialBKZ2xNRzJCbHRtemU0dDE4NlZUbkJnWkx3c0EvZVoyWXF5T2dzWnppSnBod3hjTHBnSXVOMzREUDJLWUVFQUYxV2IvYUcvZFhuUyIKCQkJIkU4Q2hlY1dYWjh4K0dpOUlTdlVHZmw2OWFSbXpLMHZKbDdTbG1hMHQxdzlKUTEyWWFqRFVnU0VHV3dGRGdPSFJ2OXRFNytOOG1ESGIiCgkJCSJvWnhzVDJvR3huWFNCOVZ0WmkzbDJuWXhpb1hTa1FaM0NZYVZhN3loTVRoVThHcUxkT2s0cyt2NlM0OHJuYTQ4b3hGOGtJR2Y5MWEyIgoJCQkicENFdVhKQ0EweVh0Wm1hWk1rMkdBQmNMS1A1czJQQTQ4WXRtS1dYd0NCdWgwY1JJQU5jdWxHN3FEK0dTdGhaTXp5OFA0SHd6VzljTCIKCQkJInVYS2wwMTE0QjdoQ3NITWlkQU8rbEhRWXprTHBDTUZNd2k5bW84ZmdQMXFrYy9wU3BpVEhoVnVCVVhtM2ZwTTF1NmVuY2ozcFFCZCsiCgkJCSJML2cxTUxwREgwenBxY3dDL0E1NHdHQXU4S3VZN2g5NTBvZnRyNlIwYzRWOVBpemV6cE1XeHUrN0FDM1NTT0F1TmlKL3BrS210MGhQIgoJCQkialRON3ZTK0V1ZkFUNEovemlsZGs0Y3lleUt1U3hnWndEZUhrb2dzRzIwc2FabVovS3lIbU0rQWl3YWNCckJTc0JLWUIrOGNyWmN6MiIKCQkJIkw5ZzY5SW0yaStuY3VwSytHd3hTckYwKzdZWnlPZkMxU2dSdVpMakExY0F4dlJZa0hTK1ltbDl1a0RLejVkMlJaYkJUVXJyVjRBZmsiCgkJCSJ1UU1SYTRGcmN2QnpNMXRmVXBiWkd1RDZlSmtubmRlZC92UUg3dXZTY0NCVnBwNFpQTzdBVTBDcC94MTlob0VyMk5WZ0FyQnRpYXBIIgoJCQkidnlydE9UNXZtdHdkWE9rb3dSMkE4bTQ5bXpXN3I3dnlCTFZGSEZrVDNKT0JDODFzY2ZkN3V2SGd0c0xSZ21TSk9xc05UcWcyVzdEQiIKCQkJImVoWGpOZW15VE9oM0ZIVWtFM0FzMENQRGlZem1IbUJRZ2R1ZjlVUm1FWjRITG00emU2a1BaUTRZanVESVVoVUVadzJVMFFDTU5WdTciCgkJCSJPaHp5M3lwUjdmQ2V5RTVLWndydXA3RFJsRVRTSUZjNnpTQmRwdXFUd0VFWnN3TXlYeEdqZ2RCSDJLbkUvZVg3aGtQNGdIS1EyZnFXIgoJCQkiY1BvOXE5QjlLLzBadWlCcEt3OW1HNXpTelhZSkZ3NDBPTW1GNzlNMThCYm5NZUJuR2JNWHU2TWpuNlIwZGdCajQyVU9qTTEvRkNhbCIKCQkJIitlM3ZEZDdMbUYzU0c3M2xjSUh0Uzl4L0hiT2dQenRRS1FhTDhoMlFHRVc5LzN3a0RVbkFRb05kdTZOL2tEVEdoUmVBVVNYNkVlcUEiCgkJCSJ1amF6T2QyUlh3eURJNVRuL0JmeW53eitMWFpaTnZMYlcxeEtETk1HWFR6K0Z1a3lZTDhpOWQrcE5xdkk0MitXSmloOEJGVWt4NEgxIgoJCQkiSlNLbkZUOXF6R3hOVW1vdVlEaC9BbllyMWk2QW9YU043eFNyKzFHeGU0T2tYYkt3Yjd3c0J3K1pXV3Nsc3Z1WUxyNnRRVlVsRFhzUyIKCQkJInQ5a1BPTHJRRGNIQ1F1VkYySzJQNUhTYkRKem5odkdhWVFBR2pRN01NK2l1RC9JbThCZUt4R2tLa1lOVEZNWmgyc2tDVzNSVGI1OGciCgkJCSJHRmJnUCtOV2xiUXRGR1A0eW1ObXk2TXZiNDNCcVZtekZGQnV6YWlkVDZMbzdQNFpzejBGRDNaTE4reVlkLzJCbVdXTDFVL0ErWUpxIgoJCQkiUWJYQmFVV3FyVFNvYVg4QkZmazNGbzZpK1dVVkxUZDkyU0xGZlVZR2JxcUNoOWFidlZ0aC9hVXVISjZGcDB0OTBSRkZINTNLYzNRRiIKCQkJIjc1Y1N0TjdzbmZiM1NlbmJSUjdYbjJmTjdpN1RwODc5Q0JkYnV4aUo4bEpFaXJISkdrNzA1VmRrTkZIOTVZVDVRWlZ3blNmdFFXY2YiCgkJCSJNU0hZRy9pSFRuTERSMTJsRkZ0V1FOSWdEMzVnY0h3V1RqU3p0bEtDUE5qTHVnWThFZXhaU1VjMldjUHBLd0pZbS8vWFY1ajBkbVYrIgoJCQkiM1VLamhlRC9LdEVUTGNBZVZPVDIxaTU4WUZGU2xnZG5BSTJSL0llQmpxUXlnL2FJOWQ2RkJGazBJdVpna1JkYlVRakNaWklPTmh0TyIKCQkJIkw4bkJNeTZzcGtLbk1vL1dSQmlBTElzTEJ4SW1iUldpaXM2em9Vc2wzV3htYlZGU1ZxSHArY0ZGWkkyVk5OTE1saEFaWHlFMlNlZTQiCgkJCSJMekd6cFlTencyYkNHVklsdEFLTERHb3E5YkVpcDdjVXkySjFkNHBHbllKSXFyTGlNOEZFQW80bzE1L05JMDRQU0VxM0dld2VLL280IgoJCQkiWXphK3YvUkpjbDA0TVZhVW8ydmUxQnpnc3RqMTFQWlJKMTllWkJoZFpsUWQrdUE0NFBaU2ZlcHJ3OW1sUlhxNGtvcUN2K3RqM2IwaSIKCQkJIkE0dTl2Q3lCbUQ5QVh2bnVkQTdpTFN0VXI2OUloT3VKOGVEalM4QS94ZXNJSGpHb0pacnVHM3c5N3V2azFmMVJHWlhIU3RvaEdrMEwiCgkJCSIwdGVHTTR3aVFiMk5uU2l6ditnemZTQVJUSTVkZmdZOFI1N2hFSTVDYzRFclltV1g1bzg2bnZRZDRJQzh0bGs2MjRMbndpVEN4TGFDIgoJCQkiYkpLUHFxUTB6bnFYL0pXL05yYVZKMTNaQzNuUFpNeWVLWFJEMGpmY3poa01DeWdTck14Q2t3dVhFbjJ2Qm04QUk0akNDTkhNN1BvQyIKCQkJIlRYOUNPTnJHZDBiOFVOSU54YklUTjBuRElkd1Nja1haV3BVenBBL2tQVk9vMEEzVE5qb21NWUxmRk1zR01MT2xYdWdxRENYY3l0TnAiCgkJCSJaZDZES1FiZnlXdTJPZ3MzdWVEUjJVY2E2Y0tGd0k4TDZkbzhxOXFJVVppZEdjLzN5V1hnMFZKdHNuQjZ4dXpRZktPcGtzWWEvS3hBIgoJCQkia3lZelc1V0ZKc0xIWFp6ekpCV01KRzgybkkwWUY4Nmw4N0xBRStYeW42TWM1VTVJR3BtREI0QXQ4MjZ0eThJdm9uWWZDUEozZnc1MiIKCQkJIllaNmtMbmF5cVQ2cVd1aThRdDFkNnVuczU2eWhkNXYxbmlsVXFIQkJ0UU9EZWQwVkhLMUozVThZemM3bkNqUDdhL3VGQTFOellScHUiCgkJCSJQSmo0UFE5K0NOd1FiOWpYaHJPQ0NpT2hoSDdHdm1WcjlRTWxvcWtWNFVuSDBObHdWcGZiOHRzVDJzeHU5S1R0Q0ZlN2wwYWpSc1ZJIgoJCQkiMnRJTmx4enlaMkFBaTdKNXhyRGU3RjFQdXBIUXQrbkE0SHBQV2hSMzRQdmFjSmFNTTZ1dnBHS3pkS1VHeUhDK1RHUmhhaUxNT3Z4eiIKCQkJInVZWExPSkpHdVdIS3g3Y0xpUlhVRnRwK25JV3JYRGlkMk1aQlFzZDV2cVQ5ek93dnNObkgyZWd4TTh0Qk9sc2szN29RVmRKZUNYaUYiCgkJCSJ3a2FENEp5MklnYzNSTlB2TStpNkpqdktoZjlST0FKdU5wd3ZBMmFXcmVSa2kzWUNhRkJobndaZ2VwdlpyNHJjQXlCajlsdnlIbU1SIgoJCQkiWTF4NFF0S296WWJ6RmNRSm5mZENCeVRjbDRXTEs1R1JEZjJxUWltOG81S3d6V2JEK1FyU2F2YW00UHk4NG51emNJcFZ1R3ZGekZxeiIKCQkJImNJdzZyOWQ5NU1BaHJXWi8zR3c0WDFIYXpIeUZCMGtBM0ppRm1uTDcxUE14c3c4VnBsOThLdmdnQWZ1M21yMEJtMjRjcDdjOFJ5eXIiCgkJCSJUdkRKQnRiL082RFR3VktaQW1tdEdUakxnd1Z0Wm5ON3FxalY3TTJrZEZRQ1B2cmNyQ00vK2t0ak9EbFlxdkJrcXM4RW93MzJJY3dyIgoJCQkiMlZCbkVuYVFxWER2V0QvcVgwQzQyRmtTTTF0SnVHTGVLOXJNWHM0djY0bmgvTDdZRFF0UG02cVVQeEdlL2xXUm5QRmhxUDIvNG1VdCIKCQkJIjBqREJoUVlYZFVQdlp2cUNabmk3R2F6UTYxVjR6TXpZV0Y3eklmRWlqSGdhM0hqNXEvRGRnZTVic1ZjcWxUcTFQK1hYMTlkN0EvRzUiCgkJCSJISXM5cS9OUk4vZFg5eGV2U3VOYnBFZStDV3VUOE1sV3NLNUZlcnhaK2k1QXRka0xBOTNIWWxnL0huSUpJT25KZERxOVIzL3FLSVJUIgoJCQkiWmtQWXJzM1NRUnVxTTRWWUtKM3FoSnY5aitLTHhUY1BPRnp3YkxNMGFlQjZOL0FrazhuREdob2EzdXlOakZRcTVhVlNxVzRkR0twWCIKCQkJIjRmdUNPMHZVV1d4d2NMWFplNzNwWEU5b2tmWW0zRDFRNnVDbmpNRysxZEUwc1J3MU5UV0o0Y09IdjlEVzFuYmt2SG56VnRYWDEvOHIiCgkJCSJjR2hqWStNVWdQcjYranNrdlM5cGNVTkRRMk5OVFUxaXhJZ1JUNXZaSWI3dloxS3AxSm5BanBKMmIyaG9PQmtnblU3L01naUMrWTJOIgoJCQkialMvVzFkWHQ3RGpPTk4vM1R3ZElwVkxMQ0JPLzY4M3NOYy96VG1wcmF4dmpPTTRCdnU5ZkZlazhSOUkydnU5ZldsZFhOemFSU013MCIKCQkJInN6Rm05clNrZi9kOVAxTmZYejhldU1weG5CSEFUNE1nT0xLeHNYRnlLcFZxY2h6bmhpQUlqZzJDNExtbXBxYm5JNzBQQmtGd1ExTlQiCgkJCSIwMVB0bjcyK3Z2NElTVk9Cb1daMmUyTmo0L1IwT24yeW1jMG1uR1Fzek9WeUUrYk1tYk00bFVyZEd1bS9BRmdzNlJJenU1WXdwM21LIgoJCQkicS9BY2w4OHB2dkg5NjRLRnpkS3NCRHhsc0txU0w2aW5HS3dhOThXV2tZc3BiVFFBWHBSOFhWdUovUG56NStmUzZYUkxWVlhWaWNCYyIKCQkJIlNST0EvVk9wMUNXZTUyMGhhVmRKMXdWQjBBZzBEaDgrL0FBejIwZlNZY0NqWm5aS01wazhJNVBKUERWcDBxVHRYZGY5R0RndU90MzgiCgkJCSJSVWtuU29vblVXMExMSzJxcXRxeHRiWDEwbXcyZTBFaWtYald6RHF5K0tLRXJaSFIrMm96TzlmMy9ZV3BWR3FHbWRWTW1qVHBJZGQxIgoJCQkicHdNbkRoNDhlTzJhTld0dWNSeW5mVWxoZERhYnJYSWNaNmRFSXZHMW1Nd2RFb2xFUi81Tk9wM2VSOUpjNEVUUDg5N0paRExuMU5YViIKCQkJImpYVWM1MnJDck1BbFFGTWlrV2dFanBDMHU2VDMxcTFiTjM3dzRNRjNBVE9BWTRJZytNZEVJakhOR1dmMk4wRzVNNE9IQ2FZR3NNQ2ciCgkJCSJ1WjlmVjhYMEhsS0pNVkI4YzFsQmNybmNyV1kyb2JhMmRoQ3dsNlFHTXp1NnJhM3RXRE9iMzlEUXNFaFNWVHFkSGlQcEpFbG5tOW1FIgoJCQkidXJxNjBaSnM1c3laaTRFN1hkZXRrWFFJWWZaY2RTcVY4aVFkNjdwdWZCLzNDdC8zZjNIampUZCtGZ1RCL2NDWVVuM0xack1QU3pvbyIKCQkJIm5VNy8wc3kyQm5ieFBPOElTWS82dnI5aXhvd1puMHNxbWtSZWdsUE5iSjd2KzYvTW5EbnpFOS8zTDNjYzV6Qko5L20rLzVidisrc2MiCgkJCSJ4NWtPSERabHlwU2gwZC9wNWx0dXVXV3RtZjNXekY2TzZqeHZaanM3QUI1Y1M1aExzekVRWDJNcGRlSlZuTkhscTN4QlUxUFR5OEIyIgoJCQkibnVkTkJCN01ack8zU2pwWjBnbEJFTFIvNmJjR1FUQWhDSUl4RFEwTnQwbmExWEdjVXhXZGZDWHAxNFNuY3AwUUJNRWRoTmw1WndBciIKCQkJIlo4NmNHUThJeGxNaE1vUS9neEFRQzRXWVdRSmcyclJwanVkNVR3SnZPbzR6RzFnUlpkOGx6S3pjR1VEV0xpZTZjUE51dGtwYW5WZjIiCgkJCSJlUkFFUTlxdmM3bmNXaURudW00R0lBaUMxdWl6WnFLKzQvdCtCbkFjZ0wzTlZncE95UHVRQTRJNkc4c0hGVGI3YS9rcVhiaGQwaldTIgoJCQkiN3Bnelo4NWl3aFROcXVnOXJ1dmVMdWxjU1FzQXpPeCs0RDh0T2lpN29hSGhiU0F3c3gyYm1wcmVsM1M3cE9sbTl0OFRKMDRjTlhIaSIKCQkJInhGS0hNTDBMakt1dHJSMTA5dGxuYnl2cEpJQWxTNVpzQ1F6OTlOTlBueG85ZXZTN2tzWUFKQktKWjRIYSt2cjZBeWRQbnJ5Tm1SVTYiCgkJCSJHUHh0b29TdHVycTZnNEU5QU00Ly8vd3R6anJyckc4NmpuT1hwSnBVS2pXc3RyWjJVRHFkbmlicEVVa0hUWjQ4ZWE5VUtqVVl1TWpNIgoJCQkiWnMrWU1lUHpjbis4anJXcWZjMmVOemlMcmduTEc1cjQxTEtpakRmQlF6M1FjeHZ3UlB1TXhNem1FVXZObkRWcjFuTGdidGQxN3dSdyIKCQkJIlhmZE9NN3ZiOS8yT2tkbk1acG5aN1FDUm5NYzh6M3ZRODd5VFhOYzlEa0RTa3BqT2RjQzd2dSsvQmR5YlRDYmZ5MmF6VDVyWlRjQ1MiCgkJCSJ1WFBucmdadUdqNTgrRXZMbGkxN0dWaHRaaXVqdmt5VmRFY1FCSzlMaXVmU3ZBdXNjMTNYQi80K2xVb3RkeHpuUXVEcVhDNjNhdlhxIgoJCQkiMWRYWmJQYmMyYk5udnhFRXdTWEFYWjduTFFEVytiNi9STkpwWm5ZRDhJcmpPR3RXclZwMVh2VFpsaWFUeVN4QUVBUWZTNHFIYlY3ciIKCQkJIjh1c3g3VDhDd2dEK25vTURlMzdMN00wL1NLTUNlSTNTNXh4L0hNRFk4ZDA4eFByTHpLUkprN2IzUE8raGhvYUc2b0hxUTVmVjhYM0QiCgkJCSJKSjdkS2J4ZFlvTVFSSHVVdm1YMmNiUTV2dGhXMUk4TWp0NlVqR1pqb1dCYXhUaXpaZVBNNm9Nd2kyd0s4RGp3WndvbkIvVUhOZTJCIgoJCQkidmVpM3FmWTArSEYwUnQ5N3dNdUNLOXRnajJxem9tdG5YMVdHRFJ1Mk1ucnNEQmovRDJLVHp6ZGJvdlp5QUFBQUFFbEZUa1N1UW1DQyIKCQkpCgkpCikK';