From 93f19a3e97f142bca8d13bb576bfadee5abb142f Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 10 May 2026 15:44:14 -0700 Subject: [PATCH 01/47] exported tap ir construct --- edg/edgir/expr_pb2.py | 4 ++-- edg/edgir/expr_pb2.pyi | 19 ++++++++++++++++++- proto/edgir/expr.proto | 6 ++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/edg/edgir/expr_pb2.py b/edg/edgir/expr_pb2.py index e4fd24453..ae65877d4 100644 --- a/edg/edgir/expr_pb2.py +++ b/edg/edgir/expr_pb2.py @@ -11,7 +11,7 @@ from ..edgir import lit_pb2 as edgir_dot_lit__pb2 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x10edgir/expr.proto\x12\nedgir.expr\x1a\x0fedgir/ref.proto\x1a\x12edgir/common.proto\x1a\x0fedgir/lit.proto"\xb4\x01\n\tUnaryExpr\x12$\n\x02op\x18\x01 \x01(\x0e2\x18.edgir.expr.UnaryExpr.Op\x12"\n\x03val\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"]\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06NEGATE\x10\x01\x12\x07\n\x03NOT\x10\x02\x12\n\n\x06INVERT\x10\x03\x12\x07\n\x03MIN\x10\x04\x12\x07\n\x03MAX\x10\x05\x12\n\n\x06CENTER\x10\x06\x12\t\n\x05WIDTH\x10\x07"\xcb\x02\n\x0cUnarySetExpr\x12\'\n\x02op\x18\x01 \x01(\x0e2\x1b.edgir.expr.UnarySetExpr.Op\x12#\n\x04vals\x18\x04 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12*\n\x0bempty_value\x18\x05 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xc0\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03SUM\x10\x01\x12\x0c\n\x08ALL_TRUE\x10\x02\x12\x0c\n\x08ANY_TRUE\x10\x03\x12\n\n\x06ALL_EQ\x10\x04\x12\x0e\n\nALL_UNIQUE\x10\x05\x12\x0b\n\x07MAXIMUM\x10\n\x12\x0b\n\x07MINIMUM\x10\x0b\x12\x0f\n\x0bSET_EXTRACT\x10\x0c\x12\x10\n\x0cINTERSECTION\x10\r\x12\x08\n\x04HULL\x10\x0e\x12\n\n\x06NEGATE\x10\x14\x12\n\n\x06INVERT\x10\x15\x12\x0b\n\x07FLATTEN\x10\x1e"\xd4\x02\n\nBinaryExpr\x12%\n\x02op\x18\x01 \x01(\x0e2\x19.edgir.expr.BinaryExpr.Op\x12"\n\x03lhs\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xd6\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\x0f\n\x0bSHRINK_MULT\x107\x12\x07\n\x03AND\x10\x14\x12\x06\n\x02OR\x10\x15\x12\x07\n\x03XOR\x10\x16\x12\x0b\n\x07IMPLIES\x10\x17\x12\x06\n\x02EQ\x10\x1e\x12\x07\n\x03NEQ\x10\x1f\x12\x06\n\x02GT\x10(\x12\x07\n\x03GTE\x10)\x12\x06\n\x02LT\x10*\x12\x07\n\x03LTE\x10,\x12\x07\n\x03MAX\x10-\x12\x07\n\x03MIN\x10.\x12\x10\n\x0cINTERSECTION\x103\x12\x08\n\x04HULL\x106\x12\n\n\x06WITHIN\x105\x12\t\n\x05RANGE\x10\x01"\xbf\x01\n\rBinarySetExpr\x12(\n\x02op\x18\x01 \x01(\x0e2\x1c.edgir.expr.BinarySetExpr.Op\x12$\n\x05lhset\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr":\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\n\n\x06CONCAT\x10\x14\x12\x06\n\x02EQ\x10\x1e"0\n\tArrayExpr\x12#\n\x04vals\x18\x01 \x03(\x0b2\x15.edgir.expr.ValueExpr"[\n\tRangeExpr\x12&\n\x07minimum\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12&\n\x07maximum\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x80\x01\n\nStructExpr\x12.\n\x04vals\x18\x01 \x03(\x0b2 .edgir.expr.StructExpr.ValsEntry\x1aB\n\tValsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01"\xa3\x01\n\x0eIfThenElseExpr\x12#\n\x04cond\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03tru\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03fal\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"]\n\x0bExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x05index\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"^\n\x0eMapExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x04path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPath"\x91\x01\n\rConnectedExpr\x12)\n\nblock_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12(\n\tlink_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12+\n\x08expanded\x18\x03 \x03(\x0b2\x19.edgir.expr.ConnectedExpr"\x9c\x01\n\x0cExportedExpr\x12,\n\rexterior_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x122\n\x13internal_block_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12*\n\x08expanded\x18\x03 \x03(\x0b2\x18.edgir.expr.ExportedExpr"S\n\nAssignExpr\x12!\n\x03dst\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x03src\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x97\x07\n\tValueExpr\x12&\n\x07literal\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLitH\x00\x12(\n\x06binary\x18\x02 \x01(\x0b2\x16.edgir.expr.BinaryExprH\x00\x12/\n\nbinary_set\x18\x12 \x01(\x0b2\x19.edgir.expr.BinarySetExprH\x00\x12&\n\x05unary\x18\x03 \x01(\x0b2\x15.edgir.expr.UnaryExprH\x00\x12-\n\tunary_set\x18\x04 \x01(\x0b2\x18.edgir.expr.UnarySetExprH\x00\x12&\n\x05array\x18\x06 \x01(\x0b2\x15.edgir.expr.ArrayExprH\x00\x12(\n\x06struct\x18\x07 \x01(\x0b2\x16.edgir.expr.StructExprH\x00\x12&\n\x05range\x18\x08 \x01(\x0b2\x15.edgir.expr.RangeExprH\x00\x120\n\nifThenElse\x18\n \x01(\x0b2\x1a.edgir.expr.IfThenElseExprH\x00\x12*\n\x07extract\x18\x0c \x01(\x0b2\x17.edgir.expr.ExtractExprH\x00\x121\n\x0bmap_extract\x18\x0e \x01(\x0b2\x1a.edgir.expr.MapExtractExprH\x00\x12.\n\tconnected\x18\x0f \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x12,\n\x08exported\x18\x10 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x123\n\x0econnectedArray\x18\x13 \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x121\n\rexportedArray\x18\x14 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12(\n\x06assign\x18\x11 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x122\n\x0eexportedTunnel\x18\x15 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12.\n\x0cassignTunnel\x18\x16 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x12#\n\x03ref\x18c \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04exprb\x06proto3' + b'\n\x10edgir/expr.proto\x12\nedgir.expr\x1a\x0fedgir/ref.proto\x1a\x12edgir/common.proto\x1a\x0fedgir/lit.proto"\xb4\x01\n\tUnaryExpr\x12$\n\x02op\x18\x01 \x01(\x0e2\x18.edgir.expr.UnaryExpr.Op\x12"\n\x03val\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"]\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06NEGATE\x10\x01\x12\x07\n\x03NOT\x10\x02\x12\n\n\x06INVERT\x10\x03\x12\x07\n\x03MIN\x10\x04\x12\x07\n\x03MAX\x10\x05\x12\n\n\x06CENTER\x10\x06\x12\t\n\x05WIDTH\x10\x07"\xcb\x02\n\x0cUnarySetExpr\x12\'\n\x02op\x18\x01 \x01(\x0e2\x1b.edgir.expr.UnarySetExpr.Op\x12#\n\x04vals\x18\x04 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12*\n\x0bempty_value\x18\x05 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xc0\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03SUM\x10\x01\x12\x0c\n\x08ALL_TRUE\x10\x02\x12\x0c\n\x08ANY_TRUE\x10\x03\x12\n\n\x06ALL_EQ\x10\x04\x12\x0e\n\nALL_UNIQUE\x10\x05\x12\x0b\n\x07MAXIMUM\x10\n\x12\x0b\n\x07MINIMUM\x10\x0b\x12\x0f\n\x0bSET_EXTRACT\x10\x0c\x12\x10\n\x0cINTERSECTION\x10\r\x12\x08\n\x04HULL\x10\x0e\x12\n\n\x06NEGATE\x10\x14\x12\n\n\x06INVERT\x10\x15\x12\x0b\n\x07FLATTEN\x10\x1e"\xd4\x02\n\nBinaryExpr\x12%\n\x02op\x18\x01 \x01(\x0e2\x19.edgir.expr.BinaryExpr.Op\x12"\n\x03lhs\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xd6\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\x0f\n\x0bSHRINK_MULT\x107\x12\x07\n\x03AND\x10\x14\x12\x06\n\x02OR\x10\x15\x12\x07\n\x03XOR\x10\x16\x12\x0b\n\x07IMPLIES\x10\x17\x12\x06\n\x02EQ\x10\x1e\x12\x07\n\x03NEQ\x10\x1f\x12\x06\n\x02GT\x10(\x12\x07\n\x03GTE\x10)\x12\x06\n\x02LT\x10*\x12\x07\n\x03LTE\x10,\x12\x07\n\x03MAX\x10-\x12\x07\n\x03MIN\x10.\x12\x10\n\x0cINTERSECTION\x103\x12\x08\n\x04HULL\x106\x12\n\n\x06WITHIN\x105\x12\t\n\x05RANGE\x10\x01"\xbf\x01\n\rBinarySetExpr\x12(\n\x02op\x18\x01 \x01(\x0e2\x1c.edgir.expr.BinarySetExpr.Op\x12$\n\x05lhset\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr":\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\n\n\x06CONCAT\x10\x14\x12\x06\n\x02EQ\x10\x1e"0\n\tArrayExpr\x12#\n\x04vals\x18\x01 \x03(\x0b2\x15.edgir.expr.ValueExpr"[\n\tRangeExpr\x12&\n\x07minimum\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12&\n\x07maximum\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x80\x01\n\nStructExpr\x12.\n\x04vals\x18\x01 \x03(\x0b2 .edgir.expr.StructExpr.ValsEntry\x1aB\n\tValsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01"\xa3\x01\n\x0eIfThenElseExpr\x12#\n\x04cond\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03tru\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03fal\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"]\n\x0bExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x05index\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"^\n\x0eMapExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x04path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPath"\x91\x01\n\rConnectedExpr\x12)\n\nblock_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12(\n\tlink_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12+\n\x08expanded\x18\x03 \x03(\x0b2\x19.edgir.expr.ConnectedExpr"\x9c\x01\n\x0cExportedExpr\x12,\n\rexterior_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x122\n\x13internal_block_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12*\n\x08expanded\x18\x03 \x03(\x0b2\x18.edgir.expr.ExportedExpr"S\n\nAssignExpr\x12!\n\x03dst\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x03src\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xc8\x07\n\tValueExpr\x12&\n\x07literal\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLitH\x00\x12(\n\x06binary\x18\x02 \x01(\x0b2\x16.edgir.expr.BinaryExprH\x00\x12/\n\nbinary_set\x18\x12 \x01(\x0b2\x19.edgir.expr.BinarySetExprH\x00\x12&\n\x05unary\x18\x03 \x01(\x0b2\x15.edgir.expr.UnaryExprH\x00\x12-\n\tunary_set\x18\x04 \x01(\x0b2\x18.edgir.expr.UnarySetExprH\x00\x12&\n\x05array\x18\x06 \x01(\x0b2\x15.edgir.expr.ArrayExprH\x00\x12(\n\x06struct\x18\x07 \x01(\x0b2\x16.edgir.expr.StructExprH\x00\x12&\n\x05range\x18\x08 \x01(\x0b2\x15.edgir.expr.RangeExprH\x00\x120\n\nifThenElse\x18\n \x01(\x0b2\x1a.edgir.expr.IfThenElseExprH\x00\x12*\n\x07extract\x18\x0c \x01(\x0b2\x17.edgir.expr.ExtractExprH\x00\x121\n\x0bmap_extract\x18\x0e \x01(\x0b2\x1a.edgir.expr.MapExtractExprH\x00\x12.\n\tconnected\x18\x0f \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x12,\n\x08exported\x18\x10 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x123\n\x0econnectedArray\x18\x13 \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x121\n\rexportedArray\x18\x14 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12/\n\x0bexportedTap\x18\x17 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12(\n\x06assign\x18\x11 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x122\n\x0eexportedTunnel\x18\x15 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12.\n\x0cassignTunnel\x18\x16 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x12#\n\x03ref\x18c \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04exprb\x06proto3' ) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.expr_pb2", globals()) @@ -56,4 +56,4 @@ _ASSIGNEXPR._serialized_start = 2078 _ASSIGNEXPR._serialized_end = 2161 _VALUEEXPR._serialized_start = 2164 - _VALUEEXPR._serialized_end = 3083 + _VALUEEXPR._serialized_end = 3132 diff --git a/edg/edgir/expr_pb2.pyi b/edg/edgir/expr_pb2.pyi index bdcf85342..039a443d2 100644 --- a/edg/edgir/expr_pb2.pyi +++ b/edg/edgir/expr_pb2.pyi @@ -658,6 +658,7 @@ class ValueExpr(_message.Message): EXPORTED_FIELD_NUMBER: _builtins.int CONNECTEDARRAY_FIELD_NUMBER: _builtins.int EXPORTEDARRAY_FIELD_NUMBER: _builtins.int + EXPORTEDTAP_FIELD_NUMBER: _builtins.int ASSIGN_FIELD_NUMBER: _builtins.int EXPORTEDTUNNEL_FIELD_NUMBER: _builtins.int ASSIGNTUNNEL_FIELD_NUMBER: _builtins.int @@ -705,7 +706,17 @@ class ValueExpr(_message.Message): """array to array export, where allocate means allocate a subarray""" @_builtins.property - def assign(self) -> Global___AssignExpr: ... + def exportedTap(self) -> Global___ExportedExpr: + """single port to single port export, where the exterior can already be assigned""" + + @_builtins.property + def assign(self) -> Global___AssignExpr: + """- parameters do not propagate, internal port must not have parameter values + - the internal port's link resolves to the external port + - the exterior port may have multiple exportedTaps connected to it, along with + a standard exported connection + """ + @_builtins.property def exportedTunnel(self) -> Global___ExportedExpr: """These Exprs support cross-hierarchy operations @@ -748,6 +759,7 @@ class ValueExpr(_message.Message): exported: Global___ExportedExpr | None = ..., connectedArray: Global___ConnectedExpr | None = ..., exportedArray: Global___ExportedExpr | None = ..., + exportedTap: Global___ExportedExpr | None = ..., assign: Global___AssignExpr | None = ..., exportedTunnel: Global___ExportedExpr | None = ..., assignTunnel: Global___AssignExpr | None = ..., @@ -773,6 +785,8 @@ class ValueExpr(_message.Message): b"exported", "exportedArray", b"exportedArray", + "exportedTap", + b"exportedTap", "exportedTunnel", b"exportedTunnel", "expr", @@ -819,6 +833,8 @@ class ValueExpr(_message.Message): b"exported", "exportedArray", b"exportedArray", + "exportedTap", + b"exportedTap", "exportedTunnel", b"exportedTunnel", "expr", @@ -862,6 +878,7 @@ class ValueExpr(_message.Message): "exported", "connectedArray", "exportedArray", + "exportedTap", "assign", "exportedTunnel", "assignTunnel", diff --git a/proto/edgir/expr.proto b/proto/edgir/expr.proto index 8ca7c9839..3058f2e85 100644 --- a/proto/edgir/expr.proto +++ b/proto/edgir/expr.proto @@ -393,6 +393,12 @@ message ValueExpr { ConnectedExpr connectedArray = 19; // array to array connect, where allocate means allocate a subarray ExportedExpr exportedArray = 20; // array to array export, where allocate means allocate a subarray + ExportedExpr exportedTap = 23; // single port to single port export, where the exterior can already be assigned + // - parameters do not propagate, internal port must not have parameter values + // - the internal port's link resolves to the external port + // - the exterior port may have multiple exportedTaps connected to it, along with + // a standard exported connection + AssignExpr assign = 17; // These Exprs support cross-hierarchy operations From b4168b87bfe932c45c786ad723160fe850cc998c Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Wed, 13 May 2026 00:40:46 -0700 Subject: [PATCH 02/47] wip export tap --- compiler/src/main/scala/edg/EdgirUtils.scala | 41 +++++++++++++++++-- .../main/scala/edg/compiler/Compiler.scala | 20 +++++++++ .../edg/compiler/DesignRefsValidate.scala | 9 ++++ .../scala/edg/compiler/ExprToString.scala | 10 +++++ .../scala/edg/compiler/ValueExprMap.scala | 30 ++++++++++++++ 5 files changed, 107 insertions(+), 3 deletions(-) diff --git a/compiler/src/main/scala/edg/EdgirUtils.scala b/compiler/src/main/scala/edg/EdgirUtils.scala index 9ef84f810..c6ce3827b 100644 --- a/compiler/src/main/scala/edg/EdgirUtils.scala +++ b/compiler/src/main/scala/edg/EdgirUtils.scala @@ -39,6 +39,13 @@ object EdgirUtils { case (true, true) => throw new IllegalArgumentException("exterior and interior both matched") case (false, false) => throw new IllegalArgumentException("neither interior nor exterior matched") } + case expr.ValueExpr.Expr.ExportedTap(exported) => + (fn.isDefinedAt(exported.getExteriorPort), fn.isDefinedAt(exported.getInternalBlockPort)) match { + case (true, false) => fn(exported.getExteriorPort) + case (false, true) => fn(exported.getInternalBlockPort) + case (true, true) => throw new IllegalArgumentException("exterior and interior both matched") + case (false, false) => throw new IllegalArgumentException("neither interior nor exterior matched") + } case expr.ValueExpr.Expr.ExportedTunnel(exported) => (fn.isDefinedAt(exported.getExteriorPort), fn.isDefinedAt(exported.getInternalBlockPort)) match { case (true, false) => fn(exported.getExteriorPort) @@ -56,6 +63,7 @@ object EdgirUtils { def expandedSingleConstraintsMaybe: Seq[expr.ValueExpr] = connection.expr match { case expr.ValueExpr.Expr.Connected(_) => connection.expandedConstraints case expr.ValueExpr.Expr.Exported(_) => connection.expandedConstraints + case expr.ValueExpr.Expr.ExportedTap(_) => connection.expandedConstraints case expr.ValueExpr.Expr.ExportedTunnel(_) => connection.expandedConstraints case _ => Seq() } @@ -74,6 +82,12 @@ object EdgirUtils { case Seq(single) => Seq(expr.ValueExpr(expr = expr.ValueExpr.Expr.Exported(single))) case _ => throw new IllegalArgumentException(s"unexpected multiple expanded in exported") } + case expr.ValueExpr.Expr.ExportedTap(exportedContainer) => + exportedContainer.expanded match { + case Seq() => Seq(connection) + case Seq(single) => Seq(expr.ValueExpr(expr = expr.ValueExpr.Expr.Exported(single))) + case _ => throw new IllegalArgumentException(s"unexpected multiple expanded in exported") + } case expr.ValueExpr.Expr.ExportedTunnel(exportedContainer) => exportedContainer.expanded match { case Seq() => Seq(connection) @@ -149,7 +163,9 @@ object EdgirUtils { val base = connectedContainer.expanded match { case Seq() => connectedContainer case Seq(single) => single - case _ => throw new IllegalArgumentException(s"unexpected multiple expanded in connected") + case _ => throw new IllegalArgumentException( + s"unexpected multiple expanded in connected ${connectedContainer.expanded}" + ) } val newExpanded = (fn.lift(base.getBlockPort), fn.lift(base.getLinkPort)) match { case (Some(newBlockPort), None) => base.update(_.blockPort := newBlockPort) @@ -162,7 +178,24 @@ object EdgirUtils { val base = exportedContainer.expanded match { case Seq() => exportedContainer case Seq(single) => single - case _ => throw new IllegalArgumentException(s"unexpected multiple expanded in exported") + case _ => throw new IllegalArgumentException( + s"unexpected multiple expanded in exported ${exportedContainer.expanded}" + ) + } + val newExpanded = (fn.lift(base.getExteriorPort), fn.lift(base.getInternalBlockPort)) match { + case (Some(newExteriorPort), None) => base.update(_.exteriorPort := newExteriorPort) + case (None, Some(newInternalPort)) => base.update(_.internalBlockPort := newInternalPort) + case (Some(_), Some(_)) => throw new IllegalArgumentException("exterior and interior both matched") + case (None, None) => throw new IllegalArgumentException("neither interior nor exterior matched") + } + connection.update(_.exported.expanded := Seq(newExpanded)) + case expr.ValueExpr.Expr.ExportedTap(exportedContainer) => + val base = exportedContainer.expanded match { + case Seq() => exportedContainer + case Seq(single) => single + case _ => throw new IllegalArgumentException( + s"unexpected multiple expanded in exported ${exportedContainer.expanded}" + ) } val newExpanded = (fn.lift(base.getExteriorPort), fn.lift(base.getInternalBlockPort)) match { case (Some(newExteriorPort), None) => base.update(_.exteriorPort := newExteriorPort) @@ -175,7 +208,9 @@ object EdgirUtils { val base = exportedContainer.expanded match { case Seq() => exportedContainer case Seq(single) => single - case _ => throw new IllegalArgumentException(s"unexpected multiple expanded in connected") + case _ => throw new IllegalArgumentException( + s"unexpected multiple expanded in connected ${exportedContainer.expanded}" + ) } val newExpanded = (fn.lift(base.getExteriorPort), fn.lift(base.getInternalBlockPort)) match { case (Some(newExteriorPort), None) => base.update(_.exteriorPort := newExteriorPort) diff --git a/compiler/src/main/scala/edg/compiler/Compiler.scala b/compiler/src/main/scala/edg/compiler/Compiler.scala index 59b2058a0..312376031 100644 --- a/compiler/src/main/scala/edg/compiler/Compiler.scala +++ b/compiler/src/main/scala/edg/compiler/Compiler.scala @@ -352,6 +352,14 @@ class Compiler private ( containerPath, s"$containerPath.$constrName" ) + case Some((constrName, expr.ValueExpr.Expr.ExportedTap(exported))) => + val exportedToTop = exteriorTopPort(containerPath, exported.getExteriorPort.getRef.steps.map(_.getName)) + constProp.addAssignEqual( + containerPath.asIndirect ++ portPostfix + IndirectStep.IsConnected, + exportedToTop.asIndirect + IndirectStep.IsConnected, + containerPath, + s"$containerPath.$constrName" + ) case Some((constrName, expr.ValueExpr.Expr.ExportedTunnel(exported))) => // same as exported case // Since the exterior port refers to a child block of the current container, // it would not have been elaborated yet so we cannot inspect into it. @@ -513,6 +521,18 @@ class Compiler private ( true case _ => false // anything with allocates is not processed } + case expr.ValueExpr.Expr.ExportedTap(exported) => + (exported.getExteriorPort, exported.getInternalBlockPort) match { + case (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) => + require(!isInLink) + elaboratePending.addNode( + ElaborateRecord.Connect(blockPath ++ extPort, blockPath ++ intPort, blockPath), + Seq(ElaborateRecord.Port(blockPath ++ extPort)) + ) + constProp.setConnection(blockPath ++ extPort, blockPath ++ intPort) + true + case _ => false // anything with allocates is not processed + } case expr.ValueExpr.Expr.ExportedTunnel(exported) => (exported.getExteriorPort, exported.getInternalBlockPort) match { case (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) => diff --git a/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala b/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala index 82ad42e7e..23c106ebe 100644 --- a/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala +++ b/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala @@ -90,6 +90,15 @@ object CollectExprRefs extends ValueExprMap[Seq[ref.LocalPath]] { ): Seq[ref.LocalPath] = { expandedExteriorPort ++ expandedInternalBlockPort } + override def mapExportedTap( + exported: expr.ExportedExpr, + exteriorPort: Seq[ref.LocalPath], + internalBlockPort: Seq[ref.LocalPath], + expandedExteriorPort: Seq[ref.LocalPath], + expandedInternalBlockPort: Seq[ref.LocalPath] + ): Seq[ref.LocalPath] = { + expandedExteriorPort ++ expandedInternalBlockPort + } override def mapConnectedArray( connected: expr.ConnectedExpr, blockPort: Seq[ref.LocalPath], diff --git a/compiler/src/main/scala/edg/compiler/ExprToString.scala b/compiler/src/main/scala/edg/compiler/ExprToString.scala index 44f08f4f5..141c81b9c 100644 --- a/compiler/src/main/scala/edg/compiler/ExprToString.scala +++ b/compiler/src/main/scala/edg/compiler/ExprToString.scala @@ -194,6 +194,16 @@ class ExprToString() extends ValueExprMap[String] { s"exported($exteriorPort, $internalBlockPort)" } + override def mapExportedTap( + exported: expr.ExportedExpr, + exteriorPort: String, + internalBlockPort: String, + expandedExteriorPort: String, + expandedInterorPort: String + ): String = { + s"exportedTap($exteriorPort, $internalBlockPort)" + } + override def mapExportedTunnel( exported: expr.ExportedExpr, exteriorPort: String, diff --git a/compiler/src/main/scala/edg/compiler/ValueExprMap.scala b/compiler/src/main/scala/edg/compiler/ValueExprMap.scala index dc0f62fe1..b9b56ca7d 100644 --- a/compiler/src/main/scala/edg/compiler/ValueExprMap.scala +++ b/compiler/src/main/scala/edg/compiler/ValueExprMap.scala @@ -23,6 +23,7 @@ trait ValueExprMap[OutputType] { case expr.ValueExpr.Expr.MapExtract(valueExpr) => wrapMapExtract(valueExpr) case expr.ValueExpr.Expr.Connected(valueExpr) => wrapConnected(valueExpr) case expr.ValueExpr.Expr.Exported(valueExpr) => wrapExported(valueExpr) + case expr.ValueExpr.Expr.ExportedTap(valueExpr) => wrapExportedTap(valueExpr) case expr.ValueExpr.Expr.ConnectedArray(valueExpr) => wrapConnectedArray(valueExpr) case expr.ValueExpr.Expr.ExportedArray(valueExpr) => wrapExportedArray(valueExpr) case expr.ValueExpr.Expr.ExportedTunnel(valueExpr) => wrapExportedTunnel(valueExpr) @@ -74,6 +75,14 @@ trait ValueExprMap[OutputType] { expandedInternalBlockPort: OutputType ): OutputType = throw new NotImplementedError(s"Undefined mapExported for $exported") + def mapExportedTap( + exported: expr.ExportedExpr, + exteriorPort: OutputType, + internalBlockPort: OutputType, + expandedExteriorPort: OutputType, + expandedInternalBlockPort: OutputType + ): OutputType = + throw new NotImplementedError(s"Undefined mapExportedTap for $exported") // for array connect and export: expanded is empty is expanded is empty def mapConnectedArray( connected: expr.ConnectedExpr, @@ -167,6 +176,27 @@ trait ValueExprMap[OutputType] { } mapExported(exported, containerExteriorValue, containerInteriorValue, expandedExteriorValue, expandedInteriorValue) } + def wrapExportedTap(exported: expr.ExportedExpr): OutputType = { + val containerExteriorValue = map(exported.exteriorPort.get) + val containerInteriorValue = map(exported.internalBlockPort.get) + val expandedExteriorValue = exported.expanded match { + case Seq() => containerExteriorValue + case Seq(expanded) => map(expanded.getExteriorPort) + case _ => throw new IllegalArgumentException + } + val expandedInteriorValue = exported.expanded match { + case Seq() => containerInteriorValue + case Seq(expanded) => map(expanded.getInternalBlockPort) + case _ => throw new IllegalArgumentException + } + mapExportedTap( + exported, + containerExteriorValue, + containerInteriorValue, + expandedExteriorValue, + expandedInteriorValue + ) + } def wrapConnectedArray(connected: expr.ConnectedExpr): OutputType = { mapConnectedArray( connected, From baf95e4a2811aa8a67a45492f20568a7333ff383 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Wed, 13 May 2026 00:45:27 -0700 Subject: [PATCH 03/47] Revert "wip export tap" This reverts commit b4168b87bfe932c45c786ad723160fe850cc998c. --- compiler/src/main/scala/edg/EdgirUtils.scala | 41 ++----------------- .../main/scala/edg/compiler/Compiler.scala | 20 --------- .../edg/compiler/DesignRefsValidate.scala | 9 ---- .../scala/edg/compiler/ExprToString.scala | 10 ----- .../scala/edg/compiler/ValueExprMap.scala | 30 -------------- 5 files changed, 3 insertions(+), 107 deletions(-) diff --git a/compiler/src/main/scala/edg/EdgirUtils.scala b/compiler/src/main/scala/edg/EdgirUtils.scala index c6ce3827b..9ef84f810 100644 --- a/compiler/src/main/scala/edg/EdgirUtils.scala +++ b/compiler/src/main/scala/edg/EdgirUtils.scala @@ -39,13 +39,6 @@ object EdgirUtils { case (true, true) => throw new IllegalArgumentException("exterior and interior both matched") case (false, false) => throw new IllegalArgumentException("neither interior nor exterior matched") } - case expr.ValueExpr.Expr.ExportedTap(exported) => - (fn.isDefinedAt(exported.getExteriorPort), fn.isDefinedAt(exported.getInternalBlockPort)) match { - case (true, false) => fn(exported.getExteriorPort) - case (false, true) => fn(exported.getInternalBlockPort) - case (true, true) => throw new IllegalArgumentException("exterior and interior both matched") - case (false, false) => throw new IllegalArgumentException("neither interior nor exterior matched") - } case expr.ValueExpr.Expr.ExportedTunnel(exported) => (fn.isDefinedAt(exported.getExteriorPort), fn.isDefinedAt(exported.getInternalBlockPort)) match { case (true, false) => fn(exported.getExteriorPort) @@ -63,7 +56,6 @@ object EdgirUtils { def expandedSingleConstraintsMaybe: Seq[expr.ValueExpr] = connection.expr match { case expr.ValueExpr.Expr.Connected(_) => connection.expandedConstraints case expr.ValueExpr.Expr.Exported(_) => connection.expandedConstraints - case expr.ValueExpr.Expr.ExportedTap(_) => connection.expandedConstraints case expr.ValueExpr.Expr.ExportedTunnel(_) => connection.expandedConstraints case _ => Seq() } @@ -82,12 +74,6 @@ object EdgirUtils { case Seq(single) => Seq(expr.ValueExpr(expr = expr.ValueExpr.Expr.Exported(single))) case _ => throw new IllegalArgumentException(s"unexpected multiple expanded in exported") } - case expr.ValueExpr.Expr.ExportedTap(exportedContainer) => - exportedContainer.expanded match { - case Seq() => Seq(connection) - case Seq(single) => Seq(expr.ValueExpr(expr = expr.ValueExpr.Expr.Exported(single))) - case _ => throw new IllegalArgumentException(s"unexpected multiple expanded in exported") - } case expr.ValueExpr.Expr.ExportedTunnel(exportedContainer) => exportedContainer.expanded match { case Seq() => Seq(connection) @@ -163,9 +149,7 @@ object EdgirUtils { val base = connectedContainer.expanded match { case Seq() => connectedContainer case Seq(single) => single - case _ => throw new IllegalArgumentException( - s"unexpected multiple expanded in connected ${connectedContainer.expanded}" - ) + case _ => throw new IllegalArgumentException(s"unexpected multiple expanded in connected") } val newExpanded = (fn.lift(base.getBlockPort), fn.lift(base.getLinkPort)) match { case (Some(newBlockPort), None) => base.update(_.blockPort := newBlockPort) @@ -178,24 +162,7 @@ object EdgirUtils { val base = exportedContainer.expanded match { case Seq() => exportedContainer case Seq(single) => single - case _ => throw new IllegalArgumentException( - s"unexpected multiple expanded in exported ${exportedContainer.expanded}" - ) - } - val newExpanded = (fn.lift(base.getExteriorPort), fn.lift(base.getInternalBlockPort)) match { - case (Some(newExteriorPort), None) => base.update(_.exteriorPort := newExteriorPort) - case (None, Some(newInternalPort)) => base.update(_.internalBlockPort := newInternalPort) - case (Some(_), Some(_)) => throw new IllegalArgumentException("exterior and interior both matched") - case (None, None) => throw new IllegalArgumentException("neither interior nor exterior matched") - } - connection.update(_.exported.expanded := Seq(newExpanded)) - case expr.ValueExpr.Expr.ExportedTap(exportedContainer) => - val base = exportedContainer.expanded match { - case Seq() => exportedContainer - case Seq(single) => single - case _ => throw new IllegalArgumentException( - s"unexpected multiple expanded in exported ${exportedContainer.expanded}" - ) + case _ => throw new IllegalArgumentException(s"unexpected multiple expanded in exported") } val newExpanded = (fn.lift(base.getExteriorPort), fn.lift(base.getInternalBlockPort)) match { case (Some(newExteriorPort), None) => base.update(_.exteriorPort := newExteriorPort) @@ -208,9 +175,7 @@ object EdgirUtils { val base = exportedContainer.expanded match { case Seq() => exportedContainer case Seq(single) => single - case _ => throw new IllegalArgumentException( - s"unexpected multiple expanded in connected ${exportedContainer.expanded}" - ) + case _ => throw new IllegalArgumentException(s"unexpected multiple expanded in connected") } val newExpanded = (fn.lift(base.getExteriorPort), fn.lift(base.getInternalBlockPort)) match { case (Some(newExteriorPort), None) => base.update(_.exteriorPort := newExteriorPort) diff --git a/compiler/src/main/scala/edg/compiler/Compiler.scala b/compiler/src/main/scala/edg/compiler/Compiler.scala index 312376031..59b2058a0 100644 --- a/compiler/src/main/scala/edg/compiler/Compiler.scala +++ b/compiler/src/main/scala/edg/compiler/Compiler.scala @@ -352,14 +352,6 @@ class Compiler private ( containerPath, s"$containerPath.$constrName" ) - case Some((constrName, expr.ValueExpr.Expr.ExportedTap(exported))) => - val exportedToTop = exteriorTopPort(containerPath, exported.getExteriorPort.getRef.steps.map(_.getName)) - constProp.addAssignEqual( - containerPath.asIndirect ++ portPostfix + IndirectStep.IsConnected, - exportedToTop.asIndirect + IndirectStep.IsConnected, - containerPath, - s"$containerPath.$constrName" - ) case Some((constrName, expr.ValueExpr.Expr.ExportedTunnel(exported))) => // same as exported case // Since the exterior port refers to a child block of the current container, // it would not have been elaborated yet so we cannot inspect into it. @@ -521,18 +513,6 @@ class Compiler private ( true case _ => false // anything with allocates is not processed } - case expr.ValueExpr.Expr.ExportedTap(exported) => - (exported.getExteriorPort, exported.getInternalBlockPort) match { - case (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) => - require(!isInLink) - elaboratePending.addNode( - ElaborateRecord.Connect(blockPath ++ extPort, blockPath ++ intPort, blockPath), - Seq(ElaborateRecord.Port(blockPath ++ extPort)) - ) - constProp.setConnection(blockPath ++ extPort, blockPath ++ intPort) - true - case _ => false // anything with allocates is not processed - } case expr.ValueExpr.Expr.ExportedTunnel(exported) => (exported.getExteriorPort, exported.getInternalBlockPort) match { case (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) => diff --git a/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala b/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala index 23c106ebe..82ad42e7e 100644 --- a/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala +++ b/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala @@ -90,15 +90,6 @@ object CollectExprRefs extends ValueExprMap[Seq[ref.LocalPath]] { ): Seq[ref.LocalPath] = { expandedExteriorPort ++ expandedInternalBlockPort } - override def mapExportedTap( - exported: expr.ExportedExpr, - exteriorPort: Seq[ref.LocalPath], - internalBlockPort: Seq[ref.LocalPath], - expandedExteriorPort: Seq[ref.LocalPath], - expandedInternalBlockPort: Seq[ref.LocalPath] - ): Seq[ref.LocalPath] = { - expandedExteriorPort ++ expandedInternalBlockPort - } override def mapConnectedArray( connected: expr.ConnectedExpr, blockPort: Seq[ref.LocalPath], diff --git a/compiler/src/main/scala/edg/compiler/ExprToString.scala b/compiler/src/main/scala/edg/compiler/ExprToString.scala index 141c81b9c..44f08f4f5 100644 --- a/compiler/src/main/scala/edg/compiler/ExprToString.scala +++ b/compiler/src/main/scala/edg/compiler/ExprToString.scala @@ -194,16 +194,6 @@ class ExprToString() extends ValueExprMap[String] { s"exported($exteriorPort, $internalBlockPort)" } - override def mapExportedTap( - exported: expr.ExportedExpr, - exteriorPort: String, - internalBlockPort: String, - expandedExteriorPort: String, - expandedInterorPort: String - ): String = { - s"exportedTap($exteriorPort, $internalBlockPort)" - } - override def mapExportedTunnel( exported: expr.ExportedExpr, exteriorPort: String, diff --git a/compiler/src/main/scala/edg/compiler/ValueExprMap.scala b/compiler/src/main/scala/edg/compiler/ValueExprMap.scala index b9b56ca7d..dc0f62fe1 100644 --- a/compiler/src/main/scala/edg/compiler/ValueExprMap.scala +++ b/compiler/src/main/scala/edg/compiler/ValueExprMap.scala @@ -23,7 +23,6 @@ trait ValueExprMap[OutputType] { case expr.ValueExpr.Expr.MapExtract(valueExpr) => wrapMapExtract(valueExpr) case expr.ValueExpr.Expr.Connected(valueExpr) => wrapConnected(valueExpr) case expr.ValueExpr.Expr.Exported(valueExpr) => wrapExported(valueExpr) - case expr.ValueExpr.Expr.ExportedTap(valueExpr) => wrapExportedTap(valueExpr) case expr.ValueExpr.Expr.ConnectedArray(valueExpr) => wrapConnectedArray(valueExpr) case expr.ValueExpr.Expr.ExportedArray(valueExpr) => wrapExportedArray(valueExpr) case expr.ValueExpr.Expr.ExportedTunnel(valueExpr) => wrapExportedTunnel(valueExpr) @@ -75,14 +74,6 @@ trait ValueExprMap[OutputType] { expandedInternalBlockPort: OutputType ): OutputType = throw new NotImplementedError(s"Undefined mapExported for $exported") - def mapExportedTap( - exported: expr.ExportedExpr, - exteriorPort: OutputType, - internalBlockPort: OutputType, - expandedExteriorPort: OutputType, - expandedInternalBlockPort: OutputType - ): OutputType = - throw new NotImplementedError(s"Undefined mapExportedTap for $exported") // for array connect and export: expanded is empty is expanded is empty def mapConnectedArray( connected: expr.ConnectedExpr, @@ -176,27 +167,6 @@ trait ValueExprMap[OutputType] { } mapExported(exported, containerExteriorValue, containerInteriorValue, expandedExteriorValue, expandedInteriorValue) } - def wrapExportedTap(exported: expr.ExportedExpr): OutputType = { - val containerExteriorValue = map(exported.exteriorPort.get) - val containerInteriorValue = map(exported.internalBlockPort.get) - val expandedExteriorValue = exported.expanded match { - case Seq() => containerExteriorValue - case Seq(expanded) => map(expanded.getExteriorPort) - case _ => throw new IllegalArgumentException - } - val expandedInteriorValue = exported.expanded match { - case Seq() => containerInteriorValue - case Seq(expanded) => map(expanded.getInternalBlockPort) - case _ => throw new IllegalArgumentException - } - mapExportedTap( - exported, - containerExteriorValue, - containerInteriorValue, - expandedExteriorValue, - expandedInteriorValue - ) - } def wrapConnectedArray(connected: expr.ConnectedExpr): OutputType = { mapConnectedArray( connected, From 5b93edf4464f5ef15e5bedf8720ffa6069746a64 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Wed, 13 May 2026 00:49:42 -0700 Subject: [PATCH 04/47] restructure export tap --- edg/edgir/expr_pb2.py | 12 ++++++------ edg/edgir/expr_pb2.pyi | 40 ++++++++++++++++++++-------------------- proto/edgir/expr.proto | 11 +++++------ 3 files changed, 31 insertions(+), 32 deletions(-) diff --git a/edg/edgir/expr_pb2.py b/edg/edgir/expr_pb2.py index ae65877d4..ae21c29a3 100644 --- a/edg/edgir/expr_pb2.py +++ b/edg/edgir/expr_pb2.py @@ -11,7 +11,7 @@ from ..edgir import lit_pb2 as edgir_dot_lit__pb2 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x10edgir/expr.proto\x12\nedgir.expr\x1a\x0fedgir/ref.proto\x1a\x12edgir/common.proto\x1a\x0fedgir/lit.proto"\xb4\x01\n\tUnaryExpr\x12$\n\x02op\x18\x01 \x01(\x0e2\x18.edgir.expr.UnaryExpr.Op\x12"\n\x03val\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"]\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06NEGATE\x10\x01\x12\x07\n\x03NOT\x10\x02\x12\n\n\x06INVERT\x10\x03\x12\x07\n\x03MIN\x10\x04\x12\x07\n\x03MAX\x10\x05\x12\n\n\x06CENTER\x10\x06\x12\t\n\x05WIDTH\x10\x07"\xcb\x02\n\x0cUnarySetExpr\x12\'\n\x02op\x18\x01 \x01(\x0e2\x1b.edgir.expr.UnarySetExpr.Op\x12#\n\x04vals\x18\x04 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12*\n\x0bempty_value\x18\x05 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xc0\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03SUM\x10\x01\x12\x0c\n\x08ALL_TRUE\x10\x02\x12\x0c\n\x08ANY_TRUE\x10\x03\x12\n\n\x06ALL_EQ\x10\x04\x12\x0e\n\nALL_UNIQUE\x10\x05\x12\x0b\n\x07MAXIMUM\x10\n\x12\x0b\n\x07MINIMUM\x10\x0b\x12\x0f\n\x0bSET_EXTRACT\x10\x0c\x12\x10\n\x0cINTERSECTION\x10\r\x12\x08\n\x04HULL\x10\x0e\x12\n\n\x06NEGATE\x10\x14\x12\n\n\x06INVERT\x10\x15\x12\x0b\n\x07FLATTEN\x10\x1e"\xd4\x02\n\nBinaryExpr\x12%\n\x02op\x18\x01 \x01(\x0e2\x19.edgir.expr.BinaryExpr.Op\x12"\n\x03lhs\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xd6\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\x0f\n\x0bSHRINK_MULT\x107\x12\x07\n\x03AND\x10\x14\x12\x06\n\x02OR\x10\x15\x12\x07\n\x03XOR\x10\x16\x12\x0b\n\x07IMPLIES\x10\x17\x12\x06\n\x02EQ\x10\x1e\x12\x07\n\x03NEQ\x10\x1f\x12\x06\n\x02GT\x10(\x12\x07\n\x03GTE\x10)\x12\x06\n\x02LT\x10*\x12\x07\n\x03LTE\x10,\x12\x07\n\x03MAX\x10-\x12\x07\n\x03MIN\x10.\x12\x10\n\x0cINTERSECTION\x103\x12\x08\n\x04HULL\x106\x12\n\n\x06WITHIN\x105\x12\t\n\x05RANGE\x10\x01"\xbf\x01\n\rBinarySetExpr\x12(\n\x02op\x18\x01 \x01(\x0e2\x1c.edgir.expr.BinarySetExpr.Op\x12$\n\x05lhset\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr":\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\n\n\x06CONCAT\x10\x14\x12\x06\n\x02EQ\x10\x1e"0\n\tArrayExpr\x12#\n\x04vals\x18\x01 \x03(\x0b2\x15.edgir.expr.ValueExpr"[\n\tRangeExpr\x12&\n\x07minimum\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12&\n\x07maximum\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x80\x01\n\nStructExpr\x12.\n\x04vals\x18\x01 \x03(\x0b2 .edgir.expr.StructExpr.ValsEntry\x1aB\n\tValsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01"\xa3\x01\n\x0eIfThenElseExpr\x12#\n\x04cond\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03tru\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03fal\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"]\n\x0bExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x05index\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"^\n\x0eMapExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x04path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPath"\x91\x01\n\rConnectedExpr\x12)\n\nblock_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12(\n\tlink_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12+\n\x08expanded\x18\x03 \x03(\x0b2\x19.edgir.expr.ConnectedExpr"\x9c\x01\n\x0cExportedExpr\x12,\n\rexterior_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x122\n\x13internal_block_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12*\n\x08expanded\x18\x03 \x03(\x0b2\x18.edgir.expr.ExportedExpr"S\n\nAssignExpr\x12!\n\x03dst\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x03src\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xc8\x07\n\tValueExpr\x12&\n\x07literal\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLitH\x00\x12(\n\x06binary\x18\x02 \x01(\x0b2\x16.edgir.expr.BinaryExprH\x00\x12/\n\nbinary_set\x18\x12 \x01(\x0b2\x19.edgir.expr.BinarySetExprH\x00\x12&\n\x05unary\x18\x03 \x01(\x0b2\x15.edgir.expr.UnaryExprH\x00\x12-\n\tunary_set\x18\x04 \x01(\x0b2\x18.edgir.expr.UnarySetExprH\x00\x12&\n\x05array\x18\x06 \x01(\x0b2\x15.edgir.expr.ArrayExprH\x00\x12(\n\x06struct\x18\x07 \x01(\x0b2\x16.edgir.expr.StructExprH\x00\x12&\n\x05range\x18\x08 \x01(\x0b2\x15.edgir.expr.RangeExprH\x00\x120\n\nifThenElse\x18\n \x01(\x0b2\x1a.edgir.expr.IfThenElseExprH\x00\x12*\n\x07extract\x18\x0c \x01(\x0b2\x17.edgir.expr.ExtractExprH\x00\x121\n\x0bmap_extract\x18\x0e \x01(\x0b2\x1a.edgir.expr.MapExtractExprH\x00\x12.\n\tconnected\x18\x0f \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x12,\n\x08exported\x18\x10 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x123\n\x0econnectedArray\x18\x13 \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x121\n\rexportedArray\x18\x14 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12/\n\x0bexportedTap\x18\x17 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12(\n\x06assign\x18\x11 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x122\n\x0eexportedTunnel\x18\x15 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12.\n\x0cassignTunnel\x18\x16 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x12#\n\x03ref\x18c \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04exprb\x06proto3' + b'\n\x10edgir/expr.proto\x12\nedgir.expr\x1a\x0fedgir/ref.proto\x1a\x12edgir/common.proto\x1a\x0fedgir/lit.proto"\xb4\x01\n\tUnaryExpr\x12$\n\x02op\x18\x01 \x01(\x0e2\x18.edgir.expr.UnaryExpr.Op\x12"\n\x03val\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"]\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06NEGATE\x10\x01\x12\x07\n\x03NOT\x10\x02\x12\n\n\x06INVERT\x10\x03\x12\x07\n\x03MIN\x10\x04\x12\x07\n\x03MAX\x10\x05\x12\n\n\x06CENTER\x10\x06\x12\t\n\x05WIDTH\x10\x07"\xcb\x02\n\x0cUnarySetExpr\x12\'\n\x02op\x18\x01 \x01(\x0e2\x1b.edgir.expr.UnarySetExpr.Op\x12#\n\x04vals\x18\x04 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12*\n\x0bempty_value\x18\x05 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xc0\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03SUM\x10\x01\x12\x0c\n\x08ALL_TRUE\x10\x02\x12\x0c\n\x08ANY_TRUE\x10\x03\x12\n\n\x06ALL_EQ\x10\x04\x12\x0e\n\nALL_UNIQUE\x10\x05\x12\x0b\n\x07MAXIMUM\x10\n\x12\x0b\n\x07MINIMUM\x10\x0b\x12\x0f\n\x0bSET_EXTRACT\x10\x0c\x12\x10\n\x0cINTERSECTION\x10\r\x12\x08\n\x04HULL\x10\x0e\x12\n\n\x06NEGATE\x10\x14\x12\n\n\x06INVERT\x10\x15\x12\x0b\n\x07FLATTEN\x10\x1e"\xd4\x02\n\nBinaryExpr\x12%\n\x02op\x18\x01 \x01(\x0e2\x19.edgir.expr.BinaryExpr.Op\x12"\n\x03lhs\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xd6\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\x0f\n\x0bSHRINK_MULT\x107\x12\x07\n\x03AND\x10\x14\x12\x06\n\x02OR\x10\x15\x12\x07\n\x03XOR\x10\x16\x12\x0b\n\x07IMPLIES\x10\x17\x12\x06\n\x02EQ\x10\x1e\x12\x07\n\x03NEQ\x10\x1f\x12\x06\n\x02GT\x10(\x12\x07\n\x03GTE\x10)\x12\x06\n\x02LT\x10*\x12\x07\n\x03LTE\x10,\x12\x07\n\x03MAX\x10-\x12\x07\n\x03MIN\x10.\x12\x10\n\x0cINTERSECTION\x103\x12\x08\n\x04HULL\x106\x12\n\n\x06WITHIN\x105\x12\t\n\x05RANGE\x10\x01"\xbf\x01\n\rBinarySetExpr\x12(\n\x02op\x18\x01 \x01(\x0e2\x1c.edgir.expr.BinarySetExpr.Op\x12$\n\x05lhset\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr":\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\n\n\x06CONCAT\x10\x14\x12\x06\n\x02EQ\x10\x1e"0\n\tArrayExpr\x12#\n\x04vals\x18\x01 \x03(\x0b2\x15.edgir.expr.ValueExpr"[\n\tRangeExpr\x12&\n\x07minimum\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12&\n\x07maximum\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x80\x01\n\nStructExpr\x12.\n\x04vals\x18\x01 \x03(\x0b2 .edgir.expr.StructExpr.ValsEntry\x1aB\n\tValsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01"\xa3\x01\n\x0eIfThenElseExpr\x12#\n\x04cond\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03tru\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03fal\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"]\n\x0bExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x05index\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"^\n\x0eMapExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x04path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPath"\x91\x01\n\rConnectedExpr\x12)\n\nblock_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12(\n\tlink_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12+\n\x08expanded\x18\x03 \x03(\x0b2\x19.edgir.expr.ConnectedExpr"\xa9\x01\n\x0cExportedExpr\x12,\n\rexterior_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x122\n\x13internal_block_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12\x0b\n\x03tap\x18\x04 \x01(\x08\x12*\n\x08expanded\x18\x03 \x03(\x0b2\x18.edgir.expr.ExportedExpr"S\n\nAssignExpr\x12!\n\x03dst\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x03src\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x97\x07\n\tValueExpr\x12&\n\x07literal\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLitH\x00\x12(\n\x06binary\x18\x02 \x01(\x0b2\x16.edgir.expr.BinaryExprH\x00\x12/\n\nbinary_set\x18\x12 \x01(\x0b2\x19.edgir.expr.BinarySetExprH\x00\x12&\n\x05unary\x18\x03 \x01(\x0b2\x15.edgir.expr.UnaryExprH\x00\x12-\n\tunary_set\x18\x04 \x01(\x0b2\x18.edgir.expr.UnarySetExprH\x00\x12&\n\x05array\x18\x06 \x01(\x0b2\x15.edgir.expr.ArrayExprH\x00\x12(\n\x06struct\x18\x07 \x01(\x0b2\x16.edgir.expr.StructExprH\x00\x12&\n\x05range\x18\x08 \x01(\x0b2\x15.edgir.expr.RangeExprH\x00\x120\n\nifThenElse\x18\n \x01(\x0b2\x1a.edgir.expr.IfThenElseExprH\x00\x12*\n\x07extract\x18\x0c \x01(\x0b2\x17.edgir.expr.ExtractExprH\x00\x121\n\x0bmap_extract\x18\x0e \x01(\x0b2\x1a.edgir.expr.MapExtractExprH\x00\x12.\n\tconnected\x18\x0f \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x12,\n\x08exported\x18\x10 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x123\n\x0econnectedArray\x18\x13 \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x121\n\rexportedArray\x18\x14 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12(\n\x06assign\x18\x11 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x122\n\x0eexportedTunnel\x18\x15 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12.\n\x0cassignTunnel\x18\x16 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x12#\n\x03ref\x18c \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04exprb\x06proto3' ) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.expr_pb2", globals()) @@ -52,8 +52,8 @@ _CONNECTEDEXPR._serialized_start = 1772 _CONNECTEDEXPR._serialized_end = 1917 _EXPORTEDEXPR._serialized_start = 1920 - _EXPORTEDEXPR._serialized_end = 2076 - _ASSIGNEXPR._serialized_start = 2078 - _ASSIGNEXPR._serialized_end = 2161 - _VALUEEXPR._serialized_start = 2164 - _VALUEEXPR._serialized_end = 3132 + _EXPORTEDEXPR._serialized_end = 2089 + _ASSIGNEXPR._serialized_start = 2091 + _ASSIGNEXPR._serialized_end = 2174 + _VALUEEXPR._serialized_start = 2177 + _VALUEEXPR._serialized_end = 3096 diff --git a/edg/edgir/expr_pb2.pyi b/edg/edgir/expr_pb2.pyi index 039a443d2..48dd92064 100644 --- a/edg/edgir/expr_pb2.pyi +++ b/edg/edgir/expr_pb2.pyi @@ -586,7 +586,10 @@ class ExportedExpr(_message.Message): DESCRIPTOR: _descriptor.Descriptor EXTERIOR_PORT_FIELD_NUMBER: _builtins.int INTERNAL_BLOCK_PORT_FIELD_NUMBER: _builtins.int + TAP_FIELD_NUMBER: _builtins.int EXPANDED_FIELD_NUMBER: _builtins.int + tap: _builtins.bool + "if true, this is a tap, which allows the exterior port to have multiple internal connections" @_builtins.property def exterior_port(self) -> Global___ValueExpr: ... @@ -594,13 +597,20 @@ class ExportedExpr(_message.Message): def internal_block_port(self) -> Global___ValueExpr: ... @_builtins.property def expanded(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExportedExpr]: - """see comment in ConnectedExpr""" + """(one non-tap connection, and optionally multiple tap connections) + These additional rules apply to export taps: + - parameters do not propagate, internal port should not have parameter values + - the internal port's link resolves to the external port + + see comment in ConnectedExpr + """ def __init__( self, *, exterior_port: Global___ValueExpr | None = ..., internal_block_port: Global___ValueExpr | None = ..., + tap: _builtins.bool = ..., expanded: _abc.Iterable[Global___ExportedExpr] | None = ..., ) -> None: ... _HasFieldArgType: _TypeAlias = _typing.Literal[ @@ -609,7 +619,14 @@ class ExportedExpr(_message.Message): def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... _ClearFieldArgType: _TypeAlias = _typing.Literal[ - "expanded", b"expanded", "exterior_port", b"exterior_port", "internal_block_port", b"internal_block_port" + "expanded", + b"expanded", + "exterior_port", + b"exterior_port", + "internal_block_port", + b"internal_block_port", + "tap", + b"tap", ] def ClearField(self, field_name: _ClearFieldArgType) -> None: ... @@ -658,7 +675,6 @@ class ValueExpr(_message.Message): EXPORTED_FIELD_NUMBER: _builtins.int CONNECTEDARRAY_FIELD_NUMBER: _builtins.int EXPORTEDARRAY_FIELD_NUMBER: _builtins.int - EXPORTEDTAP_FIELD_NUMBER: _builtins.int ASSIGN_FIELD_NUMBER: _builtins.int EXPORTEDTUNNEL_FIELD_NUMBER: _builtins.int ASSIGNTUNNEL_FIELD_NUMBER: _builtins.int @@ -706,17 +722,7 @@ class ValueExpr(_message.Message): """array to array export, where allocate means allocate a subarray""" @_builtins.property - def exportedTap(self) -> Global___ExportedExpr: - """single port to single port export, where the exterior can already be assigned""" - - @_builtins.property - def assign(self) -> Global___AssignExpr: - """- parameters do not propagate, internal port must not have parameter values - - the internal port's link resolves to the external port - - the exterior port may have multiple exportedTaps connected to it, along with - a standard exported connection - """ - + def assign(self) -> Global___AssignExpr: ... @_builtins.property def exportedTunnel(self) -> Global___ExportedExpr: """These Exprs support cross-hierarchy operations @@ -759,7 +765,6 @@ class ValueExpr(_message.Message): exported: Global___ExportedExpr | None = ..., connectedArray: Global___ConnectedExpr | None = ..., exportedArray: Global___ExportedExpr | None = ..., - exportedTap: Global___ExportedExpr | None = ..., assign: Global___AssignExpr | None = ..., exportedTunnel: Global___ExportedExpr | None = ..., assignTunnel: Global___AssignExpr | None = ..., @@ -785,8 +790,6 @@ class ValueExpr(_message.Message): b"exported", "exportedArray", b"exportedArray", - "exportedTap", - b"exportedTap", "exportedTunnel", b"exportedTunnel", "expr", @@ -833,8 +836,6 @@ class ValueExpr(_message.Message): b"exported", "exportedArray", b"exportedArray", - "exportedTap", - b"exportedTap", "exportedTunnel", b"exportedTunnel", "expr", @@ -878,7 +879,6 @@ class ValueExpr(_message.Message): "exported", "connectedArray", "exportedArray", - "exportedTap", "assign", "exportedTunnel", "assignTunnel", diff --git a/proto/edgir/expr.proto b/proto/edgir/expr.proto index 3058f2e85..649cb6d0a 100644 --- a/proto/edgir/expr.proto +++ b/proto/edgir/expr.proto @@ -361,6 +361,11 @@ message ConnectedExpr { message ExportedExpr { ValueExpr exterior_port = 1; ValueExpr internal_block_port = 2; + bool tap = 4; // if true, this is a tap, which allows the exterior port to have multiple internal connections + // (one non-tap connection, and optionally multiple tap connections) + // These additional rules apply to export taps: + // - parameters do not propagate, internal port should not have parameter values + // - the internal port's link resolves to the external port repeated ExportedExpr expanded = 3; // see comment in ConnectedExpr } @@ -393,12 +398,6 @@ message ValueExpr { ConnectedExpr connectedArray = 19; // array to array connect, where allocate means allocate a subarray ExportedExpr exportedArray = 20; // array to array export, where allocate means allocate a subarray - ExportedExpr exportedTap = 23; // single port to single port export, where the exterior can already be assigned - // - parameters do not propagate, internal port must not have parameter values - // - the internal port's link resolves to the external port - // - the exterior port may have multiple exportedTaps connected to it, along with - // a standard exported connection - AssignExpr assign = 17; // These Exprs support cross-hierarchy operations From 22df64e5ace8033f72d5151c483827b34f106938 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Wed, 13 May 2026 00:50:20 -0700 Subject: [PATCH 05/47] bump proto ver --- compiler/src/main/scala/edg/compiler/Compiler.scala | 2 +- edg/hdl_server/__main__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/src/main/scala/edg/compiler/Compiler.scala b/compiler/src/main/scala/edg/compiler/Compiler.scala index 59b2058a0..407248242 100644 --- a/compiler/src/main/scala/edg/compiler/Compiler.scala +++ b/compiler/src/main/scala/edg/compiler/Compiler.scala @@ -117,7 +117,7 @@ class AssignNamer() { } object Compiler { - final val kExpectedProtoVersion = 11 + final val kExpectedProtoVersion = 12 } /** Compiler for a particular design, with an associated library to elaborate references from. diff --git a/edg/hdl_server/__main__.py b/edg/hdl_server/__main__.py index 001f996a4..15a1d33ad 100644 --- a/edg/hdl_server/__main__.py +++ b/edg/hdl_server/__main__.py @@ -9,7 +9,7 @@ from ..core import * from ..core.Core import NonLibraryProperty -EDG_PROTO_VERSION = 11 +EDG_PROTO_VERSION = 12 class LibraryElementIndexer: From ebec9cde409875efda7c93ba17cf1399c6b9f4c4 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Thu, 14 May 2026 00:08:54 -0700 Subject: [PATCH 06/47] delete unused BCA --- .../main/scala/edg/compiler/Compiler.scala | 3 + .../scala/edg/compiler/ExprToString.scala | 6 +- .../edg/wir/BlockConnectivityAnalysis.scala | 213 ------------------ .../wir/BlockConnectivityAnalysisTest.scala | 212 ----------------- 4 files changed, 8 insertions(+), 426 deletions(-) delete mode 100644 compiler/src/main/scala/edg/wir/BlockConnectivityAnalysis.scala delete mode 100644 compiler/src/test/scala/edg/wir/BlockConnectivityAnalysisTest.scala diff --git a/compiler/src/main/scala/edg/compiler/Compiler.scala b/compiler/src/main/scala/edg/compiler/Compiler.scala index 407248242..4089e4483 100644 --- a/compiler/src/main/scala/edg/compiler/Compiler.scala +++ b/compiler/src/main/scala/edg/compiler/Compiler.scala @@ -498,12 +498,14 @@ class Compiler private ( case expr.ValueExpr.Expr.Exported(exported) => (exported.getExteriorPort, exported.getInternalBlockPort) match { case (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) => if (!isInLink) { + require(!exported.tap, "TODO support export tap") elaboratePending.addNode( ElaborateRecord.Connect(blockPath ++ extPort, blockPath ++ intPort, blockPath), Seq(ElaborateRecord.Port(blockPath ++ extPort)) ) constProp.setConnection(blockPath ++ extPort, blockPath ++ intPort) } else { // for links, the internal port is towards the inner link, so the args are flipped + require(!exported.tap, "tap not allowed in links") elaboratePending.addNode( ElaborateRecord.Connect(blockPath ++ intPort, blockPath ++ extPort, blockPath), Seq(ElaborateRecord.Port(blockPath ++ intPort)) @@ -514,6 +516,7 @@ class Compiler private ( case _ => false // anything with allocates is not processed } case expr.ValueExpr.Expr.ExportedTunnel(exported) => + require(!exported.tap, "tap not allowed in tunnel") (exported.getExteriorPort, exported.getInternalBlockPort) match { case (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) => require(!isInLink) diff --git a/compiler/src/main/scala/edg/compiler/ExprToString.scala b/compiler/src/main/scala/edg/compiler/ExprToString.scala index 44f08f4f5..204854b9f 100644 --- a/compiler/src/main/scala/edg/compiler/ExprToString.scala +++ b/compiler/src/main/scala/edg/compiler/ExprToString.scala @@ -191,7 +191,11 @@ class ExprToString() extends ValueExprMap[String] { expandedExteriorPort: String, expandedInterorPort: String ): String = { - s"exported($exteriorPort, $internalBlockPort)" + if (!exported.tap) { + s"exported($exteriorPort, $internalBlockPort)" + } else { + s"exported[tap]($exteriorPort, $internalBlockPort)" + } } override def mapExportedTunnel( diff --git a/compiler/src/main/scala/edg/wir/BlockConnectivityAnalysis.scala b/compiler/src/main/scala/edg/wir/BlockConnectivityAnalysis.scala deleted file mode 100644 index e6ba1a7fb..000000000 --- a/compiler/src/main/scala/edg/wir/BlockConnectivityAnalysis.scala +++ /dev/null @@ -1,213 +0,0 @@ -package edg.wir - -import edg.wir.ProtoUtil._ -import edgir.elem.elem -import edgir.expr.expr -import edgir.ref.ref -import edgir.ref.ref.LocalPath - -/** A connection to a link, from the point of view of (and relative to) some block - */ -sealed trait Connection { - def getPorts: Seq[ref.LocalPath] -} -case object Connection { - case class Disconnected() extends Connection { - override def getPorts: Seq[ref.LocalPath] = Seq() - } - - case class Link( - linkName: String, - linkConnects: Seq[(ref.LocalPath, String)], // including bridge link-facing ports, as (port ref, constr name) - bridgedExports: Seq[(ref.LocalPath, String, String)] // (exterior port ref, bridge block name, constr name) - ) extends Connection { - override def getPorts: Seq[ref.LocalPath] = linkConnects.map(_._1) ++ bridgedExports.map(_._1) - } - case class Export( - constraintName: String, - exteriorPort: ref.LocalPath, - innerBlockPort: ref.LocalPath - ) extends Connection { - override def getPorts: Seq[LocalPath] = Seq(exteriorPort, innerBlockPort) - } -} - -object BlockConnectivityAnalysis { - def typeOfPortLike(portLike: elem.PortLike): ref.LibraryPath = portLike.is match { - case elem.PortLike.Is.LibElem(lib) => lib - case elem.PortLike.Is.Port(port) => port.getSelfClass - case elem.PortLike.Is.Array(port) => port.getSelfClass - case other => throw new IllegalArgumentException(s"Unexpected PortLike ${other.getClass}") - } -} - -/** Class that "wraps" a block to provide connectivity analysis for constraints and links inside the block. - */ -class BlockConnectivityAnalysis(block: elem.HierarchyBlock) { - lazy val allExports: Seq[(ref.LocalPath, ref.LocalPath, String)] = { // external ref, internal ref, constr name - block.constraints.asPairs.map { case (name, constr) => - (name, constr.expr) - }.collect { // filter for exported only, into (inner block port path, exterior port path) pairs - case (name, expr.ValueExpr.Expr.Exported(exported)) => - (exported.getExteriorPort.getRef, exported.getInternalBlockPort.getRef, name) - }.toSeq - } - - lazy val allConnects: Seq[(ref.LocalPath, ref.LocalPath, String)] = { // block ref, link ref, constr name - block.constraints.asPairs.map { case (name, constr) => - (name, constr.expr) - }.collect { // filter for exported only, into (inner block port path, exterior port path) pairs - case (name, expr.ValueExpr.Expr.Connected(connected)) => - (connected.getBlockPort.getRef, connected.getLinkPort.getRef, name) - }.toSeq - } - - // All exports, structured as exterior port ref -> (interior port ref, constr name) - lazy val exportsByOuter: Map[ref.LocalPath, (ref.LocalPath, String)] = { - allExports.groupBy(_._1) - .view.mapValues { - case Seq((exteriorRef, interiorRef, constrName)) => (interiorRef, constrName) - case other => throw new IllegalArgumentException(s"unexpected grouped exports $other") - }.toMap - } - - // All exports, structured as inner port ref -> (exterior port ref, constr name) - lazy val exportsByInner: Map[ref.LocalPath, (ref.LocalPath, String)] = { - allExports.groupBy(_._2) - .view.mapValues { - case Seq((exteriorRef, interiorRef, constrName)) => (exteriorRef, constrName) - case other => throw new IllegalArgumentException(s"unexpected grouped exports $other") - }.toMap - } - - // All exports, structured as inner block port ref -> (link port ref, constr name) - lazy val connectsByBlock: Map[ref.LocalPath, (ref.LocalPath, String)] = { - allConnects.groupBy(_._1) - .view.mapValues { - case Seq((innerRef, linkRef, constrName)) => (linkRef, constrName) - case other => throw new IllegalArgumentException(s"unexpected grouped connects $other") - }.toMap - } - - // Returns all internal connected ports - def getAllConnectedInternalPorts: Seq[ref.LocalPath] = allConnects.map(_._1) ++ allExports.map(_._2) - // Returns all external (boundary) connected ports - def getAllConnectedExternalPorts: Seq[ref.LocalPath] = allExports.map(_._1) - - private def blockIsBridge(block: elem.HierarchyBlock): Boolean = { - // TODO superclass check once the infrastructure is there - block.ports.asPairs.map(_._1).toSet == Set( - LibraryConnectivityAnalysis.portBridgeOuterPort, - LibraryConnectivityAnalysis.portBridgeLinkPort - ) - } - - /** If innerPortRef cconnects to a bridge block, returns the exterior port ref, bridge name, and export constraint - */ - private def bridgedToOuterOption(innerPortRef: ref.LocalPath): Option[(ref.LocalPath, String, String)] = { - val bridgeName = innerPortRef.steps.head.getName // name for the block in question, which MAY be a bridge - block.blocks.get(bridgeName).map { blockLike => // filter by block exists - blockLike.getHierarchy - }.collect { - case block if blockIsBridge(block) => // filter by is-bridge, transform to path, exported - val bridgeOuterRef = ref.LocalPath().update(_.steps := Seq( - ref.LocalStep().update(_.name := bridgeName), - ref.LocalStep().update(_.name := LibraryConnectivityAnalysis.portBridgeOuterPort) - )) - exportsByInner.get(bridgeOuterRef) - }.flatten - .collect { case (exportedRef, exportConstrName) => - (exportedRef, bridgeName, exportConstrName) - } - } - - private def bridgedToInnerOption(outerPortRef: ref.LocalPath): Option[ref.LocalPath] = { - val bridgeName = outerPortRef.steps.head.getName // name for the block in question, which MAY be a bridge - block.blocks.get(bridgeName).map { blockLike => // filter by block exists - blockLike.getHierarchy - }.collect { - case block if blockIsBridge(block) => // filter by is-bridge, transform to path, exported - ref.LocalPath().update(_.steps := Seq( - ref.LocalStep().update(_.name := bridgeName), - ref.LocalStep().update(_.name := LibraryConnectivityAnalysis.portBridgeLinkPort) - )) - } - } - - def getConnectedToLink(linkName: String): Connection.Link = { - val allBlockRefConstrs = allConnects.collect { // filter by link name, and map to (port ref, constr name) - case (blockPortRef, linkPortRef, constrName) - if linkPortRef.steps.nonEmpty && linkPortRef.steps.head.getName == linkName => - (blockPortRef, constrName) - } - - // Find all bridged exports - val allExportRefBlockConstrs = allBlockRefConstrs.flatMap { case (blockPortRef, constrName) => - bridgedToOuterOption(blockPortRef) - } - - Connection.Link( - linkName, - allBlockRefConstrs, - allExportRefBlockConstrs - ) - } - - /** Returns the Connection that portPath is part of, or None if it is not connected. - */ - def getConnected(portRef: ref.LocalPath): Connection = { - if (connectsByBlock.contains(portRef)) { - require(!exportsByInner.contains(portRef), s"overconnected port $portRef") - require(!exportsByOuter.contains(portRef), s"overconnected port $portRef") - val (linkPortRef, constrName) = connectsByBlock(portRef) - require(linkPortRef.steps.nonEmpty) - val linkName = linkPortRef.steps.head.getName - require( - block.links.asPairs.map(_._1).toSet.contains(linkName), - s"reference to nonexistent link $linkName connected to $portRef" - ) - - getConnectedToLink(linkName) - } else if (exportsByInner.contains(portRef)) { - require(!exportsByOuter.contains(portRef), s"overconnected port $portRef") - val (exteriorRef, constrName) = exportsByInner(portRef) - bridgedToInnerOption(portRef) match { - // TODO: possible edge case with bridge with disconnected inner that would ignore the export - case Some(bridgeInnerRef) => getConnected(bridgeInnerRef) - case None => Connection.Export(constrName, exteriorRef, portRef) - } - } else if (exportsByOuter.contains(portRef)) { - val (innerRef, constrName) = exportsByOuter(portRef) - getConnected(innerRef) // delegate to handle both export and bridged case - } else { - Connection.Disconnected() - } - } - - case class ConnectablePorts( - innerPortTypes: Set[(ref.LocalPath, ref.LibraryPath)], - exteriorPortTypes: Set[(ref.LocalPath, ref.LibraryPath)] - ) - - /** Returns all the connectable ports and types of this block, including inner block ports (and their types) and - * exterior ports (and their non-bridged type) - */ - def allConnectablePortTypes: ConnectablePorts = { - val innerPortTypes = block.blocks.asPairs.flatMap { case (blockName, blockLike) => - blockLike.getHierarchy.ports.asPairs.map { case (portName, portLike) => - val portRef = ref.LocalPath().update(_.steps := Seq( - ref.LocalStep().update(_.name := blockName), - ref.LocalStep().update(_.name := portName) - )) - (portRef, BlockConnectivityAnalysis.typeOfPortLike(portLike)) - } - }.toSet - val exteriorPortTypes = block.ports.asPairs.map { case (portName, portLike) => - val portRef = ref.LocalPath().update(_.steps := Seq( - ref.LocalStep().update(_.name := portName) - )) - (portRef, BlockConnectivityAnalysis.typeOfPortLike(portLike)) - }.toSet - ConnectablePorts(innerPortTypes, exteriorPortTypes) - } -} diff --git a/compiler/src/test/scala/edg/wir/BlockConnectivityAnalysisTest.scala b/compiler/src/test/scala/edg/wir/BlockConnectivityAnalysisTest.scala deleted file mode 100644 index b2936d70e..000000000 --- a/compiler/src/test/scala/edg/wir/BlockConnectivityAnalysisTest.scala +++ /dev/null @@ -1,212 +0,0 @@ -package edg.wir - -import org.scalatest._ -import org.scalatest.flatspec.AnyFlatSpec -import matchers.should.Matchers._ -import edg.ElemBuilder._ -import edg.ExprBuilder.Ref -import edg.compiler.Compiler -import edg.wir.ProtoUtil.BlockProtoToSeqMap -import edg.{CompilerTestUtil, wir} - -import scala.collection.SeqMap - -class BlockConnectivityAnalysisTest extends AnyFlatSpec with CompilerTestUtil { - private val library = Library( - ports = Seq( - Port.Port("sourcePort"), - Port.Port("sinkPort"), - ), - links = Seq( - Link.Link( - "link", - ports = SeqMap( - "source" -> Port.Library("sourcePort"), - "sinks" -> Port.Array("sinkPort") - ), - // practically invalid, missing connect constraints - ), - ), - blocks = Seq( - Block.Block( - "sourceBlock", - ports = SeqMap( - "port" -> Port.Library("sourcePort"), - ) - ), - Block.Block( - "sinkBlock", - ports = SeqMap( - "port" -> Port.Library("sinkPort"), - ) - ), - Block.Block( - "sourceFromExtSinkBridge", - superclasses = Seq(LibraryConnectivityAnalysis.portBridge.getTarget.getName), - ports = SeqMap( - LibraryConnectivityAnalysis.portBridgeLinkPort -> Port.Library("sourcePort"), - LibraryConnectivityAnalysis.portBridgeOuterPort -> Port.Library("sinkPort"), - ) - ), - Block.Block( - "sinkFromExtSourceBridge", - superclasses = Seq(LibraryConnectivityAnalysis.portBridge.getTarget.getName), - ports = SeqMap( - LibraryConnectivityAnalysis.portBridgeLinkPort -> Port.Library("sinkPort"), - LibraryConnectivityAnalysis.portBridgeOuterPort -> Port.Library("sourcePort"), - ) - ), - Block.Block( - "exportSinkBlock", - ports = SeqMap( - "port" -> Port.Library("sinkPort"), - ), - blocks = SeqMap( - "inner" -> Block.Library("sinkBlock") - ), - constraints = SeqMap( - "export" -> Constraint.Exported(Ref("port"), Ref("inner", "port")) - ) - ), - Block.Block( - "bridgedSinkBlock", - ports = SeqMap( - "port" -> Port.Library("sinkPort"), - ), - blocks = SeqMap( - "bridge" -> Block.Library("sourceFromExtSinkBridge"), - "sink1Block" -> Block.Library("sinkBlock"), - "sink2Block" -> Block.Library("sinkBlock"), - ), - links = SeqMap( - "link" -> Link.Library("link") - ), - constraints = SeqMap( - "export" -> Constraint.Exported(Ref("port"), Ref("bridge", LibraryConnectivityAnalysis.portBridgeOuterPort)), - "sourceConnect" -> Constraint.Connected( - Ref("bridge", LibraryConnectivityAnalysis.portBridgeLinkPort), - Ref("link", "source") - ), - "sink1Connect" -> Constraint.Connected(Ref("sink1Block", "port"), Ref.Allocate(Ref("link", "sinks"))), - "sink2Connect" -> Constraint.Connected(Ref("sink2Block", "port"), Ref.Allocate(Ref("link", "sinks"))), - ) - ) - ), - ) - - it should "get connected for direct exports" in { - val inputDesign = Design(Block.Block( - "topDesign", - blocks = SeqMap( - "dut" -> Block.Library("exportSinkBlock") - ) - )) - val (compiler, compiled) = testCompile(inputDesign, library) - val analysis = new BlockConnectivityAnalysis(compiled.getContents.blocks("dut").getHierarchy) - - analysis.getConnected(Ref("port")) should equal( - Connection.Export("export", Ref("port"), Ref("inner", "port")) - ) - - analysis.getAllConnectedInternalPorts should equal( - Seq(Ref("inner", "port")) - ) - analysis.getAllConnectedExternalPorts should equal( - Seq(Ref("port")) - ) - } - - it should "get connected for links only" in { - val inputDesign = Design(Block.Block( - "topDesign", - blocks = SeqMap( - "sourceBlock" -> Block.Library("sourceBlock"), - "sink1Block" -> Block.Library("sinkBlock"), - "sink2Block" -> Block.Library("sinkBlock"), - ), - links = SeqMap( - "link" -> Link.Library("link") - ), - constraints = SeqMap( - "sourceConnect" -> Constraint.Connected(Ref("sourceBlock", "port"), Ref("link", "source")), - "sink1Connect" -> Constraint.Connected(Ref("sink1Block", "port"), Ref.Allocate(Ref("link", "sinks"))), - "sink2Connect" -> Constraint.Connected(Ref("sink2Block", "port"), Ref.Allocate(Ref("link", "sinks"))), - ) - )) - val (compiler, compiled) = testCompile(inputDesign, library) - val analysis = new BlockConnectivityAnalysis(compiled.getContents) - - val expectedConnects = Connection.Link( - "link", - Seq( - (Ref("sourceBlock", "port"), "sourceConnect"), - (Ref("sink1Block", "port"), "sink1Connect"), - (Ref("sink2Block", "port"), "sink2Connect"), - ), - Seq() - ) - - analysis.getConnected(Ref("sourceBlock", "port")) should equal(expectedConnects) - analysis.getConnected(Ref("sink1Block", "port")) should equal(expectedConnects) - analysis.getConnected(Ref("sink2Block", "port")) should equal(expectedConnects) - - analysis.getAllConnectedInternalPorts should equal( - Seq(Ref("sourceBlock", "port"), Ref("sink1Block", "port"), Ref("sink2Block", "port")) - ) - } - - it should "get connected for mixed link and exports" in { - val inputDesign = Design(Block.Block( - "topDesign", - blocks = SeqMap( - "dut" -> Block.Library("bridgedSinkBlock") - ) - )) - val (compiler, compiled) = testCompile(inputDesign, library) - val analysis = new BlockConnectivityAnalysis(compiled.getContents.blocks("dut").getHierarchy) - - val expectedConnects = Connection.Link( - "link", - Seq( - (Ref("bridge", LibraryConnectivityAnalysis.portBridgeLinkPort), "sourceConnect"), - (Ref("sink1Block", "port"), "sink1Connect"), - (Ref("sink2Block", "port"), "sink2Connect"), - ), - Seq( - (Ref("port"), "bridge", "export") - ) - ) - - analysis.getConnected(Ref("sink1Block", "port")) should equal(expectedConnects) - analysis.getConnected(Ref("sink2Block", "port")) should equal(expectedConnects) - analysis.getConnected(Ref("port")) should equal(expectedConnects) - analysis.getConnected(Ref("bridge", LibraryConnectivityAnalysis.portBridgeLinkPort)) should equal(expectedConnects) - analysis.getConnected(Ref("bridge", LibraryConnectivityAnalysis.portBridgeOuterPort)) should equal(expectedConnects) - - analysis.getAllConnectedInternalPorts.toSet should equal( - Set( - Ref("bridge", LibraryConnectivityAnalysis.portBridgeLinkPort), - Ref("bridge", LibraryConnectivityAnalysis.portBridgeOuterPort), - Ref("sink1Block", "port"), - Ref("sink2Block", "port") - ) - ) - analysis.getAllConnectedExternalPorts should equal( - Seq(Ref("port")) - ) - - analysis.allConnectablePortTypes should equal( - analysis.ConnectablePorts( - innerPortTypes = Set( - (Ref("sink1Block", "port"), LibraryPath("sinkPort")), - (Ref("sink2Block", "port"), LibraryPath("sinkPort")), - (Ref("bridge", LibraryConnectivityAnalysis.portBridgeLinkPort), LibraryPath("sourcePort")), - (Ref("bridge", LibraryConnectivityAnalysis.portBridgeOuterPort), LibraryPath("sinkPort")), - ), - exteriorPortTypes = Set( - (Ref("port"), LibraryPath("sinkPort")), - ) - ) - ) - } -} From cbf412a14cb7cc9c2b7bb0dc9ae070104d898bdf Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Thu, 14 May 2026 23:48:07 -0700 Subject: [PATCH 07/47] tap test skeleton --- compiler/src/main/scala/edg/ElemBuilder.scala | 6 +- .../scala/edg/compiler/ExportTapTest.scala | 94 +++++++++++++++++++ ...xportTest.scala => ExportTunnelTest.scala} | 2 +- 3 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 compiler/src/test/scala/edg/compiler/ExportTapTest.scala rename compiler/src/test/scala/edg/compiler/{TunnelExportTest.scala => ExportTunnelTest.scala} (99%) diff --git a/compiler/src/main/scala/edg/ElemBuilder.scala b/compiler/src/main/scala/edg/ElemBuilder.scala index e21780f8a..d70eeaf55 100644 --- a/compiler/src/main/scala/edg/ElemBuilder.scala +++ b/compiler/src/main/scala/edg/ElemBuilder.scala @@ -44,12 +44,14 @@ object ElemBuilder { def Exported( external: ref.LocalPath, internal: ref.LocalPath, - expanded: Seq[expr.ValueExpr] = Seq() + expanded: Seq[expr.ValueExpr] = Seq(), + tap: Boolean = false ): expr.ValueExpr = expr.ValueExpr( expr = expr.ValueExpr.Expr.Exported(expr.ExportedExpr( exteriorPort = Some(ValueExpr.Ref(external)), internalBlockPort = Some(ValueExpr.Ref(internal)), - expanded = expanded.map(_.getExported) + expanded = expanded.map(_.getExported), + tap = tap )) ) def ExportedArray( diff --git a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala new file mode 100644 index 000000000..5d06eab0f --- /dev/null +++ b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala @@ -0,0 +1,94 @@ +package edg.compiler + +import edg.CompilerTestUtil +import edg.ElemBuilder._ +import edg.ExprBuilder.{Ref, ValInit, ValueExpr} +import edg.wir.ProtoUtil.ConstraintProtoToSeqMap +import edg.wir.{IndirectDesignPath, IndirectStep} +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers._ + +import scala.collection.SeqMap + +/** Tests export taps. + */ +class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { + import edgir.expr.expr.UnarySetExpr.Op + val library = Library( + ports = Seq( + Port.Port( + "port", + params = SeqMap( + "floatVal" -> ValInit.Floating, + ) + ), + ), + blocks = Seq( + Block.Block( + "leafBlock", + params = SeqMap( + ), + ports = SeqMap( + "port" -> Port.Library("port"), + ), + constraints = SeqMap( + "constFloatVal" -> ValueExpr.Assign(Ref("port", "floatVal"), ValueExpr.Literal(1.0)), + ) + ), + Block.Block( + "exportTapBlock", + params = SeqMap( + "floatVal" -> ValInit.Floating, + ), + ports = SeqMap( + "port" -> Port.Library("port"), + ), + blocks = SeqMap( + "inner" -> Block.Library("leafBlock") + ), + constraints = SeqMap( + "export" -> Constraint.Exported(Ref("port"), Ref("inner", "port")), + ) + ), + ), + links = Seq( + Link.Link( + "link", + ports = SeqMap( + "ports" -> Port.Array("port"), + ), + params = SeqMap( + "floatSum" -> ValInit.Floating, + ), + constraints = SeqMap( + "calcFloatSum" -> ValueExpr.Assign( + Ref("floatSum"), + ValueExpr.UnarySetOp(Op.SUM, ValueExpr.MapExtract(Ref("ports"), Ref("floatVal")), ValueExpr.Literal(0.0)) + ), + ) + ), + ) + ) + + "Compiler on design with exports" should "propagate and evaluate values" in { + val inputDesign = Design(Block.Block( + "topDesign", + blocks = SeqMap( + "leaf" -> Block.Library("leafBlock"), + "tap" -> Block.Library("exportTapBlock"), + ), + links = SeqMap( + "link" -> Link.Library("link") + ), + constraints = SeqMap( + "leafConnect" -> Constraint.Connected(Ref("leaf", "port"), Ref.Allocate(Ref("link", "ports"))), + "tapConnect" -> Constraint.Connected(Ref("tap", "port"), Ref.Allocate(Ref("link", "ports"))), + ) + )) + val (compiler, compiled) = testCompile(inputDesign, library) + + compiler.getValue(IndirectDesignPath() + "link" + "floatSum") should equal( + Some(FloatValue(2.0)) + ) + } +} diff --git a/compiler/src/test/scala/edg/compiler/TunnelExportTest.scala b/compiler/src/test/scala/edg/compiler/ExportTunnelTest.scala similarity index 99% rename from compiler/src/test/scala/edg/compiler/TunnelExportTest.scala rename to compiler/src/test/scala/edg/compiler/ExportTunnelTest.scala index d72d47712..f989ec0ce 100644 --- a/compiler/src/test/scala/edg/compiler/TunnelExportTest.scala +++ b/compiler/src/test/scala/edg/compiler/ExportTunnelTest.scala @@ -14,7 +14,7 @@ import scala.collection.SeqMap /** Tests tunnel exports. */ -class TunnelExportTest extends AnyFlatSpec with CompilerTestUtil { +class ExportTunnelTest extends AnyFlatSpec with CompilerTestUtil { import edgir.expr.expr.UnarySetExpr.Op val library = Library( ports = Seq( From 35eeac5be6bc0930e7b2e4ab7a94e416d4c11fec Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 15 May 2026 00:11:45 -0700 Subject: [PATCH 08/47] export tap tests --- .../main/scala/edg/compiler/Compiler.scala | 24 +++++---- .../scala/edg/compiler/ExportTapTest.scala | 50 ++++++++++++++++++- 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/compiler/src/main/scala/edg/compiler/Compiler.scala b/compiler/src/main/scala/edg/compiler/Compiler.scala index 4089e4483..8da1b64d6 100644 --- a/compiler/src/main/scala/edg/compiler/Compiler.scala +++ b/compiler/src/main/scala/edg/compiler/Compiler.scala @@ -37,7 +37,7 @@ object ElaborateRecord { // Connection to be elaborated, to set port parameter, IS_CONNECTED, and CONNECTED_LINK equivalences. // Only elaborates the direct connect, and for bundles, creates sub-Connect tasks since it needs // connectedLink and linkParams. - case class Connect(toLinkPortPath: DesignPath, toBlockPortPath: DesignPath, root: DesignPath) + case class Connect(toLinkPortPath: DesignPath, toBlockPortPath: DesignPath, root: DesignPath, tap: Boolean = false) extends ElaborateTask // Elaborates the contents of a port array, based on the port array's ELEMENTS parameter. @@ -278,13 +278,15 @@ class Compiler private ( // All connected ports should have params val toLinkPort = resolvePort(connect.toLinkPortPath).asInstanceOf[wir.HasParams] val connectedParam = toLinkPort.getParams.keys.map(IndirectStep.Element(_)) - for (connectedStep <- connectedParam) { // note: can't happen for top level connect! - constProp.addAssignEqual( - connect.toLinkPortPath.asIndirect + connectedStep, - connect.toBlockPortPath.asIndirect + connectedStep, - connect.root, - "connect" - ) + if (!connect.tap) { + for (connectedStep <- connectedParam) { // note: can't happen for top level connect! + constProp.addAssignEqual( + connect.toLinkPortPath.asIndirect + connectedStep, + connect.toBlockPortPath.asIndirect + connectedStep, + connect.root, + "connect" + ) + } } // Add sub-ports to the elaboration dependency graph, as appropriate @@ -295,7 +297,8 @@ class Compiler private ( ElaborateRecord.Connect( connect.toLinkPortPath + portName, connect.toBlockPortPath + portName, - connect.root + connect.root, + connect.tap ), Seq() ) @@ -498,9 +501,8 @@ class Compiler private ( case expr.ValueExpr.Expr.Exported(exported) => (exported.getExteriorPort, exported.getInternalBlockPort) match { case (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) => if (!isInLink) { - require(!exported.tap, "TODO support export tap") elaboratePending.addNode( - ElaborateRecord.Connect(blockPath ++ extPort, blockPath ++ intPort, blockPath), + ElaborateRecord.Connect(blockPath ++ extPort, blockPath ++ intPort, blockPath, tap = exported.tap), Seq(ElaborateRecord.Port(blockPath ++ extPort)) ) constProp.setConnection(blockPath ++ extPort, blockPath ++ intPort) diff --git a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala index 5d06eab0f..21c7ada80 100644 --- a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala +++ b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala @@ -5,6 +5,7 @@ import edg.ElemBuilder._ import edg.ExprBuilder.{Ref, ValInit, ValueExpr} import edg.wir.ProtoUtil.ConstraintProtoToSeqMap import edg.wir.{IndirectDesignPath, IndirectStep} +import org.scalatest.exceptions.TestFailedException import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers._ @@ -35,6 +36,16 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { "constFloatVal" -> ValueExpr.Assign(Ref("port", "floatVal"), ValueExpr.Literal(1.0)), ) ), + Block.Block( + "emptyLeafBlock", + params = SeqMap( + ), + ports = SeqMap( + "port" -> Port.Library("port"), + ), + constraints = SeqMap( + ) + ), Block.Block( "exportTapBlock", params = SeqMap( @@ -44,10 +55,29 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { "port" -> Port.Library("port"), ), blocks = SeqMap( - "inner" -> Block.Library("leafBlock") + "inner" -> Block.Library("leafBlock"), + "innerTap" -> Block.Library("emptyLeafBlock") ), constraints = SeqMap( "export" -> Constraint.Exported(Ref("port"), Ref("inner", "port")), + "tap" -> Constraint.Exported(Ref("port"), Ref("innerTap", "port"), tap = true), + ) + ), + Block.Block( + "badExportTapBlock", + params = SeqMap( + "floatVal" -> ValInit.Floating, + ), + ports = SeqMap( + "port" -> Port.Library("port"), + ), + blocks = SeqMap( + "inner" -> Block.Library("leafBlock"), + "innerTap" -> Block.Library("leafBlock") // also defines parameters + ), + constraints = SeqMap( + "export" -> Constraint.Exported(Ref("port"), Ref("inner", "port")), + "tap" -> Constraint.Exported(Ref("port"), Ref("innerTap", "port"), tap = true), ) ), ), @@ -70,7 +100,7 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { ) ) - "Compiler on design with exports" should "propagate and evaluate values" in { + "Compiler on design with tap exports" should "propagate and evaluate values" in { val inputDesign = Design(Block.Block( "topDesign", blocks = SeqMap( @@ -91,4 +121,20 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { Some(FloatValue(2.0)) ) } + + "Compiler on design with bad tap exports" should "error" in { + val inputDesign = Design(Block.Block( + "topDesign", + blocks = SeqMap( + "tap" -> Block.Library("badExportTapBlock"), + ), + links = SeqMap( + "link" -> Link.Library("link") + ), + constraints = SeqMap( + "tapConnect" -> Constraint.Connected(Ref("tap", "port"), Ref.Allocate(Ref("link", "ports"))), + ) + )) + an[TestFailedException] should be thrownBy testCompile(inputDesign, library) // test the test helper code + } } From 1c7a95bee51278c740297592b5b8ad654ea61445 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 15 May 2026 00:19:28 -0700 Subject: [PATCH 09/47] add requiredEmpty --- compiler/src/main/scala/edg/compiler/Compiler.scala | 6 ++++-- compiler/src/main/scala/edg/compiler/ConstProp.scala | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/compiler/src/main/scala/edg/compiler/Compiler.scala b/compiler/src/main/scala/edg/compiler/Compiler.scala index 8da1b64d6..dd63fb2ac 100644 --- a/compiler/src/main/scala/edg/compiler/Compiler.scala +++ b/compiler/src/main/scala/edg/compiler/Compiler.scala @@ -278,14 +278,16 @@ class Compiler private ( // All connected ports should have params val toLinkPort = resolvePort(connect.toLinkPortPath).asInstanceOf[wir.HasParams] val connectedParam = toLinkPort.getParams.keys.map(IndirectStep.Element(_)) - if (!connect.tap) { - for (connectedStep <- connectedParam) { // note: can't happen for top level connect! + for (connectedStep <- connectedParam) { // note: can't happen for top level connect! + if (!connect.tap) { constProp.addAssignEqual( connect.toLinkPortPath.asIndirect + connectedStep, connect.toBlockPortPath.asIndirect + connectedStep, connect.root, "connect" ) + } else { + constProp.addRequiredEmpty(connect.toBlockPortPath.asIndirect + connectedStep) } } diff --git a/compiler/src/main/scala/edg/compiler/ConstProp.scala b/compiler/src/main/scala/edg/compiler/ConstProp.scala index bf5334070..b485965a2 100644 --- a/compiler/src/main/scala/edg/compiler/ConstProp.scala +++ b/compiler/src/main/scala/edg/compiler/ConstProp.scala @@ -53,6 +53,8 @@ class ConstProp() { // This tracks overassign errors and their sources, which otherwise breaks the immutability of the dependency graph private val overassigns = mutable.HashMap[IndirectDesignPath, mutable.HashSet[IndirectDesignPath]]() + // This tracks which parameters must be empty (undefined) + private val requiredEmpty = mutable.HashSet[IndirectDesignPath]() private val connectedLink = DependencyGraph[ConnectedLinkRecord, ConnectedLinkPort]() // tracks the port -> link paths @@ -259,6 +261,11 @@ class ConstProp() { ) } + /** Adds a requirement that some param is undefined */ + def addRequiredEmpty(target: IndirectDesignPath): Unit = { + requiredEmpty.add(target) + } + /** Returns the value of a parameter, or None if it does not have a value (yet?). Can be used to check if parameters * are resolved yet by testing against None. Overassigns return their first value for consistency. */ @@ -309,6 +316,8 @@ class ConstProp() { ExprError(target, msg) } ++ getOverassignValues.map { case (target, error) => ExprError(target, error.msg.get) + } ++ requiredEmpty.collect { + case target if params.getValue(target).isDefined => ExprError(target, "must be undefined") }).toSeq } } From c8d42149d755aa2e23d89e695d3dbb5b215ded63 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 15 May 2026 00:51:16 -0700 Subject: [PATCH 10/47] wip array case --- compiler/src/main/scala/edg/ElemBuilder.scala | 6 +- .../scala/edg/compiler/ExportTapTest.scala | 79 ++++++++++++++++--- 2 files changed, 71 insertions(+), 14 deletions(-) diff --git a/compiler/src/main/scala/edg/ElemBuilder.scala b/compiler/src/main/scala/edg/ElemBuilder.scala index d70eeaf55..ceb9e7c8f 100644 --- a/compiler/src/main/scala/edg/ElemBuilder.scala +++ b/compiler/src/main/scala/edg/ElemBuilder.scala @@ -57,12 +57,14 @@ object ElemBuilder { def ExportedArray( external: ref.LocalPath, internal: ref.LocalPath, - expanded: Seq[expr.ValueExpr] = Seq() + expanded: Seq[expr.ValueExpr] = Seq(), + tap: Boolean = false ): expr.ValueExpr = expr.ValueExpr( expr = expr.ValueExpr.Expr.ExportedArray(expr.ExportedExpr( exteriorPort = Some(ValueExpr.Ref(external)), internalBlockPort = Some(ValueExpr.Ref(internal)), - expanded = expanded.map(_.getExported) + expanded = expanded.map(_.getExported), + tap = tap )) ) // variation for map_extract diff --git a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala index 21c7ada80..129b4d378 100644 --- a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala +++ b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala @@ -27,8 +27,6 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { blocks = Seq( Block.Block( "leafBlock", - params = SeqMap( - ), ports = SeqMap( "port" -> Port.Library("port"), ), @@ -38,19 +36,12 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { ), Block.Block( "emptyLeafBlock", - params = SeqMap( - ), ports = SeqMap( "port" -> Port.Library("port"), ), - constraints = SeqMap( - ) ), Block.Block( "exportTapBlock", - params = SeqMap( - "floatVal" -> ValInit.Floating, - ), ports = SeqMap( "port" -> Port.Library("port"), ), @@ -65,9 +56,6 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { ), Block.Block( "badExportTapBlock", - params = SeqMap( - "floatVal" -> ValInit.Floating, - ), ports = SeqMap( "port" -> Port.Library("port"), ), @@ -80,6 +68,37 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { "tap" -> Constraint.Exported(Ref("port"), Ref("innerTap", "port"), tap = true), ) ), + // array test support + Block.Block( + "leafArrayBlock", + ports = SeqMap( + "port" -> Port.Array("port", Seq("0", "1"), Port.Library("port")), + ), + constraints = SeqMap( + "constFloatVal0" -> ValueExpr.Assign(Ref("port", "0", "floatVal"), ValueExpr.Literal(1.0)), + "constFloatVal1" -> ValueExpr.Assign(Ref("port", "1", "floatVal"), ValueExpr.Literal(2.0)), + ) + ), + Block.Block( + "emptyLeafArrayBlock", + ports = SeqMap( + "port" -> Port.Array("port"), // does not contribute concrete values + ), + ), + Block.Block( + "exportArrayTapBlock", + ports = SeqMap( + "port" -> Port.Array("port"), + ), + blocks = SeqMap( + "inner" -> Block.Library("leafArrayBlock"), + "innerTap" -> Block.Library("emptyLeafArrayBlock") + ), + constraints = SeqMap( + "export" -> Constraint.ExportedArray(Ref("port"), Ref("inner", "port")), + "tap" -> Constraint.ExportedArray(Ref("port"), Ref("innerTap", "port"), tap = true), + ) + ), ), links = Seq( Link.Link( @@ -120,6 +139,11 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { compiler.getValue(IndirectDesignPath() + "link" + "floatSum") should equal( Some(FloatValue(2.0)) ) + compiler.getValue( + IndirectDesignPath() + "tap" + "innerTap" + "port" + IndirectStep.ConnectedLink + "floatSum" + ) should equal( + Some(FloatValue(2.0)) + ) } "Compiler on design with bad tap exports" should "error" in { @@ -137,4 +161,35 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { )) an[TestFailedException] should be thrownBy testCompile(inputDesign, library) // test the test helper code } + + "Compiler on design with tap export array" should "propagate allocated values" in { + val inputDesign = Design(Block.Block( + "topDesign", + blocks = SeqMap( + "tap" -> Block.Library("exportArrayTapBlock"), + ), + links = SeqMap( + "link" -> Link.Library("link") + ), + constraints = SeqMap( + "tapConnect0" -> Constraint.Connected( + Ref.Allocate(Ref("tap", "port"), Some("0")), + Ref.Allocate(Ref("link", "ports")) + ), + "tapConnect1" -> Constraint.Connected( + Ref.Allocate(Ref("tap", "port"), Some("1")), + Ref.Allocate(Ref("link", "ports")) + ), + ) + )) + val (compiler, compiled) = testCompile(inputDesign, library) + + compiler.getValue(IndirectDesignPath() + "tap" + "tap" + "port" + IndirectStep.Allocated) should equal( + Some(ArrayValue(Seq(TextValue("0"), TextValue("1")))) + ) + compiler.getValue(IndirectDesignPath() + "link" + "floatSum") should equal( + Some(FloatValue(3.0)) + ) + } + } From 112bb339f618cbe3c76725b8d92eff676066d104 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 15 May 2026 23:10:22 -0700 Subject: [PATCH 11/47] fix exported tap case --- .../src/main/scala/edg/compiler/Compiler.scala | 17 +++++++++++------ .../test/scala/edg/compiler/ExportTapTest.scala | 7 +++---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/compiler/src/main/scala/edg/compiler/Compiler.scala b/compiler/src/main/scala/edg/compiler/Compiler.scala index dd63fb2ac..347778bd8 100644 --- a/compiler/src/main/scala/edg/compiler/Compiler.scala +++ b/compiler/src/main/scala/edg/compiler/Compiler.scala @@ -852,12 +852,17 @@ class Compiler private ( case expr.ValueExpr.Expr.ExportedArray(exported) => // note internal port is portPostfix val ValueExpr.Ref(extPostfix) = exported.getExteriorPort - constProp.addAssignEqual( - path.asIndirect ++ extPostfix + IndirectStep.Elements, - path.asIndirect ++ portPostfix + IndirectStep.Elements, - path, - constrName - ) + if (!exported.tap) { + // elements propagates outwards in non-tap case, elements do not propagate in tap case + constProp.addAssignEqual( + path.asIndirect ++ extPostfix + IndirectStep.Elements, + path.asIndirect ++ portPostfix + IndirectStep.Elements, + path, + constrName + ) + } else { + // TODO: assert elements equal in tap case + } constProp.addAssignEqual( path.asIndirect ++ portPostfix + IndirectStep.Allocated, path.asIndirect ++ extPostfix + IndirectStep.Allocated, diff --git a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala index 129b4d378..6d8f33502 100644 --- a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala +++ b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala @@ -81,9 +81,8 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { ), Block.Block( "emptyLeafArrayBlock", - ports = SeqMap( - "port" -> Port.Array("port"), // does not contribute concrete values - ), + ports = SeqMap( // port definition must be synchronized with the outer block + "port" -> Port.Array("port", Seq("0", "1"), Port.Library("port"))), ), Block.Block( "exportArrayTapBlock", @@ -184,7 +183,7 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { )) val (compiler, compiled) = testCompile(inputDesign, library) - compiler.getValue(IndirectDesignPath() + "tap" + "tap" + "port" + IndirectStep.Allocated) should equal( + compiler.getValue(IndirectDesignPath() + "tap" + "innerTap" + "port" + IndirectStep.Allocated) should equal( Some(ArrayValue(Seq(TextValue("0"), TextValue("1")))) ) compiler.getValue(IndirectDesignPath() + "link" + "floatSum") should equal( From f2a827d180f5a861911a0f36273cb0ed59222831 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 15 May 2026 23:12:22 -0700 Subject: [PATCH 12/47] Update ExportTapTest.scala --- compiler/src/test/scala/edg/compiler/ExportTapTest.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala index 6d8f33502..519353cc6 100644 --- a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala +++ b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala @@ -190,5 +190,4 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { Some(FloatValue(3.0)) ) } - } From e63de6e24bb7a64e5c8767ed79bebd8811fa8c0e Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 15 May 2026 23:14:28 -0700 Subject: [PATCH 13/47] Update ExportTapTest.scala --- compiler/src/test/scala/edg/compiler/ExportTapTest.scala | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala index 519353cc6..3ba63d379 100644 --- a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala +++ b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala @@ -189,5 +189,10 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { compiler.getValue(IndirectDesignPath() + "link" + "floatSum") should equal( Some(FloatValue(3.0)) ) + compiler.getValue( + IndirectDesignPath() + "tap" + "innerTap" + "port" + "0" + IndirectStep.ConnectedLink + "floatSum" + ) should equal( + Some(FloatValue(3.0)) + ) } } From b71904b0286e29020510e00e09abf35ec5f17281 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 15 May 2026 23:16:42 -0700 Subject: [PATCH 14/47] add error test case --- .../scala/edg/compiler/ExportTapTest.scala | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala index 3ba63d379..94061fdf4 100644 --- a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala +++ b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala @@ -98,6 +98,25 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { "tap" -> Constraint.ExportedArray(Ref("port"), Ref("innerTap", "port"), tap = true), ) ), + Block.Block( + "emptyLeafArrayBlockBad", + ports = SeqMap( // contains mismatched port elements + "port" -> Port.Array("port", Seq("0"), Port.Library("port"))), + ), + Block.Block( + "exportArrayTapBlockBad", + ports = SeqMap( + "port" -> Port.Array("port"), + ), + blocks = SeqMap( + "inner" -> Block.Library("leafArrayBlock"), + "innerTap" -> Block.Library("emptyLeafArrayBlockBad") + ), + constraints = SeqMap( + "export" -> Constraint.ExportedArray(Ref("port"), Ref("inner", "port")), + "tap" -> Constraint.ExportedArray(Ref("port"), Ref("innerTap", "port"), tap = true), + ) + ), ), links = Seq( Link.Link( @@ -158,7 +177,7 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { "tapConnect" -> Constraint.Connected(Ref("tap", "port"), Ref.Allocate(Ref("link", "ports"))), ) )) - an[TestFailedException] should be thrownBy testCompile(inputDesign, library) // test the test helper code + an[TestFailedException] should be thrownBy testCompile(inputDesign, library) } "Compiler on design with tap export array" should "propagate allocated values" in { @@ -195,4 +214,27 @@ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { Some(FloatValue(3.0)) ) } + + "Compiler on design with tap export array with inconsistent elements" should "error" in { + val inputDesign = Design(Block.Block( + "topDesign", + blocks = SeqMap( + "tap" -> Block.Library("exportArrayTapBlockBad"), + ), + links = SeqMap( + "link" -> Link.Library("link") + ), + constraints = SeqMap( + "tapConnect0" -> Constraint.Connected( + Ref.Allocate(Ref("tap", "port"), Some("0")), + Ref.Allocate(Ref("link", "ports")) + ), + "tapConnect1" -> Constraint.Connected( + Ref.Allocate(Ref("tap", "port"), Some("1")), + Ref.Allocate(Ref("link", "ports")) + ), + ) + )) + an[TestFailedException] should be thrownBy testCompile(inputDesign, library) + } } From d0de53eb86b9bac4bbe1bb881edd2ae7c586dac2 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 15 May 2026 23:34:40 -0700 Subject: [PATCH 15/47] add export tap checker --- .../scala/edg/compiler/ExportTapCheck.scala | 82 +++++++++++++++++++ .../src/test/scala/edg/CompilerTestUtil.scala | 3 +- 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 compiler/src/main/scala/edg/compiler/ExportTapCheck.scala diff --git a/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala b/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala new file mode 100644 index 000000000..c7bc924d5 --- /dev/null +++ b/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala @@ -0,0 +1,82 @@ +package edg.compiler + +import edg.ExprBuilder.ValueExpr +import edg.wir.{DesignPath, IndirectStep} +import edg.wir.ProtoUtil.ConstraintProtoToSeqMap +import edgir.elem.elem +import edgir.expr.expr +import edgir.ref.ref + +import scala.collection.SeqMap + +/** Checks export tap validity, that inner-side parameters are undefined and elements are consistent. + */ +class ExportTapCheck(compiler: Compiler) + extends DesignMap[Unit, Seq[CompilerError], Seq[CompilerError]] { + def mapConstraint( + containingPath: DesignPath, + constrName: String, + constr: expr.ValueExpr + ): Option[CompilerError] = { + constr.expr match { + case expr.ValueExpr.Expr.Exported(exported) if exported.tap => None + case expr.ValueExpr.Expr.ExportedArray(exported) if exported.tap => + (exported.getExteriorPort, exported.getInternalBlockPort) match { + case (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) => + if ( + compiler.getValue(containingPath.asIndirect ++ extPort + IndirectStep.Elements) == compiler.getValue( + containingPath.asIndirect ++ intPort + IndirectStep.Elements + ) + ) { + None + } else { + Some(CompilerError.ExprError( + containingPath.asIndirect + constrName, + "inconsistent export tap array port elements" + )) + } + case _ => Some(CompilerError.BadRef(containingPath, containingPath.asIndirect + constrName)) + } + case _ => None // non-assertions ignored + } + } + + override def mapPort(path: DesignPath, port: elem.Port, ports: SeqMap[String, Unit]): Unit = {} + override def mapPortArray(path: DesignPath, port: elem.PortArray, ports: SeqMap[String, Unit]): Unit = {} + override def mapPortLibrary(path: DesignPath, port: ref.LibraryPath): Unit = {} + + override def mapBlock( + path: DesignPath, + block: elem.HierarchyBlock, + ports: SeqMap[String, Unit], + blocks: SeqMap[String, Seq[CompilerError]], + links: SeqMap[String, Seq[CompilerError]] + ): Seq[CompilerError] = { + block.constraints.asPairs.flatMap { + case (name, constr) => mapConstraint(path, name, constr) + }.toSeq ++ blocks.values.flatten ++ links.values.flatten + } + override def mapBlockLibrary(path: DesignPath, block: ref.LibraryPath): Seq[CompilerError] = { + Seq() // block library errors should be checked elsewhere + } + + override def mapLink( + path: DesignPath, + link: elem.Link, + ports: SeqMap[String, Unit], + links: SeqMap[String, Seq[CompilerError]] + ): Seq[CompilerError] = { + Seq() // export tap not valid in links + } + override def mapLinkArray( + path: DesignPath, + link: elem.LinkArray, + ports: SeqMap[String, Unit], + links: SeqMap[String, Seq[CompilerError]] + ): Seq[CompilerError] = { + Seq() // export tap not valid in links + } + override def mapLinkLibrary(path: DesignPath, link: ref.LibraryPath): Seq[CompilerError] = { + Seq() // link library errors should be checked elsewhere + } +} diff --git a/compiler/src/test/scala/edg/CompilerTestUtil.scala b/compiler/src/test/scala/edg/CompilerTestUtil.scala index 4b286ed83..679c01964 100644 --- a/compiler/src/test/scala/edg/CompilerTestUtil.scala +++ b/compiler/src/test/scala/edg/CompilerTestUtil.scala @@ -1,6 +1,6 @@ package edg -import edg.compiler.{Compiler, DesignAssertionCheck, DesignRefsValidate, DesignStructuralValidate} +import edg.compiler.{Compiler, DesignAssertionCheck, DesignRefsValidate, DesignStructuralValidate, ExportTapCheck} import edg.wir.{EdgirLibrary, Refinements} import edgir.schema.schema.{Design, Library} import org.scalatest.flatspec.AnyFlatSpec @@ -19,6 +19,7 @@ trait CompilerTestUtil extends AnyFlatSpec { new DesignStructuralValidate().map(compiled) shouldBe empty new DesignRefsValidate().validate(compiled) shouldBe empty new DesignAssertionCheck(compiler).map(compiled) shouldBe empty + new ExportTapCheck(compiler).map(compiled) shouldBe empty expectedDesign match { // toProtoString is a more readable and diff-able case Some(expectedDesign) => compiled should equal(expectedDesign) case _ => From 1ad1fb45d1c82bc3b90a9631900846a35329ffd8 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 15 May 2026 23:50:55 -0700 Subject: [PATCH 16/47] refactoring checks to a pass --- .../main/scala/edg/compiler/Compiler.scala | 4 +- .../main/scala/edg/compiler/ConstProp.scala | 9 --- .../scala/edg/compiler/ExportTapCheck.scala | 67 +++++++++++++------ 3 files changed, 47 insertions(+), 33 deletions(-) diff --git a/compiler/src/main/scala/edg/compiler/Compiler.scala b/compiler/src/main/scala/edg/compiler/Compiler.scala index 347778bd8..01a4caa14 100644 --- a/compiler/src/main/scala/edg/compiler/Compiler.scala +++ b/compiler/src/main/scala/edg/compiler/Compiler.scala @@ -279,15 +279,13 @@ class Compiler private ( val toLinkPort = resolvePort(connect.toLinkPortPath).asInstanceOf[wir.HasParams] val connectedParam = toLinkPort.getParams.keys.map(IndirectStep.Element(_)) for (connectedStep <- connectedParam) { // note: can't happen for top level connect! - if (!connect.tap) { + if (!connect.tap) { // tap is non-propagating constProp.addAssignEqual( connect.toLinkPortPath.asIndirect + connectedStep, connect.toBlockPortPath.asIndirect + connectedStep, connect.root, "connect" ) - } else { - constProp.addRequiredEmpty(connect.toBlockPortPath.asIndirect + connectedStep) } } diff --git a/compiler/src/main/scala/edg/compiler/ConstProp.scala b/compiler/src/main/scala/edg/compiler/ConstProp.scala index b485965a2..bf5334070 100644 --- a/compiler/src/main/scala/edg/compiler/ConstProp.scala +++ b/compiler/src/main/scala/edg/compiler/ConstProp.scala @@ -53,8 +53,6 @@ class ConstProp() { // This tracks overassign errors and their sources, which otherwise breaks the immutability of the dependency graph private val overassigns = mutable.HashMap[IndirectDesignPath, mutable.HashSet[IndirectDesignPath]]() - // This tracks which parameters must be empty (undefined) - private val requiredEmpty = mutable.HashSet[IndirectDesignPath]() private val connectedLink = DependencyGraph[ConnectedLinkRecord, ConnectedLinkPort]() // tracks the port -> link paths @@ -261,11 +259,6 @@ class ConstProp() { ) } - /** Adds a requirement that some param is undefined */ - def addRequiredEmpty(target: IndirectDesignPath): Unit = { - requiredEmpty.add(target) - } - /** Returns the value of a parameter, or None if it does not have a value (yet?). Can be used to check if parameters * are resolved yet by testing against None. Overassigns return their first value for consistency. */ @@ -316,8 +309,6 @@ class ConstProp() { ExprError(target, msg) } ++ getOverassignValues.map { case (target, error) => ExprError(target, error.msg.get) - } ++ requiredEmpty.collect { - case target if params.getValue(target).isDefined => ExprError(target, "must be undefined") }).toSeq } } diff --git a/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala b/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala index c7bc924d5..890319fec 100644 --- a/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala +++ b/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala @@ -2,46 +2,71 @@ package edg.compiler import edg.ExprBuilder.ValueExpr import edg.wir.{DesignPath, IndirectStep} -import edg.wir.ProtoUtil.ConstraintProtoToSeqMap +import edg.wir.ProtoUtil.{ConstraintProtoToSeqMap, ParamProtoToSeqMap} import edgir.elem.elem import edgir.expr.expr import edgir.ref.ref import scala.collection.SeqMap +import scala.collection.mutable /** Checks export tap validity, that inner-side parameters are undefined and elements are consistent. */ class ExportTapCheck(compiler: Compiler) extends DesignMap[Unit, Seq[CompilerError], Seq[CompilerError]] { + val portParams = mutable.HashMap[DesignPath, Seq[String]]() + + def mapExported( + containingPath: DesignPath, + exportName: String, + exported: expr.ExportedExpr + ): Seq[CompilerError] = { + val (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) = (exported.getExteriorPort, exported.getInternalBlockPort) + portParams(containingPath ++ extPort).flatMap { paramName => + val paramPath = containingPath.asIndirect ++ intPort + paramName + compiler.getValue(paramPath) match { + case Some(_) => Seq(CompilerError.ExprError( + paramPath, + "export tap internal port parameter must be undefined" + )) + case None => Seq() + } + } + } + def mapConstraint( containingPath: DesignPath, constrName: String, constr: expr.ValueExpr - ): Option[CompilerError] = { + ): Seq[CompilerError] = { constr.expr match { - case expr.ValueExpr.Expr.Exported(exported) if exported.tap => None + case expr.ValueExpr.Expr.Exported(exported) if exported.tap => + mapExported(containingPath, constrName, exported) case expr.ValueExpr.Expr.ExportedArray(exported) if exported.tap => - (exported.getExteriorPort, exported.getInternalBlockPort) match { - case (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) => - if ( - compiler.getValue(containingPath.asIndirect ++ extPort + IndirectStep.Elements) == compiler.getValue( - containingPath.asIndirect ++ intPort + IndirectStep.Elements - ) - ) { - None - } else { - Some(CompilerError.ExprError( - containingPath.asIndirect + constrName, - "inconsistent export tap array port elements" - )) - } - case _ => Some(CompilerError.BadRef(containingPath, containingPath.asIndirect + constrName)) - } - case _ => None // non-assertions ignored + val (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) = (exported.getExteriorPort, exported.getInternalBlockPort) + val exportedArrayContainerErrors = + if ( + compiler.getValue(containingPath.asIndirect ++ extPort + IndirectStep.Elements) == compiler.getValue( + containingPath.asIndirect ++ intPort + IndirectStep.Elements + ) + ) { + Seq() + } else { + Seq(CompilerError.ExprError( + containingPath.asIndirect + constrName, + "inconsistent export tap array port elements" + )) + } + exportedArrayContainerErrors ++ exported.expanded.flatMap(expr => + mapExported(containingPath, constrName, expr) + ) + case _ => Seq() // non-assertions ignored } } - override def mapPort(path: DesignPath, port: elem.Port, ports: SeqMap[String, Unit]): Unit = {} + override def mapPort(path: DesignPath, port: elem.Port, ports: SeqMap[String, Unit]): Unit = { + portParams.put(path, port.params.asPairs.map { case (name, _) => name }.toSeq) + } override def mapPortArray(path: DesignPath, port: elem.PortArray, ports: SeqMap[String, Unit]): Unit = {} override def mapPortLibrary(path: DesignPath, port: ref.LibraryPath): Unit = {} From 1ed62027e3460c77c2114d7097fe3bbf03852b83 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 15 May 2026 23:54:32 -0700 Subject: [PATCH 17/47] Update ExportTapTest.scala --- compiler/src/test/scala/edg/compiler/ExportTapTest.scala | 2 -- 1 file changed, 2 deletions(-) diff --git a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala index 94061fdf4..428f015e2 100644 --- a/compiler/src/test/scala/edg/compiler/ExportTapTest.scala +++ b/compiler/src/test/scala/edg/compiler/ExportTapTest.scala @@ -11,8 +11,6 @@ import org.scalatest.matchers.should.Matchers._ import scala.collection.SeqMap -/** Tests export taps. - */ class ExportTapTest extends AnyFlatSpec with CompilerTestUtil { import edgir.expr.expr.UnarySetExpr.Op val library = Library( From c4cdf188eaa1b7e33691fc6a3fc0282e8db9fb73 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 00:40:33 -0700 Subject: [PATCH 18/47] subboard block and variants --- edg/electronics_model/SubboardBlock.py | 54 ++++++++++++++++++++++++++ edg/electronics_model/__init__.py | 1 + 2 files changed, 55 insertions(+) create mode 100644 edg/electronics_model/SubboardBlock.py diff --git a/edg/electronics_model/SubboardBlock.py b/edg/electronics_model/SubboardBlock.py new file mode 100644 index 000000000..29f29258a --- /dev/null +++ b/edg/electronics_model/SubboardBlock.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +from typing import Generic, Any, Optional, List, Mapping, Dict, Union, TYPE_CHECKING, Tuple + +from deprecated import deprecated +from typing_extensions import TypeVar, override + +from .KiCadImportableBlock import KiCadImportableBlock +from ..core import * +from ..core.HdlUserExceptions import EdgTypeError + +if TYPE_CHECKING: + from .PassivePort import HasPassivePort, Passive + + +class SubboardBlock(Block): + """A block that is a sub-board, where all its blocks not marked external are part of a different board. + Provides the export_tap construct to tack connectors onto ports without breaking modeling.""" + + def __init__(self): + super().__init__() + self._external_blocks: List[Block] = [] + self._export_taps: List[Tuple[Port, Port]] = [] + + BlockType = TypeVar("BlockType", bound="Block") + + def Block(self, tpe: BlockType, *args, external: bool = False, **kwargs) -> BlockType: + """Creates an internal Block. + By default, these are internal (part of the sub-board), unless marked external (in which case + it is placed in the containing board, eg for connectors). + Connector-pairs should be marked external, but will resolve to an external-internal pair.""" + ret = super().Block(tpe, *args, **kwargs) + if external: + self._external_blocks.append(ret) + return ret + + def export_tap(self, exterior_port: Port, internal_port: Port) -> None: + """Connects an exterior port (on self) to an interior port (on an internal block) + as a non-propagating connection which may coexist with other connections on the exterior port + (but not the interior port). + The interior port may not have parameters defined. + This is used to tack a connector onto a port that already has electrical modeling from the internal blocks.""" + # TODO validation + + self._export_taps.append((exterior_port, internal_port)) + + +class WrapperSubboardBlock(SubboardBlock): + """A wrapper block where the internal blocks are skipped for netlisting and used for modeling only. + Useful for eg, dev boards that only generate a connector or socket but re-use modeling from the raw subcircuit.""" + + def __init__(self): + super().__init__() + # TODO flag wrapper block diff --git a/edg/electronics_model/__init__.py b/edg/electronics_model/__init__.py index 6f74ad166..5f20cd741 100644 --- a/edg/electronics_model/__init__.py +++ b/edg/electronics_model/__init__.py @@ -8,6 +8,7 @@ NetBlock, CircuitPort, ) +from .SubboardBlock import SubboardBlock, WrapperSubboardBlock from .Units import Farad, uFarad, nFarad, pFarad, MOhm, kOhm, Ohm, mOhm, Henry, uHenry, nHenry from .Units import Volt, mVolt, Watt, Amp, mAmp, uAmp, nAmp, pAmp From 5a9fb0e3b2531a88449a2d34fa5dcd0e80a9223b Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 10:38:37 -0700 Subject: [PATCH 19/47] Update SubboardBlock.py --- edg/electronics_model/SubboardBlock.py | 32 ++++++++++++-------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/edg/electronics_model/SubboardBlock.py b/edg/electronics_model/SubboardBlock.py index 29f29258a..fc582e644 100644 --- a/edg/electronics_model/SubboardBlock.py +++ b/edg/electronics_model/SubboardBlock.py @@ -1,30 +1,23 @@ -from __future__ import annotations +from typing import List, Tuple, override, Any +from typing_extensions import TypeVar -from typing import Generic, Any, Optional, List, Mapping, Dict, Union, TYPE_CHECKING, Tuple - -from deprecated import deprecated -from typing_extensions import TypeVar, override - -from .KiCadImportableBlock import KiCadImportableBlock from ..core import * -from ..core.HdlUserExceptions import EdgTypeError - -if TYPE_CHECKING: - from .PassivePort import HasPassivePort, Passive +from ..core.HdlUserExceptions import UnconnectableError class SubboardBlock(Block): """A block that is a sub-board, where all its blocks not marked external are part of a different board. Provides the export_tap construct to tack connectors onto ports without breaking modeling.""" - def __init__(self): + def __init__(self) -> None: super().__init__() self._external_blocks: List[Block] = [] self._export_taps: List[Tuple[Port, Port]] = [] - BlockType = TypeVar("BlockType", bound="Block") + BlockType = TypeVar("BlockType", bound=Block) - def Block(self, tpe: BlockType, *args, external: bool = False, **kwargs) -> BlockType: + @override + def Block(self, tpe: BlockType, *args: Any, external: bool = False, **kwargs: Any) -> BlockType: """Creates an internal Block. By default, these are internal (part of the sub-board), unless marked external (in which case it is placed in the containing board, eg for connectors). @@ -40,8 +33,13 @@ def export_tap(self, exterior_port: Port, internal_port: Port) -> None: (but not the interior port). The interior port may not have parameters defined. This is used to tack a connector onto a port that already has electrical modeling from the internal blocks.""" - # TODO validation - + if exterior_port._block_parent() is not self: + raise UnconnectableError("Exterior port must be on the block") + internal_port_parent = internal_port._block_parent() + if internal_port_parent is None or internal_port_parent._parent is not self: + raise UnconnectableError("Internal port must be a block within this block") + if type(exterior_port) != type(internal_port): + raise UnconnectableError("Exported ports must be the same type") self._export_taps.append((exterior_port, internal_port)) @@ -49,6 +47,6 @@ class WrapperSubboardBlock(SubboardBlock): """A wrapper block where the internal blocks are skipped for netlisting and used for modeling only. Useful for eg, dev boards that only generate a connector or socket but re-use modeling from the raw subcircuit.""" - def __init__(self): + def __init__(self) -> None: super().__init__() # TODO flag wrapper block From f5aec46bdf58d4a2c7f9ffbb49f9c30635a8edf0 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 10:44:22 -0700 Subject: [PATCH 20/47] broken test case --- ...st_wrapper.py => test_netlist_subboard.py} | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) rename edg/electronics_model/{test_netlist_wrapper.py => test_netlist_subboard.py} (80%) diff --git a/edg/electronics_model/test_netlist_wrapper.py b/edg/electronics_model/test_netlist_subboard.py similarity index 80% rename from edg/electronics_model/test_netlist_wrapper.py rename to edg/electronics_model/test_netlist_subboard.py index b6c854294..6b9b3d101 100644 --- a/edg/electronics_model/test_netlist_wrapper.py +++ b/edg/electronics_model/test_netlist_subboard.py @@ -2,12 +2,32 @@ from typing_extensions import override +from .. import FootprintBlock from ..core import Block, TransformUtil from .test_netlist import NetlistTestCase, TestFakeSource, TestFakeSink, NetBlock, Net, NetPin -from . import WrapperFootprintBlock, VoltageSink +from . import SubboardBlock, VoltageSink -class SinkWrapperBlock(WrapperFootprintBlock): +class SinkWrapperExterior(FootprintBlock): + def __init__(self) -> None: + super().__init__() + + self.pos = self.Port(VoltageSink.empty()) # must remain empty + self.neg = self.Port(VoltageSink.empty()) + + @override + def contents(self) -> None: + super().contents() + + self.footprint( # only this footprint shows up + "L", + "Inductor_SMD:L_0603_1608Metric", # distinct footprint and value from internal blocks + {"1": self.pos, "2": self.neg}, + value="100", + ) + + +class SinkWrapperBlock(SubboardBlock): """Wrapper block with a single footprint for two internal sinks whose footprints are ignored.""" def __init__(self) -> None: @@ -20,17 +40,16 @@ def __init__(self) -> None: def contents(self) -> None: super().contents() + # these define the modeling and are internal self.model1 = self.Block(TestFakeSink()) self.model2 = self.Block(TestFakeSink()) self.vpos = self.connect(self.pos, self.model1.pos, self.model2.pos) self.gnd = self.connect(self.neg, self.model1.neg, self.model2.neg) - self.footprint( # only this footprint shows up - "L", - "Inductor_SMD:L_0603_1608Metric", # distinct footprint and value from internal blocks - {"1": self.pos, "2": self.neg}, - value="100", - ) + # these define the external interface block + self.wrapper = self.Block(SinkWrapperBlock(), external=True) + self.export_tap(self.pos, self.wrapper.pos) + self.export_tap(self.neg, self.wrapper.neg) class TestWrapperCircuit(Block): From 1173797de086585ae6e85b8055020b2450518242 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 10:44:38 -0700 Subject: [PATCH 21/47] Update test_netlist_subboard.py --- edg/electronics_model/test_netlist_subboard.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edg/electronics_model/test_netlist_subboard.py b/edg/electronics_model/test_netlist_subboard.py index 6b9b3d101..138a73a1c 100644 --- a/edg/electronics_model/test_netlist_subboard.py +++ b/edg/electronics_model/test_netlist_subboard.py @@ -47,7 +47,7 @@ def contents(self) -> None: self.gnd = self.connect(self.neg, self.model1.neg, self.model2.neg) # these define the external interface block - self.wrapper = self.Block(SinkWrapperBlock(), external=True) + self.wrapper = self.Block(SinkWrapperExterior(), external=True) self.export_tap(self.pos, self.wrapper.pos) self.export_tap(self.neg, self.wrapper.neg) From 39ecda1f0d75846b03d766f7707815575a920b8f Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 11:11:24 -0700 Subject: [PATCH 22/47] compiling! --- edg/electronics_model/SubboardBlock.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/edg/electronics_model/SubboardBlock.py b/edg/electronics_model/SubboardBlock.py index fc582e644..76e10ef46 100644 --- a/edg/electronics_model/SubboardBlock.py +++ b/edg/electronics_model/SubboardBlock.py @@ -2,7 +2,9 @@ from typing_extensions import TypeVar from ..core import * +from ..core.Core import Refable from ..core.HdlUserExceptions import UnconnectableError +from .. import edgir class SubboardBlock(Block): @@ -42,6 +44,21 @@ def export_tap(self, exterior_port: Port, internal_port: Port) -> None: raise UnconnectableError("Exported ports must be the same type") self._export_taps.append((exterior_port, internal_port)) + @override + def _populate_def_proto_hierarchy(self, pb: edgir.HierarchyBlock, ref_map: Refable.RefMapType) -> None: + super()._populate_def_proto_hierarchy(pb, ref_map) + for exterior_port, internal_port in self._export_taps: + internal_port_name = internal_port._name_from(self).replace(".", "_") + constraint_pb = edgir.add_pair(pb.constraints, f"(export_tap){internal_port_name}") + if isinstance(exterior_port, Vector): + constraint_pb.exportedArray.exterior_port.ref.CopyFrom(ref_map[exterior_port]) + constraint_pb.exportedArray.internal_block_port.ref.CopyFrom(ref_map[internal_port]) + constraint_pb.exportedArray.tap = True + else: + constraint_pb.exported.exterior_port.ref.CopyFrom(ref_map[exterior_port]) + constraint_pb.exported.internal_block_port.ref.CopyFrom(ref_map[internal_port]) + constraint_pb.exported.tap = True + class WrapperSubboardBlock(SubboardBlock): """A wrapper block where the internal blocks are skipped for netlisting and used for modeling only. From 9ce6f2ec1087a524160f0909e76f46b0a2414468 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 11:12:53 -0700 Subject: [PATCH 23/47] Update test_netlist_subboard.py --- edg/electronics_model/test_netlist_subboard.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/edg/electronics_model/test_netlist_subboard.py b/edg/electronics_model/test_netlist_subboard.py index 138a73a1c..ebfe12724 100644 --- a/edg/electronics_model/test_netlist_subboard.py +++ b/edg/electronics_model/test_netlist_subboard.py @@ -74,8 +74,11 @@ def test_warpper_netlist(self) -> None: "L1", "", "100", - ["sink"], - ["edg.electronics_model.test_netlist_wrapper.SinkWrapperBlock"], + ["sink", "wrapper"], + [ + "edg.electronics_model.test_netlist_subboard.SinkWrapperBlock", + "edg.electronics_model.test_netlist_subboard.SinkWrapperExterior", + ], ), net.blocks, ) From 4188fc12b5cba82c183e18b8577aa8b877d0baf2 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 11:20:48 -0700 Subject: [PATCH 24/47] external blocks param --- edg/electronics_model/SubboardBlock.py | 5 +++++ edg/electronics_model/test_netlist_subboard.py | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/edg/electronics_model/SubboardBlock.py b/edg/electronics_model/SubboardBlock.py index 76e10ef46..5d5090016 100644 --- a/edg/electronics_model/SubboardBlock.py +++ b/edg/electronics_model/SubboardBlock.py @@ -16,6 +16,8 @@ def __init__(self) -> None: self._external_blocks: List[Block] = [] self._export_taps: List[Tuple[Port, Port]] = [] + self.fp_external_blocks = self.Parameter(ArrayStringExpr()) # names of all external blocks + BlockType = TypeVar("BlockType", bound=Block) @override @@ -46,7 +48,10 @@ def export_tap(self, exterior_port: Port, internal_port: Port) -> None: @override def _populate_def_proto_hierarchy(self, pb: edgir.HierarchyBlock, ref_map: Refable.RefMapType) -> None: + self.assign(self.fp_external_blocks, [self._blocks.name_of(block) for block in self._external_blocks]) + super()._populate_def_proto_hierarchy(pb, ref_map) + for exterior_port, internal_port in self._export_taps: internal_port_name = internal_port._name_from(self).replace(".", "_") constraint_pb = edgir.add_pair(pb.constraints, f"(export_tap){internal_port_name}") diff --git a/edg/electronics_model/test_netlist_subboard.py b/edg/electronics_model/test_netlist_subboard.py index ebfe12724..9b3d71257 100644 --- a/edg/electronics_model/test_netlist_subboard.py +++ b/edg/electronics_model/test_netlist_subboard.py @@ -2,10 +2,10 @@ from typing_extensions import override -from .. import FootprintBlock +from .. import FootprintBlock, DesignTop from ..core import Block, TransformUtil from .test_netlist import NetlistTestCase, TestFakeSource, TestFakeSink, NetBlock, Net, NetPin -from . import SubboardBlock, VoltageSink +from . import SubboardBlock, WrapperSubboardBlock, VoltageSink class SinkWrapperExterior(FootprintBlock): @@ -27,7 +27,7 @@ def contents(self) -> None: ) -class SinkWrapperBlock(SubboardBlock): +class SinkWrapperBlock(WrapperSubboardBlock): """Wrapper block with a single footprint for two internal sinks whose footprints are ignored.""" def __init__(self) -> None: @@ -52,7 +52,7 @@ def contents(self) -> None: self.export_tap(self.neg, self.wrapper.neg) -class TestWrapperCircuit(Block): +class TestWrapperCircuit(DesignTop): @override def contents(self) -> None: super().contents() From 19d52d791d47a68590d73e8b4588e959b6240faa Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 11:40:54 -0700 Subject: [PATCH 25/47] e2e wrapper subboard --- edg/electronics_model/NetlistGenerator.py | 21 ++++++++++++++----- edg/electronics_model/SubboardBlock.py | 3 ++- .../test_netlist_subboard.py | 6 ++++-- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/edg/electronics_model/NetlistGenerator.py b/edg/electronics_model/NetlistGenerator.py index c8cf93974..693264e98 100644 --- a/edg/electronics_model/NetlistGenerator.py +++ b/edg/electronics_model/NetlistGenerator.py @@ -89,15 +89,26 @@ def __init__(self, design: CompiledDesign): def process_blocklike( self, path: TransformUtil.Path, block: Union[edgir.Link, edgir.LinkArray, edgir.HierarchyBlock] ) -> None: - # TODO may need rethought to support multi-board assemblies scope = self.scopes[path] # including footprint and exports, and everything within a link - internal_scope = scope # for internal blocks if isinstance(block, edgir.HierarchyBlock): - if "fp_is_wrapper" in block.meta.members.node: # wrapper internal blocks ignored - internal_scope = None + if "fp_subboard" in block.meta.members.node: + fp_external_blocks = self.design.get_value(path.to_tuple() + ("fp_external_blocks",)) + assert isinstance(fp_external_blocks, list) + external_blocks: Optional[List[str]] = cast(List[str], fp_external_blocks) + if "fp_subblocks_ignored" in block.meta.members.node: + internal_scope = None + else: + raise NotImplementedError("support subboard") + else: + external_blocks = None + internal_scope = scope + for block_pair in block.blocks: - self.scopes[path.append_block(block_pair.name)] = internal_scope + if external_blocks is not None and block_pair.name not in external_blocks: + self.scopes[path.append_block(block_pair.name)] = internal_scope + else: + self.scopes[path.append_block(block_pair.name)] = scope for link_pair in block.links: # links considered to be the same scope as self self.scopes[path.append_link(link_pair.name)] = scope diff --git a/edg/electronics_model/SubboardBlock.py b/edg/electronics_model/SubboardBlock.py index 5d5090016..395cba862 100644 --- a/edg/electronics_model/SubboardBlock.py +++ b/edg/electronics_model/SubboardBlock.py @@ -16,6 +16,7 @@ def __init__(self) -> None: self._external_blocks: List[Block] = [] self._export_taps: List[Tuple[Port, Port]] = [] + self.fp_subboard = self.Metadata("A") # dummy distinct value self.fp_external_blocks = self.Parameter(ArrayStringExpr()) # names of all external blocks BlockType = TypeVar("BlockType", bound=Block) @@ -71,4 +72,4 @@ class WrapperSubboardBlock(SubboardBlock): def __init__(self) -> None: super().__init__() - # TODO flag wrapper block + self.fp_subblocks_ignored = self.Metadata("B") # dummy distinct value diff --git a/edg/electronics_model/test_netlist_subboard.py b/edg/electronics_model/test_netlist_subboard.py index 9b3d71257..dab6aa9bb 100644 --- a/edg/electronics_model/test_netlist_subboard.py +++ b/edg/electronics_model/test_netlist_subboard.py @@ -88,10 +88,11 @@ def test_warpper_netlist(self) -> None: self.assertIn( Net( "vpos", - [NetPin(["source"], "1"), NetPin(["sink"], "1")], # ensure extraneous nets not generated + [NetPin(["source"], "1"), NetPin(["sink", "wrapper"], "1")], # ensure extraneous nets not generated [ TransformUtil.Path.empty().append_block("source").append_port("pos", "net"), TransformUtil.Path.empty().append_block("sink").append_port("pos", "net"), + TransformUtil.Path.empty().append_block("sink", "wrapper").append_port("pos", "net"), ], ), net.nets, @@ -99,10 +100,11 @@ def test_warpper_netlist(self) -> None: self.assertIn( Net( "gnd", - [NetPin(["source"], "2"), NetPin(["sink"], "2")], + [NetPin(["source"], "2"), NetPin(["sink", "wrapper"], "2")], [ TransformUtil.Path.empty().append_block("source").append_port("neg", "net"), TransformUtil.Path.empty().append_block("sink").append_port("neg", "net"), + TransformUtil.Path.empty().append_block("sink", "wrapper").append_port("neg", "net"), ], ), net.nets, From a056d0cd7262b8fb05fec08f200f89338ed33c0a Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 11:44:52 -0700 Subject: [PATCH 26/47] test with passive (subport) tap --- .../test_netlist_subboard.py | 105 +++++++++++++++++- 1 file changed, 103 insertions(+), 2 deletions(-) diff --git a/edg/electronics_model/test_netlist_subboard.py b/edg/electronics_model/test_netlist_subboard.py index dab6aa9bb..aab89d861 100644 --- a/edg/electronics_model/test_netlist_subboard.py +++ b/edg/electronics_model/test_netlist_subboard.py @@ -5,7 +5,7 @@ from .. import FootprintBlock, DesignTop from ..core import Block, TransformUtil from .test_netlist import NetlistTestCase, TestFakeSource, TestFakeSink, NetBlock, Net, NetPin -from . import SubboardBlock, WrapperSubboardBlock, VoltageSink +from . import SubboardBlock, WrapperSubboardBlock, VoltageSink, Passive class SinkWrapperExterior(FootprintBlock): @@ -64,8 +64,64 @@ def contents(self) -> None: self.gnd = self.connect(self.source.neg, self.sink.neg) +class SinkWrapperPassiveExterior(FootprintBlock): + def __init__(self) -> None: + super().__init__() + + self.pos = self.Port(Passive.empty()) # must remain empty + self.neg = self.Port(Passive.empty()) + + @override + def contents(self) -> None: + super().contents() + + self.footprint( # only this footprint shows up + "L", + "Inductor_SMD:L_0603_1608Metric", # distinct footprint and value from internal blocks + {"1": self.pos, "2": self.neg}, + value="100", + ) + + +class SinkWrapperPassiveBlock(WrapperSubboardBlock): + """Wrapper block that taps the passive sub-port on its external port.""" + + def __init__(self) -> None: + super().__init__() + + self.pos = self.Port(VoltageSink.empty()) + self.neg = self.Port(VoltageSink.empty()) + + @override + def contents(self) -> None: + super().contents() + + # these define the modeling and are internal + self.model1 = self.Block(TestFakeSink()) + self.model2 = self.Block(TestFakeSink()) + self.vpos = self.connect(self.pos, self.model1.pos, self.model2.pos) + self.gnd = self.connect(self.neg, self.model1.neg, self.model2.neg) + + # these define the external interface block + self.wrapper = self.Block(SinkWrapperPassiveExterior(), external=True) + self.export_tap(self.pos.net, self.wrapper.pos) + self.export_tap(self.neg.net, self.wrapper.neg) + + +class TestWrapperPassiveCircuit(DesignTop): + @override + def contents(self) -> None: + super().contents() + + self.source = self.Block(TestFakeSource()) + self.sink = self.Block(SinkWrapperPassiveBlock()) + + self.vpos = self.connect(self.source.pos, self.sink.pos) + self.gnd = self.connect(self.source.neg, self.sink.neg) + + class NetlistWrapperTestCase(unittest.TestCase): - def test_warpper_netlist(self) -> None: + def test_wrapper_netlist(self) -> None: net = NetlistTestCase.generate_net(TestWrapperCircuit) self.assertIn( @@ -109,3 +165,48 @@ def test_warpper_netlist(self) -> None: ), net.nets, ) + + def test_wrapper_passive_netlist(self) -> None: + net = NetlistTestCase.generate_net(TestWrapperPassiveCircuit) + + self.assertIn( + NetBlock( + "Inductor_SMD:L_0603_1608Metric", + "L1", + "", + "100", + ["sink", "wrapper"], + [ + "edg.electronics_model.test_netlist_subboard.SinkWrapperPassiveBlock", + "edg.electronics_model.test_netlist_subboard.SinkWrapperPassiveExterior", + ], + ), + net.blocks, + ) + self.assertEqual(len(net.blocks), 2) # should only generate top-level source and sink + + self.assertEqual(len(net.nets), 2) # ensure empty nets pruned + self.assertIn( + Net( + "vpos", + [NetPin(["source"], "1"), NetPin(["sink", "wrapper"], "1")], # ensure extraneous nets not generated + [ + TransformUtil.Path.empty().append_block("source").append_port("pos", "net"), + TransformUtil.Path.empty().append_block("sink").append_port("pos", "net"), + TransformUtil.Path.empty().append_block("sink", "wrapper").append_port("pos"), + ], + ), + net.nets, + ) + self.assertIn( + Net( + "gnd", + [NetPin(["source"], "2"), NetPin(["sink", "wrapper"], "2")], + [ + TransformUtil.Path.empty().append_block("source").append_port("neg", "net"), + TransformUtil.Path.empty().append_block("sink").append_port("neg", "net"), + TransformUtil.Path.empty().append_block("sink", "wrapper").append_port("neg"), + ], + ), + net.nets, + ) From 6aedbd59125ea262befe57f54b58414715e68d82 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 12:04:10 -0700 Subject: [PATCH 27/47] wip refactoring --- edg/electronics_model/__init__.py | 1 - .../test_netlist_subboard.py | 4 +- edg/parts/Distance_Vl53l0x.py | 22 ++- edg/parts/StepperDriver_A4988.py | 148 ++++++++++-------- 4 files changed, 92 insertions(+), 83 deletions(-) diff --git a/edg/electronics_model/__init__.py b/edg/electronics_model/__init__.py index 5f20cd741..22e13774c 100644 --- a/edg/electronics_model/__init__.py +++ b/edg/electronics_model/__init__.py @@ -2,7 +2,6 @@ from .CircuitBlock import ( FootprintBlock, - WrapperFootprintBlock, CircuitPortBridge, CircuitPortAdapter, NetBlock, diff --git a/edg/electronics_model/test_netlist_subboard.py b/edg/electronics_model/test_netlist_subboard.py index aab89d861..d4e63cd32 100644 --- a/edg/electronics_model/test_netlist_subboard.py +++ b/edg/electronics_model/test_netlist_subboard.py @@ -140,7 +140,6 @@ def test_wrapper_netlist(self) -> None: ) self.assertEqual(len(net.blocks), 2) # should only generate top-level source and sink - self.assertEqual(len(net.nets), 2) # ensure empty nets pruned self.assertIn( Net( "vpos", @@ -165,6 +164,7 @@ def test_wrapper_netlist(self) -> None: ), net.nets, ) + self.assertEqual(len(net.nets), 2) # ensure empty nets pruned def test_wrapper_passive_netlist(self) -> None: net = NetlistTestCase.generate_net(TestWrapperPassiveCircuit) @@ -185,7 +185,6 @@ def test_wrapper_passive_netlist(self) -> None: ) self.assertEqual(len(net.blocks), 2) # should only generate top-level source and sink - self.assertEqual(len(net.nets), 2) # ensure empty nets pruned self.assertIn( Net( "vpos", @@ -210,3 +209,4 @@ def test_wrapper_passive_netlist(self) -> None: ), net.nets, ) + self.assertEqual(len(net.nets), 2) # ensure empty nets pruned diff --git a/edg/parts/Distance_Vl53l0x.py b/edg/parts/Distance_Vl53l0x.py index 6d24fceaf..532a00fa3 100644 --- a/edg/parts/Distance_Vl53l0x.py +++ b/edg/parts/Distance_Vl53l0x.py @@ -1,6 +1,7 @@ from typing_extensions import override from ..abstract_parts import * +from .PassiveConnector_Header import PinSocket254 from .JlcPart import JlcPart @@ -100,7 +101,7 @@ def generate(self) -> None: self.vdd_cap[1] = self.Block(DecouplingCapacitor(4.7 * uFarad(tol=0.2))).connected(self.gnd, self.pwr) -class Vl53l0xConnector(Vl53l0x, WrapperFootprintBlock): +class Vl53l0xConnector(Vl53l0x, WrapperSubboardBlock): """Connector to an external VL53L0X breakout board. Uses the pinout from the Adafruit product: https://www.adafruit.com/product/3317 This has an onboard 2.8v regulator, but thankfully the IO tolerance is not referenced to Vdd @@ -110,18 +111,13 @@ class Vl53l0xConnector(Vl53l0x, WrapperFootprintBlock): @override def generate(self) -> None: super().generate() - self.footprint( - "J", - "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical", - { - "1": self.pwr, - "2": self.gnd, - "3": self.i2c.scl, - "4": self.i2c.sda, - "5": self.ic.gpio1, - "6": self.ic.xshut, - }, - ) + self.conn = self.Block(PinSocket254(6), external=True) + self.export_tap(self.pwr.net, self.conn.pins.request("1")) + self.export_tap(self.gnd.net, self.conn.pins.request("2")) + self.export_tap(self.i2c.scl.net, self.conn.pins.request("3")) + self.export_tap(self.i2c.sda.net, self.conn.pins.request("4")) + self.export_tap(self.ic.gpio1.net, self.conn.pins.request("5")) + self.export_tap(self.ic.xshut.net, self.conn.pins.request("6")) class Vl53l0xArray(DistanceSensor, GeneratorBlock): diff --git a/edg/parts/StepperDriver_A4988.py b/edg/parts/StepperDriver_A4988.py index ea925e75a..f40ae485b 100644 --- a/edg/parts/StepperDriver_A4988.py +++ b/edg/parts/StepperDriver_A4988.py @@ -221,7 +221,60 @@ def generate(self) -> None: self.connect(self.pwr_logic.as_digital_source(), self.ic.sleep) -class PololuA4988(BrushedMotorDriver, WrapperFootprintBlock, GeneratorBlock): +class PololuA4988_Device(InternalSubcircuit, FootprintBlock): + def __init__(self) -> None: + super().__init__() + + self.gnd = self.Port(Ground.empty()) + self.pwr = self.Port(VoltageSink.empty()) + self.pwr_logic = self.Port(VoltageSink.empty()) + + self.step = self.Port(DigitalSink.empty()) + self.dir = self.Port(DigitalSink.empty()) + + self.reset = self.Port(DigitalSink.empty(), optional=True) + self.sleep = self.Port(DigitalSink.empty(), optional=True) + self.enable = self.Port(DigitalSink.empty(), optional=True) + self.reset = self.Port(DigitalSink.empty(), optional=True) + + self.ms1 = self.Port(DigitalSink.empty()) + self.ms2 = self.Port(DigitalSink.empty()) + self.ms3 = self.Port(DigitalSink.empty()) + + self.out1a = self.Port(DigitalSource.empty()) + self.out1b = self.Export(DigitalSource.empty()) + self.out2a = self.Export(DigitalSource.empty()) + self.out2b = self.Export(DigitalSource.empty()) + + def contents(self) -> None: + self.footprint( + "U", + "edg:DIP-16_W12.70mm", + { + "1": self.pwr, + "2": self.gnd, + "3": self.out2b, + "4": self.out2a, + "5": self.out1a, + "6": self.out1b, + "7": self.pwr_logic, + "8": self.gnd, + "9": self.dir, + "10": self.step, + "11": self.sleep, + "12": self.reset, + "13": self.ms3, + "14": self.ms2, + "15": self.ms1, + "16": self.enable, + }, + mfr="Pololu", + part="1182", + datasheet="https://www.pololu.com/product/1182", + ) + + +class PololuA4988(BrushedMotorDriver, WrapperSubboardBlock, GeneratorBlock): """Pololu breakout board for the A4988 stepper driver. Adjustable current limit with onboard trimpot.""" def __init__(self, step_resolution: IntLike = 16): @@ -229,20 +282,16 @@ def __init__(self, step_resolution: IntLike = 16): self.step_resolution = self.ArgParameter(step_resolution, doc="microstepping resolution (1, 2, 4, 8, or 16)") self.generator_param(self.step_resolution) - self.model = self.Block(A4988_Device()) + self.model = self.Block(A4988()) self.gnd = self.Export(self.model.gnd, [Common]) self.pwr = self.Export(self.model.vbb1) self.pwr_logic = self.Export(self.model.vdd) self.step = self.Export(self.model.step) self.dir = self.Export(self.model.dir) - - self.enable = self.Port(DigitalSink.empty(), optional=True, doc="disables FET outputs when high") - self.reset = self.Port(DigitalSink.empty(), optional=True, doc="forces translator to Home state when low") - self.sleep = self.Port( - DigitalSink.empty(), optional=True, doc="disables device (to reduce current draw) when low" - ) - self.generator_param(self.enable.is_connected(), self.reset.is_connected(), self.sleep.is_connected()) + self.enable = self.Export(self.model.enable, optional=True) + self.reset = self.Export(self.model.reset, optional=True) + self.sleep = self.Export(self.model.sleep, optional=True) self.out1a = self.Export(self.model.out1a) self.out1b = self.Export(self.model.out1b) @@ -255,71 +304,36 @@ def generate(self) -> None: self.connect(self.pwr, self.model.vbb2) + self.wrapper = self.Block(PololuA4988_Device(), external=True) + # TODO: deduplicate w/ A4988 application circuit step_resolution = self.get(self.step_resolution) if step_resolution == 1: # full step - self.connect(self.gnd.as_digital_source(), self.model.ms1, self.model.ms2, self.model.ms3) + self.connect(self.gnd.as_digital_source(), self.wrapper.ms1, self.wrapper.ms2, self.wrapper.ms3) elif step_resolution == 2: # half step - self.connect(self.gnd.as_digital_source(), self.model.ms2, self.model.ms3) - self.connect(self.pwr_logic.as_digital_source(), self.model.ms1) + self.connect(self.gnd.as_digital_source(), self.wrapper.ms2, self.wrapper.ms3) + self.connect(self.pwr_logic.as_digital_source(), self.wrapper.ms1) elif step_resolution == 4: # quarter step - self.connect(self.gnd.as_digital_source(), self.model.ms1, self.model.ms3) - self.connect(self.pwr_logic.as_digital_source(), self.model.ms2) + self.connect(self.gnd.as_digital_source(), self.wrapper.ms1, self.wrapper.ms3) + self.connect(self.pwr_logic.as_digital_source(), self.wrapper.ms2) elif step_resolution == 8: # eighth step - self.connect(self.gnd.as_digital_source(), self.model.ms3) - self.connect(self.pwr_logic.as_digital_source(), self.model.ms1, self.model.ms2) + self.connect(self.gnd.as_digital_source(), self.wrapper.ms3) + self.connect(self.pwr_logic.as_digital_source(), self.wrapper.ms1, self.wrapper.ms2) elif step_resolution == 16: # sixteenth step - self.connect(self.pwr_logic.as_digital_source(), self.model.ms1, self.model.ms2, self.model.ms3) + self.connect(self.pwr_logic.as_digital_source(), self.wrapper.ms1, self.wrapper.ms2, self.wrapper.ms3) else: raise ValueError(f"unknown step_resolution {step_resolution}") - if self.get(self.enable.is_connected()): - self.connect(self.enable, self.model.enable) - else: - self.connect(self.gnd.as_digital_source(), self.model.enable) - - if self.get(self.reset.is_connected()): - self.connect(self.reset, self.model.reset) - else: - self.connect(self.pwr_logic.as_digital_source(), self.model.reset) - - if self.get(self.sleep.is_connected()): - self.connect(self.sleep, self.model.sleep) - else: - self.connect(self.pwr_logic.as_digital_source(), self.model.sleep) - - # these are implemented internal to the breakout board - (self.dummy_vreg,), _ = self.chain(self.Block(DummyVoltageSink()), self.model.vreg) - (self.dummy_vcp,), _ = self.chain(self.Block(DummyPassive()), self.model.vcp) - (self.dummy_cp1,), _ = self.chain(self.Block(DummyPassive()), self.model.cp1) - (self.dummy_cp2,), _ = self.chain(self.Block(DummyPassive()), self.model.cp2) - (self.dummy_rosc,), _ = self.chain(self.Block(DummyPassive()), self.model.rosc) - (self.dummy_ref,), _ = self.chain(self.Block(DummyAnalogSource()), self.model.ref) - (self.dummy_sense1,), _ = self.chain(self.Block(DummyPassive()), self.model.sense1) - (self.dummy_sense2,), _ = self.chain(self.Block(DummyPassive()), self.model.sense2) - - self.footprint( - "U", - "edg:DIP-16_W12.70mm", - { - "1": self.pwr, - "2": self.gnd, - "3": self.out2b, - "4": self.out2a, - "5": self.out1a, - "6": self.out1b, - "7": self.pwr_logic, - "8": self.gnd, - "9": self.dir, - "10": self.step, - "11": self.model.sleep, - "12": self.model.reset, - "13": self.model.ms3, - "14": self.model.ms2, - "15": self.model.ms1, - "16": self.model.enable, - }, - mfr="Pololu", - part="1182", - datasheet="https://www.pololu.com/product/1182", - ) + self.export_tap(self.gnd, self.wrapper.gnd) + self.export_tap(self.pwr, self.wrapper.pwr) + self.export_tap(self.pwr_logic, self.wrapper.pwr_logic) + self.export_tap(self.step, self.wrapper.step) + self.export_tap(self.dir, self.wrapper.dir) + self.export_tap(self.reset, self.wrapper.reset) + self.export_tap(self.sleep, self.wrapper.sleep) + self.export_tap(self.enable, self.wrapper.enable) + self.export_tap(self.reset, self.wrapper.reset) + self.export_tap(self.out1a, self.wrapper.out1a) + self.export_tap(self.out1b, self.wrapper.out1b) + self.export_tap(self.out2a, self.wrapper.out2a) + self.export_tap(self.out2b, self.wrapper.out2b) From d4eba686e0740aecebccec7b5b1624d0f77ca838 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 12:05:52 -0700 Subject: [PATCH 28/47] skeleton ok --- edg/parts/StepperDriver_A4988.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/edg/parts/StepperDriver_A4988.py b/edg/parts/StepperDriver_A4988.py index f40ae485b..e41281b44 100644 --- a/edg/parts/StepperDriver_A4988.py +++ b/edg/parts/StepperDriver_A4988.py @@ -232,19 +232,18 @@ def __init__(self) -> None: self.step = self.Port(DigitalSink.empty()) self.dir = self.Port(DigitalSink.empty()) - self.reset = self.Port(DigitalSink.empty(), optional=True) - self.sleep = self.Port(DigitalSink.empty(), optional=True) self.enable = self.Port(DigitalSink.empty(), optional=True) self.reset = self.Port(DigitalSink.empty(), optional=True) + self.sleep = self.Port(DigitalSink.empty(), optional=True) self.ms1 = self.Port(DigitalSink.empty()) self.ms2 = self.Port(DigitalSink.empty()) self.ms3 = self.Port(DigitalSink.empty()) self.out1a = self.Port(DigitalSource.empty()) - self.out1b = self.Export(DigitalSource.empty()) - self.out2a = self.Export(DigitalSource.empty()) - self.out2b = self.Export(DigitalSource.empty()) + self.out1b = self.Port(DigitalSource.empty()) + self.out2a = self.Port(DigitalSource.empty()) + self.out2b = self.Port(DigitalSource.empty()) def contents(self) -> None: self.footprint( @@ -282,10 +281,10 @@ def __init__(self, step_resolution: IntLike = 16): self.step_resolution = self.ArgParameter(step_resolution, doc="microstepping resolution (1, 2, 4, 8, or 16)") self.generator_param(self.step_resolution) - self.model = self.Block(A4988()) + self.model = self.Block(A4988(itrip=2 * Amp(tol=0.15))) self.gnd = self.Export(self.model.gnd, [Common]) - self.pwr = self.Export(self.model.vbb1) - self.pwr_logic = self.Export(self.model.vdd) + self.pwr = self.Export(self.model.pwr) + self.pwr_logic = self.Export(self.model.pwr_logic) self.step = self.Export(self.model.step) self.dir = self.Export(self.model.dir) From b38f0f2fd9285ba7fd1803a3e9fb60cc0cbac5ed Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 12:29:15 -0700 Subject: [PATCH 29/47] e2e with examples --- edg/electronics_model/RefdesRefinementPass.py | 23 +- edg/parts/Distance_Vl53l0x.py | 4 +- examples/PcbBot/PcbBot.net.ref | 32 +-- examples/PcbBot/PcbBot.svgpcb.js | 176 +++++++-------- examples/RobotDriver/RobotDriver.net.ref | 24 +- examples/RobotDriver/RobotDriver.svgpcb.js | 210 +++++++++--------- 6 files changed, 241 insertions(+), 228 deletions(-) diff --git a/edg/electronics_model/RefdesRefinementPass.py b/edg/electronics_model/RefdesRefinementPass.py index d1ef12fbb..0e98cdd7f 100644 --- a/edg/electronics_model/RefdesRefinementPass.py +++ b/edg/electronics_model/RefdesRefinementPass.py @@ -1,4 +1,4 @@ -from typing import List, Tuple, Dict, Set, Optional +from typing import List, Tuple, Dict, Set, Optional, cast from typing_extensions import override @@ -38,12 +38,25 @@ def __init__(self, design: CompiledDesign): @override def visit_block(self, context: TransformUtil.TransformContext, block: edgir.BlockTypes) -> None: scope = self.scopes[context.path] - internal_scope = scope - if "fp_is_wrapper" in block.meta.members.node: # wrapper internal blocks ignored - internal_scope = None + + # TODO: deduplicate this with NetlistTransform scopes logic + if "fp_subboard" in block.meta.members.node: + fp_external_blocks = self.design.get_value(context.path.to_tuple() + ("fp_external_blocks",)) + assert isinstance(fp_external_blocks, list) + external_blocks: Optional[List[str]] = cast(List[str], fp_external_blocks) + if "fp_subblocks_ignored" in block.meta.members.node: + internal_scope = None + else: + raise NotImplementedError("support subboard") + else: + external_blocks = None + internal_scope = scope for block_pair in block.blocks: - self.scopes[context.path.append_block(block_pair.name)] = internal_scope + if external_blocks is not None and block_pair.name not in external_blocks: + self.scopes[context.path.append_block(block_pair.name)] = internal_scope + else: + self.scopes[context.path.append_block(block_pair.name)] = scope if "fp_is_footprint" in block.meta.members.node and scope is not None: refdes_prefix = self.design.get_value(context.path.to_tuple() + ("fp_refdes_prefix",)) diff --git a/edg/parts/Distance_Vl53l0x.py b/edg/parts/Distance_Vl53l0x.py index 532a00fa3..74e81913e 100644 --- a/edg/parts/Distance_Vl53l0x.py +++ b/edg/parts/Distance_Vl53l0x.py @@ -116,8 +116,8 @@ def generate(self) -> None: self.export_tap(self.gnd.net, self.conn.pins.request("2")) self.export_tap(self.i2c.scl.net, self.conn.pins.request("3")) self.export_tap(self.i2c.sda.net, self.conn.pins.request("4")) - self.export_tap(self.ic.gpio1.net, self.conn.pins.request("5")) - self.export_tap(self.ic.xshut.net, self.conn.pins.request("6")) + self.export_tap(self.int.net, self.conn.pins.request("5")) + self.export_tap(self.reset.net, self.conn.pins.request("6")) class Vl53l0xArray(DistanceSensor, GeneratorBlock): diff --git a/examples/PcbBot/PcbBot.net.ref b/examples/PcbBot/PcbBot.net.ref index 7f2f7addd..c54a3cb5e 100644 --- a/examples/PcbBot/PcbBot.net.ref +++ b/examples/PcbBot/PcbBot.net.ref @@ -509,11 +509,11 @@ (footprint "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical") (property (name "Sheetname") (value "tof")) (property (name "Sheetfile") (value "edg.parts.Distance_Vl53l0x.Vl53l0xArray")) - (property (name "edg_path") (value "tof.elt[0]")) + (property (name "edg_path") (value "tof.elt[0].conn")) (property (name "edg_short_path") (value "tof.elt[0]")) (property (name "edg_refdes") (value "J4")) - (property (name "edg_part") (value "")) - (property (name "edg_value") (value "")) + (property (name "edg_part") (value "PinSocket2.54 1x6 (Generic)")) + (property (name "edg_value") (value "PinSocket2.54 1x6")) (sheetpath (names "/tof/") (tstamps "/02a3014a/")) (tstamps "081e022e")) (comp (ref "J5") @@ -521,11 +521,11 @@ (footprint "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical") (property (name "Sheetname") (value "tof")) (property (name "Sheetfile") (value "edg.parts.Distance_Vl53l0x.Vl53l0xArray")) - (property (name "edg_path") (value "tof.elt[1]")) + (property (name "edg_path") (value "tof.elt[1].conn")) (property (name "edg_short_path") (value "tof.elt[1]")) (property (name "edg_refdes") (value "J5")) - (property (name "edg_part") (value "")) - (property (name "edg_value") (value "")) + (property (name "edg_part") (value "PinSocket2.54 1x6 (Generic)")) + (property (name "edg_value") (value "PinSocket2.54 1x6")) (sheetpath (names "/tof/") (tstamps "/02a3014a/")) (tstamps "0820022f")) (comp (ref "J6") @@ -533,11 +533,11 @@ (footprint "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical") (property (name "Sheetname") (value "tof")) (property (name "Sheetfile") (value "edg.parts.Distance_Vl53l0x.Vl53l0xArray")) - (property (name "edg_path") (value "tof.elt[2]")) + (property (name "edg_path") (value "tof.elt[2].conn")) (property (name "edg_short_path") (value "tof.elt[2]")) (property (name "edg_refdes") (value "J6")) - (property (name "edg_part") (value "")) - (property (name "edg_value") (value "")) + (property (name "edg_part") (value "PinSocket2.54 1x6 (Generic)")) + (property (name "edg_value") (value "PinSocket2.54 1x6")) (sheetpath (names "/tof/") (tstamps "/02a3014a/")) (tstamps "08220230")) (comp (ref "J7") @@ -545,11 +545,11 @@ (footprint "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical") (property (name "Sheetname") (value "tof")) (property (name "Sheetfile") (value "edg.parts.Distance_Vl53l0x.Vl53l0xArray")) - (property (name "edg_path") (value "tof.elt[3]")) + (property (name "edg_path") (value "tof.elt[3].conn")) (property (name "edg_short_path") (value "tof.elt[3]")) (property (name "edg_refdes") (value "J7")) - (property (name "edg_part") (value "")) - (property (name "edg_value") (value "")) + (property (name "edg_part") (value "PinSocket2.54 1x6 (Generic)")) + (property (name "edg_value") (value "PinSocket2.54 1x6")) (sheetpath (names "/tof/") (tstamps "/02a3014a/")) (tstamps "08240231")) (comp (ref "R10") @@ -1595,13 +1595,13 @@ (net (code 28) (name "led.package.k") (node (ref D7) (pin 1)) (node (ref R9) (pin 1))) -(net (code 29) (name "tof.elt[0].ic.gpio1") +(net (code 29) (name "tof.elt[0].int") (node (ref J4) (pin 5))) -(net (code 30) (name "tof.elt[1].ic.gpio1") +(net (code 30) (name "tof.elt[1].int") (node (ref J5) (pin 5))) -(net (code 31) (name "tof.elt[2].ic.gpio1") +(net (code 31) (name "tof.elt[2].int") (node (ref J6) (pin 5))) -(net (code 32) (name "tof.elt[3].ic.gpio1") +(net (code 32) (name "tof.elt[3].int") (node (ref J7) (pin 5))) (net (code 33) (name "imu.int1") (node (ref U5) (pin 4))) diff --git a/examples/PcbBot/PcbBot.svgpcb.js b/examples/PcbBot/PcbBot.svgpcb.js index 584d3a526..f5b927d26 100644 --- a/examples/PcbBot/PcbBot.svgpcb.js +++ b/examples/PcbBot/PcbBot.svgpcb.js @@ -210,22 +210,22 @@ const R9 = board.add(R_0603_1608Metric, { translate: pt(2.510, 3.494), rotate: 0, id: 'R9' }) -// tof.elt[0] +// tof.elt[0].conn const J4 = board.add(PinSocket_1x06_P2_54mm_Vertical, { translate: pt(1.457, 2.309), rotate: 0, id: 'J4' }) -// tof.elt[1] +// tof.elt[1].conn const J5 = board.add(PinSocket_1x06_P2_54mm_Vertical, { translate: pt(1.636, 2.309), rotate: 0, id: 'J5' }) -// tof.elt[2] +// tof.elt[2].conn const J6 = board.add(PinSocket_1x06_P2_54mm_Vertical, { translate: pt(1.815, 2.309), rotate: 0, id: 'J6' }) -// tof.elt[3] +// tof.elt[3].conn const J7 = board.add(PinSocket_1x06_P2_54mm_Vertical, { translate: pt(1.994, 2.309), rotate: 0, id: 'J7' @@ -251,49 +251,49 @@ const TP5 = board.add(TestPoint_TE_RCT_0805, { id: 'TP5' }) // imu.ic -const U5 = board.add(Bosch_LGA_14_3x2_5mm_P0_5mm, { +const U9 = board.add(Bosch_LGA_14_3x2_5mm_P0_5mm, { translate: pt(1.259, 3.431), rotate: 0, - id: 'U5' + id: 'U9' }) // imu.vdd_cap.cap -const C8 = board.add(C_0603_1608Metric, { +const C16 = board.add(C_0603_1608Metric, { translate: pt(1.245, 3.563), rotate: 0, - id: 'C8' + id: 'C16' }) // imu.vddio_cap.cap -const C9 = board.add(C_0603_1608Metric, { +const C17 = board.add(C_0603_1608Metric, { translate: pt(1.401, 3.563), rotate: 0, - id: 'C9' + id: 'C17' }) // mag.ic -const U6 = board.add(LGA_16_3x3mm_P0_5mm, { +const U10 = board.add(LGA_16_3x3mm_P0_5mm, { translate: pt(4.222, 2.911), rotate: 0, - id: 'U6' + id: 'U10' }) // mag.vdd_cap.cap -const C10 = board.add(C_0603_1608Metric, { +const C18 = board.add(C_0603_1608Metric, { translate: pt(4.211, 3.048), rotate: 0, - id: 'C10' + id: 'C18' }) // mag.set_cap -const C11 = board.add(C_0603_1608Metric, { +const C19 = board.add(C_0603_1608Metric, { translate: pt(4.367, 3.048), rotate: 0, - id: 'C11' + id: 'C19' }) // mag.c1.cap -const C12 = board.add(C_0805_2012Metric, { +const C20 = board.add(C_0805_2012Metric, { translate: pt(4.397, 2.881), rotate: 0, - id: 'C12' + id: 'C20' }) // expander.ic -const U7 = board.add(TSSOP_16_4_4x5mm_P0_65mm, { +const U11 = board.add(TSSOP_16_4_4x5mm_P0_65mm, { translate: pt(2.486, 2.951), rotate: 0, - id: 'U7' + id: 'U11' }) // expander.vdd_cap.cap -const C13 = board.add(C_0603_1608Metric, { +const C21 = board.add(C_0603_1608Metric, { translate: pt(2.393, 3.127), rotate: 0, - id: 'C13' + id: 'C21' }) // rgb.package const D8 = board.add(LED_D5_0mm_4_RGB_Staggered_Pins, { @@ -321,19 +321,19 @@ const J8 = board.add(Hirose_FH12_30S_0_5SH_1x30_1MP_P0_50mm_Horizontal, { id: 'J8' }) // oled.lcd -const U8 = board.add(Lcd_Er_Oled0_96_1_1_Outline, { +const U12 = board.add(Lcd_Er_Oled0_96_1_1_Outline, { translate: pt(3.066, 0.516), rotate: 0, - id: 'U8' + id: 'U12' }) // oled.c1_cap -const C14 = board.add(C_0603_1608Metric, { +const C22 = board.add(C_0603_1608Metric, { translate: pt(3.815, 0.889), rotate: 0, - id: 'C14' + id: 'C22' }) // oled.c2_cap -const C15 = board.add(C_0603_1608Metric, { +const C23 = board.add(C_0603_1608Metric, { translate: pt(3.971, 0.889), rotate: 0, - id: 'C15' + id: 'C23' }) // oled.iref_res.res const R15 = board.add(R_0603_1608Metric, { @@ -341,24 +341,24 @@ const R15 = board.add(R_0603_1608Metric, { id: 'R15' }) // oled.vcomh_cap.cap -const C16 = board.add(C_0805_2012Metric, { +const C24 = board.add(C_0805_2012Metric, { translate: pt(3.477, 0.899), rotate: 0, - id: 'C16' + id: 'C24' }) // oled.vdd_cap1.cap -const C17 = board.add(C_0603_1608Metric, { +const C25 = board.add(C_0603_1608Metric, { translate: pt(3.624, 1.006), rotate: 0, - id: 'C17' + id: 'C25' }) // oled.vbat_cap.cap -const C18 = board.add(C_0603_1608Metric, { +const C26 = board.add(C_0603_1608Metric, { translate: pt(3.780, 1.006), rotate: 0, - id: 'C18' + id: 'C26' }) // oled.vcc_cap.cap -const C19 = board.add(C_0805_2012Metric, { +const C27 = board.add(C_0805_2012Metric, { translate: pt(3.650, 0.899), rotate: 0, - id: 'C19' + id: 'C27' }) // batt_sense.div.top_res const R16 = board.add(R_0603_1608Metric, { @@ -476,39 +476,39 @@ const D25 = board.add(LED_SK6812MINI_E, { id: 'D25' }) // npx_key.cap.cap -const C20 = board.add(C_0603_1608Metric, { +const C28 = board.add(C_0603_1608Metric, { translate: pt(0.839, 3.567), rotate: 0, - id: 'C20' + id: 'C28' }) // reg_2v5.ic -const U9 = board.add(SOT_23, { +const U13 = board.add(SOT_23, { translate: pt(0.076, 3.435), rotate: 0, - id: 'U9' + id: 'U13' }) // reg_2v5.in_cap.cap -const C21 = board.add(C_0603_1608Metric, { +const C29 = board.add(C_0603_1608Metric, { translate: pt(0.058, 3.570), rotate: 0, - id: 'C21' + id: 'C29' }) // reg_2v5.out_cap.cap -const C22 = board.add(C_0603_1608Metric, { +const C30 = board.add(C_0603_1608Metric, { translate: pt(0.214, 3.570), rotate: 0, - id: 'C22' + id: 'C30' }) // reg_1v2.ic -const U10 = board.add(SOT_23, { +const U14 = board.add(SOT_23, { translate: pt(0.466, 3.435), rotate: 0, - id: 'U10' + id: 'U14' }) // reg_1v2.in_cap.cap -const C23 = board.add(C_0603_1608Metric, { +const C31 = board.add(C_0603_1608Metric, { translate: pt(0.449, 3.570), rotate: 0, - id: 'C23' + id: 'C31' }) // reg_1v2.out_cap.cap -const C24 = board.add(C_0603_1608Metric, { +const C32 = board.add(C_0603_1608Metric, { translate: pt(0.605, 3.570), rotate: 0, - id: 'C24' + id: 'C32' }) // cam.device.conn const J13 = board.add(Hirose_FH12_24S_0_5SH_1x24_1MP_P0_50mm_Horizontal, { @@ -516,19 +516,19 @@ const J13 = board.add(Hirose_FH12_24S_0_5SH_1x24_1MP_P0_50mm_Horizontal, { id: 'J13' }) // cam.dovdd_cap.cap -const C25 = board.add(C_0603_1608Metric, { +const C33 = board.add(C_0603_1608Metric, { translate: pt(0.058, 3.222), rotate: 0, - id: 'C25' + id: 'C33' }) // cam.reset_cap.cap -const C26 = board.add(C_0603_1608Metric, { +const C34 = board.add(C_0603_1608Metric, { translate: pt(0.214, 3.222), rotate: 0, - id: 'C26' + id: 'C34' }) // cam.pclk_cap.cap -const C27 = board.add(C_0603_1608Metric, { +const C35 = board.add(C_0603_1608Metric, { translate: pt(0.370, 3.222), rotate: 0, - id: 'C27' + id: 'C35' }) // cam.reset_pull.res const R18 = board.add(R_0603_1608Metric, { @@ -543,17 +543,17 @@ const SW3 = board.add(SW_Hotswap_Kailh_MX, { board.setNetlist([ {name: "vusb", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["R5", "1"], ["D4", "2"], ["Q3", "1"], ["U2", "4"], ["C3", "1"], ["D6", "2"]]}, - {name: "gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["J2", "1"], ["TP1", "1"], ["R4", "1"], ["Q2", "2"], ["SW1", "2"], ["D3", "2"], ["R5", "2"], ["U1", "1"], ["C1", "2"], ["C2", "2"], ["D5", "2"], ["U2", "2"], ["C3", "2"], ["C4", "2"], ["R6", "1"], ["U3", "1"], ["U3", "40"], ["U3", "41"], ["C5", "2"], ["C6", "2"], ["J3", "4"], ["SW2", "2"], ["C7", "2"], ["U4", "3"], ["R9", "2"], ["J4", "2"], ["J5", "2"], ["J6", "2"], ["J7", "2"], ["U5", "1"], ["U5", "2"], ["U5", "3"], ["U5", "6"], ["U5", "7"], ["C8", "2"], ["C9", "2"], ["U6", "11"], ["U6", "9"], ["C10", "2"], ["C12", "2"], ["U7", "1"], ["U7", "2"], ["U7", "3"], ["U7", "8"], ["C13", "2"], ["J8", "1"], ["J8", "10"], ["J8", "12"], ["J8", "13"], ["J8", "15"], ["J8", "16"], ["J8", "17"], ["J8", "21"], ["J8", "22"], ["J8", "23"], ["J8", "24"], ["J8", "25"], ["J8", "29"], ["J8", "30"], ["J8", "8"], ["R15", "1"], ["C16", "2"], ["C17", "2"], ["C18", "2"], ["C19", "2"], ["R17", "2"], ["J9", "3"], ["J10", "3"], ["J11", "3"], ["J12", "3"], ["D9", "3"], ["D10", "3"], ["D11", "3"], ["D12", "3"], ["D13", "3"], ["D14", "3"], ["D15", "3"], ["D16", "3"], ["D17", "3"], ["D18", "3"], ["D19", "3"], ["D20", "3"], ["D21", "3"], ["D22", "3"], ["D23", "3"], ["D24", "3"], ["D25", "3"], ["C20", "2"], ["U9", "1"], ["C21", "2"], ["C22", "2"], ["U10", "1"], ["C23", "2"], ["C24", "2"], ["J13", "10"], ["J13", "17"], ["J13", "23"], ["C25", "2"], ["C26", "2"], ["C27", "2"], ["SW3", "2"]]}, - {name: "vbatt", pads: [["Q1", "3"], ["D3", "1"], ["TP2", "1"], ["Q3", "3"], ["R16", "1"], ["J9", "2"], ["J10", "2"], ["J11", "2"], ["J12", "2"], ["D9", "1"], ["D10", "1"], ["D11", "1"], ["D12", "1"], ["D13", "1"], ["D14", "1"], ["D15", "1"], ["D16", "1"], ["D17", "1"], ["D18", "1"], ["D19", "1"], ["D20", "1"], ["D21", "1"], ["D22", "1"], ["D23", "1"], ["D24", "1"], ["D25", "1"], ["C20", "1"]]}, - {name: "pwr", pads: [["D4", "1"], ["Q3", "2"], ["U1", "3"], ["C1", "1"], ["U9", "3"], ["C21", "1"], ["U10", "3"], ["C23", "1"]]}, - {name: "v3v3", pads: [["U1", "2"], ["C2", "1"], ["D5", "1"], ["TP3", "1"], ["U3", "2"], ["C5", "1"], ["C6", "1"], ["J3", "1"], ["R8", "1"], ["J4", "1"], ["J4", "6"], ["J5", "1"], ["J6", "1"], ["J7", "1"], ["R10", "1"], ["R11", "1"], ["U5", "12"], ["U5", "5"], ["U5", "8"], ["C8", "1"], ["C9", "1"], ["U6", "13"], ["U6", "2"], ["U6", "4"], ["C10", "1"], ["U7", "16"], ["C13", "1"], ["D8", "2"], ["J8", "11"], ["J8", "6"], ["J8", "9"], ["C17", "1"], ["C18", "1"], ["J13", "14"], ["C25", "1"], ["R18", "1"]]}, - {name: "v2v5", pads: [["U9", "2"], ["C22", "1"], ["J13", "21"]]}, - {name: "v1v2", pads: [["U10", "2"], ["C24", "1"], ["J13", "15"]]}, + {name: "gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["J2", "1"], ["TP1", "1"], ["R4", "1"], ["Q2", "2"], ["SW1", "2"], ["D3", "2"], ["R5", "2"], ["U1", "1"], ["C1", "2"], ["C2", "2"], ["D5", "2"], ["U2", "2"], ["C3", "2"], ["C4", "2"], ["R6", "1"], ["U3", "1"], ["U3", "40"], ["U3", "41"], ["C5", "2"], ["C6", "2"], ["J3", "4"], ["SW2", "2"], ["C7", "2"], ["U4", "3"], ["R9", "2"], ["J4", "2"], ["J5", "2"], ["J6", "2"], ["J7", "2"], ["U9", "1"], ["U9", "2"], ["U9", "3"], ["U9", "6"], ["U9", "7"], ["C16", "2"], ["C17", "2"], ["U10", "11"], ["U10", "9"], ["C18", "2"], ["C20", "2"], ["U11", "1"], ["U11", "2"], ["U11", "3"], ["U11", "8"], ["C21", "2"], ["J8", "1"], ["J8", "10"], ["J8", "12"], ["J8", "13"], ["J8", "15"], ["J8", "16"], ["J8", "17"], ["J8", "21"], ["J8", "22"], ["J8", "23"], ["J8", "24"], ["J8", "25"], ["J8", "29"], ["J8", "30"], ["J8", "8"], ["R15", "1"], ["C24", "2"], ["C25", "2"], ["C26", "2"], ["C27", "2"], ["R17", "2"], ["J9", "3"], ["J10", "3"], ["J11", "3"], ["J12", "3"], ["D9", "3"], ["D10", "3"], ["D11", "3"], ["D12", "3"], ["D13", "3"], ["D14", "3"], ["D15", "3"], ["D16", "3"], ["D17", "3"], ["D18", "3"], ["D19", "3"], ["D20", "3"], ["D21", "3"], ["D22", "3"], ["D23", "3"], ["D24", "3"], ["D25", "3"], ["C28", "2"], ["U13", "1"], ["C29", "2"], ["C30", "2"], ["U14", "1"], ["C31", "2"], ["C32", "2"], ["J13", "10"], ["J13", "17"], ["J13", "23"], ["C33", "2"], ["C34", "2"], ["C35", "2"], ["SW3", "2"]]}, + {name: "vbatt", pads: [["Q1", "3"], ["D3", "1"], ["TP2", "1"], ["Q3", "3"], ["R16", "1"], ["J9", "2"], ["J10", "2"], ["J11", "2"], ["J12", "2"], ["D9", "1"], ["D10", "1"], ["D11", "1"], ["D12", "1"], ["D13", "1"], ["D14", "1"], ["D15", "1"], ["D16", "1"], ["D17", "1"], ["D18", "1"], ["D19", "1"], ["D20", "1"], ["D21", "1"], ["D22", "1"], ["D23", "1"], ["D24", "1"], ["D25", "1"], ["C28", "1"]]}, + {name: "pwr", pads: [["D4", "1"], ["Q3", "2"], ["U1", "3"], ["C1", "1"], ["U13", "3"], ["C29", "1"], ["U14", "3"], ["C31", "1"]]}, + {name: "v3v3", pads: [["U1", "2"], ["C2", "1"], ["D5", "1"], ["TP3", "1"], ["U3", "2"], ["C5", "1"], ["C6", "1"], ["J3", "1"], ["R8", "1"], ["J4", "1"], ["J4", "6"], ["J5", "1"], ["J6", "1"], ["J7", "1"], ["R10", "1"], ["R11", "1"], ["U9", "12"], ["U9", "5"], ["U9", "8"], ["C16", "1"], ["C17", "1"], ["U10", "13"], ["U10", "2"], ["U10", "4"], ["C18", "1"], ["U11", "16"], ["C21", "1"], ["D8", "2"], ["J8", "11"], ["J8", "6"], ["J8", "9"], ["C25", "1"], ["C26", "1"], ["J13", "14"], ["C33", "1"], ["R18", "1"]]}, + {name: "v2v5", pads: [["U13", "2"], ["C30", "1"], ["J13", "21"]]}, + {name: "v1v2", pads: [["U14", "2"], ["C32", "1"], ["J13", "15"]]}, {name: "usb_chain_0.d_P", pads: [["J1", "A6"], ["J1", "B6"], ["U3", "14"], ["U4", "2"]]}, {name: "usb_chain_0.d_N", pads: [["J1", "A7"], ["J1", "B7"], ["U3", "13"], ["U4", "1"]]}, {name: "touch_0", pads: [["U3", "7"]]}, - {name: "i2c_chain_0.scl", pads: [["U3", "38"], ["J4", "3"], ["J5", "3"], ["J6", "3"], ["J7", "3"], ["R10", "2"], ["TP4", "1"], ["U5", "13"], ["U6", "1"], ["U7", "14"], ["J8", "18"], ["J13", "20"]]}, - {name: "i2c_chain_0.sda", pads: [["U3", "4"], ["J4", "4"], ["J5", "4"], ["J6", "4"], ["J7", "4"], ["R11", "2"], ["TP5", "1"], ["U5", "14"], ["U6", "16"], ["U7", "15"], ["J8", "19"], ["J8", "20"], ["J13", "22"]]}, + {name: "i2c_chain_0.scl", pads: [["U3", "38"], ["J4", "3"], ["J5", "3"], ["J6", "3"], ["J7", "3"], ["R10", "2"], ["TP4", "1"], ["U9", "13"], ["U10", "1"], ["U11", "14"], ["J8", "18"], ["J13", "20"]]}, + {name: "i2c_chain_0.sda", pads: [["U3", "4"], ["J4", "4"], ["J5", "4"], ["J6", "4"], ["J7", "4"], ["R11", "2"], ["TP5", "1"], ["U9", "14"], ["U10", "16"], ["U11", "15"], ["J8", "19"], ["J8", "20"], ["J13", "22"]]}, {name: "usb.conn.cc.cc1", pads: [["J1", "A5"], ["R1", "2"]]}, {name: "usb.conn.cc.cc2", pads: [["J1", "B5"], ["R2", "2"]]}, {name: "batt.pwr", pads: [["J2", "2"], ["F1", "1"], ["U2", "3"], ["C4", "1"]]}, @@ -570,33 +570,33 @@ board.setNetlist([ {name: "mcu.program_en_node", pads: [["U3", "3"], ["R8", "2"], ["C7", "1"]]}, {name: "mcu.program_boot_node", pads: [["U3", "27"], ["SW2", "1"], ["D7", "2"]]}, {name: "led.package.k", pads: [["D7", "1"], ["R9", "1"]]}, - {name: "tof.elt[0].ic.gpio1", pads: [["J4", "5"]]}, - {name: "tof.elt[1].ic.gpio1", pads: [["J5", "5"]]}, - {name: "tof.elt[2].ic.gpio1", pads: [["J6", "5"]]}, - {name: "tof.elt[3].ic.gpio1", pads: [["J7", "5"]]}, - {name: "imu.int1", pads: [["U5", "4"]]}, - {name: "imu.int2", pads: [["U5", "9"]]}, - {name: "mag.drdy", pads: [["U6", "15"]]}, - {name: "mag.ic.setp", pads: [["U6", "8"], ["C11", "1"]]}, - {name: "mag.ic.setc", pads: [["U6", "12"], ["C11", "2"]]}, - {name: "mag.ic.c1", pads: [["U6", "10"], ["C12", "1"]]}, - {name: "expander.io.tof_reset_1", pads: [["J5", "6"], ["U7", "4"]]}, - {name: "expander.io.tof_reset_2", pads: [["J6", "6"], ["U7", "5"]]}, - {name: "expander.io.tof_reset_3", pads: [["J7", "6"], ["U7", "6"]]}, - {name: "expander.io.rgb_red", pads: [["U7", "7"], ["R12", "2"]]}, - {name: "expander.io.rgb_green", pads: [["U7", "9"], ["R13", "2"]]}, - {name: "expander.io.rgb_blue", pads: [["U7", "10"], ["R14", "2"]]}, + {name: "tof.elt[0].int", pads: [["J4", "5"]]}, + {name: "tof.elt[1].int", pads: [["J5", "5"]]}, + {name: "tof.elt[2].int", pads: [["J6", "5"]]}, + {name: "tof.elt[3].int", pads: [["J7", "5"]]}, + {name: "imu.int1", pads: [["U9", "4"]]}, + {name: "imu.int2", pads: [["U9", "9"]]}, + {name: "mag.drdy", pads: [["U10", "15"]]}, + {name: "mag.ic.setp", pads: [["U10", "8"], ["C19", "1"]]}, + {name: "mag.ic.setc", pads: [["U10", "12"], ["C19", "2"]]}, + {name: "mag.ic.c1", pads: [["U10", "10"], ["C20", "1"]]}, + {name: "expander.io.tof_reset_1", pads: [["J5", "6"], ["U11", "4"]]}, + {name: "expander.io.tof_reset_2", pads: [["J6", "6"], ["U11", "5"]]}, + {name: "expander.io.tof_reset_3", pads: [["J7", "6"], ["U11", "6"]]}, + {name: "expander.io.rgb_red", pads: [["U11", "7"], ["R12", "2"]]}, + {name: "expander.io.rgb_green", pads: [["U11", "9"], ["R13", "2"]]}, + {name: "expander.io.rgb_blue", pads: [["U11", "10"], ["R14", "2"]]}, {name: "rgb.package.k_red", pads: [["D8", "1"], ["R12", "1"]]}, {name: "rgb.package.k_green", pads: [["D8", "3"], ["R13", "1"]]}, {name: "rgb.package.k_blue", pads: [["D8", "4"], ["R14", "1"]]}, {name: "oled.reset", pads: [["U3", "31"], ["J8", "14"]]}, - {name: "oled.device.vcc", pads: [["J8", "28"], ["C19", "1"]]}, + {name: "oled.device.vcc", pads: [["J8", "28"], ["C27", "1"]]}, {name: "oled.device.iref", pads: [["J8", "26"], ["R15", "2"]]}, - {name: "oled.device.vcomh", pads: [["J8", "27"], ["C16", "1"]]}, - {name: "oled.device.c1p", pads: [["J8", "4"], ["C14", "1"]]}, - {name: "oled.device.c1n", pads: [["J8", "5"], ["C14", "2"]]}, - {name: "oled.device.c2p", pads: [["J8", "2"], ["C15", "1"]]}, - {name: "oled.device.c2n", pads: [["J8", "3"], ["C15", "2"]]}, + {name: "oled.device.vcomh", pads: [["J8", "27"], ["C24", "1"]]}, + {name: "oled.device.c1p", pads: [["J8", "4"], ["C22", "1"]]}, + {name: "oled.device.c1n", pads: [["J8", "5"], ["C22", "2"]]}, + {name: "oled.device.c2p", pads: [["J8", "2"], ["C23", "1"]]}, + {name: "oled.device.c2n", pads: [["J8", "3"], ["C23", "2"]]}, {name: "batt_sense.output", pads: [["U3", "39"], ["R16", "2"], ["R17", "1"]]}, {name: "servo[0].pwm", pads: [["U3", "5"], ["J9", "1"]]}, {name: "servo[1].pwm", pads: [["U3", "6"], ["J10", "1"]]}, @@ -621,7 +621,7 @@ board.setNetlist([ {name: "npx.led[14].dout", pads: [["D23", "2"], ["D24", "4"]]}, {name: "npx_key.dout", pads: [["D25", "2"]]}, {name: "cam.dvp8.xclk", pads: [["U3", "17"], ["J13", "12"]]}, - {name: "cam.dvp8.pclk", pads: [["U3", "20"], ["J13", "8"], ["C27", "1"]]}, + {name: "cam.dvp8.pclk", pads: [["U3", "20"], ["J13", "8"], ["C35", "1"]]}, {name: "cam.dvp8.href", pads: [["U3", "12"], ["J13", "16"]]}, {name: "cam.dvp8.vsync", pads: [["U3", "11"], ["J13", "18"]]}, {name: "cam.dvp8.y0", pads: [["U3", "22"], ["J13", "6"]]}, @@ -634,7 +634,7 @@ board.setNetlist([ {name: "cam.dvp8.y7", pads: [["U3", "15"], ["J13", "13"]]}, {name: "cam.device.y.0", pads: [["J13", "1"]]}, {name: "cam.device.y.1", pads: [["J13", "2"]]}, - {name: "cam.device.reset", pads: [["J13", "19"], ["C26", "1"], ["R18", "2"]]}, + {name: "cam.device.reset", pads: [["J13", "19"], ["C34", "1"], ["R18", "2"]]}, {name: "switch.out", pads: [["U3", "34"], ["SW3", "1"]]} ]) diff --git a/examples/RobotDriver/RobotDriver.net.ref b/examples/RobotDriver/RobotDriver.net.ref index 09327fa89..ee384177b 100644 --- a/examples/RobotDriver/RobotDriver.net.ref +++ b/examples/RobotDriver/RobotDriver.net.ref @@ -341,11 +341,11 @@ (footprint "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical") (property (name "Sheetname") (value "tof")) (property (name "Sheetfile") (value "edg.parts.Distance_Vl53l0x.Vl53l0xArray")) - (property (name "edg_path") (value "tof.elt[0]")) + (property (name "edg_path") (value "tof.elt[0].conn")) (property (name "edg_short_path") (value "tof.elt[0]")) (property (name "edg_refdes") (value "J3")) - (property (name "edg_part") (value "")) - (property (name "edg_value") (value "")) + (property (name "edg_part") (value "PinSocket2.54 1x6 (Generic)")) + (property (name "edg_value") (value "PinSocket2.54 1x6")) (sheetpath (names "/tof/") (tstamps "/02a3014a/")) (tstamps "081e022e")) (comp (ref "J4") @@ -353,11 +353,11 @@ (footprint "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical") (property (name "Sheetname") (value "tof")) (property (name "Sheetfile") (value "edg.parts.Distance_Vl53l0x.Vl53l0xArray")) - (property (name "edg_path") (value "tof.elt[1]")) + (property (name "edg_path") (value "tof.elt[1].conn")) (property (name "edg_short_path") (value "tof.elt[1]")) (property (name "edg_refdes") (value "J4")) - (property (name "edg_part") (value "")) - (property (name "edg_value") (value "")) + (property (name "edg_part") (value "PinSocket2.54 1x6 (Generic)")) + (property (name "edg_value") (value "PinSocket2.54 1x6")) (sheetpath (names "/tof/") (tstamps "/02a3014a/")) (tstamps "0820022f")) (comp (ref "J5") @@ -365,11 +365,11 @@ (footprint "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical") (property (name "Sheetname") (value "tof")) (property (name "Sheetfile") (value "edg.parts.Distance_Vl53l0x.Vl53l0xArray")) - (property (name "edg_path") (value "tof.elt[2]")) + (property (name "edg_path") (value "tof.elt[2].conn")) (property (name "edg_short_path") (value "tof.elt[2]")) (property (name "edg_refdes") (value "J5")) - (property (name "edg_part") (value "")) - (property (name "edg_value") (value "")) + (property (name "edg_part") (value "PinSocket2.54 1x6 (Generic)")) + (property (name "edg_value") (value "PinSocket2.54 1x6")) (sheetpath (names "/tof/") (tstamps "/02a3014a/")) (tstamps "08220230")) (comp (ref "R9") @@ -1188,11 +1188,11 @@ (node (ref SW1) (pin 1))) (net (code 19) (name "mcu.ic.io2") (node (ref U3) (pin 24))) -(net (code 20) (name "tof.elt[0].ic.gpio1") +(net (code 20) (name "tof.elt[0].int") (node (ref J3) (pin 5))) -(net (code 21) (name "tof.elt[1].ic.gpio1") +(net (code 21) (name "tof.elt[1].int") (node (ref J4) (pin 5))) -(net (code 22) (name "tof.elt[2].ic.gpio1") +(net (code 22) (name "tof.elt[2].int") (node (ref J5) (pin 5))) (net (code 23) (name "lcd.reset") (node (ref U3) (pin 12)) diff --git a/examples/RobotDriver/RobotDriver.svgpcb.js b/examples/RobotDriver/RobotDriver.svgpcb.js index 2a1ae5d21..f710ccfca 100644 --- a/examples/RobotDriver/RobotDriver.svgpcb.js +++ b/examples/RobotDriver/RobotDriver.svgpcb.js @@ -140,17 +140,17 @@ const C6 = board.add(C_0603_1608Metric, { translate: pt(1.987, 0.903), rotate: 0, id: 'C6' }) -// tof.elt[0] +// tof.elt[0].conn const J3 = board.add(PinSocket_1x06_P2_54mm_Vertical, { translate: pt(0.803, 2.311), rotate: 0, id: 'J3' }) -// tof.elt[1] +// tof.elt[1].conn const J4 = board.add(PinSocket_1x06_P2_54mm_Vertical, { translate: pt(0.982, 2.311), rotate: 0, id: 'J4' }) -// tof.elt[2] +// tof.elt[2].conn const J5 = board.add(PinSocket_1x06_P2_54mm_Vertical, { translate: pt(1.161, 2.311), rotate: 0, id: 'J5' @@ -181,19 +181,19 @@ const J6 = board.add(Hirose_FH12_15S_0_5SH_1x15_1MP_P0_50mm_Horizontal, { id: 'J6' }) // lcd.lcd -const U4 = board.add(Lcd_Er_Oled0_91_3_Outline, { +const U7 = board.add(Lcd_Er_Oled0_91_3_Outline, { translate: pt(3.064, 0.260), rotate: 0, - id: 'U4' + id: 'U7' }) // lcd.c1_cap -const C7 = board.add(C_0603_1608Metric, { +const C13 = board.add(C_0603_1608Metric, { translate: pt(3.693, 0.521), rotate: 0, - id: 'C7' + id: 'C13' }) // lcd.c2_cap -const C8 = board.add(C_0603_1608Metric, { +const C14 = board.add(C_0603_1608Metric, { translate: pt(3.173, 0.637), rotate: 0, - id: 'C8' + id: 'C14' }) // lcd.iref_res.res const R11 = board.add(R_0603_1608Metric, { @@ -201,54 +201,54 @@ const R11 = board.add(R_0603_1608Metric, { id: 'R11' }) // lcd.vcomh_cap.cap -const C9 = board.add(C_0805_2012Metric, { +const C15 = board.add(C_0805_2012Metric, { translate: pt(3.182, 0.531), rotate: 0, - id: 'C9' + id: 'C15' }) // lcd.vdd_cap1.cap -const C10 = board.add(C_0603_1608Metric, { +const C16 = board.add(C_0603_1608Metric, { translate: pt(3.485, 0.637), rotate: 0, - id: 'C10' + id: 'C16' }) // lcd.vdd_cap2.cap -const C11 = board.add(C_0805_2012Metric, { +const C17 = board.add(C_0805_2012Metric, { translate: pt(3.355, 0.531), rotate: 0, - id: 'C11' + id: 'C17' }) // lcd.vcc_cap1.cap -const C12 = board.add(C_0603_1608Metric, { +const C18 = board.add(C_0603_1608Metric, { translate: pt(3.641, 0.637), rotate: 0, - id: 'C12' + id: 'C18' }) // lcd.vcc_cap2.cap -const C13 = board.add(C_0805_2012Metric, { +const C19 = board.add(C_0805_2012Metric, { translate: pt(3.528, 0.531), rotate: 0, - id: 'C13' + id: 'C19' }) // imu.ic -const U5 = board.add(Bosch_LGA_14_3x2_5mm_P0_5mm, { +const U8 = board.add(Bosch_LGA_14_3x2_5mm_P0_5mm, { translate: pt(1.200, 2.652), rotate: 0, - id: 'U5' + id: 'U8' }) // imu.vdd_cap.cap -const C14 = board.add(C_0603_1608Metric, { +const C20 = board.add(C_0603_1608Metric, { translate: pt(1.186, 2.783), rotate: 0, - id: 'C14' + id: 'C20' }) // imu.vddio_cap.cap -const C15 = board.add(C_0603_1608Metric, { +const C21 = board.add(C_0603_1608Metric, { translate: pt(1.342, 2.783), rotate: 0, - id: 'C15' + id: 'C21' }) // expander.ic -const U6 = board.add(SOIC_16W_7_5x10_3mm_P1_27mm, { +const U9 = board.add(SOIC_16W_7_5x10_3mm_P1_27mm, { translate: pt(1.582, 1.955), rotate: 0, - id: 'U6' + id: 'U9' }) // expander.vdd_cap.cap -const C16 = board.add(C_0603_1608Metric, { +const C22 = board.add(C_0603_1608Metric, { translate: pt(1.913, 1.771), rotate: 0, - id: 'C16' + id: 'C22' }) // leds.led[0].package const D2 = board.add(LED_0603_1608Metric, { @@ -276,19 +276,19 @@ const TP6 = board.add(TestPoint_TE_RCT_0805, { id: 'TP6' }) // spk_drv.ic -const U7 = board.add(MSOP_8_1EP_3x3mm_P0_65mm_EP1_68x1_88mm_ThermalVias, { +const U10 = board.add(MSOP_8_1EP_3x3mm_P0_65mm_EP1_68x1_88mm_ThermalVias, { translate: pt(0.704, 2.657), rotate: 0, - id: 'U7' + id: 'U10' }) // spk_drv.pwr_cap.cap -const C17 = board.add(C_0603_1608Metric, { +const C23 = board.add(C_0603_1608Metric, { translate: pt(0.639, 2.794), rotate: 0, - id: 'C17' + id: 'C23' }) // spk_drv.bulk_cap.cap -const C18 = board.add(C_0805_2012Metric, { +const C24 = board.add(C_0805_2012Metric, { translate: pt(0.933, 2.627), rotate: 0, - id: 'C18' + id: 'C24' }) // spk_drv.inp_res.res const R12 = board.add(R_0603_1608Metric, { @@ -296,9 +296,9 @@ const R12 = board.add(R_0603_1608Metric, { id: 'R12' }) // spk_drv.inp_cap.cap -const C19 = board.add(C_0603_1608Metric, { +const C25 = board.add(C_0603_1608Metric, { translate: pt(0.951, 2.794), rotate: 0, - id: 'C19' + id: 'C25' }) // spk_drv.inn_res.res const R13 = board.add(R_0603_1608Metric, { @@ -306,9 +306,9 @@ const R13 = board.add(R_0603_1608Metric, { id: 'R13' }) // spk_drv.inn_cap.cap -const C20 = board.add(C_0603_1608Metric, { +const C26 = board.add(C_0603_1608Metric, { translate: pt(0.795, 2.891), rotate: 0, - id: 'C20' + id: 'C26' }) // spk.conn const J7 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, { @@ -346,24 +346,24 @@ const J8 = board.add(JST_PH_B3B_PH_K_1x03_P2_00mm_Vertical, { id: 'J8' }) // motor_driver1.ic -const U8 = board.add(TSSOP_16_1EP_4_4x5mm_P0_65mm_EP3x3mm_ThermalVias, { +const U11 = board.add(TSSOP_16_1EP_4_4x5mm_P0_65mm_EP3x3mm_ThermalVias, { translate: pt(3.575, 1.850), rotate: 0, - id: 'U8' + id: 'U11' }) // motor_driver1.vm_cap.cap -const C21 = board.add(C_0805_2012Metric, { +const C27 = board.add(C_0805_2012Metric, { translate: pt(3.489, 2.037), rotate: 0, - id: 'C21' + id: 'C27' }) // motor_driver1.vint_cap.cap -const C22 = board.add(C_0805_2012Metric, { +const C28 = board.add(C_0805_2012Metric, { translate: pt(3.662, 2.037), rotate: 0, - id: 'C22' + id: 'C28' }) // motor_driver1.vcp_cap.cap -const C23 = board.add(C_0603_1608Metric, { +const C29 = board.add(C_0603_1608Metric, { translate: pt(3.826, 2.027), rotate: 0, - id: 'C23' + id: 'C29' }) // m1_a.conn const J9 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, { @@ -376,24 +376,24 @@ const J10 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, { id: 'J10' }) // motor_driver2.ic -const U9 = board.add(TSSOP_16_1EP_4_4x5mm_P0_65mm_EP3x3mm_ThermalVias, { +const U12 = board.add(TSSOP_16_1EP_4_4x5mm_P0_65mm_EP3x3mm_ThermalVias, { translate: pt(0.154, 2.697), rotate: 0, - id: 'U9' + id: 'U12' }) // motor_driver2.vm_cap.cap -const C24 = board.add(C_0805_2012Metric, { +const C30 = board.add(C_0805_2012Metric, { translate: pt(0.067, 2.883), rotate: 0, - id: 'C24' + id: 'C30' }) // motor_driver2.vint_cap.cap -const C25 = board.add(C_0805_2012Metric, { +const C31 = board.add(C_0805_2012Metric, { translate: pt(0.240, 2.883), rotate: 0, - id: 'C25' + id: 'C31' }) // motor_driver2.vcp_cap.cap -const C26 = board.add(C_0603_1608Metric, { +const C32 = board.add(C_0603_1608Metric, { translate: pt(0.405, 2.873), rotate: 0, - id: 'C26' + id: 'C32' }) // m2_a.conn const J11 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, { @@ -417,14 +417,14 @@ const RN1 = board.add(R_Array_Concave_4x0603, { }) board.setNetlist([ - {name: "vbatt", pads: [["R1", "2"], ["R2", "1"], ["TP1", "1"], ["U2", "1"], ["U2", "4"], ["C2", "1"], ["U7", "1"], ["U7", "6"], ["C17", "1"], ["C18", "1"], ["D6", "1"], ["D7", "1"], ["D8", "1"], ["D9", "1"], ["D10", "1"], ["J8", "1"], ["U8", "1"], ["U8", "12"], ["C21", "1"], ["C23", "2"], ["U9", "1"], ["U9", "12"], ["C24", "1"], ["C26", "2"], ["J13", "2"]]}, - {name: "gnd", pads: [["J1", "1"], ["U1", "2"], ["C1", "2"], ["R5", "1"], ["TP2", "1"], ["U2", "2"], ["R7", "2"], ["C2", "2"], ["C3", "2"], ["D1", "2"], ["U3", "1"], ["U3", "15"], ["U3", "38"], ["U3", "39"], ["C4", "2"], ["C5", "2"], ["J2", "4"], ["SW1", "2"], ["C6", "2"], ["J3", "2"], ["J4", "2"], ["J5", "2"], ["J6", "6"], ["R11", "1"], ["C9", "2"], ["C10", "2"], ["C11", "2"], ["C12", "2"], ["C13", "2"], ["U5", "1"], ["U5", "2"], ["U5", "3"], ["U5", "6"], ["U5", "7"], ["C14", "2"], ["C15", "2"], ["U6", "1"], ["U6", "2"], ["U6", "3"], ["U6", "8"], ["C16", "2"], ["U7", "7"], ["U7", "9"], ["C17", "2"], ["C18", "2"], ["C20", "2"], ["D6", "3"], ["D7", "3"], ["D8", "3"], ["D9", "3"], ["D10", "3"], ["J8", "3"], ["U8", "13"], ["U8", "17"], ["U8", "3"], ["U8", "6"], ["C21", "2"], ["C22", "2"], ["U9", "13"], ["U9", "17"], ["U9", "3"], ["U9", "6"], ["C24", "2"], ["C25", "2"], ["J13", "3"]]}, - {name: "v3v3", pads: [["U1", "5"], ["C1", "1"], ["R6", "1"], ["L1", "2"], ["C3", "1"], ["TP3", "1"], ["D1", "1"], ["U3", "2"], ["C4", "1"], ["C5", "1"], ["J2", "1"], ["R8", "1"], ["J3", "1"], ["J4", "1"], ["J5", "1"], ["R9", "1"], ["R10", "1"], ["J6", "5"], ["J6", "7"], ["C10", "1"], ["C11", "1"], ["U5", "12"], ["U5", "5"], ["U5", "8"], ["C14", "1"], ["C15", "1"], ["U6", "16"], ["C16", "1"], ["D2", "2"], ["D3", "2"], ["D4", "2"], ["D5", "2"]]}, - {name: "i2c_chain_0.scl", pads: [["U3", "16"], ["J3", "3"], ["J4", "3"], ["J5", "3"], ["R9", "2"], ["TP4", "1"], ["U5", "13"], ["U6", "14"]]}, - {name: "i2c_chain_0.sda", pads: [["U3", "14"], ["J3", "4"], ["J4", "4"], ["J5", "4"], ["R10", "2"], ["TP5", "1"], ["U5", "14"], ["U6", "15"]]}, - {name: "spk_chain_0", pads: [["U3", "11"], ["TP6", "1"], ["C19", "2"]]}, - {name: "spk_chain_1.a", pads: [["U7", "8"], ["J7", "1"]]}, - {name: "spk_chain_1.b", pads: [["U7", "5"], ["J7", "2"]]}, + {name: "vbatt", pads: [["R1", "2"], ["R2", "1"], ["TP1", "1"], ["U2", "1"], ["U2", "4"], ["C2", "1"], ["U10", "1"], ["U10", "6"], ["C23", "1"], ["C24", "1"], ["D6", "1"], ["D7", "1"], ["D8", "1"], ["D9", "1"], ["D10", "1"], ["J8", "1"], ["U11", "1"], ["U11", "12"], ["C27", "1"], ["C29", "2"], ["U12", "1"], ["U12", "12"], ["C30", "1"], ["C32", "2"], ["J13", "2"]]}, + {name: "gnd", pads: [["J1", "1"], ["U1", "2"], ["C1", "2"], ["R5", "1"], ["TP2", "1"], ["U2", "2"], ["R7", "2"], ["C2", "2"], ["C3", "2"], ["D1", "2"], ["U3", "1"], ["U3", "15"], ["U3", "38"], ["U3", "39"], ["C4", "2"], ["C5", "2"], ["J2", "4"], ["SW1", "2"], ["C6", "2"], ["J3", "2"], ["J4", "2"], ["J5", "2"], ["J6", "6"], ["R11", "1"], ["C15", "2"], ["C16", "2"], ["C17", "2"], ["C18", "2"], ["C19", "2"], ["U8", "1"], ["U8", "2"], ["U8", "3"], ["U8", "6"], ["U8", "7"], ["C20", "2"], ["C21", "2"], ["U9", "1"], ["U9", "2"], ["U9", "3"], ["U9", "8"], ["C22", "2"], ["U10", "7"], ["U10", "9"], ["C23", "2"], ["C24", "2"], ["C26", "2"], ["D6", "3"], ["D7", "3"], ["D8", "3"], ["D9", "3"], ["D10", "3"], ["J8", "3"], ["U11", "13"], ["U11", "17"], ["U11", "3"], ["U11", "6"], ["C27", "2"], ["C28", "2"], ["U12", "13"], ["U12", "17"], ["U12", "3"], ["U12", "6"], ["C30", "2"], ["C31", "2"], ["J13", "3"]]}, + {name: "v3v3", pads: [["U1", "5"], ["C1", "1"], ["R6", "1"], ["L1", "2"], ["C3", "1"], ["TP3", "1"], ["D1", "1"], ["U3", "2"], ["C4", "1"], ["C5", "1"], ["J2", "1"], ["R8", "1"], ["J3", "1"], ["J4", "1"], ["J5", "1"], ["R9", "1"], ["R10", "1"], ["J6", "5"], ["J6", "7"], ["C16", "1"], ["C17", "1"], ["U8", "12"], ["U8", "5"], ["U8", "8"], ["C20", "1"], ["C21", "1"], ["U9", "16"], ["C22", "1"], ["D2", "2"], ["D3", "2"], ["D4", "2"], ["D5", "2"]]}, + {name: "i2c_chain_0.scl", pads: [["U3", "16"], ["J3", "3"], ["J4", "3"], ["J5", "3"], ["R9", "2"], ["TP4", "1"], ["U8", "13"], ["U9", "14"]]}, + {name: "i2c_chain_0.sda", pads: [["U3", "14"], ["J3", "4"], ["J4", "4"], ["J5", "4"], ["R10", "2"], ["TP5", "1"], ["U8", "14"], ["U9", "15"]]}, + {name: "spk_chain_0", pads: [["U3", "11"], ["TP6", "1"], ["C25", "2"]]}, + {name: "spk_chain_1.a", pads: [["U10", "8"], ["J7", "1"]]}, + {name: "spk_chain_1.b", pads: [["U10", "5"], ["J7", "2"]]}, {name: "batt.pwr", pads: [["J1", "2"], ["R1", "1"], ["R3", "1"]]}, {name: "isense.out", pads: [["U1", "4"], ["R4", "1"], ["U3", "4"]]}, {name: "isense.amp.amp.inp", pads: [["U1", "1"], ["R3", "2"], ["R5", "2"]]}, @@ -436,60 +436,60 @@ board.setNetlist([ {name: "mcu.program_en_node", pads: [["U3", "3"], ["R8", "2"], ["C6", "1"]]}, {name: "mcu.program_boot_node", pads: [["U3", "25"], ["SW1", "1"]]}, {name: "mcu.ic.io2", pads: [["U3", "24"]]}, - {name: "tof.elt[0].ic.gpio1", pads: [["J3", "5"]]}, - {name: "tof.elt[1].ic.gpio1", pads: [["J4", "5"]]}, - {name: "tof.elt[2].ic.gpio1", pads: [["J5", "5"]]}, + {name: "tof.elt[0].int", pads: [["J3", "5"]]}, + {name: "tof.elt[1].int", pads: [["J4", "5"]]}, + {name: "tof.elt[2].int", pads: [["J5", "5"]]}, {name: "lcd.reset", pads: [["U3", "12"], ["J6", "9"]]}, {name: "lcd.spi.sck", pads: [["U3", "9"], ["J6", "11"]]}, {name: "lcd.spi.mosi", pads: [["U3", "8"], ["J6", "12"]]}, {name: "lcd.cs", pads: [["U3", "13"], ["J6", "8"]]}, {name: "lcd.dc", pads: [["U3", "10"], ["J6", "10"]]}, - {name: "lcd.device.vcc", pads: [["J6", "15"], ["C12", "1"], ["C13", "1"]]}, - {name: "lcd.device.vcomh", pads: [["J6", "14"], ["C9", "1"]]}, + {name: "lcd.device.vcc", pads: [["J6", "15"], ["C18", "1"], ["C19", "1"]]}, + {name: "lcd.device.vcomh", pads: [["J6", "14"], ["C15", "1"]]}, {name: "lcd.device.iref", pads: [["J6", "13"], ["R11", "2"]]}, - {name: "lcd.device.c2p", pads: [["J6", "1"], ["C8", "1"]]}, - {name: "lcd.device.c2n", pads: [["J6", "2"], ["C8", "2"]]}, - {name: "lcd.device.c1p", pads: [["J6", "3"], ["C7", "1"]]}, - {name: "lcd.device.c1n", pads: [["J6", "4"], ["C7", "2"]]}, - {name: "imu.int1", pads: [["U5", "4"]]}, - {name: "imu.int2", pads: [["U5", "9"]]}, - {name: "expander.io.tof_reset_0", pads: [["J3", "6"], ["U6", "10"]]}, - {name: "expander.io.tof_reset_1", pads: [["J4", "6"], ["U6", "11"]]}, - {name: "expander.io.tof_reset_2", pads: [["J5", "6"], ["U6", "12"]]}, - {name: "expander.io.led_0", pads: [["U6", "4"], ["RN1", "8"]]}, - {name: "expander.io.led_1", pads: [["U6", "5"], ["RN1", "7"]]}, - {name: "expander.io.led_2", pads: [["U6", "6"], ["RN1", "6"]]}, - {name: "expander.io.led_3", pads: [["U6", "7"], ["RN1", "5"]]}, - {name: "spk_drv.ic.inp", pads: [["U7", "4"], ["R12", "2"]]}, - {name: "spk_drv.ic.inn", pads: [["U7", "3"], ["R13", "2"]]}, - {name: "spk_drv.inp_res.input", pads: [["R12", "1"], ["C19", "1"]]}, - {name: "spk_drv.inn_res.input", pads: [["R13", "1"], ["C20", "1"]]}, + {name: "lcd.device.c2p", pads: [["J6", "1"], ["C14", "1"]]}, + {name: "lcd.device.c2n", pads: [["J6", "2"], ["C14", "2"]]}, + {name: "lcd.device.c1p", pads: [["J6", "3"], ["C13", "1"]]}, + {name: "lcd.device.c1n", pads: [["J6", "4"], ["C13", "2"]]}, + {name: "imu.int1", pads: [["U8", "4"]]}, + {name: "imu.int2", pads: [["U8", "9"]]}, + {name: "expander.io.tof_reset_0", pads: [["J3", "6"], ["U9", "10"]]}, + {name: "expander.io.tof_reset_1", pads: [["J4", "6"], ["U9", "11"]]}, + {name: "expander.io.tof_reset_2", pads: [["J5", "6"], ["U9", "12"]]}, + {name: "expander.io.led_0", pads: [["U9", "4"], ["RN1", "8"]]}, + {name: "expander.io.led_1", pads: [["U9", "5"], ["RN1", "7"]]}, + {name: "expander.io.led_2", pads: [["U9", "6"], ["RN1", "6"]]}, + {name: "expander.io.led_3", pads: [["U9", "7"], ["RN1", "5"]]}, + {name: "spk_drv.ic.inp", pads: [["U10", "4"], ["R12", "2"]]}, + {name: "spk_drv.ic.inn", pads: [["U10", "3"], ["R13", "2"]]}, + {name: "spk_drv.inp_res.input", pads: [["R12", "1"], ["C25", "1"]]}, + {name: "spk_drv.inn_res.input", pads: [["R13", "1"], ["C26", "1"]]}, {name: "ws2812bArray.din", pads: [["U3", "23"], ["D6", "4"]]}, {name: "ws2812bArray.dout", pads: [["D10", "2"], ["J8", "2"]]}, {name: "ws2812bArray.led[0].dout", pads: [["D6", "2"], ["D7", "4"]]}, {name: "ws2812bArray.led[1].dout", pads: [["D7", "2"], ["D8", "4"]]}, {name: "ws2812bArray.led[2].dout", pads: [["D8", "2"], ["D9", "4"]]}, {name: "ws2812bArray.led[3].dout", pads: [["D9", "2"], ["D10", "4"]]}, - {name: "motor_driver1.ain1", pads: [["U3", "30"], ["U8", "16"]]}, - {name: "motor_driver1.ain2", pads: [["U3", "31"], ["U8", "15"]]}, - {name: "motor_driver1.bin1", pads: [["U3", "36"], ["U8", "9"]]}, - {name: "motor_driver1.bin2", pads: [["U3", "33"], ["U8", "10"]]}, - {name: "motor_driver1.aout1", pads: [["U8", "2"], ["J9", "2"]]}, - {name: "motor_driver1.aout2", pads: [["U8", "4"], ["J9", "1"]]}, - {name: "motor_driver1.bout1", pads: [["U8", "7"], ["J10", "2"]]}, - {name: "motor_driver1.bout2", pads: [["U8", "5"], ["J10", "1"]]}, - {name: "motor_driver1.ic.vint", pads: [["U8", "14"], ["C22", "1"]]}, - {name: "motor_driver1.ic.vcp", pads: [["U8", "11"], ["C23", "1"]]}, - {name: "motor_driver2.ain1", pads: [["U3", "26"], ["U9", "16"]]}, - {name: "motor_driver2.ain2", pads: [["U3", "27"], ["U9", "15"]]}, - {name: "motor_driver2.bin1", pads: [["U3", "29"], ["U9", "9"]]}, - {name: "motor_driver2.bin2", pads: [["U3", "28"], ["U9", "10"]]}, - {name: "motor_driver2.aout1", pads: [["U9", "2"], ["J11", "2"]]}, - {name: "motor_driver2.aout2", pads: [["U9", "4"], ["J11", "1"]]}, - {name: "motor_driver2.bout1", pads: [["U9", "7"], ["J12", "2"]]}, - {name: "motor_driver2.bout2", pads: [["U9", "5"], ["J12", "1"]]}, - {name: "motor_driver2.ic.vint", pads: [["U9", "14"], ["C25", "1"]]}, - {name: "motor_driver2.ic.vcp", pads: [["U9", "11"], ["C26", "1"]]}, + {name: "motor_driver1.ain1", pads: [["U3", "30"], ["U11", "16"]]}, + {name: "motor_driver1.ain2", pads: [["U3", "31"], ["U11", "15"]]}, + {name: "motor_driver1.bin1", pads: [["U3", "36"], ["U11", "9"]]}, + {name: "motor_driver1.bin2", pads: [["U3", "33"], ["U11", "10"]]}, + {name: "motor_driver1.aout1", pads: [["U11", "2"], ["J9", "2"]]}, + {name: "motor_driver1.aout2", pads: [["U11", "4"], ["J9", "1"]]}, + {name: "motor_driver1.bout1", pads: [["U11", "7"], ["J10", "2"]]}, + {name: "motor_driver1.bout2", pads: [["U11", "5"], ["J10", "1"]]}, + {name: "motor_driver1.ic.vint", pads: [["U11", "14"], ["C28", "1"]]}, + {name: "motor_driver1.ic.vcp", pads: [["U11", "11"], ["C29", "1"]]}, + {name: "motor_driver2.ain1", pads: [["U3", "26"], ["U12", "16"]]}, + {name: "motor_driver2.ain2", pads: [["U3", "27"], ["U12", "15"]]}, + {name: "motor_driver2.bin1", pads: [["U3", "29"], ["U12", "9"]]}, + {name: "motor_driver2.bin2", pads: [["U3", "28"], ["U12", "10"]]}, + {name: "motor_driver2.aout1", pads: [["U12", "2"], ["J11", "2"]]}, + {name: "motor_driver2.aout2", pads: [["U12", "4"], ["J11", "1"]]}, + {name: "motor_driver2.bout1", pads: [["U12", "7"], ["J12", "2"]]}, + {name: "motor_driver2.bout2", pads: [["U12", "5"], ["J12", "1"]]}, + {name: "motor_driver2.ic.vint", pads: [["U12", "14"], ["C31", "1"]]}, + {name: "motor_driver2.ic.vcp", pads: [["U12", "11"], ["C32", "1"]]}, {name: "servo.pwm", pads: [["U3", "37"], ["J13", "1"]]}, {name: "led_res.a.0", pads: [["D2", "1"], ["RN1", "1"]]}, {name: "led_res.a.1", pads: [["D3", "1"], ["RN1", "2"]]}, From 128715fcc5ed9170e72bdafb0b901ee18efd350a Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 12:38:23 -0700 Subject: [PATCH 30/47] passing --- examples/PcbBot/PcbBot.svgpcb.js | 160 ++++++++--------- examples/RobotDriver/RobotDriver.svgpcb.js | 198 ++++++++++----------- 2 files changed, 179 insertions(+), 179 deletions(-) diff --git a/examples/PcbBot/PcbBot.svgpcb.js b/examples/PcbBot/PcbBot.svgpcb.js index f5b927d26..e215059f4 100644 --- a/examples/PcbBot/PcbBot.svgpcb.js +++ b/examples/PcbBot/PcbBot.svgpcb.js @@ -251,49 +251,49 @@ const TP5 = board.add(TestPoint_TE_RCT_0805, { id: 'TP5' }) // imu.ic -const U9 = board.add(Bosch_LGA_14_3x2_5mm_P0_5mm, { +const U5 = board.add(Bosch_LGA_14_3x2_5mm_P0_5mm, { translate: pt(1.259, 3.431), rotate: 0, - id: 'U9' + id: 'U5' }) // imu.vdd_cap.cap -const C16 = board.add(C_0603_1608Metric, { +const C8 = board.add(C_0603_1608Metric, { translate: pt(1.245, 3.563), rotate: 0, - id: 'C16' + id: 'C8' }) // imu.vddio_cap.cap -const C17 = board.add(C_0603_1608Metric, { +const C9 = board.add(C_0603_1608Metric, { translate: pt(1.401, 3.563), rotate: 0, - id: 'C17' + id: 'C9' }) // mag.ic -const U10 = board.add(LGA_16_3x3mm_P0_5mm, { +const U6 = board.add(LGA_16_3x3mm_P0_5mm, { translate: pt(4.222, 2.911), rotate: 0, - id: 'U10' + id: 'U6' }) // mag.vdd_cap.cap -const C18 = board.add(C_0603_1608Metric, { +const C10 = board.add(C_0603_1608Metric, { translate: pt(4.211, 3.048), rotate: 0, - id: 'C18' + id: 'C10' }) // mag.set_cap -const C19 = board.add(C_0603_1608Metric, { +const C11 = board.add(C_0603_1608Metric, { translate: pt(4.367, 3.048), rotate: 0, - id: 'C19' + id: 'C11' }) // mag.c1.cap -const C20 = board.add(C_0805_2012Metric, { +const C12 = board.add(C_0805_2012Metric, { translate: pt(4.397, 2.881), rotate: 0, - id: 'C20' + id: 'C12' }) // expander.ic -const U11 = board.add(TSSOP_16_4_4x5mm_P0_65mm, { +const U7 = board.add(TSSOP_16_4_4x5mm_P0_65mm, { translate: pt(2.486, 2.951), rotate: 0, - id: 'U11' + id: 'U7' }) // expander.vdd_cap.cap -const C21 = board.add(C_0603_1608Metric, { +const C13 = board.add(C_0603_1608Metric, { translate: pt(2.393, 3.127), rotate: 0, - id: 'C21' + id: 'C13' }) // rgb.package const D8 = board.add(LED_D5_0mm_4_RGB_Staggered_Pins, { @@ -321,19 +321,19 @@ const J8 = board.add(Hirose_FH12_30S_0_5SH_1x30_1MP_P0_50mm_Horizontal, { id: 'J8' }) // oled.lcd -const U12 = board.add(Lcd_Er_Oled0_96_1_1_Outline, { +const U8 = board.add(Lcd_Er_Oled0_96_1_1_Outline, { translate: pt(3.066, 0.516), rotate: 0, - id: 'U12' + id: 'U8' }) // oled.c1_cap -const C22 = board.add(C_0603_1608Metric, { +const C14 = board.add(C_0603_1608Metric, { translate: pt(3.815, 0.889), rotate: 0, - id: 'C22' + id: 'C14' }) // oled.c2_cap -const C23 = board.add(C_0603_1608Metric, { +const C15 = board.add(C_0603_1608Metric, { translate: pt(3.971, 0.889), rotate: 0, - id: 'C23' + id: 'C15' }) // oled.iref_res.res const R15 = board.add(R_0603_1608Metric, { @@ -341,24 +341,24 @@ const R15 = board.add(R_0603_1608Metric, { id: 'R15' }) // oled.vcomh_cap.cap -const C24 = board.add(C_0805_2012Metric, { +const C16 = board.add(C_0805_2012Metric, { translate: pt(3.477, 0.899), rotate: 0, - id: 'C24' + id: 'C16' }) // oled.vdd_cap1.cap -const C25 = board.add(C_0603_1608Metric, { +const C17 = board.add(C_0603_1608Metric, { translate: pt(3.624, 1.006), rotate: 0, - id: 'C25' + id: 'C17' }) // oled.vbat_cap.cap -const C26 = board.add(C_0603_1608Metric, { +const C18 = board.add(C_0603_1608Metric, { translate: pt(3.780, 1.006), rotate: 0, - id: 'C26' + id: 'C18' }) // oled.vcc_cap.cap -const C27 = board.add(C_0805_2012Metric, { +const C19 = board.add(C_0805_2012Metric, { translate: pt(3.650, 0.899), rotate: 0, - id: 'C27' + id: 'C19' }) // batt_sense.div.top_res const R16 = board.add(R_0603_1608Metric, { @@ -476,39 +476,39 @@ const D25 = board.add(LED_SK6812MINI_E, { id: 'D25' }) // npx_key.cap.cap -const C28 = board.add(C_0603_1608Metric, { +const C20 = board.add(C_0603_1608Metric, { translate: pt(0.839, 3.567), rotate: 0, - id: 'C28' + id: 'C20' }) // reg_2v5.ic -const U13 = board.add(SOT_23, { +const U9 = board.add(SOT_23, { translate: pt(0.076, 3.435), rotate: 0, - id: 'U13' + id: 'U9' }) // reg_2v5.in_cap.cap -const C29 = board.add(C_0603_1608Metric, { +const C21 = board.add(C_0603_1608Metric, { translate: pt(0.058, 3.570), rotate: 0, - id: 'C29' + id: 'C21' }) // reg_2v5.out_cap.cap -const C30 = board.add(C_0603_1608Metric, { +const C22 = board.add(C_0603_1608Metric, { translate: pt(0.214, 3.570), rotate: 0, - id: 'C30' + id: 'C22' }) // reg_1v2.ic -const U14 = board.add(SOT_23, { +const U10 = board.add(SOT_23, { translate: pt(0.466, 3.435), rotate: 0, - id: 'U14' + id: 'U10' }) // reg_1v2.in_cap.cap -const C31 = board.add(C_0603_1608Metric, { +const C23 = board.add(C_0603_1608Metric, { translate: pt(0.449, 3.570), rotate: 0, - id: 'C31' + id: 'C23' }) // reg_1v2.out_cap.cap -const C32 = board.add(C_0603_1608Metric, { +const C24 = board.add(C_0603_1608Metric, { translate: pt(0.605, 3.570), rotate: 0, - id: 'C32' + id: 'C24' }) // cam.device.conn const J13 = board.add(Hirose_FH12_24S_0_5SH_1x24_1MP_P0_50mm_Horizontal, { @@ -516,19 +516,19 @@ const J13 = board.add(Hirose_FH12_24S_0_5SH_1x24_1MP_P0_50mm_Horizontal, { id: 'J13' }) // cam.dovdd_cap.cap -const C33 = board.add(C_0603_1608Metric, { +const C25 = board.add(C_0603_1608Metric, { translate: pt(0.058, 3.222), rotate: 0, - id: 'C33' + id: 'C25' }) // cam.reset_cap.cap -const C34 = board.add(C_0603_1608Metric, { +const C26 = board.add(C_0603_1608Metric, { translate: pt(0.214, 3.222), rotate: 0, - id: 'C34' + id: 'C26' }) // cam.pclk_cap.cap -const C35 = board.add(C_0603_1608Metric, { +const C27 = board.add(C_0603_1608Metric, { translate: pt(0.370, 3.222), rotate: 0, - id: 'C35' + id: 'C27' }) // cam.reset_pull.res const R18 = board.add(R_0603_1608Metric, { @@ -543,17 +543,17 @@ const SW3 = board.add(SW_Hotswap_Kailh_MX, { board.setNetlist([ {name: "vusb", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["R5", "1"], ["D4", "2"], ["Q3", "1"], ["U2", "4"], ["C3", "1"], ["D6", "2"]]}, - {name: "gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["J2", "1"], ["TP1", "1"], ["R4", "1"], ["Q2", "2"], ["SW1", "2"], ["D3", "2"], ["R5", "2"], ["U1", "1"], ["C1", "2"], ["C2", "2"], ["D5", "2"], ["U2", "2"], ["C3", "2"], ["C4", "2"], ["R6", "1"], ["U3", "1"], ["U3", "40"], ["U3", "41"], ["C5", "2"], ["C6", "2"], ["J3", "4"], ["SW2", "2"], ["C7", "2"], ["U4", "3"], ["R9", "2"], ["J4", "2"], ["J5", "2"], ["J6", "2"], ["J7", "2"], ["U9", "1"], ["U9", "2"], ["U9", "3"], ["U9", "6"], ["U9", "7"], ["C16", "2"], ["C17", "2"], ["U10", "11"], ["U10", "9"], ["C18", "2"], ["C20", "2"], ["U11", "1"], ["U11", "2"], ["U11", "3"], ["U11", "8"], ["C21", "2"], ["J8", "1"], ["J8", "10"], ["J8", "12"], ["J8", "13"], ["J8", "15"], ["J8", "16"], ["J8", "17"], ["J8", "21"], ["J8", "22"], ["J8", "23"], ["J8", "24"], ["J8", "25"], ["J8", "29"], ["J8", "30"], ["J8", "8"], ["R15", "1"], ["C24", "2"], ["C25", "2"], ["C26", "2"], ["C27", "2"], ["R17", "2"], ["J9", "3"], ["J10", "3"], ["J11", "3"], ["J12", "3"], ["D9", "3"], ["D10", "3"], ["D11", "3"], ["D12", "3"], ["D13", "3"], ["D14", "3"], ["D15", "3"], ["D16", "3"], ["D17", "3"], ["D18", "3"], ["D19", "3"], ["D20", "3"], ["D21", "3"], ["D22", "3"], ["D23", "3"], ["D24", "3"], ["D25", "3"], ["C28", "2"], ["U13", "1"], ["C29", "2"], ["C30", "2"], ["U14", "1"], ["C31", "2"], ["C32", "2"], ["J13", "10"], ["J13", "17"], ["J13", "23"], ["C33", "2"], ["C34", "2"], ["C35", "2"], ["SW3", "2"]]}, - {name: "vbatt", pads: [["Q1", "3"], ["D3", "1"], ["TP2", "1"], ["Q3", "3"], ["R16", "1"], ["J9", "2"], ["J10", "2"], ["J11", "2"], ["J12", "2"], ["D9", "1"], ["D10", "1"], ["D11", "1"], ["D12", "1"], ["D13", "1"], ["D14", "1"], ["D15", "1"], ["D16", "1"], ["D17", "1"], ["D18", "1"], ["D19", "1"], ["D20", "1"], ["D21", "1"], ["D22", "1"], ["D23", "1"], ["D24", "1"], ["D25", "1"], ["C28", "1"]]}, - {name: "pwr", pads: [["D4", "1"], ["Q3", "2"], ["U1", "3"], ["C1", "1"], ["U13", "3"], ["C29", "1"], ["U14", "3"], ["C31", "1"]]}, - {name: "v3v3", pads: [["U1", "2"], ["C2", "1"], ["D5", "1"], ["TP3", "1"], ["U3", "2"], ["C5", "1"], ["C6", "1"], ["J3", "1"], ["R8", "1"], ["J4", "1"], ["J4", "6"], ["J5", "1"], ["J6", "1"], ["J7", "1"], ["R10", "1"], ["R11", "1"], ["U9", "12"], ["U9", "5"], ["U9", "8"], ["C16", "1"], ["C17", "1"], ["U10", "13"], ["U10", "2"], ["U10", "4"], ["C18", "1"], ["U11", "16"], ["C21", "1"], ["D8", "2"], ["J8", "11"], ["J8", "6"], ["J8", "9"], ["C25", "1"], ["C26", "1"], ["J13", "14"], ["C33", "1"], ["R18", "1"]]}, - {name: "v2v5", pads: [["U13", "2"], ["C30", "1"], ["J13", "21"]]}, - {name: "v1v2", pads: [["U14", "2"], ["C32", "1"], ["J13", "15"]]}, + {name: "gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["J2", "1"], ["TP1", "1"], ["R4", "1"], ["Q2", "2"], ["SW1", "2"], ["D3", "2"], ["R5", "2"], ["U1", "1"], ["C1", "2"], ["C2", "2"], ["D5", "2"], ["U2", "2"], ["C3", "2"], ["C4", "2"], ["R6", "1"], ["U3", "1"], ["U3", "40"], ["U3", "41"], ["C5", "2"], ["C6", "2"], ["J3", "4"], ["SW2", "2"], ["C7", "2"], ["U4", "3"], ["R9", "2"], ["J4", "2"], ["J5", "2"], ["J6", "2"], ["J7", "2"], ["U5", "1"], ["U5", "2"], ["U5", "3"], ["U5", "6"], ["U5", "7"], ["C8", "2"], ["C9", "2"], ["U6", "11"], ["U6", "9"], ["C10", "2"], ["C12", "2"], ["U7", "1"], ["U7", "2"], ["U7", "3"], ["U7", "8"], ["C13", "2"], ["J8", "1"], ["J8", "10"], ["J8", "12"], ["J8", "13"], ["J8", "15"], ["J8", "16"], ["J8", "17"], ["J8", "21"], ["J8", "22"], ["J8", "23"], ["J8", "24"], ["J8", "25"], ["J8", "29"], ["J8", "30"], ["J8", "8"], ["R15", "1"], ["C16", "2"], ["C17", "2"], ["C18", "2"], ["C19", "2"], ["R17", "2"], ["J9", "3"], ["J10", "3"], ["J11", "3"], ["J12", "3"], ["D9", "3"], ["D10", "3"], ["D11", "3"], ["D12", "3"], ["D13", "3"], ["D14", "3"], ["D15", "3"], ["D16", "3"], ["D17", "3"], ["D18", "3"], ["D19", "3"], ["D20", "3"], ["D21", "3"], ["D22", "3"], ["D23", "3"], ["D24", "3"], ["D25", "3"], ["C20", "2"], ["U9", "1"], ["C21", "2"], ["C22", "2"], ["U10", "1"], ["C23", "2"], ["C24", "2"], ["J13", "10"], ["J13", "17"], ["J13", "23"], ["C25", "2"], ["C26", "2"], ["C27", "2"], ["SW3", "2"]]}, + {name: "vbatt", pads: [["Q1", "3"], ["D3", "1"], ["TP2", "1"], ["Q3", "3"], ["R16", "1"], ["J9", "2"], ["J10", "2"], ["J11", "2"], ["J12", "2"], ["D9", "1"], ["D10", "1"], ["D11", "1"], ["D12", "1"], ["D13", "1"], ["D14", "1"], ["D15", "1"], ["D16", "1"], ["D17", "1"], ["D18", "1"], ["D19", "1"], ["D20", "1"], ["D21", "1"], ["D22", "1"], ["D23", "1"], ["D24", "1"], ["D25", "1"], ["C20", "1"]]}, + {name: "pwr", pads: [["D4", "1"], ["Q3", "2"], ["U1", "3"], ["C1", "1"], ["U9", "3"], ["C21", "1"], ["U10", "3"], ["C23", "1"]]}, + {name: "v3v3", pads: [["U1", "2"], ["C2", "1"], ["D5", "1"], ["TP3", "1"], ["U3", "2"], ["C5", "1"], ["C6", "1"], ["J3", "1"], ["R8", "1"], ["J4", "1"], ["J4", "6"], ["J5", "1"], ["J6", "1"], ["J7", "1"], ["R10", "1"], ["R11", "1"], ["U5", "12"], ["U5", "5"], ["U5", "8"], ["C8", "1"], ["C9", "1"], ["U6", "13"], ["U6", "2"], ["U6", "4"], ["C10", "1"], ["U7", "16"], ["C13", "1"], ["D8", "2"], ["J8", "11"], ["J8", "6"], ["J8", "9"], ["C17", "1"], ["C18", "1"], ["J13", "14"], ["C25", "1"], ["R18", "1"]]}, + {name: "v2v5", pads: [["U9", "2"], ["C22", "1"], ["J13", "21"]]}, + {name: "v1v2", pads: [["U10", "2"], ["C24", "1"], ["J13", "15"]]}, {name: "usb_chain_0.d_P", pads: [["J1", "A6"], ["J1", "B6"], ["U3", "14"], ["U4", "2"]]}, {name: "usb_chain_0.d_N", pads: [["J1", "A7"], ["J1", "B7"], ["U3", "13"], ["U4", "1"]]}, {name: "touch_0", pads: [["U3", "7"]]}, - {name: "i2c_chain_0.scl", pads: [["U3", "38"], ["J4", "3"], ["J5", "3"], ["J6", "3"], ["J7", "3"], ["R10", "2"], ["TP4", "1"], ["U9", "13"], ["U10", "1"], ["U11", "14"], ["J8", "18"], ["J13", "20"]]}, - {name: "i2c_chain_0.sda", pads: [["U3", "4"], ["J4", "4"], ["J5", "4"], ["J6", "4"], ["J7", "4"], ["R11", "2"], ["TP5", "1"], ["U9", "14"], ["U10", "16"], ["U11", "15"], ["J8", "19"], ["J8", "20"], ["J13", "22"]]}, + {name: "i2c_chain_0.scl", pads: [["U3", "38"], ["J4", "3"], ["J5", "3"], ["J6", "3"], ["J7", "3"], ["R10", "2"], ["TP4", "1"], ["U5", "13"], ["U6", "1"], ["U7", "14"], ["J8", "18"], ["J13", "20"]]}, + {name: "i2c_chain_0.sda", pads: [["U3", "4"], ["J4", "4"], ["J5", "4"], ["J6", "4"], ["J7", "4"], ["R11", "2"], ["TP5", "1"], ["U5", "14"], ["U6", "16"], ["U7", "15"], ["J8", "19"], ["J8", "20"], ["J13", "22"]]}, {name: "usb.conn.cc.cc1", pads: [["J1", "A5"], ["R1", "2"]]}, {name: "usb.conn.cc.cc2", pads: [["J1", "B5"], ["R2", "2"]]}, {name: "batt.pwr", pads: [["J2", "2"], ["F1", "1"], ["U2", "3"], ["C4", "1"]]}, @@ -574,29 +574,29 @@ board.setNetlist([ {name: "tof.elt[1].int", pads: [["J5", "5"]]}, {name: "tof.elt[2].int", pads: [["J6", "5"]]}, {name: "tof.elt[3].int", pads: [["J7", "5"]]}, - {name: "imu.int1", pads: [["U9", "4"]]}, - {name: "imu.int2", pads: [["U9", "9"]]}, - {name: "mag.drdy", pads: [["U10", "15"]]}, - {name: "mag.ic.setp", pads: [["U10", "8"], ["C19", "1"]]}, - {name: "mag.ic.setc", pads: [["U10", "12"], ["C19", "2"]]}, - {name: "mag.ic.c1", pads: [["U10", "10"], ["C20", "1"]]}, - {name: "expander.io.tof_reset_1", pads: [["J5", "6"], ["U11", "4"]]}, - {name: "expander.io.tof_reset_2", pads: [["J6", "6"], ["U11", "5"]]}, - {name: "expander.io.tof_reset_3", pads: [["J7", "6"], ["U11", "6"]]}, - {name: "expander.io.rgb_red", pads: [["U11", "7"], ["R12", "2"]]}, - {name: "expander.io.rgb_green", pads: [["U11", "9"], ["R13", "2"]]}, - {name: "expander.io.rgb_blue", pads: [["U11", "10"], ["R14", "2"]]}, + {name: "imu.int1", pads: [["U5", "4"]]}, + {name: "imu.int2", pads: [["U5", "9"]]}, + {name: "mag.drdy", pads: [["U6", "15"]]}, + {name: "mag.ic.setp", pads: [["U6", "8"], ["C11", "1"]]}, + {name: "mag.ic.setc", pads: [["U6", "12"], ["C11", "2"]]}, + {name: "mag.ic.c1", pads: [["U6", "10"], ["C12", "1"]]}, + {name: "expander.io.tof_reset_1", pads: [["J5", "6"], ["U7", "4"]]}, + {name: "expander.io.tof_reset_2", pads: [["J6", "6"], ["U7", "5"]]}, + {name: "expander.io.tof_reset_3", pads: [["J7", "6"], ["U7", "6"]]}, + {name: "expander.io.rgb_red", pads: [["U7", "7"], ["R12", "2"]]}, + {name: "expander.io.rgb_green", pads: [["U7", "9"], ["R13", "2"]]}, + {name: "expander.io.rgb_blue", pads: [["U7", "10"], ["R14", "2"]]}, {name: "rgb.package.k_red", pads: [["D8", "1"], ["R12", "1"]]}, {name: "rgb.package.k_green", pads: [["D8", "3"], ["R13", "1"]]}, {name: "rgb.package.k_blue", pads: [["D8", "4"], ["R14", "1"]]}, {name: "oled.reset", pads: [["U3", "31"], ["J8", "14"]]}, - {name: "oled.device.vcc", pads: [["J8", "28"], ["C27", "1"]]}, + {name: "oled.device.vcc", pads: [["J8", "28"], ["C19", "1"]]}, {name: "oled.device.iref", pads: [["J8", "26"], ["R15", "2"]]}, - {name: "oled.device.vcomh", pads: [["J8", "27"], ["C24", "1"]]}, - {name: "oled.device.c1p", pads: [["J8", "4"], ["C22", "1"]]}, - {name: "oled.device.c1n", pads: [["J8", "5"], ["C22", "2"]]}, - {name: "oled.device.c2p", pads: [["J8", "2"], ["C23", "1"]]}, - {name: "oled.device.c2n", pads: [["J8", "3"], ["C23", "2"]]}, + {name: "oled.device.vcomh", pads: [["J8", "27"], ["C16", "1"]]}, + {name: "oled.device.c1p", pads: [["J8", "4"], ["C14", "1"]]}, + {name: "oled.device.c1n", pads: [["J8", "5"], ["C14", "2"]]}, + {name: "oled.device.c2p", pads: [["J8", "2"], ["C15", "1"]]}, + {name: "oled.device.c2n", pads: [["J8", "3"], ["C15", "2"]]}, {name: "batt_sense.output", pads: [["U3", "39"], ["R16", "2"], ["R17", "1"]]}, {name: "servo[0].pwm", pads: [["U3", "5"], ["J9", "1"]]}, {name: "servo[1].pwm", pads: [["U3", "6"], ["J10", "1"]]}, @@ -621,7 +621,7 @@ board.setNetlist([ {name: "npx.led[14].dout", pads: [["D23", "2"], ["D24", "4"]]}, {name: "npx_key.dout", pads: [["D25", "2"]]}, {name: "cam.dvp8.xclk", pads: [["U3", "17"], ["J13", "12"]]}, - {name: "cam.dvp8.pclk", pads: [["U3", "20"], ["J13", "8"], ["C35", "1"]]}, + {name: "cam.dvp8.pclk", pads: [["U3", "20"], ["J13", "8"], ["C27", "1"]]}, {name: "cam.dvp8.href", pads: [["U3", "12"], ["J13", "16"]]}, {name: "cam.dvp8.vsync", pads: [["U3", "11"], ["J13", "18"]]}, {name: "cam.dvp8.y0", pads: [["U3", "22"], ["J13", "6"]]}, @@ -634,7 +634,7 @@ board.setNetlist([ {name: "cam.dvp8.y7", pads: [["U3", "15"], ["J13", "13"]]}, {name: "cam.device.y.0", pads: [["J13", "1"]]}, {name: "cam.device.y.1", pads: [["J13", "2"]]}, - {name: "cam.device.reset", pads: [["J13", "19"], ["C34", "1"], ["R18", "2"]]}, + {name: "cam.device.reset", pads: [["J13", "19"], ["C26", "1"], ["R18", "2"]]}, {name: "switch.out", pads: [["U3", "34"], ["SW3", "1"]]} ]) diff --git a/examples/RobotDriver/RobotDriver.svgpcb.js b/examples/RobotDriver/RobotDriver.svgpcb.js index f710ccfca..803d2629f 100644 --- a/examples/RobotDriver/RobotDriver.svgpcb.js +++ b/examples/RobotDriver/RobotDriver.svgpcb.js @@ -181,19 +181,19 @@ const J6 = board.add(Hirose_FH12_15S_0_5SH_1x15_1MP_P0_50mm_Horizontal, { id: 'J6' }) // lcd.lcd -const U7 = board.add(Lcd_Er_Oled0_91_3_Outline, { +const U4 = board.add(Lcd_Er_Oled0_91_3_Outline, { translate: pt(3.064, 0.260), rotate: 0, - id: 'U7' + id: 'U4' }) // lcd.c1_cap -const C13 = board.add(C_0603_1608Metric, { +const C7 = board.add(C_0603_1608Metric, { translate: pt(3.693, 0.521), rotate: 0, - id: 'C13' + id: 'C7' }) // lcd.c2_cap -const C14 = board.add(C_0603_1608Metric, { +const C8 = board.add(C_0603_1608Metric, { translate: pt(3.173, 0.637), rotate: 0, - id: 'C14' + id: 'C8' }) // lcd.iref_res.res const R11 = board.add(R_0603_1608Metric, { @@ -201,54 +201,54 @@ const R11 = board.add(R_0603_1608Metric, { id: 'R11' }) // lcd.vcomh_cap.cap -const C15 = board.add(C_0805_2012Metric, { +const C9 = board.add(C_0805_2012Metric, { translate: pt(3.182, 0.531), rotate: 0, - id: 'C15' + id: 'C9' }) // lcd.vdd_cap1.cap -const C16 = board.add(C_0603_1608Metric, { +const C10 = board.add(C_0603_1608Metric, { translate: pt(3.485, 0.637), rotate: 0, - id: 'C16' + id: 'C10' }) // lcd.vdd_cap2.cap -const C17 = board.add(C_0805_2012Metric, { +const C11 = board.add(C_0805_2012Metric, { translate: pt(3.355, 0.531), rotate: 0, - id: 'C17' + id: 'C11' }) // lcd.vcc_cap1.cap -const C18 = board.add(C_0603_1608Metric, { +const C12 = board.add(C_0603_1608Metric, { translate: pt(3.641, 0.637), rotate: 0, - id: 'C18' + id: 'C12' }) // lcd.vcc_cap2.cap -const C19 = board.add(C_0805_2012Metric, { +const C13 = board.add(C_0805_2012Metric, { translate: pt(3.528, 0.531), rotate: 0, - id: 'C19' + id: 'C13' }) // imu.ic -const U8 = board.add(Bosch_LGA_14_3x2_5mm_P0_5mm, { +const U5 = board.add(Bosch_LGA_14_3x2_5mm_P0_5mm, { translate: pt(1.200, 2.652), rotate: 0, - id: 'U8' + id: 'U5' }) // imu.vdd_cap.cap -const C20 = board.add(C_0603_1608Metric, { +const C14 = board.add(C_0603_1608Metric, { translate: pt(1.186, 2.783), rotate: 0, - id: 'C20' + id: 'C14' }) // imu.vddio_cap.cap -const C21 = board.add(C_0603_1608Metric, { +const C15 = board.add(C_0603_1608Metric, { translate: pt(1.342, 2.783), rotate: 0, - id: 'C21' + id: 'C15' }) // expander.ic -const U9 = board.add(SOIC_16W_7_5x10_3mm_P1_27mm, { +const U6 = board.add(SOIC_16W_7_5x10_3mm_P1_27mm, { translate: pt(1.582, 1.955), rotate: 0, - id: 'U9' + id: 'U6' }) // expander.vdd_cap.cap -const C22 = board.add(C_0603_1608Metric, { +const C16 = board.add(C_0603_1608Metric, { translate: pt(1.913, 1.771), rotate: 0, - id: 'C22' + id: 'C16' }) // leds.led[0].package const D2 = board.add(LED_0603_1608Metric, { @@ -276,19 +276,19 @@ const TP6 = board.add(TestPoint_TE_RCT_0805, { id: 'TP6' }) // spk_drv.ic -const U10 = board.add(MSOP_8_1EP_3x3mm_P0_65mm_EP1_68x1_88mm_ThermalVias, { +const U7 = board.add(MSOP_8_1EP_3x3mm_P0_65mm_EP1_68x1_88mm_ThermalVias, { translate: pt(0.704, 2.657), rotate: 0, - id: 'U10' + id: 'U7' }) // spk_drv.pwr_cap.cap -const C23 = board.add(C_0603_1608Metric, { +const C17 = board.add(C_0603_1608Metric, { translate: pt(0.639, 2.794), rotate: 0, - id: 'C23' + id: 'C17' }) // spk_drv.bulk_cap.cap -const C24 = board.add(C_0805_2012Metric, { +const C18 = board.add(C_0805_2012Metric, { translate: pt(0.933, 2.627), rotate: 0, - id: 'C24' + id: 'C18' }) // spk_drv.inp_res.res const R12 = board.add(R_0603_1608Metric, { @@ -296,9 +296,9 @@ const R12 = board.add(R_0603_1608Metric, { id: 'R12' }) // spk_drv.inp_cap.cap -const C25 = board.add(C_0603_1608Metric, { +const C19 = board.add(C_0603_1608Metric, { translate: pt(0.951, 2.794), rotate: 0, - id: 'C25' + id: 'C19' }) // spk_drv.inn_res.res const R13 = board.add(R_0603_1608Metric, { @@ -306,9 +306,9 @@ const R13 = board.add(R_0603_1608Metric, { id: 'R13' }) // spk_drv.inn_cap.cap -const C26 = board.add(C_0603_1608Metric, { +const C20 = board.add(C_0603_1608Metric, { translate: pt(0.795, 2.891), rotate: 0, - id: 'C26' + id: 'C20' }) // spk.conn const J7 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, { @@ -346,24 +346,24 @@ const J8 = board.add(JST_PH_B3B_PH_K_1x03_P2_00mm_Vertical, { id: 'J8' }) // motor_driver1.ic -const U11 = board.add(TSSOP_16_1EP_4_4x5mm_P0_65mm_EP3x3mm_ThermalVias, { +const U8 = board.add(TSSOP_16_1EP_4_4x5mm_P0_65mm_EP3x3mm_ThermalVias, { translate: pt(3.575, 1.850), rotate: 0, - id: 'U11' + id: 'U8' }) // motor_driver1.vm_cap.cap -const C27 = board.add(C_0805_2012Metric, { +const C21 = board.add(C_0805_2012Metric, { translate: pt(3.489, 2.037), rotate: 0, - id: 'C27' + id: 'C21' }) // motor_driver1.vint_cap.cap -const C28 = board.add(C_0805_2012Metric, { +const C22 = board.add(C_0805_2012Metric, { translate: pt(3.662, 2.037), rotate: 0, - id: 'C28' + id: 'C22' }) // motor_driver1.vcp_cap.cap -const C29 = board.add(C_0603_1608Metric, { +const C23 = board.add(C_0603_1608Metric, { translate: pt(3.826, 2.027), rotate: 0, - id: 'C29' + id: 'C23' }) // m1_a.conn const J9 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, { @@ -376,24 +376,24 @@ const J10 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, { id: 'J10' }) // motor_driver2.ic -const U12 = board.add(TSSOP_16_1EP_4_4x5mm_P0_65mm_EP3x3mm_ThermalVias, { +const U9 = board.add(TSSOP_16_1EP_4_4x5mm_P0_65mm_EP3x3mm_ThermalVias, { translate: pt(0.154, 2.697), rotate: 0, - id: 'U12' + id: 'U9' }) // motor_driver2.vm_cap.cap -const C30 = board.add(C_0805_2012Metric, { +const C24 = board.add(C_0805_2012Metric, { translate: pt(0.067, 2.883), rotate: 0, - id: 'C30' + id: 'C24' }) // motor_driver2.vint_cap.cap -const C31 = board.add(C_0805_2012Metric, { +const C25 = board.add(C_0805_2012Metric, { translate: pt(0.240, 2.883), rotate: 0, - id: 'C31' + id: 'C25' }) // motor_driver2.vcp_cap.cap -const C32 = board.add(C_0603_1608Metric, { +const C26 = board.add(C_0603_1608Metric, { translate: pt(0.405, 2.873), rotate: 0, - id: 'C32' + id: 'C26' }) // m2_a.conn const J11 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, { @@ -417,14 +417,14 @@ const RN1 = board.add(R_Array_Concave_4x0603, { }) board.setNetlist([ - {name: "vbatt", pads: [["R1", "2"], ["R2", "1"], ["TP1", "1"], ["U2", "1"], ["U2", "4"], ["C2", "1"], ["U10", "1"], ["U10", "6"], ["C23", "1"], ["C24", "1"], ["D6", "1"], ["D7", "1"], ["D8", "1"], ["D9", "1"], ["D10", "1"], ["J8", "1"], ["U11", "1"], ["U11", "12"], ["C27", "1"], ["C29", "2"], ["U12", "1"], ["U12", "12"], ["C30", "1"], ["C32", "2"], ["J13", "2"]]}, - {name: "gnd", pads: [["J1", "1"], ["U1", "2"], ["C1", "2"], ["R5", "1"], ["TP2", "1"], ["U2", "2"], ["R7", "2"], ["C2", "2"], ["C3", "2"], ["D1", "2"], ["U3", "1"], ["U3", "15"], ["U3", "38"], ["U3", "39"], ["C4", "2"], ["C5", "2"], ["J2", "4"], ["SW1", "2"], ["C6", "2"], ["J3", "2"], ["J4", "2"], ["J5", "2"], ["J6", "6"], ["R11", "1"], ["C15", "2"], ["C16", "2"], ["C17", "2"], ["C18", "2"], ["C19", "2"], ["U8", "1"], ["U8", "2"], ["U8", "3"], ["U8", "6"], ["U8", "7"], ["C20", "2"], ["C21", "2"], ["U9", "1"], ["U9", "2"], ["U9", "3"], ["U9", "8"], ["C22", "2"], ["U10", "7"], ["U10", "9"], ["C23", "2"], ["C24", "2"], ["C26", "2"], ["D6", "3"], ["D7", "3"], ["D8", "3"], ["D9", "3"], ["D10", "3"], ["J8", "3"], ["U11", "13"], ["U11", "17"], ["U11", "3"], ["U11", "6"], ["C27", "2"], ["C28", "2"], ["U12", "13"], ["U12", "17"], ["U12", "3"], ["U12", "6"], ["C30", "2"], ["C31", "2"], ["J13", "3"]]}, - {name: "v3v3", pads: [["U1", "5"], ["C1", "1"], ["R6", "1"], ["L1", "2"], ["C3", "1"], ["TP3", "1"], ["D1", "1"], ["U3", "2"], ["C4", "1"], ["C5", "1"], ["J2", "1"], ["R8", "1"], ["J3", "1"], ["J4", "1"], ["J5", "1"], ["R9", "1"], ["R10", "1"], ["J6", "5"], ["J6", "7"], ["C16", "1"], ["C17", "1"], ["U8", "12"], ["U8", "5"], ["U8", "8"], ["C20", "1"], ["C21", "1"], ["U9", "16"], ["C22", "1"], ["D2", "2"], ["D3", "2"], ["D4", "2"], ["D5", "2"]]}, - {name: "i2c_chain_0.scl", pads: [["U3", "16"], ["J3", "3"], ["J4", "3"], ["J5", "3"], ["R9", "2"], ["TP4", "1"], ["U8", "13"], ["U9", "14"]]}, - {name: "i2c_chain_0.sda", pads: [["U3", "14"], ["J3", "4"], ["J4", "4"], ["J5", "4"], ["R10", "2"], ["TP5", "1"], ["U8", "14"], ["U9", "15"]]}, - {name: "spk_chain_0", pads: [["U3", "11"], ["TP6", "1"], ["C25", "2"]]}, - {name: "spk_chain_1.a", pads: [["U10", "8"], ["J7", "1"]]}, - {name: "spk_chain_1.b", pads: [["U10", "5"], ["J7", "2"]]}, + {name: "vbatt", pads: [["R1", "2"], ["R2", "1"], ["TP1", "1"], ["U2", "1"], ["U2", "4"], ["C2", "1"], ["U7", "1"], ["U7", "6"], ["C17", "1"], ["C18", "1"], ["D6", "1"], ["D7", "1"], ["D8", "1"], ["D9", "1"], ["D10", "1"], ["J8", "1"], ["U8", "1"], ["U8", "12"], ["C21", "1"], ["C23", "2"], ["U9", "1"], ["U9", "12"], ["C24", "1"], ["C26", "2"], ["J13", "2"]]}, + {name: "gnd", pads: [["J1", "1"], ["U1", "2"], ["C1", "2"], ["R5", "1"], ["TP2", "1"], ["U2", "2"], ["R7", "2"], ["C2", "2"], ["C3", "2"], ["D1", "2"], ["U3", "1"], ["U3", "15"], ["U3", "38"], ["U3", "39"], ["C4", "2"], ["C5", "2"], ["J2", "4"], ["SW1", "2"], ["C6", "2"], ["J3", "2"], ["J4", "2"], ["J5", "2"], ["J6", "6"], ["R11", "1"], ["C9", "2"], ["C10", "2"], ["C11", "2"], ["C12", "2"], ["C13", "2"], ["U5", "1"], ["U5", "2"], ["U5", "3"], ["U5", "6"], ["U5", "7"], ["C14", "2"], ["C15", "2"], ["U6", "1"], ["U6", "2"], ["U6", "3"], ["U6", "8"], ["C16", "2"], ["U7", "7"], ["U7", "9"], ["C17", "2"], ["C18", "2"], ["C20", "2"], ["D6", "3"], ["D7", "3"], ["D8", "3"], ["D9", "3"], ["D10", "3"], ["J8", "3"], ["U8", "13"], ["U8", "17"], ["U8", "3"], ["U8", "6"], ["C21", "2"], ["C22", "2"], ["U9", "13"], ["U9", "17"], ["U9", "3"], ["U9", "6"], ["C24", "2"], ["C25", "2"], ["J13", "3"]]}, + {name: "v3v3", pads: [["U1", "5"], ["C1", "1"], ["R6", "1"], ["L1", "2"], ["C3", "1"], ["TP3", "1"], ["D1", "1"], ["U3", "2"], ["C4", "1"], ["C5", "1"], ["J2", "1"], ["R8", "1"], ["J3", "1"], ["J4", "1"], ["J5", "1"], ["R9", "1"], ["R10", "1"], ["J6", "5"], ["J6", "7"], ["C10", "1"], ["C11", "1"], ["U5", "12"], ["U5", "5"], ["U5", "8"], ["C14", "1"], ["C15", "1"], ["U6", "16"], ["C16", "1"], ["D2", "2"], ["D3", "2"], ["D4", "2"], ["D5", "2"]]}, + {name: "i2c_chain_0.scl", pads: [["U3", "16"], ["J3", "3"], ["J4", "3"], ["J5", "3"], ["R9", "2"], ["TP4", "1"], ["U5", "13"], ["U6", "14"]]}, + {name: "i2c_chain_0.sda", pads: [["U3", "14"], ["J3", "4"], ["J4", "4"], ["J5", "4"], ["R10", "2"], ["TP5", "1"], ["U5", "14"], ["U6", "15"]]}, + {name: "spk_chain_0", pads: [["U3", "11"], ["TP6", "1"], ["C19", "2"]]}, + {name: "spk_chain_1.a", pads: [["U7", "8"], ["J7", "1"]]}, + {name: "spk_chain_1.b", pads: [["U7", "5"], ["J7", "2"]]}, {name: "batt.pwr", pads: [["J1", "2"], ["R1", "1"], ["R3", "1"]]}, {name: "isense.out", pads: [["U1", "4"], ["R4", "1"], ["U3", "4"]]}, {name: "isense.amp.amp.inp", pads: [["U1", "1"], ["R3", "2"], ["R5", "2"]]}, @@ -444,52 +444,52 @@ board.setNetlist([ {name: "lcd.spi.mosi", pads: [["U3", "8"], ["J6", "12"]]}, {name: "lcd.cs", pads: [["U3", "13"], ["J6", "8"]]}, {name: "lcd.dc", pads: [["U3", "10"], ["J6", "10"]]}, - {name: "lcd.device.vcc", pads: [["J6", "15"], ["C18", "1"], ["C19", "1"]]}, - {name: "lcd.device.vcomh", pads: [["J6", "14"], ["C15", "1"]]}, + {name: "lcd.device.vcc", pads: [["J6", "15"], ["C12", "1"], ["C13", "1"]]}, + {name: "lcd.device.vcomh", pads: [["J6", "14"], ["C9", "1"]]}, {name: "lcd.device.iref", pads: [["J6", "13"], ["R11", "2"]]}, - {name: "lcd.device.c2p", pads: [["J6", "1"], ["C14", "1"]]}, - {name: "lcd.device.c2n", pads: [["J6", "2"], ["C14", "2"]]}, - {name: "lcd.device.c1p", pads: [["J6", "3"], ["C13", "1"]]}, - {name: "lcd.device.c1n", pads: [["J6", "4"], ["C13", "2"]]}, - {name: "imu.int1", pads: [["U8", "4"]]}, - {name: "imu.int2", pads: [["U8", "9"]]}, - {name: "expander.io.tof_reset_0", pads: [["J3", "6"], ["U9", "10"]]}, - {name: "expander.io.tof_reset_1", pads: [["J4", "6"], ["U9", "11"]]}, - {name: "expander.io.tof_reset_2", pads: [["J5", "6"], ["U9", "12"]]}, - {name: "expander.io.led_0", pads: [["U9", "4"], ["RN1", "8"]]}, - {name: "expander.io.led_1", pads: [["U9", "5"], ["RN1", "7"]]}, - {name: "expander.io.led_2", pads: [["U9", "6"], ["RN1", "6"]]}, - {name: "expander.io.led_3", pads: [["U9", "7"], ["RN1", "5"]]}, - {name: "spk_drv.ic.inp", pads: [["U10", "4"], ["R12", "2"]]}, - {name: "spk_drv.ic.inn", pads: [["U10", "3"], ["R13", "2"]]}, - {name: "spk_drv.inp_res.input", pads: [["R12", "1"], ["C25", "1"]]}, - {name: "spk_drv.inn_res.input", pads: [["R13", "1"], ["C26", "1"]]}, + {name: "lcd.device.c2p", pads: [["J6", "1"], ["C8", "1"]]}, + {name: "lcd.device.c2n", pads: [["J6", "2"], ["C8", "2"]]}, + {name: "lcd.device.c1p", pads: [["J6", "3"], ["C7", "1"]]}, + {name: "lcd.device.c1n", pads: [["J6", "4"], ["C7", "2"]]}, + {name: "imu.int1", pads: [["U5", "4"]]}, + {name: "imu.int2", pads: [["U5", "9"]]}, + {name: "expander.io.tof_reset_0", pads: [["J3", "6"], ["U6", "10"]]}, + {name: "expander.io.tof_reset_1", pads: [["J4", "6"], ["U6", "11"]]}, + {name: "expander.io.tof_reset_2", pads: [["J5", "6"], ["U6", "12"]]}, + {name: "expander.io.led_0", pads: [["U6", "4"], ["RN1", "8"]]}, + {name: "expander.io.led_1", pads: [["U6", "5"], ["RN1", "7"]]}, + {name: "expander.io.led_2", pads: [["U6", "6"], ["RN1", "6"]]}, + {name: "expander.io.led_3", pads: [["U6", "7"], ["RN1", "5"]]}, + {name: "spk_drv.ic.inp", pads: [["U7", "4"], ["R12", "2"]]}, + {name: "spk_drv.ic.inn", pads: [["U7", "3"], ["R13", "2"]]}, + {name: "spk_drv.inp_res.input", pads: [["R12", "1"], ["C19", "1"]]}, + {name: "spk_drv.inn_res.input", pads: [["R13", "1"], ["C20", "1"]]}, {name: "ws2812bArray.din", pads: [["U3", "23"], ["D6", "4"]]}, {name: "ws2812bArray.dout", pads: [["D10", "2"], ["J8", "2"]]}, {name: "ws2812bArray.led[0].dout", pads: [["D6", "2"], ["D7", "4"]]}, {name: "ws2812bArray.led[1].dout", pads: [["D7", "2"], ["D8", "4"]]}, {name: "ws2812bArray.led[2].dout", pads: [["D8", "2"], ["D9", "4"]]}, {name: "ws2812bArray.led[3].dout", pads: [["D9", "2"], ["D10", "4"]]}, - {name: "motor_driver1.ain1", pads: [["U3", "30"], ["U11", "16"]]}, - {name: "motor_driver1.ain2", pads: [["U3", "31"], ["U11", "15"]]}, - {name: "motor_driver1.bin1", pads: [["U3", "36"], ["U11", "9"]]}, - {name: "motor_driver1.bin2", pads: [["U3", "33"], ["U11", "10"]]}, - {name: "motor_driver1.aout1", pads: [["U11", "2"], ["J9", "2"]]}, - {name: "motor_driver1.aout2", pads: [["U11", "4"], ["J9", "1"]]}, - {name: "motor_driver1.bout1", pads: [["U11", "7"], ["J10", "2"]]}, - {name: "motor_driver1.bout2", pads: [["U11", "5"], ["J10", "1"]]}, - {name: "motor_driver1.ic.vint", pads: [["U11", "14"], ["C28", "1"]]}, - {name: "motor_driver1.ic.vcp", pads: [["U11", "11"], ["C29", "1"]]}, - {name: "motor_driver2.ain1", pads: [["U3", "26"], ["U12", "16"]]}, - {name: "motor_driver2.ain2", pads: [["U3", "27"], ["U12", "15"]]}, - {name: "motor_driver2.bin1", pads: [["U3", "29"], ["U12", "9"]]}, - {name: "motor_driver2.bin2", pads: [["U3", "28"], ["U12", "10"]]}, - {name: "motor_driver2.aout1", pads: [["U12", "2"], ["J11", "2"]]}, - {name: "motor_driver2.aout2", pads: [["U12", "4"], ["J11", "1"]]}, - {name: "motor_driver2.bout1", pads: [["U12", "7"], ["J12", "2"]]}, - {name: "motor_driver2.bout2", pads: [["U12", "5"], ["J12", "1"]]}, - {name: "motor_driver2.ic.vint", pads: [["U12", "14"], ["C31", "1"]]}, - {name: "motor_driver2.ic.vcp", pads: [["U12", "11"], ["C32", "1"]]}, + {name: "motor_driver1.ain1", pads: [["U3", "30"], ["U8", "16"]]}, + {name: "motor_driver1.ain2", pads: [["U3", "31"], ["U8", "15"]]}, + {name: "motor_driver1.bin1", pads: [["U3", "36"], ["U8", "9"]]}, + {name: "motor_driver1.bin2", pads: [["U3", "33"], ["U8", "10"]]}, + {name: "motor_driver1.aout1", pads: [["U8", "2"], ["J9", "2"]]}, + {name: "motor_driver1.aout2", pads: [["U8", "4"], ["J9", "1"]]}, + {name: "motor_driver1.bout1", pads: [["U8", "7"], ["J10", "2"]]}, + {name: "motor_driver1.bout2", pads: [["U8", "5"], ["J10", "1"]]}, + {name: "motor_driver1.ic.vint", pads: [["U8", "14"], ["C22", "1"]]}, + {name: "motor_driver1.ic.vcp", pads: [["U8", "11"], ["C23", "1"]]}, + {name: "motor_driver2.ain1", pads: [["U3", "26"], ["U9", "16"]]}, + {name: "motor_driver2.ain2", pads: [["U3", "27"], ["U9", "15"]]}, + {name: "motor_driver2.bin1", pads: [["U3", "29"], ["U9", "9"]]}, + {name: "motor_driver2.bin2", pads: [["U3", "28"], ["U9", "10"]]}, + {name: "motor_driver2.aout1", pads: [["U9", "2"], ["J11", "2"]]}, + {name: "motor_driver2.aout2", pads: [["U9", "4"], ["J11", "1"]]}, + {name: "motor_driver2.bout1", pads: [["U9", "7"], ["J12", "2"]]}, + {name: "motor_driver2.bout2", pads: [["U9", "5"], ["J12", "1"]]}, + {name: "motor_driver2.ic.vint", pads: [["U9", "14"], ["C25", "1"]]}, + {name: "motor_driver2.ic.vcp", pads: [["U9", "11"], ["C26", "1"]]}, {name: "servo.pwm", pads: [["U3", "37"], ["J13", "1"]]}, {name: "led_res.a.0", pads: [["D2", "1"], ["RN1", "1"]]}, {name: "led_res.a.1", pads: [["D3", "1"], ["RN1", "2"]]}, From df3df1c4b272b206e4760c639156615779b3f34f Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 13:20:21 -0700 Subject: [PATCH 31/47] Refactor out scope ops --- edg/electronics_model/BoradScopedTransform.py | 48 +++++++++++++++++++ edg/electronics_model/RefdesRefinementPass.py | 40 ++++------------ 2 files changed, 57 insertions(+), 31 deletions(-) create mode 100644 edg/electronics_model/BoradScopedTransform.py diff --git a/edg/electronics_model/BoradScopedTransform.py b/edg/electronics_model/BoradScopedTransform.py new file mode 100644 index 000000000..de69407bd --- /dev/null +++ b/edg/electronics_model/BoradScopedTransform.py @@ -0,0 +1,48 @@ +from abc import abstractmethod +from typing import Optional, Dict, List, cast + +from .. import edgir +from ..core import TransformUtil, CompiledDesign +from ..core.TransformUtil import TransformContext + + +class BoardScopedTransform(TransformUtil.Transform): + """Transform subclass that handles board scoping for sub-boards and wrappers. + Board scopes are defined as a Path (root for the "main" board) or None (for sub-board wrappers). + Subclasses may define additional data structures, indexed by this board scope Path.""" + + def __init__(self, design: CompiledDesign) -> None: + super().__init__() + self._design = design + self._board_scopes: Dict[TransformUtil.Path, Optional[TransformUtil.Path]] = { + TransformUtil.Path.empty(): TransformUtil.Path.empty() + } # always initialized in parent + + @abstractmethod + def visit_block_scoped( + self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, block: edgir.BlockTypes + ) -> None: + raise NotImplementedError + + def visit_block(self, context: TransformContext, block: edgir.HierarchyBlock) -> None: + scope = self._board_scopes[context.path] + + if "fp_subboard" in block.meta.members.node: + fp_external_blocks = self._design.get_value(context.path.to_tuple() + ("fp_external_blocks",)) + assert isinstance(fp_external_blocks, list) + external_blocks: Optional[List[str]] = cast(List[str], fp_external_blocks) + if "fp_subblocks_ignored" in block.meta.members.node: + internal_scope = None + else: + raise NotImplementedError("support subboard") + else: + external_blocks = None + internal_scope = scope + + for block_pair in block.blocks: + if external_blocks is not None and block_pair.name not in external_blocks: + self._board_scopes[context.path.append_block(block_pair.name)] = internal_scope + else: + self._board_scopes[context.path.append_block(block_pair.name)] = scope + + self.visit_block_scoped(context, scope, block) diff --git a/edg/electronics_model/RefdesRefinementPass.py b/edg/electronics_model/RefdesRefinementPass.py index 0e98cdd7f..7396a0709 100644 --- a/edg/electronics_model/RefdesRefinementPass.py +++ b/edg/electronics_model/RefdesRefinementPass.py @@ -2,6 +2,7 @@ from typing_extensions import override +from .BoradScopedTransform import BoardScopedTransform from .. import edgir from ..core import CompiledDesign, TransformUtil from ..core.BaseRefinementPass import BaseRefinementPass @@ -17,49 +18,26 @@ def run(self, design: CompiledDesign) -> List[Tuple[edgir.LocalPath, edgir.Value ] -class RefdesTransform(TransformUtil.Transform): +class RefdesTransform(BoardScopedTransform): def __init__(self, design: CompiledDesign): - self.design = design + super().__init__(design) - board_refdes_prefix = self.design.get_value(("refdes_prefix",)) + board_refdes_prefix = design.get_value(("refdes_prefix",)) if board_refdes_prefix is None: self.board_refdes_prefix = "" else: assert isinstance(board_refdes_prefix, str) self.board_refdes_prefix = board_refdes_prefix - self.scopes: Dict[TransformUtil.Path, Optional[TransformUtil.Path]] = { - TransformUtil.Path.empty(): TransformUtil.Path.empty() - } - self.block_refdes_list: List[Tuple[TransformUtil.Path, str]] = [] # populated in traversal order self.refdes_last: Dict[Tuple[TransformUtil.Path, str], int] = {} # (scope, prefix) -> num @override - def visit_block(self, context: TransformUtil.TransformContext, block: edgir.BlockTypes) -> None: - scope = self.scopes[context.path] - - # TODO: deduplicate this with NetlistTransform scopes logic - if "fp_subboard" in block.meta.members.node: - fp_external_blocks = self.design.get_value(context.path.to_tuple() + ("fp_external_blocks",)) - assert isinstance(fp_external_blocks, list) - external_blocks: Optional[List[str]] = cast(List[str], fp_external_blocks) - if "fp_subblocks_ignored" in block.meta.members.node: - internal_scope = None - else: - raise NotImplementedError("support subboard") - else: - external_blocks = None - internal_scope = scope - - for block_pair in block.blocks: - if external_blocks is not None and block_pair.name not in external_blocks: - self.scopes[context.path.append_block(block_pair.name)] = internal_scope - else: - self.scopes[context.path.append_block(block_pair.name)] = scope - + def visit_block_scoped( + self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, block: edgir.BlockTypes + ) -> None: if "fp_is_footprint" in block.meta.members.node and scope is not None: - refdes_prefix = self.design.get_value(context.path.to_tuple() + ("fp_refdes_prefix",)) + refdes_prefix = self._design.get_value(context.path.to_tuple() + ("fp_refdes_prefix",)) assert isinstance(refdes_prefix, str) refdes_id = self.refdes_last.get((scope, refdes_prefix), 0) + 1 @@ -67,5 +45,5 @@ def visit_block(self, context: TransformUtil.TransformContext, block: edgir.Bloc self.block_refdes_list.append((context.path, self.board_refdes_prefix + refdes_prefix + str(refdes_id))) def run(self) -> List[Tuple[TransformUtil.Path, str]]: - self.transform_design(self.design.design) + self.transform_design(self._design.design) return self.block_refdes_list From e42fab4db9eefeb5dd09caada74da6440fa4488a Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 13:21:02 -0700 Subject: [PATCH 32/47] Update BoradScopedTransform.py --- edg/electronics_model/BoradScopedTransform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edg/electronics_model/BoradScopedTransform.py b/edg/electronics_model/BoradScopedTransform.py index de69407bd..43b59a4d8 100644 --- a/edg/electronics_model/BoradScopedTransform.py +++ b/edg/electronics_model/BoradScopedTransform.py @@ -34,7 +34,7 @@ def visit_block(self, context: TransformContext, block: edgir.HierarchyBlock) -> if "fp_subblocks_ignored" in block.meta.members.node: internal_scope = None else: - raise NotImplementedError("support subboard") + internal_scope = context.path else: external_blocks = None internal_scope = scope From e70809ad1a0b566d0ac6e41929bb87cd8a7d134d Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 13:44:49 -0700 Subject: [PATCH 33/47] refactoring --- edg/electronics_model/BoradScopedTransform.py | 22 +++- edg/electronics_model/NetlistGenerator.py | 113 ++++++++---------- 2 files changed, 71 insertions(+), 64 deletions(-) diff --git a/edg/electronics_model/BoradScopedTransform.py b/edg/electronics_model/BoradScopedTransform.py index 43b59a4d8..9bc3154bb 100644 --- a/edg/electronics_model/BoradScopedTransform.py +++ b/edg/electronics_model/BoradScopedTransform.py @@ -1,5 +1,5 @@ from abc import abstractmethod -from typing import Optional, Dict, List, cast +from typing import Optional, Dict, List, cast, override from .. import edgir from ..core import TransformUtil, CompiledDesign @@ -18,12 +18,22 @@ def __init__(self, design: CompiledDesign) -> None: TransformUtil.Path.empty(): TransformUtil.Path.empty() } # always initialized in parent - @abstractmethod def visit_block_scoped( self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, block: edgir.BlockTypes ) -> None: - raise NotImplementedError + pass + def visit_link_scoped( + self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, link: edgir.Link + ) -> None: + pass + + def visit_linkarray_scoped( + self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, link: edgir.LinkArray + ) -> None: + pass + + @override def visit_block(self, context: TransformContext, block: edgir.HierarchyBlock) -> None: scope = self._board_scopes[context.path] @@ -46,3 +56,9 @@ def visit_block(self, context: TransformContext, block: edgir.HierarchyBlock) -> self._board_scopes[context.path.append_block(block_pair.name)] = scope self.visit_block_scoped(context, scope, block) + + def visit_link(self, context: TransformContext, link: edgir.Link) -> None: + self.visit_link_scoped(context, self._board_scopes[context.path.block_component()], link) + + def visit_linkarray(self, context: TransformContext, link: edgir.LinkArray) -> None: + self.visit_linkarray_scoped(context, self._board_scopes[context.path.block_component()], link) diff --git a/edg/electronics_model/NetlistGenerator.py b/edg/electronics_model/NetlistGenerator.py index 693264e98..3774c7aa0 100644 --- a/edg/electronics_model/NetlistGenerator.py +++ b/edg/electronics_model/NetlistGenerator.py @@ -4,6 +4,7 @@ from typing_extensions import override +from .BoradScopedTransform import BoardScopedTransform from .. import edgir from ..core import * @@ -63,7 +64,7 @@ def empty(cls, path: TransformUtil.Path) -> "BoardScope": # returns a fresh, em ] # Path -> class names corresponding to shortened path name -class NetlistTransform(TransformUtil.Transform): +class NetlistTransform(BoardScopedTransform): @staticmethod def flatten_port(path: TransformUtil.Path, port: edgir.PortLike) -> Iterable[TransformUtil.Path]: if port.HasField("port"): @@ -79,50 +80,32 @@ def flatten_port(path: TransformUtil.Path, port: edgir.PortLike) -> Iterable[Tra raise ValueError(f"don't know how to flatten netlistable port {port}") def __init__(self, design: CompiledDesign): + super().__init__(design) + self.all_scopes = [BoardScope.empty(TransformUtil.Path.empty())] # list of unique scopes self.scopes: Scopes = {TransformUtil.Path.empty(): self.all_scopes[0]} self.class_paths: ClassPaths = {TransformUtil.Path.empty(): []} # seed root self.path_traverse_order: List[TransformUtil.Path] = [] - self.design = design - def process_blocklike( - self, path: TransformUtil.Path, block: Union[edgir.Link, edgir.LinkArray, edgir.HierarchyBlock] + self, + path: TransformUtil.Path, + scope: Optional[TransformUtil.Path], + block: Union[edgir.Link, edgir.LinkArray, edgir.HierarchyBlock], ) -> None: - scope = self.scopes[path] # including footprint and exports, and everything within a link + if scope is not None: + scope_obj: Optional[BoardScope] = self.scopes[scope] + else: + scope_obj = None if isinstance(block, edgir.HierarchyBlock): - if "fp_subboard" in block.meta.members.node: - fp_external_blocks = self.design.get_value(path.to_tuple() + ("fp_external_blocks",)) - assert isinstance(fp_external_blocks, list) - external_blocks: Optional[List[str]] = cast(List[str], fp_external_blocks) - if "fp_subblocks_ignored" in block.meta.members.node: - internal_scope = None - else: - raise NotImplementedError("support subboard") - else: - external_blocks = None - internal_scope = scope - - for block_pair in block.blocks: - if external_blocks is not None and block_pair.name not in external_blocks: - self.scopes[path.append_block(block_pair.name)] = internal_scope - else: - self.scopes[path.append_block(block_pair.name)] = scope - for link_pair in block.links: # links considered to be the same scope as self - self.scopes[path.append_link(link_pair.name)] = scope - class_path = self.class_paths[path] for block_pair in block.blocks: self.class_paths[path.append_block(block_pair.name)] = class_path + [ block_pair.value.hierarchy.self_class ] - elif isinstance(block, (edgir.Link, edgir.LinkArray)): - for link_pair in block.links: - self.scopes[path.append_link(link_pair.name)] = scope - - if "nets" in block.meta.members.node and scope is not None: + if "nets" in block.meta.members.node and scope_obj is not None: # add self as a net # list conversion to deal with iterable-once flat_ports = list( @@ -130,11 +113,11 @@ def process_blocklike( *[self.flatten_port(path.append_port(port_pair.name), port_pair.value) for port_pair in block.ports] ) ) - scope.edges.setdefault(path, []).extend(flat_ports) + scope_obj.edges.setdefault(path, []).extend(flat_ports) for port_path in flat_ports: - scope.edges.setdefault(port_path, []).append(path) + scope_obj.edges.setdefault(port_path, []).append(path) - if "nets_packed" in block.meta.members.node and scope is not None: + if "nets_packed" in block.meta.members.node and scope_obj is not None: # this connects the first source to all destinations, then asserts all the sources are equal # this leaves the sources unconnected, to be connected externally and checked at the end src_port_name = block.meta.members.node["nets_packed"].members.node["src"].text_leaf @@ -147,20 +130,20 @@ def process_blocklike( ) assert flat_srcs, "missing source port(s) for packed net" for dst_path in flat_dsts: - scope.edges.setdefault(flat_srcs[0], []).append(dst_path) - scope.edges.setdefault(dst_path, []).append(flat_srcs[0]) + scope_obj.edges.setdefault(flat_srcs[0], []).append(dst_path) + scope_obj.edges.setdefault(dst_path, []).append(flat_srcs[0]) for src_path in flat_srcs: # assert all sources connected for dst_path in flat_srcs: - scope.assert_connected.append((src_path, dst_path)) + scope_obj.assert_connected.append((src_path, dst_path)) - if "fp_is_footprint" in block.meta.members.node and scope is not None: - footprint_name = self.design.get_value(path.to_tuple() + ("fp_footprint",)) - footprint_pinning = self.design.get_value(path.to_tuple() + ("fp_pinning",)) - mfr = self.design.get_value(path.to_tuple() + ("fp_mfr",)) - part = self.design.get_value(path.to_tuple() + ("fp_part",)) - value = self.design.get_value(path.to_tuple() + ("fp_value",)) - refdes = self.design.get_value(path.to_tuple() + ("fp_refdes",)) - lcsc_part = self.design.get_value(path.to_tuple() + ("lcsc_part",)) + if "fp_is_footprint" in block.meta.members.node and scope_obj is not None: + footprint_name = self._design.get_value(path.to_tuple() + ("fp_footprint",)) + footprint_pinning = self._design.get_value(path.to_tuple() + ("fp_pinning",)) + mfr = self._design.get_value(path.to_tuple() + ("fp_mfr",)) + part = self._design.get_value(path.to_tuple() + ("fp_part",)) + value = self._design.get_value(path.to_tuple() + ("fp_value",)) + refdes = self._design.get_value(path.to_tuple() + ("fp_refdes",)) + lcsc_part = self._design.get_value(path.to_tuple() + ("lcsc_part",)) assert isinstance(footprint_name, str) assert isinstance(footprint_pinning, list) @@ -173,7 +156,9 @@ def process_blocklike( part_comps = [part, f"({mfr})" if mfr else ""] part_str = " ".join(filter(None, part_comps)) value_str = value if value else (part if part else "") - scope.footprints[path] = NetBlock(footprint_name, refdes, part_str, value_str, path, self.class_paths[path]) + scope_obj.footprints[path] = NetBlock( + footprint_name, refdes, part_str, value_str, path, self.class_paths[path] + ) for pin_spec in footprint_pinning: assert isinstance(pin_spec, str) @@ -183,23 +168,23 @@ def process_blocklike( pin_port_path = edgir.LocalPathList(pin_spec_split[1].split(".")) src_path = path.follow(pin_port_path, block)[0] - scope.edges.setdefault(src_path, []) # make sure there is a port entry so single-pin nets are named - scope.pins.setdefault(src_path, []).append(NetPin(path, pin_name)) + scope_obj.edges.setdefault(src_path, []) # make sure there is a port entry so single-pin nets are named + scope_obj.pins.setdefault(src_path, []).append(NetPin(path, pin_name)) for constraint_pair in block.constraints: - if scope is not None: + if scope_obj is not None: if constraint_pair.value.HasField("connected"): - self.process_connected(path, block, scope, constraint_pair.value.connected) + self.process_connected(path, block, scope_obj, constraint_pair.value.connected) elif constraint_pair.value.HasField("connectedArray"): for expanded_connect in constraint_pair.value.connectedArray.expanded: - self.process_connected(path, block, scope, expanded_connect) + self.process_connected(path, block, scope_obj, expanded_connect) elif constraint_pair.value.HasField("exported"): - self.process_exported(path, block, scope, constraint_pair.value.exported) + self.process_exported(path, block, scope_obj, constraint_pair.value.exported) elif constraint_pair.value.HasField("exportedArray"): for expanded_export in constraint_pair.value.exportedArray.expanded: - self.process_exported(path, block, scope, expanded_export) + self.process_exported(path, block, scope_obj, expanded_export) elif constraint_pair.value.HasField("exportedTunnel"): - self.process_exported(path, block, scope, constraint_pair.value.exportedTunnel) + self.process_exported(path, block, scope_obj, constraint_pair.value.exportedTunnel) def process_connected( self, path: TransformUtil.Path, current: edgir.EltTypes, scope: BoardScope, constraint: edgir.ConnectedExpr @@ -253,19 +238,25 @@ def connect_ports( raise ValueError(f"can't connect types {elt1}, {elt2}") @override - def visit_block(self, context: TransformUtil.TransformContext, block: edgir.BlockTypes) -> None: + def visit_block_scoped( + self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, block: edgir.BlockTypes + ) -> None: self.path_traverse_order.append(context.path) - self.process_blocklike(context.path, block) + self.process_blocklike(context.path, scope, block) @override - def visit_link(self, context: TransformUtil.TransformContext, link: edgir.Link) -> None: + def visit_link_scoped( + self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, link: edgir.Link + ) -> None: self.path_traverse_order.append(context.path) - self.process_blocklike(context.path, link) + self.process_blocklike(context.path, scope, link) @override - def visit_linkarray(self, context: TransformUtil.TransformContext, link: edgir.LinkArray) -> None: + def visit_linkarray_scoped( + self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, link: edgir.LinkArray + ) -> None: self.path_traverse_order.append(context.path) - self.process_blocklike(context.path, link) + self.process_blocklike(context.path, scope, link) @override def visit_portlike(self, context: TransformUtil.TransformContext, port: edgir.PortLike) -> None: @@ -352,7 +343,7 @@ def scope_to_netlist(self, scope: BoardScope) -> Netlist: key=lambda pair: path_ordering[pair[0].port_component(must_have_port=False)], ) - board_refdes_prefix = self.design.get_value(("refdes_prefix",)) + board_refdes_prefix = self._design.get_value(("refdes_prefix",)) if board_refdes_prefix is not None: assert isinstance(board_refdes_prefix, str) net_prefix = board_refdes_prefix @@ -381,7 +372,7 @@ def port_ignored_paths(path: TransformUtil.Path) -> bool: # ignore link ports f return Netlist(netlist_footprints, netlist_nets) def run(self) -> Netlist: - self.transform_design(self.design.design) + self.transform_design(self._design.design) return self.scope_to_netlist(self.all_scopes[0]) # TODO support multiple scopes From 0264e2b91b2a6041053d5c0649b9bbeb9b5ae685 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 13:48:40 -0700 Subject: [PATCH 34/47] infrastructure --- edg/electronics_model/NetlistGenerator.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/edg/electronics_model/NetlistGenerator.py b/edg/electronics_model/NetlistGenerator.py index 3774c7aa0..96c497cdd 100644 --- a/edg/electronics_model/NetlistGenerator.py +++ b/edg/electronics_model/NetlistGenerator.py @@ -94,7 +94,7 @@ def process_blocklike( block: Union[edgir.Link, edgir.LinkArray, edgir.HierarchyBlock], ) -> None: if scope is not None: - scope_obj: Optional[BoardScope] = self.scopes[scope] + scope_obj: Optional[BoardScope] = self.scopes.setdefault(scope, BoardScope.empty(scope)) else: scope_obj = None @@ -374,7 +374,8 @@ def port_ignored_paths(path: TransformUtil.Path) -> bool: # ignore link ports f def run(self) -> Netlist: self.transform_design(self._design.design) - return self.scope_to_netlist(self.all_scopes[0]) # TODO support multiple scopes + assert len(self.all_scopes) == 1, "TODO: support multiple boards" + return self.scope_to_netlist(self.all_scopes[0]) class PathShortener: From 742e646edaf0a2ea9e28a73075d6a9f7c537de84 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 13:56:45 -0700 Subject: [PATCH 35/47] fix types --- edg/electronics_model/BoradScopedTransform.py | 9 +++++---- edg/electronics_model/NetlistGenerator.py | 6 +++--- edg/electronics_model/RefdesRefinementPass.py | 2 +- edg/parts/StepperDriver_A4988.py | 3 +-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/edg/electronics_model/BoradScopedTransform.py b/edg/electronics_model/BoradScopedTransform.py index 9bc3154bb..efe4ce62c 100644 --- a/edg/electronics_model/BoradScopedTransform.py +++ b/edg/electronics_model/BoradScopedTransform.py @@ -1,4 +1,3 @@ -from abc import abstractmethod from typing import Optional, Dict, List, cast, override from .. import edgir @@ -19,17 +18,17 @@ def __init__(self, design: CompiledDesign) -> None: } # always initialized in parent def visit_block_scoped( - self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, block: edgir.BlockTypes + self, context: TransformUtil.TransformContext, scope: Optional[TransformUtil.Path], block: edgir.BlockTypes ) -> None: pass def visit_link_scoped( - self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, link: edgir.Link + self, context: TransformUtil.TransformContext, scope: Optional[TransformUtil.Path], link: edgir.Link ) -> None: pass def visit_linkarray_scoped( - self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, link: edgir.LinkArray + self, context: TransformUtil.TransformContext, scope: Optional[TransformUtil.Path], link: edgir.LinkArray ) -> None: pass @@ -57,8 +56,10 @@ def visit_block(self, context: TransformContext, block: edgir.HierarchyBlock) -> self.visit_block_scoped(context, scope, block) + @override def visit_link(self, context: TransformContext, link: edgir.Link) -> None: self.visit_link_scoped(context, self._board_scopes[context.path.block_component()], link) + @override def visit_linkarray(self, context: TransformContext, link: edgir.LinkArray) -> None: self.visit_linkarray_scoped(context, self._board_scopes[context.path.block_component()], link) diff --git a/edg/electronics_model/NetlistGenerator.py b/edg/electronics_model/NetlistGenerator.py index 96c497cdd..e62b07ce5 100644 --- a/edg/electronics_model/NetlistGenerator.py +++ b/edg/electronics_model/NetlistGenerator.py @@ -239,21 +239,21 @@ def connect_ports( @override def visit_block_scoped( - self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, block: edgir.BlockTypes + self, context: TransformUtil.TransformContext, scope: Optional[TransformUtil.Path], block: edgir.BlockTypes ) -> None: self.path_traverse_order.append(context.path) self.process_blocklike(context.path, scope, block) @override def visit_link_scoped( - self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, link: edgir.Link + self, context: TransformUtil.TransformContext, scope: Optional[TransformUtil.Path], link: edgir.Link ) -> None: self.path_traverse_order.append(context.path) self.process_blocklike(context.path, scope, link) @override def visit_linkarray_scoped( - self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, link: edgir.LinkArray + self, context: TransformUtil.TransformContext, scope: Optional[TransformUtil.Path], link: edgir.LinkArray ) -> None: self.path_traverse_order.append(context.path) self.process_blocklike(context.path, scope, link) diff --git a/edg/electronics_model/RefdesRefinementPass.py b/edg/electronics_model/RefdesRefinementPass.py index 7396a0709..50289d184 100644 --- a/edg/electronics_model/RefdesRefinementPass.py +++ b/edg/electronics_model/RefdesRefinementPass.py @@ -34,7 +34,7 @@ def __init__(self, design: CompiledDesign): @override def visit_block_scoped( - self, context: TransformUtil.TransformContext, scope: TransformUtil.Path, block: edgir.BlockTypes + self, context: TransformUtil.TransformContext, scope: Optional[TransformUtil.Path], block: edgir.BlockTypes ) -> None: if "fp_is_footprint" in block.meta.members.node and scope is not None: refdes_prefix = self._design.get_value(context.path.to_tuple() + ("fp_refdes_prefix",)) diff --git a/edg/parts/StepperDriver_A4988.py b/edg/parts/StepperDriver_A4988.py index e41281b44..ae1d04478 100644 --- a/edg/parts/StepperDriver_A4988.py +++ b/edg/parts/StepperDriver_A4988.py @@ -245,6 +245,7 @@ def __init__(self) -> None: self.out2a = self.Port(DigitalSource.empty()) self.out2b = self.Port(DigitalSource.empty()) + @override def contents(self) -> None: self.footprint( "U", @@ -301,8 +302,6 @@ def __init__(self, step_resolution: IntLike = 16): def generate(self) -> None: super().generate() - self.connect(self.pwr, self.model.vbb2) - self.wrapper = self.Block(PololuA4988_Device(), external=True) # TODO: deduplicate w/ A4988 application circuit From 19a769777a809921cae1ed10cc82d2eb11640c6c Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 15:34:21 -0700 Subject: [PATCH 36/47] hah --- .../{BoradScopedTransform.py => BoardScopedTransform.py} | 0 edg/electronics_model/NetlistGenerator.py | 2 +- edg/electronics_model/RefdesRefinementPass.py | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename edg/electronics_model/{BoradScopedTransform.py => BoardScopedTransform.py} (100%) diff --git a/edg/electronics_model/BoradScopedTransform.py b/edg/electronics_model/BoardScopedTransform.py similarity index 100% rename from edg/electronics_model/BoradScopedTransform.py rename to edg/electronics_model/BoardScopedTransform.py diff --git a/edg/electronics_model/NetlistGenerator.py b/edg/electronics_model/NetlistGenerator.py index e62b07ce5..d41ab023d 100644 --- a/edg/electronics_model/NetlistGenerator.py +++ b/edg/electronics_model/NetlistGenerator.py @@ -4,7 +4,7 @@ from typing_extensions import override -from .BoradScopedTransform import BoardScopedTransform +from .BoardScopedTransform import BoardScopedTransform from .. import edgir from ..core import * diff --git a/edg/electronics_model/RefdesRefinementPass.py b/edg/electronics_model/RefdesRefinementPass.py index 50289d184..851601856 100644 --- a/edg/electronics_model/RefdesRefinementPass.py +++ b/edg/electronics_model/RefdesRefinementPass.py @@ -2,7 +2,7 @@ from typing_extensions import override -from .BoradScopedTransform import BoardScopedTransform +from .BoardScopedTransform import BoardScopedTransform from .. import edgir from ..core import CompiledDesign, TransformUtil from ..core.BaseRefinementPass import BaseRefinementPass From 35b941531ac595cae81b20443b0e1fe9c88ab43c Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 15:38:43 -0700 Subject: [PATCH 37/47] wip --- edg/electronics_model/test_netlist_subboard.py | 2 +- edg/parts/StepperDriver_A4988.py | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/edg/electronics_model/test_netlist_subboard.py b/edg/electronics_model/test_netlist_subboard.py index d4e63cd32..2f93ec8e3 100644 --- a/edg/electronics_model/test_netlist_subboard.py +++ b/edg/electronics_model/test_netlist_subboard.py @@ -3,7 +3,7 @@ from typing_extensions import override from .. import FootprintBlock, DesignTop -from ..core import Block, TransformUtil +from ..core import TransformUtil from .test_netlist import NetlistTestCase, TestFakeSource, TestFakeSink, NetBlock, Net, NetPin from . import SubboardBlock, WrapperSubboardBlock, VoltageSink, Passive diff --git a/edg/parts/StepperDriver_A4988.py b/edg/parts/StepperDriver_A4988.py index ae1d04478..10e7da7ac 100644 --- a/edg/parts/StepperDriver_A4988.py +++ b/edg/parts/StepperDriver_A4988.py @@ -236,15 +236,16 @@ def __init__(self) -> None: self.reset = self.Port(DigitalSink.empty(), optional=True) self.sleep = self.Port(DigitalSink.empty(), optional=True) - self.ms1 = self.Port(DigitalSink.empty()) - self.ms2 = self.Port(DigitalSink.empty()) - self.ms3 = self.Port(DigitalSink.empty()) - self.out1a = self.Port(DigitalSource.empty()) self.out1b = self.Port(DigitalSource.empty()) self.out2a = self.Port(DigitalSource.empty()) self.out2b = self.Port(DigitalSource.empty()) + # unlike the other ports, these are directly connected and not tapped and must have modeling + self.ms1 = self.Port(DigitalSink()) + self.ms2 = self.Port(DigitalSink()) + self.ms3 = self.Port(DigitalSink()) + @override def contents(self) -> None: self.footprint( From a3ba3462e8e2c85d8a4b0ab015539464978d8876 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 15:55:38 -0700 Subject: [PATCH 38/47] Create test_netlist_subboard_array.py --- .../test_netlist_subboard_array.py | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 edg/electronics_model/test_netlist_subboard_array.py diff --git a/edg/electronics_model/test_netlist_subboard_array.py b/edg/electronics_model/test_netlist_subboard_array.py new file mode 100644 index 000000000..17513709d --- /dev/null +++ b/edg/electronics_model/test_netlist_subboard_array.py @@ -0,0 +1,123 @@ +import unittest + +from typing_extensions import override + +from .. import FootprintBlock +from ..core import * +from ..core import TransformUtil +from .test_netlist import NetlistTestCase, TestFakeSource, NetBlock, Net, NetPin +from . import WrapperSubboardBlock, VoltageSink + + +class TestFakeSinkArray(GeneratorBlock, FootprintBlock): + def __init__(self) -> None: + super().__init__() + self.ports = self.Port(Vector(VoltageSink())) # must remain empty + self.generator_param(self.ports.requested()) + + @override + def generate(self) -> None: + super().generate() + pins = {} + self.ports.defined() + for port_name in self.get(self.ports.requested()): + pins[port_name] = self.ports.append_elt(VoltageSink(), port_name) + + self.footprint("R", "Resistor_SMD:R_0603_1608Metric", pins, value="1k") # load resistor + + +class SinkArrayWrapperExterior(GeneratorBlock, FootprintBlock): + def __init__(self) -> None: + super().__init__() + self.ports = self.Port(Vector(VoltageSink.empty())) # must remain empty + self.generator_param(self.ports.requested()) + + @override + def generate(self) -> None: + super().generate() + pins = {} + self.ports.defined() + for port_name in self.get(self.ports.requested()): + pins[port_name] = self.ports.append_elt(VoltageSink.empty(), port_name) + + self.footprint( # only this footprint shows up + "L", + "Inductor_SMD:L_0603_1608Metric", # distinct footprint and value from internal blocks + pins, + value="100", + ) + + +class SinkArrayWrapperBlock(WrapperSubboardBlock): + """Wrapper block with a single footprint for two internal sinks whose footprints are ignored.""" + + def __init__(self) -> None: + super().__init__() + self.model = self.Block(TestFakeSinkArray()) + self.ports = self.Export(self.model.ports) + + @override + def contents(self) -> None: + super().contents() + + self.wrapper = self.Block(SinkArrayWrapperExterior(), external=True) + self.export_tap(self.ports, self.wrapper.ports) + + +class TestArrayWrapperCircuit(DesignTop): + @override + def contents(self) -> None: + super().contents() + + self.source = self.Block(TestFakeSource()) + self.sink = self.Block(SinkArrayWrapperBlock()) + + self.vpos = self.connect(self.source.pos, self.sink.ports.request("1")) + self.vneg = self.connect(self.source.neg, self.sink.ports.request("2")) + + +class NetlistArrayWrapperTestCase(unittest.TestCase): + def test_wrapper_netlist(self) -> None: + net = NetlistTestCase.generate_net(TestArrayWrapperCircuit) + + self.assertIn( + NetBlock( + "Inductor_SMD:L_0603_1608Metric", + "L1", + "", + "100", + ["sink", "wrapper"], + [ + "edg.electronics_model.test_netlist_subboard_array.SinkArrayWrapperBlock", + "edg.electronics_model.test_netlist_subboard_array.SinkArrayWrapperExterior", + ], + ), + net.blocks, + ) + self.assertEqual(len(net.blocks), 2) # should only generate top-level source and sink + + self.assertIn( + Net( + "vpos", + [NetPin(["source"], "1"), NetPin(["sink", "wrapper"], "1")], # ensure extraneous nets not generated + [ + TransformUtil.Path.empty().append_block("source").append_port("pos", "net"), + TransformUtil.Path.empty().append_block("sink").append_port("ports", "1", "net"), + TransformUtil.Path.empty().append_block("sink", "wrapper").append_port("ports", "1", "net"), + ], + ), + net.nets, + ) + self.assertIn( + Net( + "gnd", + [NetPin(["source"], "2"), NetPin(["sink", "wrapper"], "2")], + [ + TransformUtil.Path.empty().append_block("source").append_port("neg", "net"), + TransformUtil.Path.empty().append_block("sink").append_port("ports", "2", "net"), + TransformUtil.Path.empty().append_block("sink", "wrapper").append_port("ports", "2", "net"), + ], + ), + net.nets, + ) + self.assertEqual(len(net.nets), 2) # ensure empty nets pruned From ca5ea30e0d0a1d03ad53400ca58e9f235d40f4ff Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 16:01:04 -0700 Subject: [PATCH 39/47] Update test_netlist_subboard_array.py --- edg/electronics_model/test_netlist_subboard_array.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edg/electronics_model/test_netlist_subboard_array.py b/edg/electronics_model/test_netlist_subboard_array.py index 17513709d..99a7fe3a7 100644 --- a/edg/electronics_model/test_netlist_subboard_array.py +++ b/edg/electronics_model/test_netlist_subboard_array.py @@ -12,7 +12,7 @@ class TestFakeSinkArray(GeneratorBlock, FootprintBlock): def __init__(self) -> None: super().__init__() - self.ports = self.Port(Vector(VoltageSink())) # must remain empty + self.ports = self.Port(Vector(VoltageSink())) self.generator_param(self.ports.requested()) @override From f69be516149eed0e33e791a485e02f0ea0ef8fc7 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 16:30:43 -0700 Subject: [PATCH 40/47] fix --- edg/electronics_model/test_netlist_subboard.py | 9 +++++---- edg/electronics_model/test_netlist_subboard_array.py | 4 +++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/edg/electronics_model/test_netlist_subboard.py b/edg/electronics_model/test_netlist_subboard.py index 2f93ec8e3..1bf8d16d7 100644 --- a/edg/electronics_model/test_netlist_subboard.py +++ b/edg/electronics_model/test_netlist_subboard.py @@ -97,10 +97,9 @@ def contents(self) -> None: super().contents() # these define the modeling and are internal - self.model1 = self.Block(TestFakeSink()) - self.model2 = self.Block(TestFakeSink()) - self.vpos = self.connect(self.pos, self.model1.pos, self.model2.pos) - self.gnd = self.connect(self.neg, self.model1.neg, self.model2.neg) + self.model = self.Block(TestFakeSink()) + self.vpos = self.connect(self.pos, self.model.pos) + self.gnd = self.connect(self.neg, self.model.neg) # these define the external interface block self.wrapper = self.Block(SinkWrapperPassiveExterior(), external=True) @@ -192,6 +191,7 @@ def test_wrapper_passive_netlist(self) -> None: [ TransformUtil.Path.empty().append_block("source").append_port("pos", "net"), TransformUtil.Path.empty().append_block("sink").append_port("pos", "net"), + TransformUtil.Path.empty().append_block("sink", "model").append_port("pos", "net"), TransformUtil.Path.empty().append_block("sink", "wrapper").append_port("pos"), ], ), @@ -204,6 +204,7 @@ def test_wrapper_passive_netlist(self) -> None: [ TransformUtil.Path.empty().append_block("source").append_port("neg", "net"), TransformUtil.Path.empty().append_block("sink").append_port("neg", "net"), + TransformUtil.Path.empty().append_block("sink", "model").append_port("neg", "net"), TransformUtil.Path.empty().append_block("sink", "wrapper").append_port("neg"), ], ), diff --git a/edg/electronics_model/test_netlist_subboard_array.py b/edg/electronics_model/test_netlist_subboard_array.py index 99a7fe3a7..9e350dfe7 100644 --- a/edg/electronics_model/test_netlist_subboard_array.py +++ b/edg/electronics_model/test_netlist_subboard_array.py @@ -73,7 +73,7 @@ def contents(self) -> None: self.sink = self.Block(SinkArrayWrapperBlock()) self.vpos = self.connect(self.source.pos, self.sink.ports.request("1")) - self.vneg = self.connect(self.source.neg, self.sink.ports.request("2")) + self.gnd = self.connect(self.source.neg, self.sink.ports.request("2")) class NetlistArrayWrapperTestCase(unittest.TestCase): @@ -103,6 +103,7 @@ def test_wrapper_netlist(self) -> None: [ TransformUtil.Path.empty().append_block("source").append_port("pos", "net"), TransformUtil.Path.empty().append_block("sink").append_port("ports", "1", "net"), + TransformUtil.Path.empty().append_block("sink", "model").append_port("ports", "1", "net"), TransformUtil.Path.empty().append_block("sink", "wrapper").append_port("ports", "1", "net"), ], ), @@ -115,6 +116,7 @@ def test_wrapper_netlist(self) -> None: [ TransformUtil.Path.empty().append_block("source").append_port("neg", "net"), TransformUtil.Path.empty().append_block("sink").append_port("ports", "2", "net"), + TransformUtil.Path.empty().append_block("sink", "model").append_port("ports", "2", "net"), TransformUtil.Path.empty().append_block("sink", "wrapper").append_port("ports", "2", "net"), ], ), From 15f9504bfc753d354ba161c5e95a4be4ad560e74 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 16:41:51 -0700 Subject: [PATCH 41/47] fix pololu wrapper --- edg/electronics_model/SubboardBlock.py | 6 ++- edg/parts/StepperDriver_A4988.py | 67 ++++++++++++++------------ 2 files changed, 42 insertions(+), 31 deletions(-) diff --git a/edg/electronics_model/SubboardBlock.py b/edg/electronics_model/SubboardBlock.py index 395cba862..43adee41e 100644 --- a/edg/electronics_model/SubboardBlock.py +++ b/edg/electronics_model/SubboardBlock.py @@ -9,7 +9,11 @@ class SubboardBlock(Block): """A block that is a sub-board, where all its blocks not marked external are part of a different board. - Provides the export_tap construct to tack connectors onto ports without breaking modeling.""" + Provides the export_tap construct to tack connectors onto ports without breaking modeling. + + IMPORTANT: pseudo-blocks like bridges and adapters are considered internal blocks and do not affect + netlisting in the exterior board. In general, external blocks should only be connected via export-tap + and not direct connections where they may generate pseudo-blocks that end up in the wrong board.""" def __init__(self) -> None: super().__init__() diff --git a/edg/parts/StepperDriver_A4988.py b/edg/parts/StepperDriver_A4988.py index 10e7da7ac..f74e40a1e 100644 --- a/edg/parts/StepperDriver_A4988.py +++ b/edg/parts/StepperDriver_A4988.py @@ -221,9 +221,11 @@ def generate(self) -> None: self.connect(self.pwr_logic.as_digital_source(), self.ic.sleep) -class PololuA4988_Device(InternalSubcircuit, FootprintBlock): - def __init__(self) -> None: +class PololuA4988_Device(InternalSubcircuit, FootprintBlock, GeneratorBlock): + def __init__(self, step_resolution: IntLike) -> None: super().__init__() + self.step_resolution = self.ArgParameter(step_resolution) + self.generator_param(self.step_resolution) self.gnd = self.Port(Ground.empty()) self.pwr = self.Port(VoltageSink.empty()) @@ -247,7 +249,32 @@ def __init__(self) -> None: self.ms3 = self.Port(DigitalSink()) @override - def contents(self) -> None: + def generate(self) -> None: + # TODO: deduplicate w/ A4988 application circuit + step_resolution = self.get(self.step_resolution) + if step_resolution == 1: # full step + ms1: HasPassivePort = self.gnd + ms2: HasPassivePort = self.gnd + ms3: HasPassivePort = self.gnd + elif step_resolution == 2: # half step + ms1 = self.pwr_logic + ms2 = self.gnd + ms3 = self.gnd + elif step_resolution == 4: # quarter step + ms1 = self.gnd + ms2 = self.pwr_logic + ms3 = self.gnd + elif step_resolution == 8: # eighth step + ms1 = self.gnd + ms2 = self.pwr_logic + ms3 = self.pwr_logic + elif step_resolution == 16: # sixteenth step + ms1 = self.pwr_logic + ms2 = self.pwr_logic + ms3 = self.pwr_logic + else: + raise ValueError(f"unknown step_resolution {step_resolution}") + self.footprint( "U", "edg:DIP-16_W12.70mm", @@ -264,9 +291,9 @@ def contents(self) -> None: "10": self.step, "11": self.sleep, "12": self.reset, - "13": self.ms3, - "14": self.ms2, - "15": self.ms1, + "13": ms3, + "14": ms2, + "15": ms1, "16": self.enable, }, mfr="Pololu", @@ -275,13 +302,12 @@ def contents(self) -> None: ) -class PololuA4988(BrushedMotorDriver, WrapperSubboardBlock, GeneratorBlock): +class PololuA4988(BrushedMotorDriver, WrapperSubboardBlock): """Pololu breakout board for the A4988 stepper driver. Adjustable current limit with onboard trimpot.""" def __init__(self, step_resolution: IntLike = 16): super().__init__() self.step_resolution = self.ArgParameter(step_resolution, doc="microstepping resolution (1, 2, 4, 8, or 16)") - self.generator_param(self.step_resolution) self.model = self.Block(A4988(itrip=2 * Amp(tol=0.15))) self.gnd = self.Export(self.model.gnd, [Common]) @@ -300,29 +326,10 @@ def __init__(self, step_resolution: IntLike = 16): self.out2b = self.Export(self.model.out2b) @override - def generate(self) -> None: - super().generate() - - self.wrapper = self.Block(PololuA4988_Device(), external=True) - - # TODO: deduplicate w/ A4988 application circuit - step_resolution = self.get(self.step_resolution) - if step_resolution == 1: # full step - self.connect(self.gnd.as_digital_source(), self.wrapper.ms1, self.wrapper.ms2, self.wrapper.ms3) - elif step_resolution == 2: # half step - self.connect(self.gnd.as_digital_source(), self.wrapper.ms2, self.wrapper.ms3) - self.connect(self.pwr_logic.as_digital_source(), self.wrapper.ms1) - elif step_resolution == 4: # quarter step - self.connect(self.gnd.as_digital_source(), self.wrapper.ms1, self.wrapper.ms3) - self.connect(self.pwr_logic.as_digital_source(), self.wrapper.ms2) - elif step_resolution == 8: # eighth step - self.connect(self.gnd.as_digital_source(), self.wrapper.ms3) - self.connect(self.pwr_logic.as_digital_source(), self.wrapper.ms1, self.wrapper.ms2) - elif step_resolution == 16: # sixteenth step - self.connect(self.pwr_logic.as_digital_source(), self.wrapper.ms1, self.wrapper.ms2, self.wrapper.ms3) - else: - raise ValueError(f"unknown step_resolution {step_resolution}") + def contents(self) -> None: + super().contents() + self.wrapper = self.Block(PololuA4988_Device(self.step_resolution), external=True) self.export_tap(self.gnd, self.wrapper.gnd) self.export_tap(self.pwr, self.wrapper.pwr) self.export_tap(self.pwr_logic, self.wrapper.pwr_logic) From 6920638e29cbd56f8c1685955eb7083982ad6fc8 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 16:42:39 -0700 Subject: [PATCH 42/47] Update edg-compiler-precompiled.jar --- .../resources/edg-compiler-precompiled.jar | Bin 13168366 -> 13139615 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/edg/core/resources/edg-compiler-precompiled.jar b/edg/core/resources/edg-compiler-precompiled.jar index 08fa3b7e8c8c773f802159c961eb11987fc664e9..ee6d0102eef4cdf76e728b6ec08840b7d64ea0bb 100644 GIT binary patch delta 239378 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

hwWMICw( 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 z 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

i1HVyk+~;c|r1U-@XC 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�}mfhdiut~z-|w?<3lC#FD{Y4twjE%CGtss=yqFo#}C1< z+lD)yMb2*L-0_#=F1vjfe#T2L2^c_%BdP z2M7`VU&Gx9002}P002;z^+paEmoTR|2bZvmNDY^O_rnr@&3p-bBUgF&dv9hm8XdMr zKILP*W6P&}tbDB3=SGsfUin<#Yp=cDu`PSGYg@J@@5ad{+(!xJh7#IBS`tzMg%A>F zNhkzLl5!PjIoi^eqx7QmE`?Gc|L?sSOR_w&9ccf*?(Zjg=FRuM?|a|kOKqmF@MbVB2?ek-`V3PkFE$LQTyXk}fEZf^yF4`E>^8jRqq zADaaG+Eq;IFAHhiN{Py2!7T=4uUC?*q#c5Nl8-BsJ)B_W{8$-j^a@1i!9Ks&fu$ZP zTj5BSG9r%%n9JeIBt^AI*+M7rDm@CxlmZ-QA`Mus%2)iDTk!(^bS#t#R@vt*0Q?~y z`}#?LrXX*c0e?DCxv0?$dqMs+LSdq$< zLMdJ7Ssr`AOA)Rh39T#9Fo;+dg%MsfiU$5T9i3xFqNr+A9H0Z%i4liD`THcE^~$~UN5$A&K-+i;A@CvkxMXtP6>EMa|JSPD}uAqnrv>tGcpJL`?-|Si-k^F0@Y>Ca;uU;C8O0mX@kRk} zAf4gOpAP$Yu5#Nic@?W@-@I;eU|$Z%B~WJfV`0U+=~dDiBvEeV{XEy!QzCiQbSYgb z$`ltc*Qc~9a=%j`(jW(NIkO0Ik<&qcE@4YI$fZ-RlAYD|9zXD@jDY@xek&axhw(s- zHV%5_Md7A3%d4D{vZdzU^NJVjP2RDC9{M(co^qPnh1XnyInaY57Zn3NyBYK;?@&Dy z0^Z>zigye6uHrI)?=jG)V(*kVIh5`fxUF**Nd|tSAUE0T1iINC4;CabQ{uCK6`nVN zo;*Hne1yPwg*Ki+_2<{dH#rz@*T(ZuDEW<7$NCDfD)2Z^&6_uhC9c0@Rrcna$gru(6Q1_0 z`O9T_D4&R2+d!o|zeyHqqf;fg#mY6?Hr2U?g=rICS<8`)X$#(}%0IJz95lHu+Gi@3 zSB7jiYx5<3akS}T2?qLuOSxXsvOG6b(^Aio8$nB8#9Gw25He-;*5ylFn1o~{59lus zDBj{GF5R1XXWC5rQpo4@o>I7Uaobkq?Ithb#E`6>H1QlK1HR(Oe3$ELr5|6-v`eiJ z1u>jA_Wms6=^x0O@W*UQTNvh%n?jA1e$s;~* z5mz94)QQF|t_=8?^MnIAF0srj-k7V4-dsO%rgto7sdsJ8%5fZNP%n8)Kt5GMA<1yJ z&91D^c7*NaHN9znGu6u>)8@$V?CJ3Q<>*S)rN*_u5T6Nhy*5|wx@taWy2%w-cFL4& zGA>MTC4R3t7Z&RDdM$F9BrS3QOnAvj`~oSj#TMCvNwpG?Y#S*_kDi6KxA~LjzNTh3%yNp1V)4&9-b_AFXL|=eJ$+Hw;vq%5NMWyH?W+a;@cB zofik^nirAZee0bKgCN$h?Su3d82#(s+MQ6*hzi%K2a)`{CmMWy#GfPvxyDQQ! zLfZUXwZb49IrX(yT|{61HM_pRnJwuj# zPFPQ?MHK8;2ff5Mw@mT1odA4+a<6#hZ2rKMy|8ik`su8x!8t6&@PJ*8T=w3h$kI-K zz0#E?2tAbxUhiGgrfF~OOxsehoIek7Jqq!y^_0@d*}aW9_SyDjkmvLTGsyF9h|3pG ztx*2#0t9B$J$Z!qFt?bs=^Jfco_4q<*5(=_V?NiNLvuJS)Ww&F3)?p;MzivUW}9*Z zsR(n#CkVxx9_6IZlxdek5LZQ|uLk6Q*JP2T9>v2EQHQsRQnOm?6_(~t^Lc}_%^P!* zvLf?lUTDEfKsR0J-}HJ_Gv{h`suvW=!U+R3|5#W)>IS{g_?zE&Zqt`#_Io=TDrBj9 zP_fBUZPt$evcL=P9ypR&EXeKyJTRQA>yg;)Z9$>j!39D-?y~%I=o1v+bG+@g_Vc2*Q*j)Qe3$ z{X>Nn^#!fl^L^uhFP{+8j+VC_ad^mYT+|D3=!CBw@J&}Jouu=iyjDVgg>B5P2glpj zdvdbQgB^4U#ay>nImz+9D$kH=CT9GG;2;qb( zC=^Ep`_8%Gpu`KAW4UT?WBB^%!tJ`k)`hw9TPs7OXCf@|07_juKsHDS7SVsN%G;vWUWcbvI#DK01x1mhJ}N@4wfb?y7sZz+I+wy4q! ziEu{P@q)uFTyJpY_06_z``Zeq2C)Q&4uKvF*}A}2rjIvSu&XZFDT#{~ zd&Q=+!y-!A6~owcp{Kg0#eSj!3MZbex6je4c=C(=L@Fv%eeO*)C(GPFg1NH|{DM;C z3km5>c_8;|L5t#ltcEohha36~KO0tVC2c zPf|JcRLCbgNOQLToZC^|SKN2E>3UZ6#M%7*2`Q`eO3~!?vMNV)j$qH;^m%=JyCBJG zZ|QVZPG-)vtm-RDSLV6vd9FTdL+SRwxO+&*$uvPX+gCK|F6$px2G3d+x37(q8^KNb zy*_iX-5Zdd{|gxhMNZO2@p=hYjUhEo*7b4V&kD zP7xYEMdgPvE8KVj9&A@s0qiz=!NLkSXo$s1C?qBviqEsDHVm9!;L3&f=?Rv=dKP#|`7a;!k~2|KdAsC6yk zD4806oblY49(83_fE>J+9xObw5i+@;5ISR#?7_xO3vpa;D-`Qy8dm!qO*ymxoJ*_8RlBuy2s4c< z{>i1@bW1)d7I<^|Y-d>@rzyAgM9X$yu)0KlRh(`~C~J`WaE9NSrqT=B z%R&>fXVab|aMzuIGOu|-^)2OQSQ?iHO*QA!PGp{TOU_WQ6)f0ZmZ|#M!`ghSAg<(3 zn|rur&h4x+_lV14*y1cv1yT+2l>-7VMj9%-#C=0;sF@NufxmacDuJACLS{b?A}tJm zcxa$*hQibp8JvTL2?BF$9eqyHA}>rq+@uBj`CvXID)7hjIA4w2n&OA}8XaqcLZ`1O z(hm*VU{QQsE5fu-poy(KnhWq(gOI?WVTsFS#Ny#CEzr;ntke~>mkmSV3W+!pkZV?I zr`y*;j_NGj-4PiBy6*heHGdi{zcz93@NhNAaSRJI zLDq5{UzpZY25MfM$SLft$K2AqPqVj@H2dk13E#Ll=BM^nl3;HRA;I4K-nhNFqy&2t zh;DD2p0&c(yW;#>prCBnP?uePJwBiB8N}(mU3^}GKAWIyy#-VpP1mkH4DJ$KgS)#! z2o?wuGzspm!3l#q!5IhycPBW3AcF=cxVwhnZm09+`=9eZ-}zZwYu3JN*RI_)T{TS8 zT@}!jCNPu6gzRQ~I|Q)^T>7Nt*)#kcAI;eEP620iV!I-Pc+IzTe_iwkwd(ChxRD@M zSV)YZx4gai1>&KHbA`_pzqlLk7*6ch!1yDMfL=e5^s!#lQ`&Y^-%>F?;!mG>F9*xB z4@0`J*WXs`UfpPSqb;aVs9vK_sl@7yz5IIE=>5}z463V#)T{z2bkp7q;rb$P_RYS) zq3$BI9d4Id+b?B&(D+=y(z$Tnqpb1L1=c|DtD56!$UWZL?T5qqbpv0g-ue}LpvD{F z8J9>wkBZ`Evg;o`dgV?-gugn;tE!w2TC7VDPgzPD1Z%y{=38UpX@14;d~EDSS;-!{ z{{5p)w2Wi(Su+?7BHB-@@$fNZGM15-VjB0ze02UIqZr;ax|9fJd%?PP{KKZ&&yU~a(l_%?Zq+t{jX5KpOs%%m~JiUa!`hz?&8a8 zeRG}lVJRny+5S!@S}**(uh%24Ru6L5-qn6w#BHPoB2|@~kP0N)$^fV9+sn}K4B{_B z{}7R%03{I ztIdQ>PdChchj=~cIz4k*az^OqZa6z!IGCA%3C^UANcE4*&UL)(3aT-}H#*zi;a3m& zjm8nvIb-C+u3Qyx1(HMLz_F*Rql|3PZU|&4pQy*z({9wstF-WZ_tp(%KUaqROKBowKA?T0WryDhAZa*=$mSQahoC6N{pjpIa0c)LHAb!46Ddzb%uI#%$VP!ZYVv94w5i0 za{O3EsJ$WEZcGy4<;wHURbO*(hg;>b#caRkI1i68V2Rn*liA7%RxPCqwBkpE_n!{lYx zAo1{nORo5vK-EXXU6S2Qs?Wsd7tvpLNvd;f zcSS}`3bCZ@DaZk;pkTvBc%czeV%mUT}qff60B$+6 zq>+@S#!HQdog$A#;llf6#&^++15$l9@pd_M$WA-h%Y@z9<*R1&Ou91O^m{ipsn-JA zH#ctjY*#rm8rsV!Kg<)K**+u$i#RebGt+&*tWFWkYg9vU46*q<|6%=JBo%W19m%PU zqAh6smY-?TtvMP=>)j8+g4JO0P((M%%X{LG#fM$}q+>@TI{V`H@vF@h$E0UIw3iRY zOptx}1G0tj8m1&oTX}iQGvDyQ(b0vmZ{t2p1uNiTN^IfoZ)Rixk0qy`a^tS#O{V=j z(&so^x5ja!JmI}$Z!to23y85zI~=S&7KrnU8zIZv0lP-yM(zg@3uBESHMYTt58x^P zwARcoRBxxiteCzE&eaLh?AQ5(OyaTXYz0B;T$-M=8l5JbT^TpI=JHNDeI$OV08!XO{2>Rc8mIxt~w0;U$`O zyVmE=23O0RaAzdJgoL_*hMhl&Vnn0d`A8UR zk$d)DNOqE;Yv=jdNz=pZ)#1*& zA{i$k*pBkgv?Wjn(Q0u~7(|4Qr#(}%iaN|>p28moB43`55^oX1OILJQbw?*dP8k@n zo9%X2_?4f4iJbI%wuXeuj-A>P2ygltLszknnpGGt4fBEcfyjK55u?HpdE#+8r3D_Z zvOL#$JcVmFw{sWA1nMhr?s^W+hA|0fl)={}le~qHhfY&QxPH=Gz}>Y=?E{QrR_yKZLod@%vMF z6X7pDlsENj-kOYXv_;vd^X(N5FwET+#F;g@eiCMwWA3x4CX)O2&=~}_`kDY5Qnc7I z)=5sV795#FrzP7ppF@EN#0cH7NJL1fN+c)or{!JOn%3))7v@HxBcf49*=Mbqs`mKv zs-imrQL_3Jf zE4vK(oo2IsJt9~AFtH{w#&|uYrDlac!9dw#N+=fCCr$IL?naRCB6BBW!N8L8Fh?}e z^9S6ECX}`FV>YG<4K`5ROPNW|eH?h0=Htg^ZQFdtK8v{&hy)#2V+fV<>lx3FB*2|Jlyrns?SJfG>|G)@RcX* zpnah$!7EZ}5MHjQ6pVW$COnozH`mC$?L(~Y4Udiq(7>_ws105Je5{$83~Jl671iWh zj$$y8PSF1JBRxcypIm0`B3r4u9d!yO)rBJN({mJm{OtrD2Zabm7Qv`=-B{mxw!A4H zBXA#=621(*FCGYm$PbDfsrpUY!KlV^`;e*o#^nX>sl5YV9EVw}lSLXVje6g$skn6e zWr)|v`2(w5;*6nzW`f5Mp*sD{K1oDbqX;yt2q!J~%$zM-mL!Kyu` z+NgSGG(7{63Y7;%U6ZX|b=Jr1s&v_+MI3|pTXEs?A(2l*flmmKXNyw$?;@)a(K@Eli}Q9< z#FiPswJ{|@ZM#4U1?hG)g3MtcHZAJDEcglWiAAq@a_-UtiG8e>U_R zJ$uR8wmO$tdzpo@GSp!+9t)W*TxFDe`mO+`OC7iG$6q@8cQ0>+7Q)sL73XS+h7a z3idT;b-*W;C>o)8E2D2Mr@3e-(((R6;Z82ZxXO{Tuhn*m7=nY0ADcPFQ}9744CJhg zxV$p;auT%~_MFcVh6jn*&4T@(rBDnO&2g+F&cFI)FaCSQB+_2Mf>JCLVHAu0yDudE zIQZtuEkcjB%ub%Oj*`O4azjKhA^^>ThA2+IldY*r| z)rK@O@*I@F)OHdZvXWIaNK4BspEZ zfTa2Af$=$MxWY18hMpF!jy3Jj$KN}uAG_ol2DD1M4Qt~Ye>Ob`xJbs-YetMg%zv^g zo*rxp7BA*R;ZI$BIpY%Vp#fcrZ^EJ7z0W@08WUL%&wpmO*+!axoaS*fSI^E4Ye87Wf)wl@kPu- zeS3cO4f0QjCj89i2{T?Oexi?F$cwQ-DjxtwLhL}28 z{6htlx0ho%>8SFQCJ&6axZ%;h&YZf$Iv6xJZ`gG6OPT%msuVT{H)Ap0Lijn5KEECH zE*GrUs0_FjsD2uMDszmdOfZ_g%V8V7XLdW5gl}}MnOW+5g^hsjf9HBiq-{qFQS>;* z8h~P)E@;yw9Q_Isb4n_geoQ7%-1HGRr9L%g8ElW>H;MRy`5_{wSRvbTi!l_uapLz2 zgwtJpln9CIUrD5z?Ux_efZ*>)&h_)oPqokX7xfqIO|=)4-d;WqGMrKgoO+!iqTOYo zj`J2!TP57rgxts7Lt}ik(r;D-PWeyWyf1id0;H@s4Qz@SI0!khGqk(&N|7vlZ46rt z5lF2(GJ^Y!72wdA##`J ztjO%8OH>w|V{(l3v^dO{S;hh8V@`@ceTlnyO1kXShJ_vi`zuadrI!K`u(xD_8v=4J zvKtt);pcLg-nC-2Odi<>xK-Ofm6Aq`$yg5RdivOMdvd(Y5|-yLQ4OV`23=NGg;~q? z7=#QTA4cfqy^5%rfG|{lN8^J(7&KPkvqPAbr+gU)qQX@?9*}2L8m-hY4XS;ZSoTq-wtS>0r`lFAmX?;4Zci$s8sUB__8c( zNog*K_n?JEg9Q45A=S5p<*&b6PR($H?4~TSDcJpi16M;31i35(VbH-}=J<7UceoJe zWLtpBmt|r2c&^sR_CI^apSR$oi*^+J+)%;@BJsDN3&H5UG~>#Afs{DFllqD}XiuDE zC|`Hp?sQ`N4QPZB-axvPBZ%AV#rcevI}5yraYf>atdg@dpEY*c;dA$%@=$$sAL?I` z?=bo*iz|*rav+Ed)pl?UmK}8%sc~@GBp~4O%gaF#>^7<3uy*Y)Vfy%yu4)zHkp@^fo5mnXO-b_=HSB%K}|KtabXUm3oA>=hmOcg zk$ZF2&~ zBLp4ER0$Sd6$YIz$4MROT?4Z5)^-6P$L{Uv`UzG>Dw^|i&Q!=jD#z$ z6JtH9H}dukOW`H=nfW=v2LH#4)$`HZs-9`cxx9}RAIJAk-;JZUN3rD37zeDrTSsqm z#*DQJhHj5u<#`F-rqn2ZPmD|t-Xs1<^pGq;(S`CesAT>l*#pHFwKJyn4 z)iaK7x0I}MACgw!lXz|=Zjot|o=)RUbMN79XM}!GaV0%jM4yJWBfQ#GxZu)?^FB7t&>1O=lU#t{OFl=Bk1z9m);y^seSmCF>HGLq`S&n6?FZ*oiw3NN@Aar@m z|E+0Hz~S4ACxhlwgiEn#A<%w!fQQwp45?=Ymcciw)&st*Vb>$+IgD3B+m5D&_tuSf z%wjQPeaB+b7@*!s{nnS%yX*vyGRuLd| zEIn#gEMpi+*&uw6D7EPjsaxaY2dK344Fk>^eE&06g)?;ttaWo7C#m*zkOVfeF=g@u zyeFced4eyK#SCW6SG(6&$24lN`cL5BaGS+`cvYu5BBkh=9WzEDi1%-N5wkP1Xo`A0 zu{7Y!b4cDAk?`0^t4xxjqk*|UFONH=LmX#)|y0X^S2w zh+JQRdesNd>}-acJk3kg&S_M58=2j2PBf&HJXpt5uF2)Ab8d>2seTN z88m*FOq1kQXgDAxd{1OOv042WUXbPf4mW*0~&%RkTtHbBjQ_2N}z)i}JX8snt6)YI)`HX65mu zBbq`hmc>6hiSPLq+T?6}2}FYNo~ctlabk-1J&-GHKlO!ltiSEMArR_oUD>l~DJ3 z!aoW;`bD3#FOObJcAMeVGF@?Ym47x<*9v>5*^@(P{@i@{tDisQiF@uoChenH?AxM} zUjMleIt$xR19r)9wfqCyPpaH!kYtBPt=KilN{=KT&%OKym+o^gxZfP%gRu`)->-5)QCmyNnPcsK3n*(W}k3EH*iZgKR5s^38L`< zZ{bifgm_*bTPghubSrfw<*0U^-#Rw@Lsr!>z9o7bb$IpMibxJ--s#>I)-9vez1x& zcb`Crh{^DZ%$UL>KjD!UlO5UHc&Irk8d&8c7)&%Hu9V+(yXxx~l2gTfN1ZT;@SQOG zfKl31nt;~%1>Fs&8ak*JUy=LaM_6Pb#?JP;sAroEaMMkwJPR*2n80{ZxuW9&-Cu@- zt1pa{-(e?+LGVUt>0%XaL-eNX>!_!P6ZqpMExw{IH&@k8VMcy8Dj2Q$S>{FAvbNbQ zit2ik%I(M0uy>26i**ruUWA+GK2t6BL>JLJ4m=8gwH*Q8bbj_Dlvy}#%hfbfI_jXU zzR))P?pJB_4N4o!3_H^o``FW8kq%>MeRJ78=Wg5ZhY)PtzNr26U8Q{_1rY;HB6&kg z$uXILVT!V-JkC}!r?H3J7NJ|4RygE+=N2L5l|==C&&n=m)hQwte48V>D{t~f>9;rC z7)R)8(nM=!uS7h%=CQ;t-DnP}>QNBKn<{(S<*qY~Su9v`X$p-$DMnQ^tO_(=ji>Is zvkrGP&V&$oN%T-EnpmFLz4#SKwjaY8VJ|@Exlz_ZX6TdZG!!vU&50=1{=%SW!x|Cg zm97&64cAoIIs=t^1mT{onKP|+Ced(;`}-@RWr~*L&xyf0p;lee#e@=>%BP|7yaQxw zXAIY^BodCsFML8<5B(Q~E=Ns~M)XfB7dDs9 zNukRO?QI@Q@lH!_k_l#yO4ziCLlAq%YEd|;rEdZ&4A?#I*T63g{41fM)?Bjp;DX^w z)L!NfZp;>+j(8(mHD_YUWoEdZ;C)1TuVB8Yy_8k%lED(Yl%&iqSm=q1#5O- zY8T@>ZJKiDULNVi;zV<2-bMYHI%>`1J2vTWeH<)Ce}1vJ)KltmHueL}L6C3_UV=}8 zm~zPT=dgd_Nt~lWsWA-K(bYD?2VyV9`N<$+1Sj-pP7!bly&xKce6A?Y=juvrb)L5* z#G-oL6Wq}xOggm_eWu#C*KkxnjuYOTk9DRh{)nwfPF>4)bl$}hDueRhsGVrrit250 z+lNJo^){5Rf2$+x)nWIY>9Jw%au4OGX1v){_f2-rP?Z3i`dETC)sx`hNu;jxHk~0~ zjtM?CG9aUz8PQRd75dnG+q|+dBFPGW=2opchKMi{*tQHux&QikrmVz3Ln#Q`3*4TG zJE~~q9B}=NDJW%3>YhYqy(_-^TYwZcjwEuo4@7-EizZ9pxx++6V&8}L_AKRAY?O2O z6S(IRO<7GGmmj;I^-$8PK%$Dsl(^?1qRO<8Y9$HzVft}U5$JlO4>2>q{9~r?n$aU8 zB-JkTeS}4L79wuWOIP;^k72jm5E1o9?$f>j{6^4eSzjLUocu}i%g9mg$hN**Vz~aQ z_$o5BdpVw-!;kn`mTxtSuEmttc;+UQCa;3ltzz~{+$94jrubD?%lC5`omA=}i4gFP zmS_m0lix++X8Kg)K;!C}{`I{Z{}nK`G=9RXM$IRxCS)@DNo{8)Bg7)*rRK0HBfF)* zWFcN-v>riFo2kov@INn#Y!(Aq3&ZGAFp=8Em!UZ6I3Q-kJjG%EGM3~a_-&qhqxET zNc9^m_-K{je(WAAOe^H=SJT56NWFKkvL2j!5%7X}XIkkCAGN)euu}8UUFeI!k21`@ zN5cxV1E)1>SF{oQp9NR$MxH!|tWHlxC7z5yy3bYdnsnKAw|ebrG$4(Vp7*-;sldaT zh`}AKpS_01_M7L_YP9XFDomuA$a<0&<+xW|I=R7?w`7!-`3RLe!~5k9pIg*3Dt@9j zU*6hP&khOxxJa=c7bs#*kC!FNpyT?Ow8SAKyShkBh(Ian`BZE~v?#Y4AamKY>JBan z6U6g0lUbOwz^o`7O@Y{^TNDV9aW=fNpe~<6ldBP?;2nPT?ROwE_=-w-Kd=@-<=r`g z-br#c-bNAXBH4nZ$RL7Ph)J6+E57ZGOO4`cCoy`5-7+6Ww8~uha0;+Eo6=y;TbGlI zrVakEI57gz=Zk}?v|+VVCbcDdJr*71)Agh-QUlHJEy)^Z&zm7)Zf=I8NlNspJl~of zqUJ?TFv7-6MUiB9mMq^mHaww%NK?C;!b?{8Xk$HzlkFxakS z(r&es_o{Kz%VaM|Mn@iUb(bCA(C3RiaNR{~NWYx(mj}h33xk?eS|{p;(J6DA`#`d7 zV_at&+?)ZeBy%e8ud$5_1Q8l{ViMDq&Cr8mGege2MH5JkOIhCmvwW4f4oOte(y@&v zrgi}QeH;_8NS^9yP7t|j3GtvmnGgzIlfW}qo)z~;X$%v{mWA!j*H_ZC%7NG~D21@E z#)KjeJ~h5F4}KI5GcBFuYTT70>K1b%pv;p}!fA4JOuz~#KXy5GJs|O!Pf(vZCD42M zq=-;x0*e~bXBOzu=_770g#3&<^tB*gHh-_> zqnyk^NrUi+B^I3Nq%(~0LmyWH7eS;z9w%{MKebWxcSt{`A&MjM27B|A)sD|)n{!4Z z5)*M5ryC5~0X2@3L+!cHEYaPFu~4lM{5j!_LSTBc<=~0#i}<;w@uHFRonc#57fwtX z7CBz;FWbfAspERn^C;U3V?RSlm3CZ~-cx%APgY+Tu|LAlJIus--D=_QrsPtg5yUXZ z4=~ZSbV%P7~BIT$glX4z{-oUK>;`97NfP=W|}{w#Or`fs(3KjtV9GAgEhQy5si(C|NZ>|I zMY!cTfw8&$K+^teC-*VLfvH-EPQs%2aOj0zDyPs*SIZI`iJIObmw$EWt4s;DuZ>p+e(Y*8V)w3H#E{ zy0Y-HV(kpDL}Ra4RH@r*5@Dj(yu@R)Ws{^TY-*q)mR*ME_}nLko;fK+{KQv`-$PA&6Utd4$>({Tt+~HJEWR*4 zQ1Axi=C&HFzX`3WM8nleAO<(%ue^n7W_IO=bu51-U*^e+u2kR={8~Dxg~=-456wK@+N^LCzM{c1VtL*4k?$TOUi~WIA1j~zZHET+w7G> zd)HAL!`XWVPIMbFSZEl<*{vyp%*eN6fy5*JbfE>W!ZZ*S6_QPncI2saFpIR4yB++&kj$ULXveFe zsT7FUI1fg-W3xidFKpj)XwHA1nwPsWvbVKKWlWO){>rPHf|Ab>%TlJ1I-TPyv*Yc? z9kl=CLfxc?p;OV9hlJ_EmRQ_!O{v6&{3DfzNmw{u0-<*+J;_}6bgLbE+OE)8dnJ$vG^>DSDJiGTuM@)xGp{I{*l>ozARx(P&EM`}0(gdZj8=1FLVUKy2}35q6now2Aen zPpPOES#D&y%Kqv+@%nXAyF| zTkdbd;?q#Cai-@l!!Gn``&mOM3)mB$S8|E_Y_{}MhEBuh51Sp6KPnYnViDT|9>2t< z&W;4i+giF~>{4bWo0>pglZ>#V1<>Zt4ED2==H+`>)9(@BYyZrcm^GZP$`dHCRVpfTaLg1R9z1SkLP|66VD9E~L(J_1g@@f|YI74qiU$ZI)$3 zBfAqCC)x9#84O4-H6$6FPsHb0 zAb^D^o#@9+Hfm$Pcq4w{GQ3uj0_~(tk7T!2avQF!K0uUG1sAUWS(`<`e{Yxwg z8=s%W^~trt3i30$9G>+ zR~^FQd8U z`%Og+W1xZwo`Ypr-Knp?D0x~=O-@_wTJirb&}topWQvP?&57?iQi1iW6n#JPvyS?s2()U7eZsV>gsuzDS`z6ZLT{@&?Ps)r}pw(ewTV5L< zf8dqJQ;3FOH-S&+DH?qFD}^#c#Z9sT3CsSCfg-R%ThT|4{Q252W}mDGt!}1V_MwB) z(XZiOA@%J_@i>>b2j5zPpV{)j5ZM~;#4Yo#1l#%q32LsIIt9xwI)oWHOgN=uXbW=l z!!F74k>us36_~QEIdNNv{RUSqJ^Wx~TQCr32tE)jwC4^4L<5%!!9p`(>;>FscqD5~~AeSDpD)hs})9Ic}2u{24=fxEj0;Pw` zYbdNjxg7lwSY+-oB25OPqzP%SInkP(x>i|zlhR@H@?i@K%)D7c2!~u~d9kZ33cXhO z@j3PFBQ6XJwv&2hh<&kygrygcq;0fgI+wL(j#(aT1DN`zDQeRXd!bdDxpw#^9Hbs=2xB#!^UA z=EuvOO<`G-Wg>cdocSh_nyqrMPMwz#6B6}$mbQ<}M_XS>JN9k=@u^>d*6heANxhzV zeqAMfL;Z&w`(*9(P=UbycT$$`D~M4NVnvwy_V&js-m+J@-@8=r>*j@O?Kd$H5WVC! z)xk)4#tii=NhDuP}q2wH5( z(?=o;MXPy;d0oZQbVJse-bykBsl>0tPNZ-)_}eoXmp*zFA)4 z8Ty5ub*REdmAj&jYbl$Ee&@A2KV(3VGsB2>9rYwtSJ(T|m1HD8w0*srhZ#F^4#)cF z49szhZr3+i6W#L!^wc;CQ+!Q)$ha(XxF)#fx54M#5=3b_c$fDUe~b~~ca~S^x7Me@ z=akp%*N2K`$D#<^4*Kv!_mlxjVLnLq_we9Y^3Jf7*O1Ln$zaJs&e`g$=TAuxIitm@ zN}rU%)lu%GpYMjtD;jNo=5b%(q70E=-%iD^{|aaiR(;d+xId(LeZYLZ$qf>cmP82% zyJ}S>{#n`_NXXex=f)m;_l@IP6kNog$6qbC${xf(c|5&-YT$d+$URj-1nqk?XtR`& z;>BoQ%#FK7zV1`J_PJ){`<;af$v9{~r3E&#(J`gEQ@=4B&24*p6 zZ}z$4nQ3J3VjhdG*#=M56Qo!1NLDn8Z#Ud2-uiP=;haqaDPO_LeF0uI~KWa}OGc;$9v3_d$P zf&=vZyYF~2`pJ3}@x4JPWOLK057h>~dO%_r;9_-QQb-sT zbNN+Lsy{5g#dA(%(+JO;mDFQbWf@lqNAklb`5%>`Oz9mheaC7}H5OS)ltk zh(GK_-mbd3Pxn!#2=a&~)@L0$ZhT=Pk03}%d(LhmmI)`Q45Mu_B^>2gqr4rp=j?d7 z{Wi53RY#&@K7~k96%6Sd)lhIDpp@C1z&r|3Y@q)@|LkrTYlsp8Tlmz5+{)?CSqnc? z4*Tlnd5Cp9`eOF>h~XvE1=))GGm9#}Umu-L_xmKi!pD;_tqZZiY~#1M*I}azYqOR{ zbBNERiMkn6DX;Qw{B5#i=RDRA@BE#q9+q^k_Bo>Q<7n9`6WkpcJKGN(gdLsvK* zrs3xA(?ykH=&XXNgyMUB{uw0IALFi?ahIQ+hcHD6dZFx<=q#K2Y$0qsZBwXuP=AB3 zN*8&cu}U))t>&=&bR;D^k}(_5k|Ep-Z!f$tA7C%+YJ>b;cSLz@BK_Fk)-VED?_NZ# z$z%1_m^K@VRcIKIKzm2w6c}PQhZPZZ zlC>NFWfB?nn*{H0+)r}&-ZS_HzKQny^(>{&!q|A$v{r`lTevrz#k_U!2F0}pk;Q_S zm_Z;i5}$qppKQ$ULt7!Mwlc>D&PAhytD47vwrN_T3^u#WBl(cM#kA^*OpzX9!-W7t z`Q`Rz^!7VE$i1I0^5bR=>$hXeQCK^?FNy>&97?)ASa1Mg0l1rw$5=QJc24SoAh;P` zTduZ+D};z3jY~*9n$$){(2D(=y071vFfO=4AO~|yTh#2^x{AE{Iij#v5GvJi&!j)+ zDg5`Q+8y+H5Bow+YH%?pkGP>Scdy@m_)fq5NuSDh2nyxrq#5^tLpDyR$AERp=c*-o zODmPOm%lwfEqWy`4mZR$Z8;3GJI94C;ZbR{e)yn->a5;-hUtmVlB$lRE#7vNd*+mu z!Fa_*WPZ!xUF|p=7gc!6(c&4z{53Y}oSTDYlc0a{Rma=b7gb-HzAF80>%8BwtHidG zFt(f*vxg9B5bZvU5EEiYe`Uh@`ur*$Ilc#cr}7)N&m;X5Mz$akHd?!xgB^V=T(6T{ zqIk;HZ00Co>FBQSmD!56igaMj*iSP!YDx?z*zgIx-+#IuJ+)|OjDo12KSi9e|Cwig z<`WVA711&CHQznvJ-hE`J?X+Mnwb-p*eg(@Mj1D%R@xXFL)~mOl8hC^%)uOv7C)$b z2zQ=_cm#D={Y6T#!4vwQOW9%^`!ODbAka@Ju1y97)QCj_{qLq*z*TJ2u;hF>0C@lf z07ZaT07{L?`O1Zr5POY<$OS2kk6BeXUKrHB4Xox0+3UtaUZ5A~U+PB?SQhVeMQ6O$ zyZ6YYm$|-r1?R3*UHCL1&JPzANBN)iCp4ohXSBx{XyZu^X(iZG%7O6=`2 z99k@W4m20G+hI<+OwH;OMA@RuGNC9;@L>hXjD#$cz5r{f<&ZV}x-8j?``J-?mhPOl zpN~)c1%0r4KBQvHH~w5IOoLrzT9C-PeN2$=l+umq!D;&aOmmk+?1pi;;giOeV37lF zy(_U~Qc4u_#WNun+gCTqfuqc8&dRUxQ7;6P*-N%&gbg*&_S*O4l$$|Xi0Cnh=Qs&ks2z~!aKvS-3YIYdy{6K&z~`{j$(O-K`t3yr6vP7r6}9i<%0_P{IAESYab@AliQ#!u5fd7zcIRH2UH~}~VxB$2Ud;o9*a0l=J@C5Jz@CNV!@CEn?;0FK!@COJ0 z2m}ZM2nGlN2n7fO2nUD&hy;iNhz5uO_yiCO5C;$skN}VfkOYtnkOBY&NCij(_zaK^ zkOA-oAQK=9AR8bDAQvDHARnLrpb(%4pctS8pcJ4Cpd6qApc0@8pcZIiO@y9M7Q+wJ;nCuIX$3Iv{q;^Z#8HZ-E2aF~>m; zC07IdzVCfSNy7nwyn*-x|7rqzhXdFijDryR_@xsE>c#>i1s_~N<5^%b@HB{=P)~SH zZm7Xa7!H(}6-El*hr|h`K;$HXDzm~^;6>0mp>e33)X=Cnz@Zdy07I~$y{xboU`ISC z8XN2txR@Mz#0DdT+Ofg7z*97T3`%G#8;lz)&h*F70K0Jf^;lx##Di9U0s{H61A*S~ zLQ~mcui(7|IiaKcKpSJ|-8fJ}4j_pcng2*+P!$fCC_JCy|5!yFFg|#X*Z*VPaKOaS zle9QN=4O_hvYt**xZF-kr~xMsn%@LE&I2QbhS33umHtsMZ2l-@P+u!fbSUH-ki-2S z`PA-@Obr$0f+>LMoc|i19XT3>0V@q>m69&JBb(^!_Vz z@xYLvgWN#R@In4j1i%*oe++u4qdzAxRPhFQ2kL>$z?7kXWG(P|_+MW|ULb+B=)XoC zFH8Vj6#Lh}NsD^QXE^g!p5>PDpud+veAZ%B~KZ-o~q52<#5ZW&Q1aq(dN5OzT7les`e>VSH zL4`&M0*Kv9HY zT=0%toY2)>PJF1UFpM8Qa{oUTH8fKfcpIC9f%9eY_kSc(=n>!!wz-2+i@=n@_)mXc z$)J%UfY^=(#S{h3%y|*u%*-MCW2k`b*r4%}Fbe203l|F1-?SHp9Nzj&6^sM|EnxsN z{lA8hF6SR#9_XqljG3Ij{8!sBA_ye%|G16w|Ko-OwdLbNg*u7BaL9XOd&BgB3fjO> zR{K|60A6ciJ%Nz$K-c{HNRKT3xS5de8QO|;App}Q8VJPj zuRvRNe>|w6Tv9M1@-$ZY1$H2i5Rluy-R_+Kx^2e+J%A&JwErHOEd?B(ug70~_D}Ws zQmn?8z?{2)`@gHR`u}xflLp*O^yfbg18=wv76`=suVi51f8G40VKn5O`wsiofZKOW z5J=!(Zbz|y-JCvg5kZ+-fdP*60yxuKQ~t_g$y~Jmk;&PoarbfHK_DJv5QzL=A?DNn z_!2`)U%&{-BW821&cA~|&1m5N^;yA}^~a3}diDZ1pPdb$<1)ah%dpo?2-TGVTHG=G zqp(0TWq>oB!|ado4t!_(=amww^b#0UDE5ErIN5MxLQ9E&si6BMP>~;)_x^+eWF+Y3 zB`~p($O7`C$6vWj7KRFSbmK;bvh4v?T>g}?`2JHS45keFYlMYxV?(DEfee}D03Rw~ zYWouwkO`n-uYj={_D2qihr-FjSfL|wK$;K9e~kBF_RPP&KJvh*l*;?ZpnxJO00$dc z{#U_PgrPw76kvkjVPJmx6Z}7lcqKP5C0PN6^gqgrsecq4Xv+l9fgG4XgSbjSgS7Mi zRhB*jB-8X7nDN~Il>J!ypE4zw9GG``KL@COndv+Sia-NgMPUJ9RD-B5B+g;fBdJ682bA?(D&>rz&t65!~+d* z;3kJ&BlBQDYeoBspb>xcIJEz(<3YXZ`f;F}fDX1IN>PRJP@orrCh>t$p9l<)e~-kM zVnD_BT!c_;RUR~GwJ;Adltd0_EmReVTCVOh^}z{sJvYQP7M()+)L znHr1_Ol|qcpn=Ak0WtnFv;R~BGAOkAD?6#f(4dqSK-qu(fZ$OF%Es;fDH8$Py8L6H zL1)#0@c)Odvks`DdEdV7k?!uYMHCD=#8y;FFla;&kQ6Zyy9=CAOqR{%8R$B9N6mvy|9~3M1h7vY3-|5ty?~C}~cG ztD9SpZDd6^*`pQJN{@;nE4*aQ)``fDrdTNq>1!lvZ`$?d*w9vCO0TXoHzofbn2jBH zC85F|2xIs4kNVVHi?DgjkRJCyUY;70W3LJ`D(s2rL8M^|Yx3`js^4R&#C}3_GbS3) zxuz|Q_}s2mF9e3c8qm&mS4Vo5rkaK7_< zBlO~Mh9iY=|*8V^SSNacQyul2aMv4{~Gn0%-laM77YMH*qc0X-Fvs*-KGKF))qW^rI`<3eo9Gp+)ziF=!n#lv~iEXgIdW z`rGC$49-&_ZDP=s(o`wV*e^Eib1f{O;L5?}+`cL$NR ziwAaJ%<;(h3SXgSnNn!eRnMd5^c_AmJ5g>zMI&mJfPDL{Q@W^8aRSOVdMhU{5|ACQ zom{-$g6wojM0T?Faq>G6IoX(qD5jMwNk<|1I2VI6DEJ514)=v>wRZOD=PVn6MNh9sG--&Mjh_x z{Foa-lLXXd13BoAPd{_Ft*BNB7krY0v*uE|jg^6ZQH!Z5P5FD8Cj zeUa5)Sxj^hvZivVm0aO1=*{3FJ{j}%xYg#Qs9hi%OwR zCwk$sZkGz5%QrY4m5vro6L59z&+xR{N^C%f4r4W9ODgg?`rhBzj7FrP88u2nkPeUk zwrNmS8tP)yOC`3V>^m*hDZW2~ykJ2_yiu{WNU!h`=6_IAeyEUy zJ1xz`$n4D4EH)`e_tzMXk>IZ;Vkx-Ok?Sq3Dfl0x>>7dV=7Ihg{^~Y$rx*I}_B6dN zGNX|Jbiv1+=G(a2iS2~K81iZ5PBk6f>(Zhj@LI;uqShj^qmi}U)oFblMEIWZb?w|K zx1PHLHO<6O`mUp>Ea`khc(H~@lQZF!*xj8PwsdbmXW=D;M$x~SxG_5&OKr1o8&;G? z)3Pceghd(jAgdx+R+;Ng#o_L?32(<3QgSwGEMyFg&aMa*_Kagk^y}=3Kw;`cr7)m+ zp(o5KHHX#i5{?(;pcSrO$;Ia!1bDobi;!FlY^58>E)TuvcqY2viChG9JhZuo~IF?gcgGe->);j=Jfobryj>O^ML*DGMpw9{==i$ork-*gD<$K zJ+LA`xb&Wj6PMf#sB9prBJT?)-v^?}nEYU(9{swF%8Ofss?W_wW#V;84^+L?)E3>7h--hoaWQ8Sm6c;$sF?c*vf(Nb1}mj8-FjDReL< z$999!F<%BS(Md22qJ@Jiy2#S( z3n0A9J@n|+E?may6(Av_`wVxGJ$U3n=g)bVQE5R%Gnv+FQQ6Sz0+emRI}b{@=uw9P zMnL6$5S1-W9D!(C{i3}iDmu!()bON3_dRULz7Rf7WuCP8Au?;V7E^sBq3vrFMAB*(sH6Wj{6&-Z~8heTZ?BKKkhh6SFM6nq>f z`XdW)&Yuj&Rrt`B2@vtYbY?G%Hu|L}ITm@Dli4(6D)^(M zwoJo~$=hW7072$7#1j0qntRE7YIyN5qSx(QFHO2rfqXbkM?OZWNk;3zUZymy5ehei z@eA620*yzk$@kH&PBNaWugd3V<1%421KixSnj27QN5s>g@lY#?m&~Z}lP$IvRh{CQ z$mNAPlBxeZFC7YI=vPA#nNiV9w5!eTbaW<$Ie#xNI-Fp)RC9GROT)trOK zk7Y4jpR%jG)am7D;NA>R7{qWrYWftoYz`uwG=t8}siY zi|Hya(wke+#<1BbuRm?uwQE{de{$+X7y zeWJDrZ%Uth#HFdohLv zU3#LPBjj;34pq^JyhUF!QG;4FUQI852W6b%^xO}U~>ydvcZrfsaimEY< zT!q}6D22nE-BLh@Mn10OQic-N-d~M$X+#;y5^~U+oR%S9=a*uU;Y%4Z7jsw@4Oj|P zSW%6FWetyuDoQr(r1*y&+4=go(P=~@Yj(C8=}~2Xk2=qi*K%Yjzfv;3T#nnn!sY0` z#+Ry*pDg4G8rDjj`P-d+oGD`kk`B9GjhfNZ6-XoHmV{hZRz%Bm?^QeK(WaFsRQ!Dr z<;p%j6#uA8LstPed?I;Ptg7fO+x1*h9;%I=IT?8MNv?YOyX9c|xTo_u5wydvcLrn*vK^Uw@GcUkInvoIf(d}koO=EpUp3qXC z9i==aY(T(ChV*s=h~pTaI&?k+S-Q-yttrEivJi703Y!WOP5>^_8&SeLRw8Odzm}u< zeB20cEn70&gi+$C3%%KlMrW`YQ~ZIOkZ@%)6>^M`rk+aTBlHPS3N1?C40BaG6>@+P z^)8Hb5VXVD(Tuuo!H7O)Fcog82#^T{KD5-r&y1$N@-e1!?=TVjyao02W^y&xq0a&) zKApFMN6nPD zJ6{7jzYR@p*Y#?yMi$#~I#1X1W!bc+RHjOtMCC~Pw_}!g$xBlG*7;h{ndc~i?+!$t z<1g{p$YqOZQO}R4VOoYst#%Hf^GFU zNyY8L^2@AAk_!0jt3j^ceAUTjA7Z|-3o+L(l8gsy`svcIF&GWqcY}W~mU#Yd6yeN5 zNnO~D#G;pp%9&d1LG?CSB`P->HsH7+t=@yct2RpR_I3R9=+Qy+VV%9;6Sr1#6N=l5 zx~#KTLL-~{Y0|E}i16uwYNXGy>MYBUi>NlG??dq>o{&`eJ`_*uvM(JufD2Vwdp~vZ z@5WZT_9L+&S0!%H2_?gmG-uhM+Y+kWk3zMqs#a>`b^tM7cq}4k%I@W-LATh`w-pBv z*QVzpkCOF#C;m~J0uRDH?xUCyJ1T+_BHB^dZgh@OM=JE`F(YeYl*E+UpYt=K+g}l7 z(jj!I5q*_5OR~R;f&pbBpC7^xV3 zLrmI-5mQCJiY?+W?uc3sQy~Wr;}$Bl@Nc3=Wv9`df{!44n{i58Cm~@n7ga|p{AHTE z{mAhs9(tZWgaw8b{+6_$-x$%mt;#u>LIZXN8eL#1O;7i}w$ zN?$cHQegNQUV%#6;J}6NEPoT)bQV4@na_^;3_H=cv#8=$a*(c#IH_9bFP>jRn$K{t zE5puoSB|kIvjr1TLaGn1m6H9)}!*fNK5?~q6lcuaoI5pb6t-i z9_!9Z;w@-}GT}(yk0HBR-I=hVPRCL3rDOf6NGHIWTt6Y5vp;bfHXKL6Z5N8%kzC#% zHKK3FE39NgO8u$)1m-+$C(!2ec1Wu51O~k~dqfo^>v-Fr;!h$emy<~925wFI?oqo8Qok-dJE0GmBN^=pMrTzS4QxhJ{Xhmz|+Xk>D>VoW*cZm;~SxK zPG-pEnuPYBuJD$HGi_hY+dS{)e>J^_uU!1g26b{t&9E)P~F-gT;M^ig~UQ(fL+NiT-UPDq`N0PS;=>B!2lJCrp zw)Fc3Dkb6ut4J3W5>wJfx^Nx8fl$<3X=^29c_@WGrQbx*2N;2*$TaCNBWRRMZ=q!V zTiX~=%nx+gX15T}fldt9rtDkrSsKekv=GpT9i7PGHsH!U3cHQ<+K_cDN^^1?(zX`u zxsB1n>R2@?zFSd?wC=#a{KS7~s83sIqeK23q&WS||Fx^p4iKbsr^r<3lwc;2~=Y6Klhn@T5v6d?T62 zWDnm&xcUKB#ahR6@#1`29V#4$R^IF%6jv>U8MoSM(+@`GVBZa* zpty&Kd~Y5TjcNZwG%)jFOgIx;qp(~0K-)vpphk`7?lo%Q5s%8h-YeTu$|GFyN_VuS zY@c>ERQ?EK+^CbHYD$ieF;2WWD=KU1_ZYVGZ`)FNV!PUO05;*Y2EBWPA^Xgbc6g-6 zx>lnn$ozVJjyH^KXF!er1s=@sJM7PRirX-J@YhY4fDI8${CP#>2Sq ze$h^!zAi+MxX65p@LY)n)qjDL_-hOonJ*A&*NI$2eMO{aUZAL@Q#slA1LXN{l&Sek zMDZS55D-Oi&Gy>!S|RO847QugeS3evW%M2+rSqlGTJ5z-`vXF|zXE=Tr%NmYzxCSV zG2$yE(`G3rp~mfXd1)Rn$0aK{wttP0dCw{?hP}qBzsq_qd~DkrQh5ht;p=Mzn7Ntb zS2g8zsOKAy`P(^J;)s|_-=Ly`&P8539CZkUnV}feoIg8$VSQcSU!$_C+tWP%KLaVgB zJ`H(UVMG=0E3AY*%|%@N0ZH%o;4Y_EBb${kk-)$Yh{oENW9JR+rP<&mhW-3F-k>FS zqUIk#Rs?dA^AYW8TRWxDqkA8b|Di#QgbT|;ScV;F^I?=jY@!Q4VN}04x;7D_5jr-OLuaF%^vDx#Kl)jthiqXw40RQ~Bywx?zZ9qj1l=L!ou)n7}+Lpqgz z4WCJV_#OEMcFM1Q4E*ntyp;E%UmY=D{K#*8{0Sh}V(b43Sry72`C z=J~Jb&Q4MaEF#4?HgzmB)^DboK{M@2A0BjQrM7 zn@tY@E1n5wwF87kzeSrGnlG) zA*x{6l@H<{_T=`v!c*4#tE3uf$n9w5Z*BZY`KgMsjiZeWzOV;#nsx+E5EV>f==KuUc|c5)G^C2uL1Vg|~J zx=~B+BMdvlMWst;T?%}IcHC4Op(h+wVq<=qW-uIdf?+2*t&Li$b&d%Kvel6X3RA8y zVNaEWR=$iVjd5;8DF8si^TD-9Y@dc>S2nj&D0w-UFH3(}@@rl_l{AF7cdrRAY~ zZOq^r_e*N_8pMT;7-h%;n950mz-XJX-i_&3yyM z2kBCV2gYC>3;3cniBSNnQ8&EwEOcnZNtp$jv2hbFzF1)Nnd!+zH%qjJ1Ya)JtVDcK z^^w5}OT<^zUc|*#7$-J%{`0pQ9_=A&=ZI>s%L>u|>{$(rt&v1w9|jz$pEcYo(wVR& z^(#Rpd@gw18cDPr$*>I>*vQ@Vqu&RyCqZcgT+=dhu!Zaq+DnoRYHG!YAj%!m#hMn{ zpgz^Kx^VT>MjjyRtS>4@I^76Q?t0rI(qC@mW{0XQwnd$#ci`f=t-PI}=)y#pa3qT^ z*df^xJ9zjGWul9$xUdTu{X#0<_Gli@=7`FLe%PQs*4QH(&I?3jMR%FQ2Rvyra*zkf z+FcO;u%;mnazEMltD>@^^A0Fdw|~3*DN^$1j{PP&)Z>5m+0I z>U}Gv(4f-V>^yX2Btp0!%q=B#D~s2wC4(jt>|?F-1;bA9KtR*+ySZllRfK7P7UQgvbHa} z7B|8emERBz#kvOlZYZ~;!wqo_8dHmjPO_i|-Kg2hZWh#i4F=jFjpSCc8onZG$kKI| z-ESo-bNbx~`AUkVX3p}?!kZj+v?8xt-Hdtub~__~zWEGW(hFy_u)VXp(RssQOY&$8 zRk})4&fI%>V>F^M>$}n6#`2D`*puC8MvGuu@@tHedbq&W?v9AeX==w{?A&2BFqv_u z2i<6ui@d$;(eG~b+C|<;xQQJPE=V)93G&y#gw8fWzH&wctJCD~SiRc@Da>ueaHQbm z#*UWc*A%|CJt(WGJV@}*WJfI0eGb;8s-~!^iQ`qsoj1W26zYo8WjalXjp-m;df4NN zLf0?lI7chQgy+=A4Y+tY!&Y=pFGQWXx}hpP&jr&^HO^x|BKI~?N}HEZuMZa^ z+%dSjxFd=e$x7lWe97eEvO7lF{kdE?dm!1I$AmLO? zYUYC>?Uy$Sx+8#zE`mWjcErc~DTaz~mx5j7ME zB=o33xdG@V7cAJ(nry~|neY(bm^r|nVJmWNg)(J#q{LS6-4Mr))^xlThML%9+8T(4 zST7JBZ~HOPfC>Xqx$F8f(NoABz&#G%4wKdf+qXv43x-f)YYg_C3)ry^-E55rG{$mY zw|8NB=|xBWzON!g8!Vh zD0bzUFxt`Nv=b`nT90tb{TOaXUY((84iHs6D(Z|R_l%d6 z{@ZX9y7LgNL^lZW1x^upW71;p;q_(cX>mA>4wCnhwJpOH*{QoD{Rl#QWxGYyf_|Qa z=YTHoG&wJ#CUo~rusMH@`hf9ES4HkZZmqkk^AWdoS8%`QQiO$FF|)n(I-J6mcCSlr zz2SwKh9SL!mvCE~YKF+2$+H_;LAf3mRztdDfv6iA$z)Sb5`yLW)c7Rk`_{n-wbW9H z1B5z`Of;o)!Dwerb(x40iW^g6h`cXeooB}u^eqJOJ7Pl05*xO(yN>wcB;|%8HU~^i z8QvX=EByR6Of(|%Fa#Lcfr)yQ8HTZXHAdtRjE|?7WdK%3Loo5Q4Tsn?gb6$9&&1PH zOqf$s_XuPDxavwc67jsI#L~0%hTTz1%Wrq5_TA-yGM#(fF&&7kO>vzgF!5rKxsEZ1 zJ})J%79qz&mv^G7ONS!l*f1Ltp-$y}P?sYjki;iVIueQ8!q!<347q3;i2?k&Clk&z zGZGn$2xlTgh>2oH7mDtI8)D5|rO=|xTM?#ouLtU1eF(>%J#polIhAsI$`gdy%h=J4 z8jQz)QM(sXKCqS%YzXUx_}?C6VH&Yr%vcou$pj|flOlD(`#*mznfA*Jae@d|2`ZKzM&reZa{Vk;6r`zH_FQXZjee#6XYSnrUG_! zpr4O>;LTlj)$~e4%I8KiY)=b@qBTweksV*!gSz&?FncHwCt~{^N&T$d)0B!d5ze&_ zycU#;ytC~7;~wOe-P4iwt-|K|N@g4QOG3IynBM)a)ss2YC!JC>*C|PG*wC~mg>J$k ztlJwab#hz-evfg7b|UxZ`Rm*lXkup(InkSqSPomlP+CS$dZ*PJ^TWOvGvg5CqO_p~RVpp-FE$vIjpm}ghPYO$6^Q{z&S~s_gDn(YgTl~YF-Y~qXTvT=Gd!t@D zd_P8FKcu$%m=sv2Suab_f!O& zhqp1s+??x*gfh*0Ymjy+Zueu;U>x?K+Gs?Z($M7FJ(o~?x?Gzy({WN7y{<++vM-+` zRi2K*{_}6O(j&M2Xad`6l2bnve>@Y7)S0j$wNljQ)Bb1zzuM8(3=B-xYd}0RKqxQ`1PlT+h-$+ZKT9v1)I|*h7Xr={5BhlSC^J6g;>XUqj>`- z;QGbhEg(J+Jap z46St$kvrKA#5r%?OjLN^aM7QD1p^UZS_GBmW0=|A2a%p*dJ6! z-uC7*k{HK`9c{i7rNL|CHN$=Kl(-I0F={9<7SjKCtFu~m6O0!zVneZN(VFynD2jA$ zD<@XA(HQ53fwbMtiCa{(4wVc;sL~5cVnjcNp*=RZtU{uPqtfbJS0N+YL~GND;fU<( zT@~zDfGfWJBNZ|%BwClh^tZGC8Mb<+VtZDAXdmHq8J1yW#)7;Lp=SDwfTIlW%t#mu zU$N0fe7o8)X6yJ}Y11Z+LJTxZjiTq(jHyjAOgwDDMgPsw26UJa%l1mrfX(lnWm#Q0 znL1LAH#ZXK?I>L5KaE6H#3yla_yQ`h_b60FN=v z?qe}?sWp>}*nd&q2gf4R`FV`AB>Qm?hZZo=gocb`DU>nMfbMC>NU!HS9f$aqFXz~0 zyu79C&ITr&$kpPH&%*KW8LnX1hHZGn7|6&_{TNy|B*vN?Cg3Em$1czb^7geN>&Dce zr5h}*sBA`zF71V_)~@DYP9Anx`J5G$vnLLK@tF#?-$17rLn5Q&vB6gmxegn~BBoQB)PR0C=<9kYwytFtu7?>m~c(R4JLE~X5J z2-7U7a5~(>JJZ4G7`7*Nq2JSSZ3zsez!~6P-D%_ujMpxG=^)cK{pbg@?DgPSa(EDH zMxirtS}qh)!AykmokRy`qMU|PW2yD0SW}8wi1qgdMRIHHtJ7np{L<3h$84z|pzOq= zSo&8j&W1{h(1=DXiKR^%aabi~FNuDJgVFucKcU(U%}UHnOQP27d5YI8tfARp3(Ec3 zxFDp@LiMMv7L_G`t@89N#C~l9N5!*oyVzr!C~T4%<5(= zxz3TdF&I=MPRecj-2B80y723W1<@Roqowf2LilQkEnNfDvsU{9J7i>2ZUGvd`CK^n zF!{qNtm>Ep^%kL{5+1QUZcmE{(@)(`6 zMu#eo!EM=mxHW6f@r{1KrItwd6~lfVI3BenPKTymJ#Iwa3$S+B0c#p8k||q(tBxa* zu?yfG)`{aTgE#2Vp#^AYF?b%r9Lu)D@%ciuW~+s8ObOz6-3}ft?v5GG>B8~Z9F~cN z2tTYVBW6^!5TzW~jf6#_6zb>}vn&f`#FTUvV}#up z#>E-i6E>8)7-rmbi{|eKkc)#Sk+}m5AMMWZOBU*E1Q$2$5Gs5L%+De@X>u5$TG=BP zOBhz`$?@4G2<6mE5@S%1qO+)<7A5fU@6B;i34A(7aj}Vsh-fbC6sWmP50DkpQUr*{ zLvU7rcBSx1kEP+I^45Z179A?ZZIk&B63TFFH-+NsPw}j7!mR^)|&(fF)EGQ>XUE(W0erx~zz!d+d+K7vreTGW>D%ZXDh3 zhbPd(mSKE+a!*o?gW`25cm*Qt{8&OWRv^NtCz2`&gTstEI0>Iw!2VAq zzBwG+l_k_>C3wLzi68C`UbqqwPJ1q)^ASL$brHo)=DPTW#H%8~f4oE#^;dy!cq#F> zJ(&MB@Bxe;c*S{fFW@cp5X~Wm&%Bo04SR$8o`AddYVg}{B<>gmzF{%WbPvW~zLmIJ zG`PVH_%CDp$2*A!#(>{ljhyR#kWgqWkXV~OYv5}4QR3Zhqn0zAkd+CHH~l2>U29Nv ztv*Ytpy3HyvR?~_;4cyiUJHk~uaa8GRQA7;n%)TR!aBH*{3fBN3I_p`eu~P0;_skP&DX>I$S)C@(vQfEI+V~DIW1)T;%|v>UXLlvgBo}Xs$aY* zeP`-@O-U6dAx!06#MNg5!pLM2*G~m6*?FokpxF?>v?82kp_lkHrT{{7<$GIhF z(EeR0Z1$;mDr=cwLBE-Laz371b|dV`%kk8IH^OG$gS~TtBaL{5Zh2$3+*;TC!JpJa za_HTTV>V>H2Ng2&aXcLkO|YkX^)V$(2GafcQpIz$`B7_H2`u2FCr9>R-qyi@9qq_< zue=Ru@51`S$vsG9>RwEB)2*1zlCJE)-Y@_mXN)!fgL#wsL>cG%JcUH+Y!ForMqaBQ^_Slqg>l;Op#IKHwU zOOLs2nZUmA_xJ>Y-vOAPL{YB;@>Vkc^aRSfoKTO-58&i^WzmZRcwW9gH-TQ>LVbwu z`K2606`AKJP{(@-*pGD(j`fDonS*$i;5IUW5}zg1VZjZl^C37oj!mGjR|!t+(WD^} zLp3HQP_uV95km`r9s&s~rxcgVy9r%p;9yJr%Ta9|XVH>!tkXO{kU)3K z4K(>`0!1E0DEZw4n$L)EKY?yDvhi60IaGkWeUU&;Jrd1nXa(BRVS#ewXwqHq86ap`iGCtg4nbIb1-$xNl8*vj2d$}40k0Ev=?K&H z8<5&D=%LN1(=q7VEohpk12Aoaz8^>?$C2d0E{XJdCt}Myj@XWNqa!EeCU|E9Glt#4 zTzuP;D9+w+FL45Oxgmt(z!UIU8p?zzO+A4bR&f{;odi6%5TV0Kz{2j_J@q8q^CGy| z#zenJE`Bf(-Gf@3!W{{wp!uheztst}_Z0GXu74u--6!Ie>UtPA>Yhdh{Il>12a2|9 zD2+Xh3TaZ1NO6x*guACvgvS#}`wXm~CR4XFh_F);&15=uHeH04y_=s%W@qt-&Z0!> zbrxst%hE(z$cXidM7qOBzYpWW&CXIqf@#6ZY?}M0&#TzC(%B zs1lCP4<}MaCCHN#iL|K_w{AhFP_dQrHrgXjC;l0NT6E9R{d@qsKbnauvJ4U+;K&>AnQsM=~-}q4?ExmvN=;5bCs$zd! z{)${*l>4$4^X?+!V(L1t;NFCvv%h zJH+-~Df0@JI?y6EGOgE>USE;77gqHq_p3Pi#ZUo`23OeP|9`gby|7GCO{> zBeR=Gad~a(c@tW@HO*)GbbGqVboUgpxrK({)<207uOPWz{V|e`xrNGKHl0df5@yY& zs#{34U{}&#g`H)DZ)SA3ja2U*P9lTGeQl`lHmcP_oV1I0Xm_#k^;g3#FlV~{mqsGf5YSsh6?wvsDukRsP=9?rc z=?&!Y8tHjd0oD1CMBS_4zV&kwEnB~j!1IQP42(t!KesL@D` z_OYWvlY|F2_R^&wcKm2Sv)OU93Ejj|W^2)xx{XFO0so*S478^7f6%h}yV1ITP`N|g z>E%B-4^yM5$wTOE36%X18XpJS0&RF>dSBH_#}4wF3JbD$gxmR*yH!k-ZHhbVUW^O- zRrwLq6IL`IT&8)VFYSDUHa7lrU;6wAeevLpzU1*3B=}BW8vGb!$IHI7n~~JFed#NR zU{sSlpP)Tf)k-F#>|_&~_5{UvXij@T1*G}!6BNg?DS1DIHfv79o+9|>4#`xtCE0;b zDxN<@@&TPiWJ;OOFb|l%Jz4zPpR;UR*J|z~>(VP3uOcR61JDF-;C7OCK;J!PD z;U0p19y^-S#upe{*AL{rukR*f6lT7SUc$HbAdY*zM9CHm=HmAKWHUOwxO z?2+bZrO>3vR~V7-PKB6(x3935hTbI`(Dh%4`N%88tTRPv3l!E)q0oHJ-x%LOdV`#`oA)=y?&UXld@_Jk@Q*hLKW>2vIU`F! z(~ZOqsnoYvSF7^ z+Zf)wT#41_@jFB!U&)DvVTu6-zDNE?t>I+kdrS#k)^U+-itLGBJACpU@od=0@f(X2 zV`}&Tp}KEY5*-@w0jI!ZJ14t8U{*I}Cl_ZO5Rc(U1emg$laP-{X3}0RTBu*< zUoo23jF{W1kbti!(qqh;nUCwgaxI$s6>IYMFtb$>mrXcdZ@!`wS1^;2u#eCsfs2v< z;!>Q^mx;Pm^)Eul_T$2;0N4EBZ#W6P(m0v%4d(FvOhgJDGuhFe8rdtbuj)J8#^i8v z{$`2|-OWZ**vjzjfgHd1jtSHBVO(_kftKbzii-_D(4(uyGhs(MKXFRe7cpT<=X3hu zIRhhmzbc6(ZJ5~)uPd>YwhKRzLen2AwkavF6`0{}vc)ghR{d77#T3IPu364wHVYYT z{e_1V)706~gE?y6$mvH;o0ks-#l%~kLz8AAPbS0PPn zfkfa_C@deNY9XHWekx{^uch#!l?sVc18LWmlcJ5t_~GUl6E3JBhbKF6tfj8-5e|1} z!iEym6>h>FJ-VQ!z+GHXsv50VSK#@Pu?pE-kZMJS8p!TCbB;qb6z)QylhQ|vPESqM zqmiRd7|~G;g_ZE5p3-Jetcj5JjU}L|@DgTYyReo5FW_q`0)#c#Jfx+lLk%5qP1Vvu zM)8>%k-RBS)u0e9gpTaZNr@Kn);pGo2%%;ohe6taTks)V7E2iu5vg2!X2Kdv^30NX z6|uRrVI!mt5;>F2upKSdK?MY12eFpImYy@wVjSJqRWzijukk?SW&;*L7Xh3nalBd= zC1^K|iC#j>+3eVWrv6AZB)5j}9is3%RMGKJr$I@8N1G zOsLENWgo#RV6i@YR+OpWU)pJSq7{npx(2X?;e+1FASEUW2g+sGYqJt}6m-rhg(iji zq~X^K3{fz(^M7Lp9_>^^gg2S<_dqow2qQ! zP~7x1bt*AO1MZ1eCs-PH%#rI|cxEFBjbeg}!vKtn9W9XF3p}D>rqGHsZ5m~PCX$55 zFG_OW0y#Jqph6rh6)gk@yeuL47|`&-?JZIv zI^Wak@L>tR-i?^>ZD?iYOMa)}Bh)sivG`IIe9%VWE#$0KA+f2)?8ws=;V*7i!N*gP z!6Jr@_Hdlwl5RrFN8)5ZW!Ubh661A)UMPHfcExZzql`qKzI;YQoX_yfM;yC`rsIor zcF0!rGbPbsP1{Yl_*{iJMy5*_*%kH(zx9pMrcJ+kr>oQJV|b+%7&l@J2@a++;rrWaT!$-R!7z)Ms78P59kLg;e*7-%beM6%X53(nZ_S zjqzg#m{Nq*26n;|GYRWZ&MuVp*L76zGG?>I!z^Y?IFw$SKeet^2lz){jsq*xov3sg zxw*RmBfJJ>Y{D=8Ej`x;wEY5j#T|rvlq_dzwu86(`&NmaKObp-3#aSDqC0^!r+z?>FPL4af z!6$bQ6Sg$p4K*;Mf{U9?GVqXi47#3nGlg}{PqeimrUjt-6xs}<;Da;Vuc>E-I1R*W z3Gfr1+~oLoGqgP2`&{(ul7SZlJkgBvo5QEgV~%HpX5eDj9M$vvB`2CKF!P!DjtLt| z>xVsiLt7v~1m2Quis66cCd6Yq8XL#YGHlXDiOp!$ER1ChS_1pwjdRJn9=Whp?Wqj! z?4ZPERM`^k(+}U@5goT@)TgsMQPc=`IPS%}Wm0$}Ji^GpgKu}_@t`rq6L*p~Q1|0}5!nlTfLrp`B!AmXJlSOv$Op`ZrdVxr z^h2e%;-d)6JJS!{bN+rV_A|?vQ(SEE%EZ^dTV@*26lcWK%pdWjoKxBid9Rwtu;xW2 z)}m-XBt5k;f;?unlB+7V8_p=YUjT6UO(oW(VF3zX;qpBdawC9c>mL>3+6q4TPgKZ^ zR`7Z9oRiy3^nAsIb0F(+KbXKpDi9aBgDI%1QGuw``@fVJ@2cw1XzxEh!}2pNs7Y)1 z;1jadIKMSUiLquXq;e$A@Q7TL@L_8dWr-WNZCQZ|vu^`$m~GN9Zi|d#U9BU? zm*JcQK1O4S?T9)L8Oh1~XPJ7mnUNb~IZ26EIFVT=go>QPNN1rEpH*TN;#wz5jjSEA z^rXRn`8?aBwCPZRC9+VnGqB5HC04`RED8_dom_?Zxn|*eNu80Z>uD8Szuz%S`o_XH z!z=H~Bn!N>#(k5I+}b-X%ZLK%p?N&%fdDs*^rz7~Qg#<{CtTYuar;kMLSDDzihd}d0ycW_oHg5V3Ae`4w?{KADvidLH% zhan4x!Z^tZ!xT>~LMhZK_z>#h?i^gIu7@F>+}@(CxVu7w^uyuo9rG8!2PU;};tIpz ziwz+xnLobjv@aa>7L)XcdJ1^CMCq~VYL*$Lc1Jlzk5r-E6|HK{CZiBUsuqDNd3|0q z(whhjWVpq`=lLU$R^>$%Z0(8Yp~Sx*Ew-;QIO&DqxcNqb+0`(<;y zs3%(Dl*L@U?uoR8EnKwfg-912Wx|@@@vQ5mz*}OsuqiP*$BdeG$k8C*t7!Hg7!SKE z@p`=#_>#m+QCZRV9ywCKpV1p$f$v1#h*EcACi#$|)&FKw%_v1D*$#ayM6SufH-V!t z9*B4KQ=;Io!?2onl07%BRtEegy<;@IPMC|_hDJs!n#p{vBy}ztx$&tjs@gPt8uDCf zhUk4_5N3EiiJzO9gJ~sOLYdEaS|f=cn3GeRFB@pZf;%>mc&Au}k8GHmq{QL*Aaf`R z5Rn^SAh3=DdfY)o*q|4uXes;DNm47~6m4aCT_x3fSB^Oyj6?d3;}NFoK#9-4n}fHn z>f?@ZQoO=SW;SDcj32!v@zD5OE!vfYWUU{lqRg(jM*I@% z*%$tKPgRYB`YQZoYhJ6O@4a%3x&Jrjul`9gx+SBwTYOh_ou7=EN^(t_m4KPW+Y}5N zZ<7`6gmMif(IVXexzf6GW(sEhN2zrJ7A4`VMFx2=ZAn2_#_Ii_IQ)fU+Df5LhWV)9 zkbdylXCdK!7&LbrJZ4Xa`=Jxwvr^)=!hKt%Frk=K%pHEgd-DMFr1HN55avRE4}vN3<)NsgQ4r z5Un`(PVJBIr&_4k97}RF=%+T?@)2e`k6%g>>Xv>&OM@@BD0kN(?cOs@I}_nL*%i03x@Y(=PGox(-j z`CJEbWz+iY+3>NSsKok|^DY-3kz$+mZE|3fP5IlVOM`Q9=@`yzcoAC6G@{d|`0u&8 zbl4N4`W0pi!L14_kZ3c>MMK!NR)wtVIssp|&P82l;un3Cjs;%WEdL}I;foHb;3}_U zwW;F(;PYqy#_AO6jUcO;Z4d4RSWJf-ATT+qZaf1+Q_ghZR55nV#%wI|~ zeAp7G|6mLn$7|xpKF{S@kU>TsJ_0`&1K+q>5;~KWC$5M(%Vugx=vrPLzH*n3Syb~O z2z^9X;(;UcYEk+STzw80RwFGs$k12QYGlFJ7Mc!4XlLtcUW-zOD)2REI|=P%>XU<{ z{HGu%hQpA#X>}zOF$@ELgNBmIo{ijZW)72^R3mlzcNo$SXeOby!xf&gfh{Fl#pe`xjC%)4e02dXI=*cs^|1gMckU>u zwj+?@=q{2vxiin8n9WtTk3a+ugC*Rp5DhJGZ=OECJ+Uf;v7~#ov7Ky74@s>rRCvjn zL`mvrp~6GTp@Bhx;0MW zEvu4C>fU&T8hMY$6yePYRWx%v!X*Dwjl5;ak0s?b0h6QKFC;a40?J?Om86QI2CC8X z35c)F+iIjkI#ZD69uwJEVMa&B<8HWUA}&LMB^RM%2I_JjwMp>twI-)YSnKJIN9fFV z?j#Hk_uRN>vS^_6D|l*?;k(kGoF*&cg|gP{*p#+R#<+3~y9^PqcnXGryFGX~mm>qQ z-+Kzi%)B^G^v?~{Br`oc`#muQF=6|Zm>MuPr%#1rw-hDOq@1Z3#TMd`JIm3zsTghA zEmWGZ;y4ZEX|Py@Oq+&W8*bqw&N?5zN~48g#CST=YOzC!EhuTa!mVZ@-Jgv4RL<>u zHQF*=5hx@cXD;SSqE4ea=IfCC3`Hv;>D2$R%}|61gU|ECbFTx;%jKW{=@mOMAJ0*`Pu%Y3oc}?c#?6JI}%F@mVbuvSf||zn`q3LZSxbThrTl z>`F5i;q`S?Z2j}|@pCTBww2i|^_4a=`aKs94vmeJq#<{lGY^hN*tww0L{?!wCbRR< zG>x%!LByl;>u~RkVt5-{OL!bU`z)q*kKr2F)}V|8^<=_rT?n@C4oaH=oy@_e>$MDz z$9{#GxHYXJl>4A37v~os=z$klmQJ4!pAp!3zBNHit**z zDJ3yu-&HrHhRYCLI99e;p3Ze1WK5Hm!7<~Wl1RC|8*mWez8Z?a!lioDNX4UdI&x%e>ymCJs)o0_gc zEX|xbE?C2+#`v<`QbjX*wg$Pv7rZWPRJc&bwGersTm&8+WI+iB2Wil&efaOxTC}@Y z*mlAk|Jd~T_KlwF5Iug@>Mxr*9ax7ug@-+r*p7NHz}39ddU#u4KMISfXuTp`IE`Ot zmZHV3hYiSt2ezp&vUmf=i*RgHVPey{LH6Xj5&7tXy()}M+=%@U?Xg#7qhgRyADdG) zq7H^{LUZ^$kb6AagvG*7_;q^bp0F9QRSxH(@nf{H*P9Vr@n}xI&Be;y&lhMW30r_e z#&f*>&7it0Sv+6df}Ag%%<<0;JU7_%uobuf-@#*PtlNtI)O9u&{=Ww~Q9P@|^FQ#P zcy}1R4c_(QXBvG@B2`J=R>%R^*XOH3c)OW$=x$keAm$34n3VF;NJMD(! zbh#4y3J%AWLWf?q9E|z<9yIIm_|a)rM&we&#{9N)`5uIyd6wI@>{IB`8((Db_a3yf z2^apx`uu^}|KsYc1FC4gKK^sBbcdt}wxS{!m?+qRg58SU-2q}JiUCI@Z4t3MvF^Qg zcVRuYV7I*Av$HJg`wy4%IcLty&d$!x%udWZfFRQ`A&1@N2f-vKSNhGm=sOzS+A>)D zJm4U3xd$o^k`7^>4u|(VgsSVs6Bf!*%psK12`Lug@KEiMGFMdMxQaw@tE zT@S<6RP3>odD@3AtsL(uKBt^yyttCUxrb3;hSd?m@bvL^bYT-NO8)M$;0O%8LsVTM zF_80?aRe6MvfJ%@#(N0d`Y7-xd^}fhL27(-ytB~lW!>a%LU+zEzAz2vuQWxD0k7{X zaOY#Vh@4?U2)=`hIC>nzY)_71;>CFEA*7d{P*_|{-;=NjH3~fZ6iV{OlZeH5StU4VQcY;(Q?R~qP1QA)@Pg(@ zNe-IYVgfdlQnS3kX^d($qXkF0C^1UYP#?wgOyKfp|uSXs}#e4_->0VM9 zYnpcQbSa7&H^GS~v7i}^uW=_4b4>%@h^~c&kj%o^VnR5*Z~~Ts@PwB#M&$cdUxCZ7 zn1E@q>NPDgA}RMPs5%dEJ3lj?gl};ihyNMWgQbI1!H&$2p>4eH3~aI+3tV^S1f}qJ zodxdSO5jdsk)qaJgmC06CL@*VBZP4mkvzHRG&_d?HHQg2|2FQQ{M~O0bz^v_VyIy!ZozSc6ke-{B`t97WxWd{&h4ZU-=2)^>vt)tIk44=>>X%H&B1Y-@uLf zRZj?CZ{VF-EsR2LV$ROf*8GbJ#YZNZQPwb2YEN$>()jj_OOe|YbOmeO0y*7@NlBV= z3-w~A*L3&4FTVMHL?4m3Y#q5(hB?wEh7M zZ=YAOB~`2jC)p2>B2qReNp0!6n-IKbOmY+}1N2#NKG{d$ zKUuh*A4OHcj5R#CCit`O`!1LDT<(;d*S$myb;+ThOKdP#FHV zPJ>r2gzsY!@LlHxg2ZH~I&UnHf_3*@DsiM9E3u$pL{C_MV(WAGuJamGmHb}fLAh+t zf)Dvj#{H5%daiy6n_BpQqu_#MzjU%Gy?BWN@&+Gn{>2Sm0UySf87;P|X<)#fKBN?)n;;@IM?w^BQfB6`T3jmx{bWq88_{;6;o3OuOKc;*6&HjUC5AwyY#yy z6R-FWXpjwTo%g>bWgd<+rD2m1)1(hD8`dXZ6@4YroGx69G^6t$a4*XC|3_s@*+r4J zK_3xn<3Nq-BhukDOa@f(6EgMDN8I-^BUMsIavURs9uFgJME#le32wSi7WmSuNK1PA z38AJ>Rf#=?enu)xW~o7Oz}{zm?&b=T{TY|Gd!Z^=QkyTRGNvz4T>Of3r$b-hqG6m$ zEXd|7ip-l8f*?JnR7V$uN8l?At#51av9B0^YI$Enihe`TrOyO;)H2GIGM$l+Dc^7@ zi7z#V*{!3j`IK~wNV6{I{l7XBs`DKQmA(iZ)+5SYl-s@EVZHjhz}er?npp5x2rYl0 z!*{6w1^mEka_bL-E@w-va`ApP{fP#Qhl3DC{DkIQWg+;lk20srKas0Yl z$fVO>v=u)0*O0KQQCLmG+pFFF3x`c{q9tDytTB!GH{z+93w&k>;|M7YM_95t_aW48 z_Hhe^)%9^!W$x*caaHyHlGi)_zewCey?I=WK0unElP6b~O#kHlZ%%az=qpPpxiX-4 z1E)HOkC{6Q=sk2{CR1seXEY9`8$K0-DC6-OGL^tT+A6$iAIxLx#3-u0f-Ys|x!A|N zSQmxcOo~N|NYeZ2YWG%9%!R4g^+7^08>NG(6Q+jBv2D}otLwr?DUxMDePvyz7)6RG zsIRFToghnCQ&13=i8wt5;V>#{9<5AZscHg$9X2XF-67gp)bT5sH%wFb9TR<3UHA@J zDob7XZZ0z)Cf~@ql zq?`sqNVd`kN*$XEVauLqD|$Z#g|Lvd9+MecQGm6+r&PTitFdRsv1m+S<1WN)R#!k{ z!URo-od2Q=VmFCs9FuFKM}xPg1`n{&WB%{}K{9QSiUs3UwVhZ27Gw)&!6>?lGdnS} zE0OWqDJpgm4aZ-M&8Di@f`aVywWV$|RD!Ma?T`@%mkW|vV45BMwZkJYnpEP#ElnK$ zWe;b!SE|^K4%@@9E}9~o7zDMTLJn|$C{>UV4!DF-Xk;j9MX#dRG;_M>HO-73IN<8b z?*0F|s*douaR0y9jweQ-I&wt(*#|YcH;#Ht6F;UQVNM7ia$O|_spA)v26-F2Q%(qP z@j&SQIN?cd@Jk3`&hRtPoC56iKD5mlcU*5RgolOnHsoFi7q!Y!L%vO!W-DsyHHF}` zo2#k|m1-0gLa2+rs#M-v2vg=wv!o0cT=T^8g8XpNhf2#T38BBMzP>cEnh?&rB5Bi_ zPysi6H|a$vLobSS(}zflu=xrL58U)sq?mp}@OOv#wK+oY`8dsrV%!l=s|6}4NO#?F zkNrrHM{d(?D9{7s!v+m$?l9esx_P65+2Mg}I=)$>^DLC7bMb_3=~kf&^VGMJ&h8Sz zF;C=@+eaY`FRaI=$Au9`JyYyj(}N1J}dbY%dtkr$rY zp#k~I+PXVc@+B*punt3df7z;E^?YtZK}Gcby7xg^w6uu6mTp#v7Tr$A<>wYb-MY7d zmbdgq^{}Op7UgcwyX&c#(F6FOEYIUi!EiE zl!9Y_ADNe-m{Lgg`iL3i5Xfb?6y8)OeH6*Rw7!yV_XtJWS{9{eZfThR9jiqTOC#;| zSLY*ZO0t@1MlH%9eS*cH-4pr5w~_ zX9_&B99%SyRcwCF#0)B)0ri?~vX%;5x;$)3rwSpeJf5UOYlQHCHOICK!QOM0qo~>2 zS3v02yHs3|r~;n0<|hS7tN_E|{n6I3_JiR>17jaLzZ~!3?o1N11bN$RmII~xp~86g zT9BZ2c|qMP!Y~D!`EtX8Z=5`7+*C5w+Z%uR<{OM_SQ55&;IzvY@Ut z5MZo70zAglLVtY^35Q;ANMHj-?`4(5vXBN=>~i00Hh7RdwccBLEj?z_dKY z+MFs>(l?cA)zXmUN~j1YG*yWSo!d3bGQKjd?QRPV4XX^h((N_mAz_-=$;ycIBWA*J z6u~EF6%m6H<*ESR!X!8ao6_JaNXs;wd#aM-RrFN~Jf&EFlq`hAyS*wduH*!b$)u`y z7q*SkklR(!m{>ARL!Q5xrL>c~1|rh0Skt3Mkr=42DYajwA-@BW^G)JaVnQ9JpgI{+ z4MBI_mvMaK*&aM?4omZ&2)pflX4_GE=xi&oHl#{*7`tR^bdlBJwajOgI8(V%n2#pa zfMGB6uQ@?*;=^-dv3iJc`#+3PjpxoT7++J5gYj~g%FP>$p0fUBK?

FA7x+X{$}% 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 L`sTJnA*BBS#2s7L delta 266812 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≠4LpmT*8T_coY=d7!9^FP`fO z#8s=};Z;ca(4&8dHRPOJK~(a`BEAjX`p9E(EEvrHRGm@D3o5pXl5G-79R!M%>>^~7 ze_T6Yh-rfl-7lA`ys=aFx=ZlwQCA!|fWCEGA?ac}Xb;Nd@W*bznAh4PJ?8X5+?Zee z^>=~hcRt$SH$dT%aMSNEaK=d+IL-+uA@QzrvH}p9SH`^B8 z5IX3OaETY?${txFjo8T;;JOPg0PD6y+LB)1a01(cU=F+NfoTr-bK>mr_{~qUVU4@< zlXMS(nBT{ra0*nhlAl}rEesAu82!2tRvtz`eYO$HVjy-~0%}ATH3sOo^73KM3g33+ zIrQk-e#?V7TsqFG`Dd2R{mb0~GbM;SPzX(0;s?Rvse<8LK{inp$=rfO6k~K@Y$0Zj+P!tt@QcN&FHDqs@WqoZ1rJ1@$bs7nOd*%8Qw9K6#8j9Si^u;NPMlir;S{uojkRB((dmD3JpNT;Z@CJ(7svMYi&?j%~lxdSk2&Y z+0JlZzR>lcL)ZYxs)uO>9BVo6o@!oS=^M=Tjf$$cAF{ZcGae_Z8V{%HZstUf5i07; z;bRTkU}C^JChdyqtmVU~#tsrEA|1XWoFZl)`*;hO^XMPu`ES7zo&_F*ckrhi`}Dcw z@GB50j$RJ>n9z1@|A9ZBiz-y8d4wqGa$O1@$+Xx{_yGNBzg;_FD}~%^r+O);A?QlagPU8 z`~=;6rioy&stW?^{=GWMT)b}tkJJm#MW;6{;qYs zqsOiZ0=r(6{&t39Z@Xs*uffJoXF%y2oV^gF%0~x~$6#FB;6DB|TpDf$HT0vNR-bEL ztZKk(*I=i#oX+GiQQ}S1Ey7QT2?Vqq`U<-j%6urFOdZlU|4BlpHd1oLCtC+Z(O6ymN?t}YhqJ1pOsd`JUkNgQ{uBr$5`eUDa z(Hje(>>t}ABfTC!?B?OQ9*>oJLpuc}uO?yfequ*^8F)dUCWslF)O@RV{u_urktYMO#D4^M-X>11H=i<61PH8?7d`L>$oN zw@vB|`oZ}c>wLzra%Ss%re*}vbw1-iT=qV6WH=Z*a*V_D$a(V9GbB=62J`QMDEKVM z+msdG0ORUUftg?WLFi4yp#JX(LbZ!SLD(%i2N9q4Jk*j2lk?<^rjc=P_oPm!GkQ7P z_{U1(_ggy3_dYSn+gRsR3ku+INMr2Tf{vR>QZrqSYN6(`E!jdx4@1XK9CWj2^T7R5 zB|UZduEa}8aR$y{fOy*wKas%P^93vW)l?l}LL?H*Il@{Viu$~sJ5`sfYtn<$3d891s-I@ugWA)>JM!THjf^8O@WDr{s%P*C z31c5qr(RmFZzH(?CG`v6NnDzjs%Y-h@x}sQNnv)^8;)~!0ZQK=)`PYFDSQDYkPA*K z#N1$uOe#H&T?9?T$r9)pDcUz5Z*OE$T;E1zqVDYH;K&ea!L#z1qSe&ekE{&{ewxWL zLGNkXZQ0Ihw9)hG*a_TA!xpFA@e_l$8D?{sXPgcYq}`F*H3~h{jdH8Lfy9U_^u1#5 z@)DM8PfEW`Nfmy+30nuTXpuQ{(A!lP4!d3t(^_ld zaH)w@)=?^5a$FC;AkbWE{xRv1uE~k8v41!jrcE5}2(EK7b%!(FFL+ZHNvbb`c5Ho% zo3Dg#mr`#ot3RP%*YT9M@+6lZZ&Jd^AnhnF4rXwUlmfJvnod-`{|Q5k*)=ni7ZNWt z!C79BM%j#_IQaSM^p}NvecKlfiJqI4+lb%U)gdknf%~!1Uzi(&d_K3d*sk*lwPq-+(+tYJZq< z#V%Fm8UY|pB64Yq=H9;Hn&QnC>is#;FMfMs^twax!0yDi3w!)qv*<@({qFh{YVi-+ z`26NavfA@^)gs(C)@uEAz4bA~@lt)LtLB$A*GN;#w%TT~e$~5Or*5PD(wh11YVMFs zzHda!we}PLTek(EZ~sZ#{;#Pqedg|3o1Uv#P#Yjz`lNlJ{m*S(6j*`}>JJGXp9za8 z8am#dI^M2l9+q&lkmk8 zK#SokkkGRwtwE1ZeHx8)-g~7Tbr+3GB^|9G-@8Y=xx?}#{l#Z0nsY{?&=W@mT17h~ ziYMNZnR9y|907Zy`+6<{_aO#zGeEj$uDc3LC0LAk=(+02EI7Y7HTgW#SNMV9J3LM=ca>{i~*_cARkUB=4B- zis!P1C$i=*O@e=}+qkTaBq`@O*~Tu~4zmvV4!OCQLKf#$}!@$i=eOs>95#h%J zF2}X@p#6ZwV3ahE6Fz6S9MB~er(4dfF)0c2YAJV)N@=iAS6NH~cp}eVL^xI4_L#$u zvonv`U>b+x80>jJANaS4=$I6r5nij-XiY>igKFD#Uk$x6xGcIy5@ifYhIzgv_X4p1 zQN|ty=FZ=8_{KO*1_tY)A@S^&Q-9M{<@-&Y_8EcVp||GfhO}>e%u_SIe|hw-_qy*2 zT+Q_pgsYR7+}o?g^G+`l0ZlqT3i`rEg?m7n);zRPz z4kJ!zr43+%gIFHcC_jR{95stJ=gSiQtlGS2vp@aznT${VDvGh-wkZq3U(Z*ZnF**= zZ`WMW__1iz+oJQ30jhbMci}4%Vak3pwzC5S9hJT1jqSNh#|KZCV)f@@0vB;gU!4Ci zaP0>i&hH&-Hi1>UwbY7-=GX{MOHGcm+`WI!;?%B((e zfHqx9J)L|fz_lxT474IPsIm=PZUhZPaNwRp-Ty*&;-*2!4R%@BxX&)dowZdBGSdJO zA9XN!tDzX5eHca)KFPO_?qS31YMc8g|CiAP@Dg6b-U_208=JVg8w~ajR$TuFKKFN=oD%uDLdGb?flo__u!bO0-wDclgWP zse9!9^r5uyi5h1y2}qHam(Sg{0z`ohOcb(@-^SHfXKZ`BZq*~i5fgXB;i3p64v1`y zC$d>q~VB&VJ_+e;(>tu7Tuq{fVc_Ve$cmqvW8a%MiXv z*ah=4^LM<`yp&6si}5EsxVH2X*MA2738GK2=^q1QmP(QWPmt=6LJ64~$H)W;{0EHt zUmET|(=KZ1Z2aE@b5oQ59sTH^x(et*82oc?YxOozaJwx&sy0FzKj*{H&_pFAwMf*Y zwr$%9#(V46&g=qSGCktbBuOJ`C_kt{*&E722u)IlQ`!87ep$R7f`IQUk^x~2j<{Hr z9ijBJjvE0Wp%LJcy^epZ9ZzM|hJiESHrCQQDOYn0>7<_~qbhjSido5-9mm?Dc!E~a zszHB#17Rns*Qmw-aaT#(#L$qlRck1p|4j_=pu*#98QfZ^QFn)xC>MMBOX z%)9@!c1K@Fi`i6@pP}V!F=aIQd^Bs(j~)dmx#CH>y=*C|6uZY&6GF!oCF0&t!sPjN znTOkE?;c>U^N^$(rYw?cqS$_Ei6BHZ8!eync(^cUt&{nYs7B@$k#h zlPgrBgIohD;eA7mLX*B$A5~c>E&+Z-5>dqr@Hy}NNl*tzl-PD7Zo(h<&JRd?M_&LK z1S6%NIvwqvm?4#Zp<`7xXBZ);Cvye0?=tgSo{$X;(VX{~b4&3}^3FloLT@CwyJKTO z9LFrWXsi+gG^-+0Z2-PWZrIs(*FqaSrqP%=Dvq+*5C|oBUqOrVyl&aC-Yey@JN*C5 zfGv-tM=$u7FXjJIQvXjfSZb693KsBxqWu4V2I0T2z+_czcXU;Z4|%)9U>Z4*KA8|L zJdQ3@_|4iP<=Nje?9qik``~lPMVt&+=j16R->Kff^?XnWgNv-&PAWd7QeU%h6N)2L zd`2g@%^yACef1gcpH+1wG$xZdZqmP@(hSt5F(9Jo!2YTv3yDAvC!0iZ)DBe6rXe8X z4vFDHY%$_xOwT1sZnJ3VsGg65+#q|U8^NpkQ;IRia#5~7MtKY8uKnx8#ot*o4HvP7 z#UfK1pGzhrs?Z^d|2n51z=!ROX+Ss(WSe7_Tb)1O@D0`6b?oG+Q#FKjk0!~=UYlWw zltm-y6w5wTuM|cY5-BI{LrmsG%Fg)HqT^l)!cdIg*)!A)zvXE2o}5m^&G`~&ZPJO7Mc}hWQO|};!CT= zhzrLe86nF4A>|YMkOKW9g|Qty*6g%Fn#USLq6rAqibRWTs>`QNDpo96Q|q?vP~xyj zgoN279PdsD>x`S}p@?uByV+`+c5%kL@<29WMt6RU!gacA8hK1da~Mh2%jwEaI)SvP z1Z?I%#}|Q_hPUJ_;RaYI0~QUL+LV8lCAh?_QeSWileu&-!P>ZPKCH zv_qz8Z~fe%9m?{Oh_XE2(y`_AFHe(YD?^9U4w9ufW*)vl6i5TSQI{A_clLNxi1CU!ayq7;d7{lFqHamOcM=C|ZF^isMjyE4?1}pPu)h;FXO_{kH~+kgj$YxP=T zHo}4hNiuO_MCxG3`r{SK+0Ri_*0!ISapDL2o%S3}_qq*FB&Ek}@yrn|96L|h;l`1> z@{l{*UB2^OdT#C2^Z=g_y%>HdIP5LW4NMG7yoWq7faU|k60YWQO>2%|z7Wh?LQM+d z+Nc-DNQ>L#*_qkGV^n>QhV#FT%ki7D@$~3wXhSx`OU}N{;Z37dWX`i}bf*lwb!g9A z#?1F$>#~dv25l?($C{zG?8_`$GD*BIZgy`(GWW6FngQn<07g zcb%nc6bL+lhx91606T*5f>CMJ9b(jT`sa%cDbEbU--}BP)qql^vgNPf;wOA)DR%KJ z0Xg-jqb3?LJw|64;Ev8)R3FtX#s0^2r68I&0HS~37S>9n-$gep248ksGf~!3#gww_ zAQ;C~nV~uriO#5rv~2$Md84RgV9u+`DDzN-hwbgA?krXoW)S?8uG;utcmq`XEfqEQ zv&(RMTwkj{A@i>b#tM>gglq)af$Z=O1V2F9W!sTK zxmTEFj%)~P>D;crLm)cO4#L7aH!D?zf-xMWjpX;Jm20oh3Y4GYI=0OlB-8BeK0Bzc$C0zF02hz6gb9alTu}QSEi=jf~9!L=p zfybAv+SZ{X{bq6v4KCQe1#kHVKZWC~^PA3b{3a7addTT?NlcZ0GPQHm*f44-SGQ0H z=sPW6O;8-Bj}sPAw@$?s7zjBbjJk~w(Yfi|kx2dFQ5Z;y%Uwn#E#hJP2pzBS05ClM zv<1;IOI|;g5>iJwC(k$UZIh&q()1xtUHeCq?8`~+QB$Z!Miud26{WHogIp1~I9c$* zLn!wyXvHxEhe_MYgk$O??Pe#{*WFu`h=tSw2O**CcSPz7r-?lEX#}#K(N}9)eLaFB zW>G0+(wEY9pMpVp1aq$IfP7KWE5i_B!X_J{D&94^>%f$#AeHH85MunPSAWUtDKmskOaU%ZQnX zfn6<3=LNAJUcE7j3>RThDe>Z_kfRJ>cJ? z0DD}clQ*M-6f-kQ1YLFb6tko2v8Dt=Ei@dF5kynfF$_#!7H7K)=oyM9-28iCv_OQa z{XpfPte$geH4bVKhGB}oano@Z=9BW>wA1Oz(X?>fa%u5GGMP9ktrlOTbZM$nn{L4J zLP<;@3@zwzyjEB-{ga;`!?+(C^8 znAQ;*YwYz_a9=oY9}=QH>q{9cnv+>Y03&8|{W1fL$OkbtP1bykP$?_%jG2*BmK@@A z0>YGC1d#}xjOTDajzy{_?qAfQz!ib@2 z!EM^R6LEb z%xUQ2Fnhl65$pMZFWuriZ{Q^NT{O`5Zy?{43Y7LKg{y#mwDd5Pi&*#$>4LG)43#>q zbo^^R;neoRN%b)gwboYbN$0VNI8K#eW7v%5J>#+{>=MjCg0fx)^MRDec+;e7V|9zE z=|o;{{B&ZH=`v62`~l#l?<;X>Qzz<0lX@zW`vNNKiB@C3>JbaG+_&o?tGHq=d7pcsv)4L(Cy@Rtf4fmN-il7p@SP`IeprB+jT$%=TA2n=w zPO4Dv6^~$k4;56ek!8TN!TCi{7?N4oIjP0N>!hGFB(hCqVoiwH^3E{Z4R@6#BWR53 zXytbZa*HKG#DMNolK6_*kEn-U^FZ^j*-Ex^8dZDdcT2R#_lo@BsVMooOz zm&vu9ey&VBX~E&6;__1B^ZdHhX+y3|2P81%*u}3#S{$tQ3;$xee+)B z$bGB#EMXy>LBZXGVKyNN92dp|}t2nsGaULIft;ec@Odx5@JeDE=B_GaQM?Dsf0 zNN`uPj^GSKuHu33LEmOP-;N}1aZy`nTJVr(Cqf30nMFbwIc|kpX+MjPqqK4g4sp&~ zcMMLro;m>nBQp5*(LhMEW~>!epCb!;ZaryUJ-pIuWulsxBMJPOSg!nBm`}cedmij( zpJ@L=U1CcnY#O`Y);fip@b1fqkAa!S95-CeyGFxXm}{sup$E*_8&bu7y^m$b?4D1I zg}wZu7k!r{myBvE)7$unSA`K!7C4AgA7IZ;^iKfq>cx&U{S(Z%d;H<^;Bim^NhTrM zT|r&kZ{*vbpu71}lQ{~Z%Lu8!O;ivT!kR}fu;u#T9+#_<8jo@%SBt$I6bDIk{uH61 z`?WyGE5J^&i5!+LtDUse5cz}-!O)Kq=PJu)ZWrpY*jXG9_8NJK!9V5Iladgm+9DC=C7q&yqU)<8(8m%0H04tzPzb z&#y+dYuWVUy(+e63D4s@-h_UK2H5Ol5$kDg^XZih`^U3tHLvHTOW;e|U@Z7j^sd=S z8E{-|_HB(5F6Vd|LUV4DP?0#eHL(iAMMj}bb&X9%+{&w9x6P|BvtqUTNR;wbbZbT> z#m>IiDaU#>^H{NHTSLu1l~tywyu@BZoYwp;3--BUq24sgyuMN4wEB9PNHc5#b7M_9 z7dmJ6lXM#$8?45-THb|xT%DO9!&PpB6#(J|3ZcBFBhmuR0xlYoFdG%$yZ14g^)uI4 zy1Fd2TOMf5_M4IE9jam!;8r1bOVZ(1p)!hsf6OaX`Pa9;88Gn5oQQYPAzd+6r3ad> z7IRVjO_HpJZ!~$U3LOux2>-1uLSL(mJXI z^6%7dYX+x8SVyCT+*0F*K8=WEtpLMs=%_3eqw)N5w|P1!5T4fz*&H9u-&Dz*R29UQ zt2~TP$$<_qSM}|S891Fy58;Ko%q&RN6g8HBsNQ5YMeqn3OygFnzjNCGGdbF{AHNhTTY4VTqiE!U8^yo2GB* z>)9wv9J%FS2Ia8=0>uI{qvr|?GzZo^B-~z^Vg;M?2r!jg8tSIMi$Rwq*0H6O7a?W!TeZbtB0XU#JrO&tWd)dx@_eluNR0&gjeh;*Xhw)3e9qbBLe@_>63(KsUcXln z{#Zpu8C!DL=hE>WuIlAE#Hu#1YIn#!3FxO*_guy3shg&7lD(pv(&`=7?&csN8_E7T zIg@(Oo0369h+Ad2Z4;jNgFZO!C)4Kb^SO^Qv~TK~XPXc>a89-^ngdu%phFpBM8xA3 z^uJ05Hv_v}MOvR%xr%;bR-a#tpCM%T!g4_nF|phNWjk|t0&9;OpToIgr!;0+B+cYJkRziM)C6R|o~?g-oZ zWKo(MwIMf4=`2Vzsyyf+mZn5b28yVnI{rHL0?7h)8W~NQ0m466Zg3Qe;H?zin#w6o zNS}eZecVY`>%7J*3Byi4aPL2S*x4StA2*gVdp=)*MWQc!{!36iQD?FzG!1EZbqwR9 z--~T2W{WvWg#JB+$L4oGACw+>7etx6Ftar^lN+No|Jxwv@fH z<7N49t?=8m+``N}>MXATs)O3JUVXs9f&(EHK+o&i=6O_{8pTf`o0Q<@r0O`Oz;%tv zzgQMCLSzrTyao-8UhgEK9LW?{-& z*b9C6S4Z=Ftb`9mrOtPEuuJ^QRf7r2E3Ef;;rfLs_@Bdr@sZH%Z`4jyM||reBcx^w z&{Q!S0~4{y?+8k&XtS>W$t zl>0CwG(dhv7Fup84e4@dc3txIL8~E zJ{-UNIzzr-RQ}XVW`dwU=Y5+np>?r;fG+LdQcM_57&TqH~?StBuM%-hGtJ)tQX?!^7$rqhiVfmZ7XXfEd<^lcE(= zUKuzBD(oJRYr`K44ES7i+S5h^m6 z9egDpVLzxVhS0g$s6_{*e~q=j-Db-$sxEiEQGLE{x!Xhe9hdEdA&i`Sl=s`!W-P^p z=89gaNR>CW8^FJTKD$^60CmrbKZDan5`IEd6eeQQPeYK??`Wy}NiTFOclF|99kjR? zokE4W0_a2iA%8~ON8VOZ>@^oW4+!~NM}-H*qq=F<+@$4|9_|je0(XYO&fpR!>>Vir z)g6+v-!gjn+q5|HTLYfIi+oTvr8Aq;Z_r?;2as@~t}SCn)j9e70jTArYsM3ZH@tMH z1eP|6F84R*F=YGM>*!fzmkNK2PEZCeAp1fZ1~N9N&J!Oda4qOj3U)=!LH4O{wH<8=ynj z9KPIgq#8<&BeR}H1Z=X^CH$t%8&++?IzbW}5Ur{7JMk-{{LM516%jf@`6;73M5My< zr>$$sixtD^qwA=o`d7r|Yc9}KYPU4;;X6FUeKg-QYfwOKP?OgYa9h?jJ! z9k$`>lNwjtuG@%3`^8E!+j0KdF%XMTNxM~i<(vO;yAPcf0B45esc?g)ev{wg4BC`q zy3P)MRcOxxB6}F#Y}MUVACz8fI|F7r6ZSZB8DQSwGexN}%8fgO;#V}U@8vZdU{XJ9 z&~zjPQ|K)DMq5OYdIDn;X4s-DQL0(@a4+gsyj?bjl1UXU_P*;i)VJ3_X=3AQtB*i0<3HdxVGX z+ZNw3fawktp&4^LO>ad&MOuVI*;a?IQ-T9g811 z!8=4)E!u^B&g^)uxkQQ1t-J`TQm-`B=QwW4_F!Td-Xgg zMr)d39sHoH(+{y88|rCE7E1fC^t^XkBcS|qX?t2agLqTq=?mc?Bi|r+{kXP*fwE#1 zm1A}Z(cTLaUoLh%$6poU)#av`6Hqx!8B*D5q7_@YTq%aKt`L%E+Rj_Z^@w1TUtznju?)znAiF6>jrYyfe4U> z+;DODDsiAck>Tq<@#lQmd8Fx&N{Q8_Z;pAc`DOX;<>x!mX9P-ygf@Tg-e5PLMwy5PLQ0D`lK6ODo4pmI|Gy9pgd8=KJVE(Q}p#Q{74RW{QMyyTe=## z6ysK#*YZWW83se_G=0}YjMQ!dys!x@StYQo(H!FXO~b)lcMwLJ(KOC`FNxxYhR|T{ ztFo3sYC(LZ>OFG`wr2(9u%{{X+j^4Vof)pDU~gNv0T0GlWD!H_u3 ziIn<&w^H%r@6%)7k*{==hMGLVMAl0-T9uZ|dJOdaau|1n zh?ypbeyG7!;YoABKr;La7FLFd5%a|ztVd-W@jEp)S7LpuIQ;{*%&Kx>$FmlOqv3%U z?=$U7dYGqK!4UWMh=fJ(Do8a4BqSy1uM2y|=^tj}u+74Uk7+D+##qH(Xkv--Xl z9tf56Q5>^w`yo+#Ii%Q{xCEf=xq5W#?NH+p3e+oGQ>VPz%l;)*)?sCQ*>1b6LnCuB@>#rQ79)Zb8rUP+aOI-OWd<6}Ecz56{Qb@7MC*_+ofoYeCYI0GNC@_e4A)HtKb#$Ti#0K;DfkN; zB`0G`DeH4`XO-thBu5+u{7q;9sT?9JCgc(tOWn4~z1spP9e@ZyU}woB8FrQ9rJ0!qaV$V;f(NAN2iV5OCQAq3_6YWR=<9iEq8c zthY~fIUXzKy>`O0%7km*aXC0#QvxV@_lKh#1XEN+pmuYq+usfeJPdMYh*%SMP#oDG zRiK}z&Pw5=`-~aPk*Hb3#mkaQG8>(Uld#!M3C48GnD7~)qnbg)Le8>Yqq1;sX$Sdh ztb1`ouZh`{z(6_~$}~x=IfLC{bADpPtj)OlU)fhb*^R7a6SY5th|*~i1OSt92uxj- zp;lP)J0pZ`qm9AMZezKvmVfF5MD-rrL9+VJ(i&CS%LCFscg8%3F}edrGg5|Rv5FZ} zzSMyaS&kjk!Xbae?d5Ar%wa@Wo7daOxX`e2s4>$5(9mpcdk_&e6Wo!%Kgyl09o8BA z$40c#YUfVO4b|lc0ZI9fkFr<9g{URMDbYCkOiRdno46D_(F?mU;E$gFj&JrG0E~Myk{l9Ci-S| zvvDRW0|E>x=n6l&nc&b-fQ|Y<0lj1Hz-E>iS^IMeYy3gmc+k)H+Q-!KDp1?)pT(b| ze^~nd9{^)OoWG~TgGqzyt6Hj@kfUy$E$0f@wSQ%w9~KI@SNYevbxWQ6w*_8!e& z?IktcujBM}mD;$%V_ z84v@YpQSuGwXFqsBCGz`Lp_w5mX#AD+;npX(}c%zN}0ypjwO=&)?0e!F}=_qZaGLc ziOId{f5H%i>OvUmxe}lO+4gfzm7ftgEF2~8OFPj(4EAC1SwsNN9}hXNco`)>Xyb>r zWjR5?&1pG*O9K0#yLWTvhXc{rsb!t#wW275p+2?fU@e>hy-bIMNsOz-unzloy5F#*%~iif$+ed2IkRR-ZNe0d(K)KKyAV7#Nizcd9rAXnnYeG= zBu~DqJ2CdQaFT5Ow665=z3{Q>Bs?GPhapdIpg;WW-wdyWgjP%4#uyO7l=25E#=kgv z@o6c4S@*o28uW!#!5De07JSxO@LCgO`y^Aof(FEo=V}{^(f7|v>5DidKIgcgffq6p z(y|C+gP5jHFC*br@6j9-A{(^qx!Wu4Jgtbm76*jQV?m2 zQtigz#HlaXDS((vMyH)H(b%+5f;nk7yi~oi=z&Iv`&M5y)Be%L)7@@6P%9o>OUDR$7pLzlG@!)Px5`Pe;D2?|yxVi%!%VW>5CF4PZ z=c4`jOTk&Pn18AY&hb-5H#^rqJm|I!pAudLjL3jI;}Lq^*aNdckOp zdOCX8k8GTpKBVSAB%0g7SjW9u6SAW3oq*F@?t^7OG;tbt1@WDin{$;j+mk3o{H0dZsa>^ zzbqLHLZMHJ05p`#sR5xHN;V3-2IxRU@tSJ$O8)5P9`1dJNkY6u;4^A(DLyyZulamd zFC?FayL#>DJ+AcrKGM7{> zfU2;)vcH*wSi#LlY?i#}DUuvLK@l$+MqxLcfvxfFS{V6nZtLf*vu3`3S-y3e^;?Wa zCga^N*R%Tdbth!v%Wd#T{$KZBe!IpifD=QL3dA#vdb{i8uFKVOt*KIwkALgrMN?>6 zxy)dM^B{_@n{^9c+K`{gc;1VWXjYlb!S;7=zk!eK%14a)C%=xl+q|vRE+J+Ly-*Hm zNbNtu*mA1yCI0`X){Urts4aA;L1K(=V}3)g>j&TU1x?Wunl z^%cs^_x1BP&MgoC?tqE^@6Q&n6M4|tZT8x^yHhE1@77zlXXV#_73FH~v}(;twR}*y zt3WKPR;xE1g$)e-?cYE0wd+c)oUdKff%KPOL^O;Dav}BCgSb*G%yTfCfDx;!|Bl9< z{f@@}3g;NThX3BqbuHdt{yO{!I<9a&+LmM!9 zAfg6`eg|uADmqvpQA?o$OerJie*jQR2MBO5pexA?003T>k!V~Um%v$K1eedvI0%<2 z7sCpNk4`tYk4`wdSASdyTwK-FKj*%gdAym&G7v~6D?>;E!xjQb2w8N1EF?e@$RbHd zI>10C8D?M@vba=RtF3XZwRNx6E?RA^qC%EhW0%<4+I_KV*RR^z+Rgg4)w+D=-uGsI z10>q-S9$a9yZ4@Z?z#W7-Fwrg-#+;j0H~Fk5bWOG{;I>iP=8g6FL2Nu3VDvofCxDU zJcm40eovskYIFAiZ%?9Mb>M$oBvvdtNnpgq%Glz+b6QEkCew;798 z4B4<7t@9f!4XhH~(gM5MXxf8{+-$d1DVg~u%y&wA?Q^PStah8(oTef7Y;?0c^H7## zI)rH1gtN?+0p?V^bIq0^`gP7TXGk)-?QXYZpQCglHh-ct%RS_DT2PUc6|B+3>WLqx zCtJxjFO{$e*%s#t`&Jv88_Zo&cY}K|+Rb_POro=!aXNKGN6ElOr_`ToXWNzrcUtmF zsybKO%-*fJ9`~vPUYAl`>}GwJZB zU0sy9r>1FN{p<~!yQ&X#wa=d6#uYtI#WAg<34fR7E2X`QQ0nU}@Goj`&#KEeyQeuD zYP_2lPMgu-R+mZ+&$PBZOGhr*YIm39DAFc$Z*^ueH*2J{HJC~F%&)mCouxp`xsM*fsMFr{wF2@SHd4bf|fD1P} zm48n2f+lRuSA1)W(X`sT=Hm66x0t1Q%<94X`o89Z+UX7M(hjr3v2JtM(%@#7eaNa1 zKU+6Boduba-F?xb?752$>?}|{8egV7CtFVPoPEK3cLi}+W43NYxpQH7d0>v6P0zfz zKQL$IaO1-8`e2uht!!}Gn{yZJb1FxdRev<0Ctpz(RgheU8m5&rxU1{(6sO$kHt%d) zQhq^2?&=}0#Zx^nyDse8s7`O2y)x`Jmu?NruIcOCp=I)L65mwqfheiIF=7~6%_BBkMr2PIpyoCw$*tzEur;y)OUOP%5&ZG6zTB$ z{dO$0NEcnGR=c}u`bn-w7Bw=)hNe{$etW!@X)|)RSC4G9Y^`qXs_FI>)Gi3_S)MPu z)fFh2m~{nadUj(5mseJMO~15s#edGsy^98$3wq^)v+GCtci8PiOp&Geii35yvLyQ^ zrzdwlTd*KJJ!`JO>Hg-fy1=Y8#XB=++ssmp;xL)bEZ5v>uWoWrcM?NI9&7U)yK=P1 zqh!k!Hf4Sz7Ug9srBX9ycr3G*S9aF+<=K_y`5v1jx0X%cO#ClIw#2#7J%5ARDJGd& zool9TsIu1&H}*A=erMUyq^u}*%iUgDm&Liu`*s)5`p!`@G(O!~(t_sx%2_L0JL>l= z&$dWx4FRyRVF5eeX>%+f`VGx_)y{3zL(a_7ysgbP&rLu<_*l$LWll$9s=MEO8}LC^Ho z&br~o_VV==7RGkD9Ye*Q=~mf1BCU0s8uzW~-C5zNW7*B+%Y(C*2&_0CFU>YrS69ug z?eFMThj4G*y3Tgf!isfRBiWrtvhtS{n9bWwJ?@$8$O8M2ISZkXmsYGeTYo_?@oI$9 zhjop@=+anm!2gQ|WVWnM8R3QBL`6*qM9n zq|PPOIpwqFxT&j`gr+?rUb=YO(Lss|$`EFxYa&AhNr<;2XFeevlJH{k=i*gkc!IWi z>{3G=#4AEkatA&UQOB1dOn(9;&@4l6q-`fd9YRK=F~WjaROAaB3Lf-UwR*$*gS{I( zfnL9NxVR-4JUB8a14SWoCvGakY6Oeco@AwkG+RR6UIGpc9X#wF9uD@90M18H<7;JT zAaKStL8#E`dxCx*5cz_EDq5{|o}O?pbhLPTz%w}LKT2PAhUkq0bbl@B!~|VrSWk+gCw(M)L;D)hsCE`KE-X=Q2;?j({sQNlOq z2@QJ_P|{eEx)8pBI2aqPREo~tG#QmuDdwS#MAVxgxc6S0?8);b@pn%u{&y`86$W95 zuMJt*!pX>yM>>LppC(3gLq=DOr zaYmBZGl3-D1MFP^S8^$RSOeA;&GDWiuoB#<5+RokSfX-5U|kK@*dPP0oditLVFj3Y z?2raO+K5x5#PRb{KKhOE_=z@%;71qOx#A~IV($t+34fBe#W+icA6*jf0e)_VTey^N zrGVBuG~)4-F!JLUOWQzPS-MNOXHPh8ACYHhoR|!sM3A-K#bT|KTdXu9sKTey#eJ6Mkr2kM$MDAnxf=Y*bG|~U~uodrW$7tRA|?z-jC3J&Q#O7Jr%ZT1DXig`;WNGiBOpMo!2sn6qloj%Loo zg-75~{`OZbQ)=ZprSEAW%+d6LP#*I3iGRPi?XHyu+Zk~uJO4mXiC~A<-`D8(3=gaD zzwoLRUW0#Jp4)1fIuwB3ws`D9^6N{=t`!w^) z!;VZ3f8|@LUP_EeA^1AZiK;=W#DBP<-(6y0-qQ-p*j%PlUKQuyT+$?*mu= zHeLT5EJ8T%tQa)3U09q;Oe{c{o~E0OiwN<3eovSRDwdL=!V+|mHctQ>g$qp2Y>2@rrIwp%Y*Mfh*OI~IhwBIhQAbSioZgs#q~dzqV5OGL z%UR_=}KOVSXY9Cj*h!haSUy0Mjf2Vdrd?WR?e;yS%1lFz#3oDlurx5mU;Q3AH( z_nfMWJ-wd6Fb{qM=VBZu6IIms8MwN3?BFW0jZ|d2P?5>HydMF^mZhx+GW(w!DqL<<{ z?X6!#Cc{DhA+NE&Po7IkCX2A)9PO+DDa-IkU!U&?MK~J8K~K*?PrsM6ouas$mc)-j z$%6_8kW^Oc;7OWchMd3)^}-MiTd7yrC|gQwEaM@H&qkuBK51hj9+4XdB_dYGBY4z` zhw(y$#fGiYA3TX!UVp5>CcK0KSv|fi_8tj)1H;rAVfF+ZQ3!e|US_4vAJBrtSVt8v zC!VP0Llct_f#;Q0Sce}bYwY(1`osGhg9C$}kT;%-Iq69>mo}?-6&~Y*T}@U|%rL%h zNV7Vfl!!%y zDi-9cR=f+pM)1?1)9MNL>|YxS1!?iVVZ}2%N0Wy~x_`BEFcSgBpC(uqVb0UkIviZ< z4{zy?Pl%1rl5`84nqo_8g%I%f75pClfY>_spMDip2F~{;x zXrQP^*LmYRJe4H|d&?>OMypi(89vKB@XyHuKbM2g=7O1Tddx`2fsDW8+iq0gTYAF+ zlT+9jiGT6`Yy6E3e}%uLi5j(v*jX8W7duooZX$&Dl7cVd?~NGNygw0o8DVC+;6Nkt zCk6kAuh6{0!F7>cs}%+oDK@y#93xdK{ssSPCAR*C!1(nQBl8)fV_-gC#eZ-ay(Uf- z(r12CxKcyYbKyU&1h9W`oCmjbtN1#PEK2bWBYy;Rx&^$4`NqP0zWq=rcCiWv=r0fq7Y>I# zp>SdJWV$zlk(^CO7W4LMe0C%=5;xmNcwLTpRBbBnXbE2dvoFx= zJraL;GJ1KBZKEiGB6toNmF<96t!z7^WOZixdx0|RBz-XS&RPSpAiEW|i|yeXL&lCg z@s8n24(+{G>as5d_BAT=kO8B*?thfJT9x&3mDt6+;s`gqMJq;s610$ITb%wTmhlN1Kcy!s{HUG7 zWzhsiS>Lr1PnnHOoa?snD3TpEyrG!bN-#pRM}qKvLP2?86lCvXAgx zmfMWN#<){AnO&{2Eo>{dxYuS|*mVi}sd3OU+Vf#In8onPx@mI!h^omNF z99-M_Q`yJaCpb`VR#}J*^MB!QrQvTA`>tuNOXBEv~6|8$$O9uQrV}u{keyICgI$+nJD&q{O(Zy2w%lmy30Pt539d!W%siC$jt;tXu!sZ z>X6L~@C&&a5oE`WAGe_{voEUfcYeOd*q7oo+b~@e5PR6l9%Q4G#(x>^&y(d$yJbnL z**UdM`Kf$Kxq}eXVe%NN0Dd#K`@#q7`MvnS_W>9JR%WnMv~VpG-2E5&@VElg*;fz> zT8wV^izcTPn9ZJy-kA=K1j4=nulDcG+D8K0s6g8GH9pz|Ed;4=DD3O(46T;INx96v zNpm?I@(j|*`VIE_5`V)Z^$F~S=qR>e*wgIWRvPX*BA%McE@eD4g4AB$BzTs6*Gdxj z9%UyaA6f@*Z@mBd0Z(40vmX*1Bh?7O6s$!FrmvVHk4BeRRQ6-`6VAp@Cju#9XV=s= zs*@u1sX%rI1w-+NR~(ww7*bXC7#ri7_ySp>Urc=Xq{BXk{eOyIyFN#)GB#Q{KDGd7?!UgXQpT@{}H5aVxAN-tdZ**raV(A)!N4&k;Nq{o@Cq?Gl+nTq< zjv7-M(H#HHUVm5Ezt|fpdy&1wXZt42_AP|Evpd*L(4EGuXgQ?7H+x0#kP(}t6r^{(P+_7KY~@QX;W+nS*k=(x`V+m zUywnBkAM9?+@UidJMo1&X|Ysom8zsAgbA{>c7O6TRB5SHkqep9GMY{FAI+1>Hd2Dc zuWtDQ-nNl}Zf|HCUmbp{miy-&9_mkJ{bP>C(H2jLj5-CT6pLqeggre6`KF%ML~Z6F zs<>mu_oS^I!I4mpcb$*dIodTT@9+)#sIfZ`2!Dn>92V3try(L@Z4930h&ZY_K+e_M z9Ow&Dpdr2x```oyCi6B(sdm6J;a+x_4KrekL#tC^i;J5@ILSW=wx=&w{GYG zNq-Po3li}7RCbk>ABO`E8m>dKvn_Pdzl!z0xZBRTx$0P(=n#AiD2_`V+nlZTqN+JLFM%82rbG$cAlUr4 zu>@{A7YTeKQ3AKa9Xj&~q(A+IDU!YuK0~B+l6MM{o8hx5LVXnOOJ;UsTA_Z9zO@?? zc_5j{rnE#pPv5o~5_vG0NK0BGU!ZS0;7bNXMw5xOr6uwZeR~8RO=ISyZGDI0^+CxFsZ{^Fv)lkhyi3HTMG z$NwtDv;Z)Gt_EChv~TY=w~&L?wRK`XF~ z%y649!#fGl7mz*cjLuOdD>_bda#_@xuH*Ji7xOAKAAE2SF+6a#K}A(+W+71 zy1roTV{sO^Jjz75#)Np|QqjFJZq+R@XGfRJ`_QCg z)2AnVVh8NYFM)Ca)(-?m6HgKJSb$^|D@rrT$$QhVH zrN{?q46l(sMON&gd%D&#E#C;;tH=M>B z>n(}RK2a}o3_C0*@K#1raYRbD6MEn-hkOF>B;;^_CA4`lwaqEKtMe4z-I<5?jN@nX z@ZK?ez(HF5KpuXPo_}Ry_)s2>(%UGG>sDh7X$8JQpT_XXas2ud+N@9Ena+xFeCmnl zV$?v!+t36uu9ETFZ&3RB4txYMWMK3Kw7+l5cq4y<`L9C*Ss4vqEQNq*l#t$(k^ZxQ}vzN!&SVl(>V z6ysn-G5i9B-@#`z6ygl(Mjhc3qxeJ3O#Bq#B>sZy02%2~{KF{zc?|!40{>SSh%x;4 z82+b4YyG0unz6L4nR$#^TD8`%j4@@5S=)qES!TUSd&#LcYcJF4E&Rn{Dyt}Wm}yPe zjF>Gb;-DpmRewqLeh)dU1MnDJP33Fo{aX5V9eFh_nhi9YO4v^|Tp{;BJ#)|-qxR)& zCcQ~84D;D6@+BsUJ7==l^k#-Dz|Q8dxg<=IL{w>BXY+JjZKO6_p&X~6vhx(wcDlxx zbDR~8vPEOeHO?xMt@Pt@TIkRS=D7Lsr%o^y35>DDQ-6pSa~wRe*E`P^H2|hOR>S+o ztABHjga6|&-Kktj^EK0NovXF{43w6Su@$6UZS=e9G+RR&&&cvZ#TaXHm`P;15O}E#ZIe!DE*r84re>g~n7mc&`(|-;#XUfoU z3F$3MmfmpG)?~vX!I%kVz+AyLU$q7nrf(qLxE!Nwhly<=Oa9MnG`3kA$uf(ex~jb1 zd6I3v6)tyJ_)O%8*hkqF>BL>1Av}TEk#T}uB~eW2FrQ$@ z$ba^*YaH@Pb|V=k_AzdXR@Ezx42Kf4Q0yk%Lfzs}9OjeklaXMAeM)z0oXsnuY+9pi z+8nkg**&*HpTl;V-BYi|qr;(&vCmEbkNQl(uho&M@ypjJvS1FYwpNZzS}5&R=j0T- zw{x6*KDJ=n!14~|O|tMUCA4mQ?YL`UYkz7$J-t!YnvUv0fN!;fR1sAAxBLY-9Hm zNHVCGi#dtHxyMK%a zo8paI6fMQgl-Q*?IqWimo3JeWAM)s0vR{w)icYZyxyn8?&K_yy9;>W8BKQxY(6SfwJ5?8y(OqBXGBxg$Jm(8#7}5G+{_&1&QHV~>?Fk;Wjxqm zU#4ey^sPdRE=JiCqwK4r>?zCRczS65IqH8GdR zS3fbvel*5@CT1C%+e~3It|NA?hf)%7IeZj0(Sja;8=_iHj7Dd7l#T0q3P;&-dSl}4 z1h=4K#&(mK@i>Y8IQ^XvGk=!-T%Y+)vHb>+UFIsUILZEptKskBBWlgUTz?xkc6M~^ zZ1$WUO=k-(n0R|WdFrgWVDy0UOz*8n7leNVG|o)av-~?-+^j zYAB|luYrCyz|E9I-9lm9&E(JT7D8^PcDYa^jERLzO{p*@GA%-h_D zW(rDg;#&rkEUA>n6DZB1c}FRU{F47)8R(SW&^G|C;QK@;UE`AMIxgAhFN^-{^fzsk z@5n?G&v|9BtTV4Hl7DjEs;8VMrP+KQ^IW4+G5Mx3Y0+u;>SJ(UQu%?T@`EmN-ugC` zhLrh0Kxm?6=KsA0D8rlY@JZ@rdc3K{vvWmWvYx`{W@x3fsEZ8N0JKo>)&?I+*iO76 znuuQ^w)rt`hmwTbjvcy4I&`ySbCs1>9G6N7(a8cn7H5)dQGa;YqVTXq;bBXH2PDCR zpV%6YTV^osHEG6;m_l3B6xxzZAtahYt5hyk=!rsJ6ig?jxmqq3XwrGF->Uq>q1Oyy1V+X9Mo9-lK=xbyieh_NjC%N~Xt$xR>rM#Z0zFun=T zz<1$$@O^q}<(Cu7=*0QFOi!)66qk$ga=p9*FA(Jm^z!rgf+)YBl^MSYL}hwvI<8Fx^hU$VD}QzyHg z-7d|*=NU*1H0$SSdCGXghCD4oZtal+7P&J;4k6?L1#CFuO4^T@72wzx;w#XxwAQ?v>m!N$& z42M_BIEPotIfqxuI)_)vJBL@wJcn1xJ%?AyK8IJzKZjS!K!;b#LAO`RLOa`kH(s>^1?!nU{E=~Ha(M}m*eEMO0`(Z z{6@+cKvaCCg^I=Kmd}e4b&99A6OZG!J-tbP2jq{ z%wKQB4KI_q7b{@REEj2zWLQ%44Vfv0B@SG9J$c5zbYEP^6%dMj{Qkq*5= zpD-sXmzfu812!iTfHM>z23X5V`6LS@>uOHLusYI(3_z$#|2u(4;wnpuv}Em96$d-f zcr{;u<9yUW4h)YdC4w-2v}Q?`@1*sP82Khzv=&m~I2KnjMya9VZWJ0w9Bu#^Y-K~5 zye2JFO6$Y0d<{BBMueB95>ygjAsQ&%6FNdOi;HL}Gy4bFPD2kAh<3D=VQSa4aYg4a zKL&G+f5^#5-yv&yofKgJJ_0p}3zh#s;$$BQSjKAr z^4>{Uqwtd`4P_3C*JRFj4?7*biF5CRcqZ;pczAf{X(u(|0fK|dC_FsvbX1fAd2xpx z9%gdI;RJ@)-vEs$iFdpVRbIa7bRu8_=`3O|+n@)Cj~yXFeBvy{uR<)QC!^=%>F5Ob zyZ4l|cL=dyDzCtQ2E>ymVp>EpQ$DER+0RDro;dhfcnxc44!yu&!b8nhng9ZU|4&CR zhVv1Syzh`qas>G$NkW`Nf6eH#IShSJ4IRhV7?xl(f1Za4=nN*&mu<$FfpV1d)8T16 zeKop3LJuoKr(gr+d|tL0eL9}P&_~WtQ1OnT!#6PWs2X~IEMo{MJ4PRmrt{GSO!%>y z@LC1n8|~v?k5A?=Vff>x9r3AydQDOmY!&y=+gO618a6SLxit%G7i1P~c0sJnU<@$Q zEp^>PWdlr`RkRQ6npN~%+bHJ&f$qmoJtS*ZC}xY(%2bGpA-E@iBbsY37G+4@n-)1I zNJzJ`dSlRk=kU-H7)~aa^NYo(vNEO;Z*HXmuPN`zUBu#zA@&^dM@4P=PfP7#eNChH zB(l-_!UI3vG=7Ow&RyV)ed|`@r*z?kGxgG?O+$i|P0`TE~%VA?iQU zij8o`VC`36?`GoRp_q;THL5J!x{r#CZJlKSWaeOh+qOz0nPXfAJJ00%LSY@1uf3c! z5hwA1M3ylETlGLjlh+<3G7VT*S!fN_S5U$&CB$(Fe=rAtuc%;PxdrDPpR)bAZUBMd z|C8PE)UxaP3%Plod468g%%965R0UoTP-(@96(>bl1c1AmdVq4SBvf=JiKbdEZZ?`< zj^50FFNVh$rtiD1iZ+&M=@YnF;_Y$f)Y}M1ltJOc<5$vdzV`cpidTK{ zH~9Zs%hwnq_H1-KAD>}TxbJ%P%c2TZtqfUO7ZN&xSkvbDRHr$oCEK)*Se(uqY_$~t4e`^ECP(~miz`F1)U&A& z9+bXy2s6DL>b>8GZv~P09se7?eQOB7S3B~Bx`sXsY|YCuk5WhZ1-vPOq5!Jk6~k$N zN6$2BU{Qu4*klZK`?Z8pTIXDO9JG%O?JOiGG%LE;yG82l;- zrg2#kFxAHSCSOzU4i(4ClL>qYq}gN2Jr$abkJ-zM@$}bA!~Bt3@}8*cznthcCpsCw z;=;%}5lIof$mG;5FB--a$1P3lO-h3Jqu1CYfUfGKSudPr`$3#t)N(r@yh-+ic*7XA z(lkm#CG~zdcex|Q-pIH|3z$Cwk}kE%a;@N4!Xa- z*kL)^!PZV+QTBC^6Qo!tH+^VZMTDg^@6Te&z#15;&k#w_F@-%<@U)pt+cyPuC#KT}l!4=6izzpLNB3^&NE;hryrM=dZ40G4n#`m7EluX$5!&=5m|AJ= z+yI08v(I;<2H}f((ni;RdGx4FQ2JY}pc(Y6v@nDox!(0!q3(BTt-PLl_<2{+Rb40T+hl)#R zt-T1oLmfLC&CMYnz4GV{Z}bF-)Oa!iEgqOcgvF6ZyD&*wTKemM@%$zE?~$95cu_mT zOLD{e+#rJ@P0jZ<>%JIHUpVIhgnS+r`YeNRQ|KM|kqTHqOyU|(@nT=@qymO2|x?vZ4N!9V-amnvmciXQPC%D<}Fj>~RmQ z-8(d2gjt)ii@)!Gf%zFecQ?2@+p({e?;j%IKSaWRh=^O7w^@!yweB92Y2A{{4moz- zah`f&rV({*w$A9uTg!p{ExKtYQwbdbI%Cc^4(!fW&yuJuoJiDBiIAnbO#+XcfkL*6 z!tvSkcsQ@M7>8AYYOdEIKLpA$%%6y1Nfd)WuBzN;lqJr8sz%z~4+pNC9lc(?^uBfD zjO9N4O-GBDR8-9P&&^%mO(_B56UuHIPD*<=!OZsTNSvM=x|50O71GAB6D!F zC8Wq4K-pt|QraA&i#mT2$4tz!9C_(KG&@MiinA5L%=~cw3@E+%0Qb(GfFO27Il-+*3G}xfgi3CnESlk>hd6zH=y57Bo~O zka0Pu4np+77XnF*3{;HH_Q_5R7U;)vn)k`U&?XFj;OFyDwvK3J=i?n?RCoS+$5_#w zPc4!*=W~%_aU{%$;trL&moJYgBeKZDI!xH z!))Y#cHruwTI83ggY6k_0?zSOI{4#v}^|OjqIUI;Mi!q_m>tamEXrBU_q6O8rf$}Fd6WA6OkF_% z4;?P_7?@wN>57vaZ-0?a25yq8i>GAGW>aGi@DgPGoyFF}!r_sx+Qb9yR=$I7rM|O4_MM-GVM^(lcSLyn>0h z0@PJZW4jbo>WP<*7NKSZ)%j~qz*=B_S;05c@dnT;)5Z(l$^g5A>7nvfK0rdl5?|Z< zf2e1e=5Kr$HmE8b8dgX8Tz8aPoocq?5z zrF3Ix2=`EwKTCQb%%}(MDBFvcqb{)yM6AE_utft)6crX5b2-Yv;!%uc&x6guOYVXR z!9y(E5f7~DM)P5}w4;9HQBE~vu;_su^_WLhRi63q#)%zemf0wAgiux0WZFf4C;L}$ z(xgG703+K*>JXT`F6~ghQGvtiAp$;CBqua;QjWW2VD#iyV7%^6Gr{oYI2iM0LII=w z_*pcb@EO*IMiqeg6C<*6up{E&$s^JIFzS|hAd+6JtDhd`W14Y0_m&>FRc!=$peNGQKjm13GZIJ63 zyeG{a#@jwX?11~iTI@F&+XL$90hCC<9X+R;7#q=r_*i6GUCSOy?tp^(o@7ON`ME}# znj$U$u%duKhk;gp@MX&P$wCieW>jbjxnD;(bFS{2e;`qZZLWK7iPn~Xq)D8ZB&ZQg zC_~%CXkCK;fddw?2csF@!kR*P9|r^c$*=qE-3BI zdyVf_nUPe#yUYl?56LEiMnL&=tBCFwE+x{|f=+xqU?z*O$mBrSj1&CfXi@p|1NLX! zca9`oovNx6u0V{?8@}8lagutyVnE|1QqROsKb4!$U(hlC4^T@72+<^Q%7YF70BL2Xl=v<*T9 z6-5MhQ4kkU5m8id2kSZaz1iPPCMo*;|9qXvd+(n6yXT&B?%CdaJpS*a4*@`f7)6+` z4-UHnE`NQW-~4LX=l2Cd`XK!cI2AyIt!=xsJ(|m-d52wF`giFAp>=J+0nMZN`(5Yg zUOk`@dAlAAYQy?Q--uuHx_#cJwrs%b)~`b-O@&p!hH&bn&Jh0Si=Gnlx{ zNeCq=4-uA64&%`iQOXcbN`8j0EUW4gZ`yP(?PVrHWwt2_%qFFz&O=xn*OS}3$G2N| zwd zq02oo5)Ntoq^NHFa+=*g2}x59XQM774IK72!I zh>xCJ_?YTiDy)Td%ykojEws~33ZG?(LGDE|vq|^3N8E&9>~2kUo7K79=o{1rEq_>W zZSk{t5ZbnBP0YcC&PZpIgx8ys@TRjB6*j^qmS78+N^S_`Ke8G{TuLpu(B&YMb5GQE z5_fwZ@AiCh8bL|I5{`+x)iB((+4;716j9;qnD*oxBvFxxX)=;aPFPCWHl{)+T)?91 zBG*-YQFB%gfOHTy<H+YyA3V#4|M^dJ4 z_61}@lF`LyNe#28G0vKF=KlrYrdrlj{*b|ZMW%g`1V^VGOipy~Dg+_Kk`Gg2G36B~ zw(H*Th=r=U-xP_qB!Xv-@h5_6C~3CkHb^sj{#Tkw-l__3fw!_+-iA;dJ?tBT18z6M z(&~g-k-U}LJG?IGbho%eJAZXn&Skk##)srP;+cZyDk7=REAnx#ab*BO!Ab*=_OL(%5tB?=c z;U@S{R$f+R9bJvEusVBMB5SwiNr`d@a3>iEer;ek36u78JISdn`Jvp_N9=G1e3a@h z!bMm#>DoN&F1Xu4v+jvj$C-&0_&7OmeZ(K4usF{OoT#?=g9Q2sxX%Ii!Y3(wW(QT^ zQ(5KQkg!sENzSEprhk%Nfd>*3lGI@-ug}@xv+#Ll_kIUm9VD@)#w9K$atoU+xzOdH z?aeutZj;sLeX`E&qr|K_ix#%g6JH?K0Xgh|Bj7@C=E8&m69@`j4fbfmvhHtH;Y;w4 z10IBjqpcKIAnXmfM|4-SZ=XK6mDH@jm#H4!+R@rWnLt|xB7f4*qwp0wJOW>(Bb?{} zNVkt6lq5L?L!sZW!`I<)PB3fITZpCb1dTW~ug^Oa_B!LmKe?Ta(-wN%_o(nBJjIQU zZNxvsI}`MZAfDcjVkaX@&%eFl<*AUJ&CS9 zOSjCzVP~4yGk@yW*Ikq@z?$?48#Rxon~FTz{Ey)$4tN@#q0K)_enRv6J;dG_Q*1S+R% z!f&T9wUtt8zbglXm#H#IJRl1EfzI5JkMq$r)oIdB1Anp*uL^&JKRMtP_%la8D~+Ty zGoFLj9CRT6Vy%?bD*VkjFn=eR{iB>Ner`?Kpu+2hbl)J#f0siZZ*NA_+qRJbb~16m zsUUKT&0>W80|011m%rxOQJ_tQL+}Mc!vabc*m;>=8bQz1NOEXdX32)I5bX})#6eEl z>Gy<#PL9`&Sww%D;JKrI`<#GpFJBOxipAu$@gxT(p$?VyP}Y9OMf# zNYIL9SWb)K41|J!9;8T}5GS*R8Jao^XEU>N=!(Pc0<1vTUY%?@mUkJ`tc>Xaw~d$M zJO|9dO5(IHqz!X4#8&d7eSMVP>jAef&`Cj)9;Bw7Gx~oheiDUO^E7*W1G^0}2hSrF zlkgB~C*N>XWRzO;g%j8dG9#yEOi$v|l)gbqTP52&qVKA*EvR4(oqRKm=_2C}8j&cv z(qOz2bID;^wdW1@= zO_>DJN1biQvv32#svK5MenCePX~K;Tn!btBqhUQ{IvkGYWCi8Xq)3*PZSEj>bli;R zIG`NQHMbrgQ}8@W=m>=TX?3erG{81&FT(S&gBE|2QcaZG!VD&rB&#JEh|;#ziCw&{ zZo-|MUcs&8S4~q3s(2we9NdQ6*$~QQxsNBa2{;1ZTgE~P$&w)G9PibLapO4>Q zEXql4i!!}8b$YHCrL#f7i*`4dLydjHZ%9?Bg*rPqn>{Klh9!KpkNi!1yFEM2c&y+R zDu&=z_DpZ3^3}4L7B!(omX?v)>9aO8i_U*tabMq1BK*lIZ*`O8R%KD2q?C{)GK-H_ z<0`(3W46F|t56L!EQM=Syb7=8XV=NvHOi((_XhQ#i(lwZ;>go}I6w>E(zMm@*8`o+ zYtt=iz2zcJJ?4x_`*c&}CJxLJ7JVLsxf!-8P5pfin1%08%t8}sNGC1Zds@0$w{(B? zb#CeE>D%1e(zdCuV{3bJOBd;+wSxvbHnjCMw{6*Yz7@%=mhGJzIySXzN_j4PL-99H z(@Uf#wTDPDeD+S<)Jdn^Bb$_QH96TUv&ifU<9S{9zm$$n#^qE0N5wn+9Tg|#ys>VN zWh*bm*{n=^vMTM#YRZqpUbEG(JiUM9PU0r5vHZ%ECYV9Q)f4u6^oFMYXPPp8<&(FM zf34#%7U}kJp#Nm7Phf0J!B44p8@!K;rq8H&yK(h^ig$2Gn}eTI@lK8bbMOGd`4$0x zdQS}BIp)Am;~@v`=UhSE8=&&NOZR&;{yox?&`_70nDtN4E%yug9q#_w_kaRIB~`v{A3Vj$xlR;PBCV=v(9Q!uIq zeR{CU>kCzlaN=EM!c>K*99v$9KhC%WDZGA?!Z^i~k*FG@3B6SrPW8fbTrXrMkoCgP z?f5hNg^G1p&(`@o1x24+Li5OuX67D3w*G>OzrtTT2>CY|STuH};BS8^iP0!XxU#Qg zQHlNzUoOIz@b{VaXv!_4#7~nVJU!z$+2Q(}G?L|2AT4kPo8a@YzE9Toa*Obt)?=Fhf+~iBuYd%!h#I`&Z!M*ekuMla`bx^ z)-7g=S!6h3c1eMlQz~YaLq7MiDl)RB2>#LYkT0NlJk~w09jbqrFHR{Em12R4Kfa@#8DHf`8|YDUDZW|`c3vQFMDwd+voY}; zRiLcuMJrLAR|>b5gM-CkAJ#)#0xh1PE`NENCJ!r>c8D#E*-0KTKH6oZHZA)GbmNtc zpt7!v0xQkY2dkoorBL*wv|6G+z~B@|Y;%ZiaUnvH*$aONN(p8CojD&V2jqiG#V7Dv zyv2*7?Vo0!&!cNzZvX5^+==;|wsNWHbKov<8QBfx;!7xk4wk*&=L-cx0p8??{s-?uEnu_17!^Ze*dcVWldQ%~`t+o3 zLlwKlKskRD2|BFyZuhWP3x)Y`**LvpXXf_m#?k3vZSl{4d?c7{8qKGB^I@sMQKuHr zMs#un6*f}+(4S5VEGw+67R`T%X3N3k$LS8H(ec-p^c2BO5 z0oWVk_VOrnKtk_>Q7h=TPY3#nWaxLmJFS19-<`XR-xGtrGFisgz_nH~zF}(6Nsu?f z`%K8?bjOozV{mgSV3`C|jd26elxM}b1#UGl8cmGiF}O1VAB({LWAN!z zuo($p#Yted(X-FM{ifSoX@V(Za3BI>sW3AWV4?>J`L_-xFZJehQJXq*XTnU8#K3@L?ezR*l1Mv!Iws%<`R}7^ZMZf+Z%x6hf;-?~T?CG;QD!M?3TGAGFLec1 zNhuls)dNQhfYVrt^y#9{$@KBr))b7v*Y<;F48B=kcNBgBK;ORyTK&}s{Iy*UZlS?t z^!Q&q$m|+}9ddA0g>4M;>uMvYM6iD-f+hQ5K}G&!P%;4vddIPJZT^19tH_^KSQo*W zba~ET<%yu&MbUAX1BwDdfd>_MMgBXY zzyf0A4QN6vtgI|AJx_uBe?Z=Gm}^a%UkH!WKl35h9w*UQ5*DNoDsZaQ**1TeMc=z< z+HNQW50t?O%mgp7=7UP|G7I5ya_0fK1VV5H>>*p+M@Do7d>-Bc6Yw^8jOZSxbNwV- z2~W|kz71Ey58z$W2D%7wA>4RgNx8fV>97tT#QR7 z7nlP-z@=DC)gx1oEbeQ+#xctnoO*6iPaOq-cmBA zi;m$XsYoA8Kq`+RU5b6C&y3I(+3q)B`@Hq@KO?2GT%Jmh;cgy%7SeyGW(l#;v(uQpBXHUfX)i5pEx=F1J#vr{7X zD*wf0N`CD<GwM>~J+G`EbHj?!wiMBCGw6p230^CK$dN(JOz;=VzwAIi0#76E)(8@fLHR!?YcC z0VS-{y830N663oyRC17r#^~x0k$-{C@IeV%YfO#pz65V0AB^(qcIlV->JBP^4GBJ7%KVtIJM+@+R#U?)$wj^#0*_VIH)f)`L*y_cx)r(`R7aOa~ zt2^;7u$g>(RPs?~OXLIZlo8*^Gm|gq}4 z;q-bSf?u9mQ64XAODp&X`6lE#b4O*AAl6ctjo_n{A|Au9rlN-ucq_w42os`GdPHKr z0KbYw9-CyMoH6U7px?*{YOq{xfXb_{;o~ODcENw}_%*r2-=@y?p2^sLeHv`<$-wqE zQ`!C|FTuS-bBS}K0fV&vy)jr7!5@4Q6x)8VLV%huY)L~(`fh?s$JR8T#4L{tg7T1tOOu&Co$L$#SS1fq9E#L6RLHIJXp<4w`A z{G_q7lg0{?##(sn+@qqM|6V{lkVG=FQeihCx_f7ct>a?*!!dI!1KS()rQl1O6;bjp z(umw|tt>{bA%ne^tm-;A9o|bR)b+3(ZlLn%M)(Nb-$!Ggg7?Qx1JQ|Iu|o#uLqdNf zNLvW@r2Kz8N%Mo_;-Z5&_`wQ(-D6t9DsysS?O}1rVWFjJJ@LR4rXLuG=obSfA2Xs+ zsrINC0XSgzOc9c+6p##53ThRUYN)h<3d#>vno>bI;vC8m?Np#w!hE`40H;#HVmAX{ zo(Rjog<=o=eS+rvl(4=9--Yi}LHU0}`sVxR;YD~!-oIpy|1)L$c+&Xu*np?;J$=i2 zF;`UZJ$=jhVv%sld#5?RMl{O%M)Urxl>3chlf2(#&OcwY$@@033yQFT@D~xrSwwd} z@%|$5cUDrD=f_ z!oK{(AH~PHGh<~ejYj4d{C%F8x7>Trx!ZgC_kV8u1;Bp%OJR>*Su$#QeXZ(0rq`-= z&Cx4-*MG9XK~c9><4_7uPaLmS_1dwi@#0zSoR&8=Ybk$p;jCVE3X{dvvSw=4g}lk_ z`l>%KvJ>;ZSfLnYvoKju$h6fGM~^}}D6rSvtFSXlYaDTfR5KlgT{jsR);W7w&(G=3 z8M|^=vnr;(nl0M)a=jWyLSZm^YaB_1UT?obQh#4_^qOJUj?tjPj@(eQW5hn0J{-Oh z;j9yyS=Sq$dLY*tgrU}{6w*YI)hydutXtV2y6mVzAr~E!p$HU7Y{T{hx^R1cFLtD` zy_>lelLvF+SO_@YHFJpYpz!#**(U!li2W3VFgk$*5-Iuc7@n_U$fnmN6p=H@z9mWT1ED?Jfe zXHsc*H-ZvoPpW8d$0`b1B>8a^g!}|O{%{I~G{1LsG{h_@cFKYcb~*f=p$+L2$?8}u_TUoId_y2$A8j@ ziQUXP>)BTO*%sHdY!V#vo?nks>xnda1;=J2iRYx}ice7T$u#1EXA51%mZLM#7dDwv zW!p4$H}Uhv%1YhQ7EC=~(w}KfvZj+y@@ybb{GMUStw%SRTkT9U%uhoTZVTjAPC-j! zi#R6495d|H<}$3UwT?NrgfjxhAb*&%DV#~8Pki08mL27*e@S;X7V}-X=p)ERH9ENJEN!ged>@|01)gf5hi+4G-;Ylx zxcxIc+{$+Ke72%5YIW1C-&C$;_vi4O5cqua?tNly6T$rgz9{lvYL;hXy?-;1wa2Yx z%YN3Hk;Yxp9SVLKUlGBt()l8&P|t0|7CLH+q^+fn8S!;|Lx6mffFnZfPMb+w!PNwt?k^O! zx4E7U&^@cHL(McU=-$^PE_#TaK}^ei=M;(?lHC6#5oy z+gWvL8ZXip{}1=T5VajHh411w3A}^fvU~lGC#Bg;BZ>F$b{Yx%o_`@eXjgRUCx)dT zsjn>PwRy=I{)#EubjAsdG93GpeI;Yb(wusY-zg8#F|DSp=*(l@j*_#MrPmIc+A4#j zkSN*pT3MelL^L(E?lw=3>-{Bh_pD{o_N=vN^UmhZ;9mCL807CZ-sSp{;`jzf2YB`? zzWax7-~n)I6u6ELUVr0M7yig+ueaMm`cRH1k-%`H1Ja@>R z*zk4Kq5=?ug;l=gH+@WTkfI)5=6yXyZs_9sj^TIlsgdjWEPwSq&;J+r|F!G*R=Dch zJsCKzYWb?;+gukTeO;VRaY7974jTgayHO#I;l&`}7hOHPg!+1Be8B19kq%HV2cV`K zP}4+qF%0T#sBd41N}m{B3POF!)pMlb+vm8Um+!3a+Bxd`!4W|`-XoaDW5auPXL>TR z5b&OvNshK)Cx3oO$X(cq9rzKyx-r09{V^`_5}m;<_z8aMmTR^_GTSa5^P%y0Ju0bV zcr8fsHCNBcMm#R~BnLUOV~uI^(yN(y0s%#x9~RJN8np= zE7Q-@){Vcp?_T^J(%f#ref%C^W60orxRXyA=dcHR-SJ+3eG-qj<464UY1X%lXZ-bI zll&7+@?#%sl7Fg6z5?AH>;C#OOm}Ru_a?ZyOoV%A58|IE|CA(?l1xz2 zc9rx@B~3y}g)8Z7O4^c=no?2_UVPk^@1B|N(c~U??x})*iX;CEP)i30(vBovNCyA_ zUYEfgRUMar@JfcMle;P(ez#uMh?0P_)0?U!}wmF)%>5-;wn%-ZpuXme%jhpZP-V7rlMu3y{ z`}M1k72(7~JZ2@77 z!h=_p>xz3_iLSXvmam3Z65WIG6=hx7Tz2<`qM>aCpoc>7xUv>XK3NY%DOUO6BWyXfHjCenyy7`KWNzd&&P7|+GMxKhc-UOV8mfACpcG4V=4Z>>}z-r}(z zb5*`AS+2k$CpxlV{&hNEIU(lqArr2|AZCP*a^8^late zd}8N4V`knWtPn|({j#v;la}R^nB%Da3IOkhNyWQk0=z!V1Kyy|4|p9Gub1Mjw*cOI zh$u>xlBu#X=ou@-1n}BHpB7<+Q}IstrDes%@P_2Zf2>@Q_hwgN&gAfTvWo&>QSX+l zWH*bP1bmvfytYb*SLVfBacIn33HFpbWhqe1n?xH~CcdIMiI;)zEZ%t3ZbvzE^Gun8BjwjUdo4|klDawDW zSMn+MHBo!;>({)+Pl7Le~{U`lLNanwpp0Ho59{vUoo{yn@0e< za98bi*^h-XFW5zDt^&M@Yy!N66Dr;c0(hMo-eSNTtR4h=+Z{6jES%r+-Kou8Yz<{E zo9ae5GTmgB$80A%V|c3&>zBQ=%y6v-Yc ze=oMpdn`O&ukrfiSiIl0X5-1qz!}jqXkS(=gR*zFg_A2>Yt5xy%aJ1I z#fI6gg#SdNu!7sx=gx@IFh{QSnLXa-(vHNy@Su$6+c^6accIDAy&Pz16#TdYm+`V0 z=x^CY@zS8zG!{DNyclzIOZ?FM6(8=tf4@Sk&pOqMZxo81C5_m0HgxVz-^eIW&ells zsY^IZF_*VD&zuh1Mdi{c7A6P!2Z8^#+kVUH#UYN|?lvnRe|I=k1A3Y2h)1SrSP;#f zW}CF-+p?l9G(+be{(#v5zha~*N{e_X+Z z+#t@M=yF~fs_0mrv8>#P&YT%r>UWlS18uQLQNfjFN4tOKTzPvArAI8dvh?hhzsq^i zHk-|HZtPPQytcU-hvezKmlK9u#cnSj-tt-3a%NjYUOqB5GJhtvw3t|{pKIL+4mVcH ziYN)9wZ6(vNS&=E84cs`V`_UI&v)-A)6SdgB_hw=e`|@&QOQ751O8ZY|HY?qn~6{TJFcL%!Rv z-oUQ8qO{^@5BvKY`Mkx}_ynx0Yvo-#E13gzGmHWr*ZIR-!e>}(|4-(?=dQF_| z*7dTZ98K%@jkFq%->QFh|agHGe12~qMY3i@%x?vY!W+Vudq5(WUY1Q@A)IP`tzL^ z#gm=O3m~VB!dFrFf9fKDuW!KI<$Gt#vpC`=C1(b~&b5ntz2bD2c82|6kD*bV3-gP` z^7iw4{!8WBDge1^Td7=Qvg9c7Oto7CzHoXJ^Zl?sN`^pBoTsxS=S17Sd7dJwk1jgT z$_3c->4oORjp&JvzKNpMzKx1()0{a#^YDEhEJ&UJE)3R`e?vU#3c2?CKandM`$pLM zC@37A?2ZPC3NCOy?*jKA*Mcv37wtAN(pW-FT-RV0;8WTFpL7A|-1|UladT;VsA77( zwyCs>NID*;PgYvUq)(QlS?`rHQJfiq^*Eek^^n=tL|^})kh|CsU#o%VbKWrTz+so8 z{rUi{ALeqre}rEsR(z)}4^jR~!7uIBAS4YkZ*HnpOwOwVEzZ9B*{;=4jp;(Hyo;2L z-4O;BI(C+ZtLofk9amhU2tLk{Rde-~W!z1|5I?pS+{EU!U$V`%uGuAV#x3`7wjmY1 z&?a`eFJTK?Z;p#9Jy(}djEckr8@AqPDs2e+ z^UE&*UAtT;28R?&6y^o1lvXY~=qk2>UsTjv*W8Y(@LEnmNlr!gW@uWHx6C5XuSkx7 ziQ`U-cb5tAmGQT?yj~@T>*;iijmWuB_cj%%fAONJY#mIz-M!O89bC*xlzD37W9U> zTL<+uJl+v!eqCC3ea_NYn``E{X|dWQ5MLwTO~$~ ze-`@lJxYnarAm?K2L#8Uy!db)x@Gf67AFuTI zl#^#Tju*#d%sn7Fwygc7`GROGX!7QSe;20L+avSs5QheD43|4ML!|>3ZRM>a*Ul7N z9ID9XdBHAP0I%87##6jmmZrjG>se_pwk za}GQ31*KN9$pw*qxjt&QNw*rxNcKs~e1>4xa<9euFJL>SHLoUYQ%NMJ{2sKh_^Z(aOF3Qa4olM#L2qeVk5XIkbmHg>{Yr> zaM0#d+v}#X`=QjGJmq(sD{H%I#0RmARpmF0aa~nY;`pgPd(lcDQc^cvW^q-!ATDj5 zlVoWrmk7KEn#1<04s zPC_42!NEGh5UYo_M5sqf_-Ee|fezGcU9{W-7h> z^@W_?iyJd%!odcIXROyv3i-rZw7h$n*1M2@OqI3;Sq^l^`YIdSH|APHO=en`b*v7U zZ>fCeS6&>N^<1ABcUIMUvz8U#YH^;WH9TZ)ypVIke%d8Eg8ppi?`;7|>Gf@8i)~O>1*OKdrkU=INWP^& z5$qcS!{sHk{tZ?XT!MZh9NH&GPW24LXULORBl%sm?pe>ye?Y&}-&A^f`C5zfLTCt= z2R#t)7TRJH9ah%UrC$wIb6}d25v<j47S0yh+sef?#bFBDDoljC z?0LbIZG{L;RL!qrCI}q@GF(yuB@(N;oMuKa6vf{yTk5i!D2HKfslp1^Z2zm|QWM z_qt8vyn;s-IzrcSoF&19ww<_nYw!M&INutDI-k{9f5L-wze29zm>jU46sH~hXG`nv zSRH7CdI|ieQ{+u1OU~Is>5{++#SMW=$j7~y^%X+IcQLpKuu5!)UGhA_&} ze>O%(HWL8ejgf2Lz`-5dX=QyUq;KC!ktkq`D(k-W*vd5(Wfs5zXQ5S$?$MB~#MbGy zDYyBT z9m-J)IHOKX_phe3p~F4Qih9slO6uN2NqMZutHSv}$vaVHb94O`M$L7Hi*kUuf4_T0 z6MD3}$(_yh(CMC6Al54f{gI88(P7WAwZq+Xp0c7|6rjqxKo3d|#Ru__={C74tY|=W z&%p!Fz;%aJM;STrti_7PREv!tcm~#-RG&>@#A~+PsoQTX!@G=rpHU0-N6Gumy8qAY zdW1w)bP-*mx}C*{#KIWO|5%DWe^P(D|3me6q?+c@0#(xzMumY(qu$}(K=0D|U|_I! zX?SYL7XY{A>gt15q@ZOAw*uKNI6N5`ANCGHB|73CSQ;G}pWHXaib5(dsJ%3B34ntm z<3?atRIms}=j+l>S84fh1osDu5U|7Bd!{xwL))Xiu7gLr=M0JTOlmW_e}6n(9^fX4 zm_{J7v~EQu=o%F`3d%N=7h;4K9fHw#LW!<~K;3mm+HebPQ?yVMl!c-@8~)e^R3_jn z=VRM!y$tVcEQg?^tEvkoGrNA~97vr4EYutg)ziQVlBK0^61^4epzD+kh+-wtP&|2> z9oOdphpWd(%$bhGlk{Dge~;p*{_z_M!1a3c28!#a zphDL4G9FTBHCd5?6ZRMcI(yjjW7JY_LT{#oe;OlkQ`wG(&Tq#yf7rS=V&5Nwx;hx$ z+(}F%pa$AFI{s!YMJV{vk`=uLy_HgW8(8*u$f1Bs_Yr7Z>W=3Wf#bj(LqCt9$0^r8 z2l@$vYP|84NQ9Mk$uI`&Mxtxondt#LIBrGnLhq)i-iuNG!P&5EuR~j~3ez+iwV7$S zcM_3xcOa6u5~51Je|$X1@tTm zxJDXF4|>!8^;p$Fz_So(MNgoQQo)|W$n%ORK|swE#Qv)|H}LG4{}#klD^~Og^fcAR zGq7;?yb+^+~7(T{=`V@MWl6VeM?;NyCfBZ&hdo7f#0}bEsI%X_7 zZ2c)fiiIL8dI7yiIruD8L5EE_k(AE}fCjYBQ#@awuY@rcXzc6_tw%N@35_+3y0oQXyhcSI2e7!TCX zu#z_7bmM^`abh%lprF>@Q9MRRbpXE={Vw`WHWJbAVPr~NiBMWMw!tGNV;DJ-f{*MZ zQY4=Sv0`ilf{6wWytN*-&NE=LqCY}^oQ(wZCm0nOe*;0Sz-Z{sN_msghn!aQ7b>Rz zg^?u@8`UTuxp_6DYyyewQgZ`E>^1m5c-z`Y{+uI7%=%%`Q8W*i8 zgH9TZ4k0$@v!Z`Q|3uOKvp!R;160Y3ygvy;Ymd}9N6K~tIxG4<`gh9A|G~%(0INGI ziNJbjeZ>aBC-*JP>~o9g$0}gYh{IPD$)hD*UhAXe*r6bShC<;oKIOfYXM>fVD8kICEy|` zR3q`;P&g8$yUJW${j3$2V21@4<5IX^3ngeqH(KVn99K}V6Tn2qy$=E313nr8jaqRf zY7~K;DrkWA?`m6dHCnb{8P`C*$QXK47qEcqU~Ow!n*xDbTPUL8*rc*X*F>;BXvGcK ze`Ue-xRL6giQi21-$AcV(SGruOa@}+;TDVIJLkRKo3&Y|*a5gijY%H%TL!pEcR#w1)ZwdG; z*hg7Uq>N$oaH_HnIRWZExY#mHoV>Lef9jq)+y>eNzp}nQ0U;SQaxcEmg3n=7SOf5F8KBX#(zpj1`W7pRHV>&VK+Iq!=8;{n_{e9-s@k znHp&b7IKDNP63Zt@F?|eVQJ|)T^bmb9kO2t%X?`l<ijhP91cu$X`ljKqIx4K=4a!Rt zc!}jB4nte|T|7%YY#XE6W75Sae-~nVVBhg-g~1+W(gu0BB30lKKIR*S0$n%3KBlMsWzgEN#2@tf4NfAQw@N2jg$ zr`6^EGmv)ZBP)I@J+UD8QCee05?A)~*L}E`AF(~gLHN*17d3^0l#hcg_q8IboIfYx zpT+N_6`fI#-PiL_o4nfs;O~KW2Q~>FJSRVyYWM@ssrBElTK@xJ{SW3Np4zvFS;zp} zel5b}Csf^kl%4T;*mn#2e{N;pr=jbl$}~V_)4X8s6hB9mY*SgeMhkBNe-aEaxPOr8 z=NCl$4E_|LhnP<{)sNcHhFN$QKWBki&x1aW02c5I81bQv&BU#gqxe*KfEwA11JYl_ zpRwQ<@n^w%mDSaxB=;SoyF0>RE+2*B$31xhuLqxu(~@Cz)w{l)f8@T~fHW(UXJ zSqT0T{xbE4uV6HH2%aCGdy8{(eJ9SolFgZk4 zo_-{HJGK8^kj`Wu^@@*v3sxgAcY8GrWl08v;Gn;ex}%l;m@Sdt6!Ew4Z-IwGjDxG+ zft3WSpTYQU?H#-nf6@-bV3$FyhTQBu2q&ln;u5CC-e;+J-oBNp3<$QV>UM4pW;8G+2qgZt4M6xkdj!r z!nU~u3|)We{_@KgyBUg)??flzM!KUnZz;(x>_Yfsr2`IDZJdTf(<=Qb5;l%<$%R(^(6e0uvE zf*=eg`L|>a(Z-k|{$0f1$IzEo9fP=le?W6`ESgY2!swc|0bs@di5|A#moaqM;!5&l zMn2*|6c`|we-MZQgagjELt8tM?GSD5W ztcAD;f2`{2W35xRg*Hm7^Syny{d+9>PMiJU8Jtrf{?s=QQl8K?O9CS4CFj|8RwSC3 zj7>!&D^ULL5o$hkukHW~R&s#^Er78fqf7ryZ#6Lm4pN_hCfcU$!a*1cM{YudO$`cJ zWE4g;2rslCqoqx-qClFOJ_004U4tQ931 z*xFInGo+B&{RhT+KF&Y5y?G#cYevsPm074d3)N(y`hEZEf%;q^Ks)P-62C(GO1hPh zf4t5=uv;3mk{H>f%x|&fxaWxCQu4a$;2x`iCnm@aMFTC6IYbo@x00J=)q;2eZcusj z9vw#QKib~hGyt|2imEkV#@J$MZWd~olCoo4;`dnQ0NTi>LiShaHzy2Z)Y1%osV z{sj3+3$7=x**nls_d-+lK>_Bq356dUF1E6thO4Cwy_5ASTFcyl!1m+VE>u_p>H)Fk`dTZ1j`E_f2QmE zBe3e6>}6`B2m?O;QSz~DjL4I86YG%t#vnhQjRf-Z`ydaTd#aF6XCsk((n@ZVJ5-gw zpf@$C{Qz`ak%T~=h4nTy9Gpz{HV1$pggr-|7s)R9w3WPyyqe;C(MsN=UVX+&-b@~$ zSD%ALVCYYK|E>)Ayp=pg9;dKhe@qFU8T~-jFxIC~KpA4!hnDG(w$^9x&L3@)V1oEqp0hVL2L_D!g3+%W4KR979KzsOc z1Nk-b>lX4&@*7a9ehZqL^>i_;4H+5oeVn#pk!VQmuQebWR52^pz?Ry*H5dio_OC1PI6Wb? zOvHA!S3>6_^qFH^)%tWK9syu)G#aBN5PNSk&$p*?l`191YLQ@c9cTul;TYr@HUjJ; z4Oreb`Q#@N1Sl~yX@Wx_tk0lHKz~)Bx8H(bEg~ zy$V>HP%}V$2kz_$v%mTgoaCZV=4?1fIcwZ{uIRNx# z0Q9E=_M!md7+?*IP|z#@Y}iFX3W>?@!M9Z%M}4SYpL?GCK0S29e=wK_Xa+KfIJ76? za0U@a(?uN1!1+Wv=aU%#r_%v1qDz{HePC!4{LZE#x*D5y(Ogo>2K5oMH)2=J((H=b zn6N8qT~0$j!*n2-U`ieU=K)wA08o9*qXms-51^$-lNOccF1nl~d5`);Cuz}1T2zu6 zp+!c>#_b~{(ihzgf0e%al&17h27t9afGZgQuI>SpplinN5j*G}8)#G4`}&@HY%or@ z(6%9+#GZTXpz8*7N_Wxy2kG3T3rnMOV~@^FM(1`0FMA->C++~?gXmSp^nUUny@yih zy?T${LyX>Q(8Gpuy>3sg*P}NW0=#h#;7#bwh8+J)D#woif8bltTQ$HmOT7Ic$B&|S zz%-51M;WJ&p~nsByfc-~&jR4P(7TQ4yzd~L_n`MD>AZ*0`2hN$vBP{M({z>ehxVg+ z0)5mN&BqU-c@q7+j^<-~Xr5$fK7pP#M)M1Yqxs~1G@nAx8l!pMNT^TiXm_OUK8+_Le+vq`=yORtMd}0ei|8fIMLq-8#0-;2U^ov3@|Z(>-q=uI%*50_X1;{J zY%J3+ADsRf^eehdU)e*Wa`9F4HDfftdN`V|r=$6%F`C~nLh}wC&9Ci8^A_|iW1aj~ zCT>!uWAxkTceLqUFrC`L+~9g1{XU&c$RE&qHaRcFe^O@j2Q)3Rt8cSXKtuU$Kq;Z` zqCYf3`KO;eCd%)jKTD$g9z*%(#wh>t$3O{fpcbawFqKZ`8=gmhXDqj>KwiTrp}$A} zU@-Y#jyL&V(Z3l?{*U8K#^?v=Wla+)ldxd+hPhoR95-B5+b1+tI zh$Jf=e@XtKNNV)#m5RiYj>Mi3Nhgfe>y=n45^Fk=0t1B-`kswC851a5Xg%~=?s;q< zY}mzxySVIeRHt5@d6sI z{oo$g3-~-jpT>g(F+dm_-o;}Sg5J`4gd^WYe>5JFAE46$&TVGWG(f3@kOO2WMY*U9 zzRS^RsNv5+6(58GYX$7P4Vrxj)#_DVDJsR|cmfm_)UG&~{}7(UQ%oPP-E%Pd&Yq^s z4Q;7afHE)klyUDx`3=wE8PnyShO%ezMUbM*w3_4+l>7taz>LKr#52M?v;-EYB_wDF ze;mlIuTCD7;7J&#q$_ma{w|)?oMBrd-9mK_dI}-5i^Ej2aC2?%hH7w2(;!uzYZu3p z5h0%$vlZFEM@rGX;3a{S=+L4^hZa1C6MA&Ob2KdC9eiEWLYEd*^C&AX;0G!3p8(^g zdsknIcjf8Y{7JnEJO@HEFKl=QzaDVCe-S>9z~?Qy_-*O9E~MZp&~d#Tze7{cAnV=` zDgj*Y0;%771ioO3;3c}?CHOJ$16}aPnBea-6x{s+{%|J2`wa#Eh%WdhFiXAR1jtQS z)yIY?r^A%hE>lCJtI1(9V0nOHJQoC*d2Qxqwh;}l?01Y~u z4fu=r8#NNJWT`Gf4)1<(=Xz`oGE`E|J`%=pFW3@dDip;(3s6;N=agqkX@&M z+i9p&E<(vOnX)8;y4HfMMaOh~2RxPU`@hbyx3V`S*?X_Z%q}CL2-%~|6o-n2M9W>a zN=7A>O3FINXb6!|gm%g(Dh>Ky&v|^#N8kVF=k>Z?kN5k&uIs+;`P}#YJm;K>%X)2p zj{LC*5T4r@Z!Vt1_~$?<+ODu|Z_W>jwQ3UmnOg7T4Ce+b*B;YMHRLt2HC`pLO;s*2 z)usIE>3sjQ^=tE=CDa=)Nbh(=axyis&s9rItuf14B}U(nsG4|mC{*zei+|zr>F*?K zCE2Dwa{)iUCRu+}S5`K@e{#bE(Vd*Sc}!`F#m+SctBPf2^)-vmp0xjNkf)-^vKZEg8aw7bsF$Dhb^JK86Sg>eJB*YVIiYoD;_~Z6Pw)&| z#fUt=Kj52mG{R54s=qq(nU}O-Ea{%z*{=NVR~_C7W|{pJtwLNINbdzNnN$}FhYFub zJDq+e{q+8Tt`oM7A3r|WJ10@RyP73geYUcoPBzvo$c}OO?^T{E8i~E=+Lj!jdPRu~ zS(jY)WqUMTH*?c6tO-B6e^>uI9yPbj2SQh(+g{1qtSNvu^?OxcJf7_<`EXIrp0rhc zPvzLgNLly7nEm5_5gO))4)(pi8JL~r|KO9f1=~4Lf zGBBCNLq&h?N^yQxv7n2@>xK5m!e3Q?4v~ff+=}uBXLt^rF`7EpX;rklj{fWIroua7 zgxy`X9|KKO$}-Sa5Gg+=efrv+p;}{Mw~-1DRz$EuQ4eX6hSW_C+%E`w69rw9gj3 z`!<@eOLZT}B)a`Pe{v`-S@h~fCZDiKwv$5)+TwIoVzYZZR_^go*nc>snkE1B7-OBp zRofSIJcoX}BueZNX0A!iDoo|;DKxvAa`#v`8y!jf3-@gEY}uO9=w&atOvAqku3T8X z?&a@eEx{)qbF}PEnH!WiHJ5jPC1cAY;T>O!Eq|Bw9vWeyzq@vbsb&7xq0o>KD?`@_ z{T)AbRCBNAo9_-}c^!V|wb=OT&d#HQ0?WS4za}#Bnw)mn z5iHS~b^Udz^KadYSqp{iAvc~sA6UKItctP!`oK{4oMLB4P$Ivlu;_)rt2f5Z+uxZp?CPg3YTEI|Q=jD>ZI@TD%Y{~JAwAWq15Q&?4C8oXWf&aFQ z-QJ*J_@#uMPrSA*c<4g#%S%raGB~Q<-7hPYQaK-bPW@|`IT!o3^rp3cK6NtBs0jN+ z3?JCl^}UsyEouatG15?!whO({$PcPFY3y`O_lK_MJSoGm&d#e5SJIU2Jfd=ePIAM$8ABCc=-i=~mKJF$8%tE@)L!Cq}oGF3A#oo2MR8>Z{6J`ik9d2-}5<8Hg_>K7EadwCCi zINYqc)pvYMG0Zoyvq_uOKJZpVp>;4q^11Z(=cSh}x7H~7+RJ}r^w4RqQ+sNEHB-=S z>$MXr;<72RyH4$C z!FA!&Vwb8{nBDYl(=Hx-D*yZ}dDiLZ#Gqf|%LDg|_C`h-n*I^MzJ;7s@bg7=MI}1A zH{naZuC40;g@v?A*)PmDI=bGIWzS0YU4II{cRz5BD;Qq&Fn#DF_f*6|8Hv1DQ9|zH zBZhT%HO>intoPK{H$1M@!z_05_05wv*G}=X&hF2-S#z>5Gz}&C8gO5 zI;DH29=)##yV5&y#pcrEyFXt1xsxSiZ~SfWoiRNf+iM%bciu0g?G?tJLH$Eq%S@{J zCoULGEHfJ|&CK@|y74Kj)=B9}=5{HSoJ-`8xO3T|iKBw48uc7m8XE}xJL3YL)`a)U zcRYQc78aVM?Gp5QymWJKT#!gF?{@#kL|GQQkp~f6`O;Al?DVPaTrW%>3=nVeB#dSo ziPsjuM+q|N#RpZjGf5r~%X6=nj$iOr?r39sbhcotTIH^b-KUQZ#@%+EY2r=&#kKlt zlLtXoERj$+7h;{k(n~*?IWbibKxo)g;#U5atX0<8p5VWH^{BJN5JUX#&(CED@0g5q!o%aUlP>ou zawjCb?HP+;7hfN9dS%iyN!9B-+0bG1F|k-xMCs1>oqbYO$`s&VwljOu(n>u)E zxu3rqS9eWrW}B%#xMQ5VV_mhfSNZi%J z@rO6w$?r>e#&#veeH)){6X&7hX-=jDE;0Xv^{tY-RHC@0qheP-?Sc=(%`q)&S)cj# zi%bDyrY_4e=3k?R@No|t>8QINioWlQKCWDy5xYAhVs>o@ll!Qea1aaO`-FW@iR8n^ z({p->ZG~|OPmXvA2|P|_O|2N1mez3ZVUrI!t#|KCQ|r3Yb9XjWYahDPGt95$8R?o= z%DSa2aQ(&HmKCpmu;;FfqhnY>8l9=1-Zjneet6xDZ%qP6gL60cmB$B#Tc!{0h`r<3 zH20=Hn;6rQLvnnX>RoGKmpS9sCVWxrX*?TLTqEZ`zM4d=QDa(=$ z2{Z_9F=*Qya{a}F*sr^XbwfFvRLfPqlTovK@d-xIT_v~Qi+xL6D z%3YoY*1mz~Kl5VG$-d|>&S-`%U+u1gr#mOPdpPnD2~BA53mzP?Q| zj2;+Lv!wIda#<_;14qKts^5a2e7r=DyiAq&-fZOH`21^gY*}D^QIq%l=ZJE5v7+1N zf%OJ;aN79x)1Hcuv$H0t{FxITf&7261qu&vonR|^n~{Ht0FQTX$I z4Y|?~JL9?0+?q2So(sw~E-2we&1{&(Ctl4Ysaw(&I|kogpJ|S9;@J6k)J(QRh4X5b zN1{SKzlY1y!=ANqMzYolY$E;i%}2uCnjh+t&if&m#_~pC+e*=s9mOGSFD)*&p5Jt0 zvk)mTRK6gDN&QIp{&()B9uCI_#2?vply3AawcmJ<@u97!*<*<}u}Q8xv(=SKhgk*K z(~o8TF#qt=ZJk)ds>`3ZZ+CtCC0{vcr_)uxH3h3?`(2h<*ybQjsWn30H$UAyov||@ z)K%qUWhcWr-{|WxVuN94LP#DP5;TrE-C#KLDvX6xV$rM@@1v!rM1R9r(I~K*MJ-tF ztQ&i}kRs(%m5sjRjmP~i_K#hZYnN+(v_8I3&q%`A+~RnyX{yfiqeZj(PYH-_mD#(p zVf@JVQ`%*}&NOB}(nTeW-0O>PcHOWyWo6ZFRQhl=!rWExPR`N(89DFs-Pb%UczWe; z9hckgzI>9TRweHlr?@X{L+a({?mVkkvtQBp6ST}o3Vu0`G_dO` z&l?7{LSCf#sK-K>zhtlGLjf6^r_VlX`LA$t@$P*xos(%x$~dF-&WrQr1pT$ctlN*- zZhl&)Y#C$W%X3dA?OWYhHch)ao&oQT?l(WJ*~j_*Vx{uS!s2^`ME>x)(k}t4Io3zY z9l0EKrQ3Rg^U(R_N75gKpI5k;58r=5uTT=2jM_HG25%#3^0fGB9uI5R^ncZVL#wgS zGFVSf@}X2`jx%{b$w&Ld;i}^O7WN7mQtaP2j?^);ZBUSUuuSIotjay9R=4bA*MZ&k zd^f{P`MxF`|GBzWc+&Ea(~}eA9QlaBF@KM($6_sbbq7bU6c^}KG-~JXO*C;&{DHFd2GE>{hcbI3&uluf^XnMrD)12g!+WS7w z+rFOrSzf*E#3-+6&W~+Z(jP~^Z8%@m{`lMHhAGvv=7WdCNzN9h2Xc!p-#-**662z_ z_t;af_;23_Rz19?_{~ZEMOou~#N! zVsx`f?PYq7pb|0XS>1i5aqenR%pa8)EXIFkb?*9b zyVNcHrm27QNoSQKI{bXCMh`jOrL z77&!oA;XiCjtZ?FI*A*SE+^hHXSuYz)o#;l*^MpTIv;Z1ip$(dH61a3bjqPlgwV=N za>##b85i-m=t7v{NxPj7UzDs1j~9-;dA*+Jlw*mtYiZDVekD=+x4SmB`#W7Cykj)E zruRf;(wmUR{*i67z}_s&ieD$>cCcAYzmwmlGWSNwz-+jPE5rI?JXw)G;{K%65#0tQ zj`05U8giah$7NCB{?SCaOKN=C9DQenud0`lS`*@wojVSDsYxh*+j%H_#qdfAgkur*-33)Y;}Z)0DG>jrUu| z*4WIEJ|F)$xhv+@Wlpo8?Z+&=j@21atZo+vw^x*`xie{8@+m8Q!%u?nRloB&`k^y+ zy~(rEdHaa9263ZWtq)u;J<5L*B*6OJ_r~-F*)EGOd(@mMO_p^Qv!6GNxX<2hGX5s& zXUCHyQzOGLL&^HlLk`_D;&@ozr^WfHuBYbfWuzX`q{q=Izrg5|GFsee*VW0@Tpwb? zb_bl7P_K1qP2a$OD_XJm;^4Jk-K!32g~_OKAK97ZT6NZaTY$XOQw8Cny-y0*9^Br= zke7O`;N5xcPLAidS+ys6*1DF2hi`3+@s08%$Rcyu;X|tvI;NZDrNZXU4SC(M%uFl2 z_AajE&!u8gvpC27;g`#Gp7J*AwzZHDD4EajaIw>v;kcV##V5jk^JQn;e0qWYbk5DC%OP1w_!pA-KJNzlvhQ^J4uPwOx zk~2HHN7`*DMPYtn<=K@lqi%agi&vJ{#O$o!SdxGA%j9>`ja?7UewUP~=L%c?>rqt5 zmG>0s-so|WK%0RzuZ}3jbuZ{{IRE|ON@e#^VyT6c$wo(XSY7wbhyAq>G0qwdd~GX6)KJ7L-s#@-18y(sG*1OUSGIb z@ELj4sGbtJt(U2ta?0*j=+5m!U&o%6b9n?>XxG0L{_w^w^3DkjxA>FX57?Z=%X;%` zpLnt{34H5ab!^M4e6^Nf`jxqwyV2*|b1Y`(*1SI;{dJ$bL4Ct>k}0J*RQaOkC!NW8 zjsh3?4E{QahpYMye%-UbxaL~rJ#7W#(A69h>)r6KS?%(v8k_Fix8G*2JxNO5{#8LO zKrO1%qUY{y-KGsY2wrL@sv^G`x0h_*IKqB}GeGXpC4XO0-i(_&6s3hD85zx^qq9zU zugmqbJZfZQ(ZtJsqttwaWW6u!JK3O=Z#R3ms>Q|+S^IWh{J44BbL%&rRq4Y$n>!xK zhMc)=QC3r@x%X5?x_lK^x4b^T0DGq8>E5H~IbQ5$&9Bif&dhOirreObqxR7=Waq=9 z@vS~#XCkws6C3wZZVT%k+vL@3?bWn{qII~GKFD0(sA9P9X1j7kPhe;wDeY-Z)bBMM zw@=svl=Fw(sV=d&9o6*UK-z3#`(?kS`b|0=!)wb=A`Ce}0 z`@&_D`1waiX6|&v{pKqhm1W7VJlVIs-bIULNH02g^qpp4>>!gwTG835O}{l$?|-fH z9y?+=Hcm*r6ZmcU*2MIg<}Pv<$(}qjJ!4!eFnO+V>-=7>!hKvlBUh4-H5si`S;;Yf z@awfn1&#ytXEaSFjm|F|9aOt=*M9e?JB#Acq86@tiiOqZgke5(Kzzv5(JL(Tm?^5Yg8s%^wn2 z5L`IfU`R>c@;iDwbw^|Qq(|=FMss%u5!X9)FDf0ferm2wDbkzntMvSGoohkZ*p%T{ zo`&pLWZCG7cDhmec}aTl7c*5p9p(NrmUp`~pJs|qP9=;=Fz0JudfOzNs>4~C&?Iu` z;qF(v8#C`aT&_0!cI&;7NCM^BlMN?G=`AMBCXQqia%1t%qSaAV-}SQwDz9zbPyEF6 zie!-SbHO0hkMCT1L&4xW%{C+BImfvx&qtG{M+8d;-R?gyaIQ0&ktY9X(z(i*JZ;>8 z{t$}_TB3e!l^EjU^6{2@-(qvKH%TUTtd;rQzOCt7n+2t0nY{#)x9%vf=_uKi^_%qN zWv}AJt)F(+X?{EuzueHjhl%U>#uKWJdrm}UCg0sV$4p{T7pADbPmQ zv6D2Fb~9-`_wwd*r{jAMZY)Ra7i+wu*54y(rpmVQvfQve6@RZSV9Qka@k!el&fxMc z^12Jb8=l2oe|)L;Wb(s5>x_hnyQ6kUtE|j&IBs>X zdFE#Iir= zm-0Rmo8Gt_VdK%-{>(aOIZd{&jLV8#EUdodJPzva&y#h%(9Y@DkCH=Y(zp%luJvjZb z@7HZs>=A~R??uQ7hQuwW)2*V~6$`yvjAo0T8#9wudC?iKEng zz6AD_C?Y|??wZor!w&;iaX#PXLPz#|Dj5AEN#A1-)u*QjKioHwGOc(?_s{Tt=F;Th zyh!q=Q&|ln4qJY_KM*guljtFOARvLyOnl|C-*?51CNbt1sq%bTyJzqH9VV4rYrc8B zP7)ATX$mKmpBLbpDIsi8Kj5BZ_f*xq;+U7;UD5u|@2doMr1j)~v`HHOa=kinpUvYp z$?W&eEE{IJ+Lh_!*o_KA!@h9$Y`l1P_{Ia4^groh-SJY_iB}5s=M4ov_!(4JUC5eR z>tSCskeZuoe4D7GH8GePu9XzR)Zk+8IM(y=b4uveOeT`oZ$`s}_)(>V(?h9|t(0(s zX->nrxY6CyQNK9vdL}J*zTY{Dv-4gh=`CZ@(t$oUZv*`+BxP`PgT!ckw#cMp$J}+va$q1i^(_&bw>R&3v-T zA00|78cfR?-k-JcFi%F((A5D&MRw1yxO>~a7kj0gi4&%L=KOt!?fQhFxC)s_Jg#hT z{H*!+Z>vO~yy)#+KoP2)zk>cWZJFR_f6FI+5MwB@w4>U^tGe#P$xxZXW`xb zXVwgBJla2~v!=Hz zA}&1Y-L4j!`eN!xYJv~%Syg7!NqCp0h49N^k}|Gt`X^A>z0tVy`s22<0`dEq*vs&?&lYI>cc#d)p4oAcYm9t zLiGNd%>3{6zg;6`>r&OV3_H?p>ooLF;isd!f}DeD#8A{eQ#Q0k$(jYhsW#VvY<)`* zD-dfC8<6!NwzsnN?TV{Nu^XL3Mby}nxn7$bG)&L-e0J?|fJj(1*=OI?Qw<7wZ??tV zI<5;cbIg~=b_p2%;{BcZku(sLKfYag zAmQXo6ON5d+T=E-Ccz}1$`ZD=>cJJ$SI_AZHDm`)?~@Fjl0N4*;CJU7Nf$}?t`BWJ z=V#ayc>4T>TPNNmJUMltr-weg&gH_@f|yjB!)~FGm*YJ?tQzZ!Va@V9?q<4y%ez=G zGhY6|YFC~@7V|XTUD|gUc*Skaj-R~HGd8p7u7%rAVX;rrGFRPLD=!^*y7D1m)Z#=) zqvwr^gX~wiWv<9yc()KGyIu3>2x-LIFL|axtX$zot>vEc6c2mOHm&}0Qn!|7R8fq> z{IxcrJJ)4ii8ifU7NKlA|EAir=;!87#&2F+mzrnWbWMTvvy$A_bxp6b#miSd5z(l* zkTcTpOMEXEdiAaN%d$$=4o2%k&O_hCv^VT#^fxeO6)5-_+>&fa3H9Ns{eGddg2Zi5 zBk+hRR^`XD-B!sbl;d-VWq0UAj4EoAFLvjtnCvJNW_8lOSn^^j?B+q2>6i`1d@DoiR{W5&I^f_VnJGwtGb}jX$!D@E^3fx$4bpb^;yU z!4u04i=pas4$DzfErt0&{6{+wdk_Z@M-V3vXOImb8$nz^TtVDG+(9;hcz|pM@dWV# z@dnufvK7P!#1~{6h#!bQNC3!okU)?ikYJDykWi2?kZ_O)kVudykR2d9L83uoKw?4S zK;l6XKz4y7g6sy_1Cj)i3_=1)0Z9ef3$hPnKS&x#I>-T#gCK`M4ufQX90AD$ISP^m zk_~bUAh{rUAo(B#AcY`BAjKdhAZJ0&ft&{^1-SrH22u`E z0a6Ka5#$ocWsoY6Dv4H2y2qN5vEr=t_4Tl&|6nj6R}VtxCpZ&a|*(ea7X(Mc^$ zrz1BjqtRw%X{6Ff<`$KCCu9GMnT}3cjE+v^FTJ{l$g`2GB<5c)|8x^Q9o-BY9i7Bq z8VgU9QN~kc_${S%6mHRukE+_Wppz;2zn;zwqR-$-G->V2aU*Uzx&>i~>n~5|-yr=a zvMFKJHtQ9_9j#<-f9%B?xc7+N9I`WXLM%Y_MW7tq=I8;6Z)FR>6MU3_(XkWpus%Z7qR(|vVOSy6# zV^*VxM`RYnZ$%bBijRP1ucgs?gx~cz=z2spA#5Yl04L%<1bt?6Cm49&!|D7^vJoNc zJ_dwPn>BP!)-Fgce}$U5$b6{y4HRwA4qDj_qbct(S_EZwLF{}J7_cRt`=Nr={-_9} zHQi)2qWwG-NuoX7&~N6LRZ)Y8su*g+(w+%X(Mlxt7;2+b9`W>$#gN=gtDtCR@23L{ zjC6Fv>~wTCe~qnUN|>4%8hT6?5_CY)%tLQ9WdS!Ulbe z(LmDRNt$CXc=mkxtla|w_{ss_VER`8%$7@ZA7Q#`#exp3 zFzE>M{IBka9ZgpP?MiIs5&52{NP>V*!OZfv+dx;EsvydAS7k!?gIl>plguc(jxg~Z zh8f2BuQ>cYF#~m^+DBFso#@tj9}j+sP!WIoRS&?`uJn;rMeiiT90-%2I4d39>c70n zhGJ?`Nc1ULKr}*=Ls${K=|Yr$s~JV%YEhWl7F{EvHnH0F{+z_KP#GX=h}v>Jb>k+|(W%3C;{APJ5zEEY1QBPxDkI7t zfIP~wA0&;|)6qpU5&q}a5nq7m3ZRhzn9Pcy+6T$@1b%PqDuyI|)OgXIVHm0}ZhavwQ{3yjDspn*Of(OiS z&tZTUKL=O#DM)RItcVt#gP}tj2D}K@pa!r&E)Bu(Ry=`&yT{Zxk>D`cc;(^Du5)T) z=-ng~BX1b|M;6oQmFN&(3pZkV0rc$(l==duq>%-R01CjE-wh zr@KdCI^EDu1N_Kt3`+6i1(nHp36oIu7?j@T)jxy_X_j>9S2#j$mE6_s8~Rq5plkOUXy2Z>@^>Z%@fdr{~jvQdYCTs8fSG@s4k2ye}GUJGH_{LwOO^Pmt}2%^LrrH^l3?>U4WZP*h$A*j=Ax;U=41xX$)@3D?dX>&_SqaTR+2+qbiuDD1dkEaZKk+1dV1!%3q)p&_!X4 z3_A1$R;^AkG{B7#;S*jAM*mF4=*?IMfvW^!n}zvd?;#xc z&XP5kT}7s|VQUx6oppI6f7DJfDMJD z2JAlmYQ^y`%s?Cw=AgIf{D3HmrZ7eTh5R5J65f14Vao%wW^Zh4u*6^?;OlgKD7jo(cd%s^`&mKujW4>4fiz} z(f4_X#qB!A2w?#BA`1{fZym<0K-D9fEGT;cbTaB`3_tpaF)2+rqxy&JK(J_ElAQ5Y zlk3zTn33=O0bis?v?MOn@JW*!87-r5pIS|UF4O&Y66>i5iY@^?`5zXI&fpGD&4AJQ z0a`K(8vd@i9P=knSTnqYPFqHi5ls+TRu=-JI5qKqw~PX>Xu8bEk)Xwh>Mf!2zb~T* z6FWJzkg2kkINr0(2te%?p;7`UjzCc*yp}*e2o!PDMxdw>ETl2uKy;DOLY&rGf@s8C ziwRBNfI+c~2&Q>!sJu85uYwF(fFiJIqERAc1L3DWN~VX~wJkmPi8aQ66;Xe^7P=g) zC5QKhWelKiVUNTZC=P^O8&Eg{#h&nE8){?(yIuy09${Mm282-40WA*H*3}N~7{Nv> z2&YpRDMkd@WDIx^oYS$Z7#c0r;zp5&V9Dan1iIOWF&`-ZkJL;{^obCs?@)}K;Aw>mii9gFiq>XAdOx7HHe&QA zSBzdyaE?HZTogXk%?Vwib|(gekti2bk7XPN))PvSagAy&=+o~~X@Chaa)Zsv!$_B# zVor!DK*?|=ik#O*M=9EZXqcNKPpmA{MkDvM`H>_KMU5C%K}Dh{iU-n^u4$vs{n~se zc2}DqdcZ>wA|}^TDG}s34^_;w90Fx(L`usk_QX5Q+DLg!8+LnZVKyy?B;t`aZS?1j zwkXOw0MuuUy532p_)tGL+&J`B0JW|M0-6D>K;bq4bO@tFo=_=iyqX3u>cb0dJ|CO6R4lBf7oQMjgBqGa|#dHsax`;P@{qHs7$Yb&(Mf z0e&&jC`+2MQo*mpwU-I7<67}w9$3Kxoa039{Ko-H_j2Aw*gU<3#iP|< z4vq-^hXWZlmq;53V5ehLOfcep+9IrQ{+QM?aadpchEw>zJv2%EA08ZIW0rbgTz24$ z8&ty}c=_AIMuq?Kz~U0Q=mD81l0_Am&J=||fK^U1Y_Hb*RR(d@|FGvnv(glPg&#q- zy$``E7phM0FDqls|FYs-ta;yUVF6B&a1y55CZy1IA!n@&>9r^ zLC1tCk_vBye%FgZz!lr*=w$yg{$>0h#=OXOC3I#jJ{S$*fykMUVns*~#jgCQnvbH& zHnW>%g{Isnl8B8Tx-WmS4*F=MBZqbww)4mlo1Jbzp|?Ym3;mU4*-@IY3Kk^do@f`- z3fH$zXoBPLO6X&M?<>w7|63pWWN>7}D)ZoIKXmLnSwc%*PVBBdw5lm=@@4+Y>ei|M z+jPr2vbfq+m;D;7U>XP=Lh>(D_uT(9Mcr}~G0ip7LOM>+7KTT;ecez3OYJ4T=IA8+W%M~wN))5$QPQC(AJ0~1t`2I%Rz?;**$_AQaMH| zx8d{vKgE*J-HrisB56bi`9|x&ywUIE>Vge@ka2!h#3Wof@aB% zrBt0LMVe;3MKmu4`P@3Z zh#bW!hD2iaBI**?<-l*W&Enue_tYXkD~{DeE*0@1RXJTo^q~iu!(9Tj_{(%rhnDV2 ze7#f#6#MxKTHULlEH+s1i~~)Ou1DQcu!O;GB*;z@n9*jOVf_tE6~^?mVT=>XlZJAr zNdaT?2xlC;bn%ltRD;o9doVhc!1@e#F&U&QiE_Q5b*@Q6veGCwO49H-U zkt$*84@z1|StYi0)4`kfR>DTpi;hlUNsp$Z+by7n)Gp}466Gr_YTmAdLLM~GLkUxU+PsuUh1YD5u5)3@}P(69XgldgT{X| z9B82cOsF;V0W;}XyF}qim!2w$H-aJMrvYif=6|QLqaj6@UK+8q3zm3Vls1JPtsT+h z$kBxTQn}6luqeAvPYhidfU=*_gu>O^{igzx7L?4->F=}^c*$b5AiJ9zmZXVkQ#erZ znBGd%&<}fr514|j+usUC1kxrN<4xf3q5&Aqs!$3R9k9~dg3)kJszXsmK{^nGfiI2O zN^tR~0cGT(3&}HqG=>Mg`1VijQ*^=E`Vc&AdO?pK)&JJxz}{6rA4PrLdvw zwXkWk{PizoK)6bWcGy9zil!880_$=dB$`r82qP$6Qdv8F4ev(IQAkV?Y84t%GR39>)Qvo&hs@V+GkATnA;5ucXmJXlNbe&|ZZz zRbB=>NY@-nC)vJ)$uo!f^}!<=BY?awq;Jp|)pfiq3(p=P_R za4*~Lh)2>p$L!cm(VG;P!Ac-e=`h7T?3BjzS}~WYc|o+_>i$31jXP*V?^-h z6xZxPv1%KQhQkm6uxGLd`bGdwXU{?q)PJmw=tYlbc7PVdV_;JM;K}G!@6bb8YA@B z8CK5Hsz#`J1FZKHH^A`QWwnTsHo%JejXf3F6Yj(z?u`^XBJr3JN@Xw-L5UkFMntyL z;A6GXYBahL4p`3RQjsK5a)IUfMDZd@ccJJLTh1?{N)00}`~aWe3Q;s(T;xq$DZ0et zSN=szh-7TUh(fnQz_&n^aOx&fb%R=+cZEjVQHO!eM4x7=g#^0f2J7zD7HV|D=m&=8 zW{pt8J|ih)?+(#Lvl(MZ7`Y`uTUNS5=3U&zD7yvMbudfxx=7@ zBkV1Zd#EavS3>r#KuK=}YON-fT1{(Qd19EsTJ-sm$x3u*EA&4F6DpEJp|fyLS>ppX z-j-`oi4SEB3ikm8!}V0OiRkA{btR63eIY(pS8D7+XgeT+{2}DD4fc;*f@_&jqc6-7 zABu3MQ+cfrRz7Z|xec0a-35$xB8tEwYHagb8T=XT03;FnUs5Rvba%&E0o=sE4|t^y zR9+m#`9Z$lI88A_SW@}H9_^aUzla41`@;}oRs5G?Mw4}G8PP93$o{xL`08~wMZN(r z_B#BbXorFpkyrp24o6UtJ)!s{st%wy6TB{BS1Gh=JFKX0UB!STI=CHzDC;*x;oD86 z(9m{hxUfko5<&J!rYrD1Y!wKZU7n@#!YDZqs>oLueGY~`*A@uFsaOXGTtRT76gR_x zPY|f7r(!@9Rbikb4+AoYAsB#2Ar8EPValC6hXHxi5Dea0%P_E+pjU-mSD|PUjJN|K zP~Gr!3>Z<=7y^^miaH!bgi;uhWGJ|t>!dLzgj2mZco+)z>))?2AcDlgptu)A)*0UeZrf#YpBIO@7?aU3%21jDl(7#&VH-HlxhQO8cu_3FoU zwW6VV4W8rRTr@?KFg}I>ZNwD=YTR#-X$&Qv5dIM(9{HQIp)<))?L7%#eP}N{bqgIb-3KfBlmq6>NMa9I@iQ!8Qci+)${vVy2g?$=15<>> z*}tYr1?DVBAqfBv^wS7Ffb4BvT9t3nDn{m>iexbLm88+Ir#J?S`Kh%QOvoe{d^3|kA!OCx3Q}l0M$5@B$>1yro`@Y(Uc&q$ zK}nve(-w7M3>HXdj~U=MtgFhAOFNsVwx~U0zEwljBOe) zm%bp;bYRlcVE8DrSt7A?c$_nk1_zaomQ#_Y*wWt}heNR?f5Rr0Nb&#-m5g+XfEev} zQsLnXJg;B!7rJRtZz!E2EB5c#_WbWdeO@1`o`xvxa}YZJdt{!Si6Rfc3USMMOBAJV z2@9kHFsAD&EK!Gv?b85r$Ac$tmHj>F-FIl{0Aic*51>U{!&Dup*Cj>BHF z_ykmd{U{Ecav|n_hBG`PKMAfXJ}fGpq;R285`09*`y|-&Owwp`!rm`5z=haP!K^d$ zjmEH}pi_{?wqH0y&7%cl9{pLuNan!8cMZJ_;yGt6g*%vzEb>2ZShFJTGvH8Sl?_s>vsS~W>f|$^m9~aTNh9&xf2Qd!O!b)J zzq|p_Rh{Y!-ek^&@x!HSgQPmG;rtStO=oh!%_$SAf*4ZDgU(tQkFMrJ&)toIyO%K_ zg*q{?;Ti^{k#s)vN{O2|*qsj(Zc!5kHW8v)u&XRmF97w=ojAxSfL7`5!NJD@SYmn) zV?YY|#M>~U^@T7fl*eccJE|;%R=)TVXR6a|SaOO$C3%WQaG{P02tK+9Itk(DB3%SG zxuJO)fVawvAqZb)WLg1PRToiM5b3N91F|^_eeY;7n8F?NuQWC^QVcnFz`YYQS-51g zxT>@+0qs1vFJg32oeeX}EP;r^;YPT~aH6RaFr9%r9!*E773`hPVjkhPN25#6LhZR3 z;mp=^aN@&u4xFi*(ik||x5YuzIq0m}jyRYevtdGhq!xG|^*qGGwi&05rfqmoFcD6+ z(Rr9U#=L1XD;hozRS+D6GpeQFOfQTEn2=xr9A1@|g0spvoW8=no)t}%LOe-{GzM`=ff&LWN2T>F_-n$=7@b>! z(+g$LIYLWmfDvse2R|RLV9aWCvm8RHy^aH}3P{mvz`$k#Ga0+ep*D;>)PVs>Bv=Wc z^9cq-(XWv8EAU=^s1kB?_<+$Os0nm9w|m)QPl4bKi{S96FvPqU?ei|q<@`63J}mjo&W9}eNPWkeZI;4F>x5_o3GLt~eq&{mfq*w|_u z$+;Bc7i8cB|FNww8mfY!?Px$ninyWe6;Q}tOQnQR zTnjWc0*Z5!pWQ!2j|h&zi{6LnMg-WQlwbb@xw0BcrWA!tsv)ccu}JMY>;NuQL#$~C z1LEi#2F~T;AWPGZ0oh)K3h*hUF^eAsxpfs>DZ+{$v+^{w<3vtePyZfZ=&y1ZUiCP}B)-?=Y|mRowu; zt3G1Dh4A?c?n?3yxbnFPHn+af7V$y!j!iNIKE;+A9fXu-suA0^4!GvOQEHMb!k-qJ97m`Ko_EFCGopJJv1h)Z zMR@cZMcskmCXPdf6Lm0Pu5&w}9d}^5?Y;0%j4pS;Uk)FYw<7M)a6rDp5M=g!a7E4V z9j36!ipsCX%cXx8C@niG#fQS~LRbG0?0|~yLNO=fss9KdPEH3#VE>I8Z21yR+ zs+@x$va1L6@)J}fkNdlgDQM+VDFHNrDX2C%Ahjb7LP)OxkaIs3$skg=0~5X?EN=jt zys1S#>^a=zcp8CP^NmU^E(wD%N}t6M_f^ygYsN|rDiTEB8^N=!t|NLe<{*If`N1cl z+?znX&z4HTnHbiFmoQ4iiAwRKktXO^!QqIf8J^7gAIGjjD9XW+0VOtLBk|M{Mv@Gt zB-ILzO!%SU+h%AIn=^kaXc0V078x=e+sKyE06RK30TGRp!Akow%?g%m>m1qOb9d0? z57p3URz#ve4|J@hG2GZg2yXO|0`^;)a9XkjHp(h3IB?qRxB_`!2c7&D(9!Ey)YNvmCM4fTC?HD6$RUbV@75fY9|E2h%$ox$zBy*FxLjwduIMlqeo@Yu#2&4hqQF~jK!iIJxXiG zT96JNjJ7~G?{0^&Ajv^R0%+|yM@FQ04?4Y#yA$%b2j?c;o=&KW*+~p(KL&RX?m@$r z?xa%cXip(@RJr>=E!#zRVYi~*dsQs#M(kGX*57;XtjqfO{{G=|Ugyl2*xA|H zsXc|)rjzS6k{hen7Gza|$9vT+lzSS@Nrw{TN>|N<8ceXEeI-b5=aZa-CWPx0oJOfu zIU@lhy6%R@`0&%Pi@wNkAHn82`>jqJ@4`c^GtiXWFn2@${C!rjbhHjqRx2;#V482Q%FD0Vfnxa9lFXi+7~5aLcXQQ*x@S@v80?* zT=XfoC89%{hDL~;w@;;v1PRR)542Lqx*M8?CAjn#UL-tkzYd7=Y0tm@<9WQ)JEYO)P?TdiLj&aixIkf zIPu0M6x;F^B0q8?0$XD)qj0ac(I9XBnlb${tlT<^R);QQgt}|EC=Gv%L}|vt0LAKQQ8gg%zP5IYQTrDS&|4me;7uV3STf2}8O|BnrCVX7Rh56U< zaDGwD1Q&XC9bv6+Gr^sLhjuZh0nWHFBX8j9oWX#bh;?bn4GdXz`@qTgnO%%%e_cFz ztZ%~b$3GNN24`V6(MI$%WP&?o7k1I5M&TzdNO==C&Q5m?F1W?oy(Ziw?iSXJJPGAO z=`BPM-i-^sw~@v-kxZygvu`7f6~md}MNgST1oVk-UUm6D4BG zri1*1hBFz773$Arzu5TA;D7nt?6q%K18QG_qV97SxjDEqc+icJ-jB2bf+O*+Z0eKfqh|(74D|Sx;_gT3_FkMDa!A z@iT-B-_xB|PU-GS{k7Q}-E$zn%NpcO>w2LsEMlnMa}o8=?ru+8TOy~%FTfYR(eQd~ zB+5%M;-~0q+5GNytPH(`SY6uo3hnCo=jas}y~LI8)r=8$iebXu9$eV=601l$Mlqo# zxx9j=cqkKmDT@g;M=&8t(9Ph`&ANv+b$E^D_gSVy3@PXY(sklBu0VI}wtI#8t=UN9 z`39usbWUPidKmIcHH+cm9ELsVP4ynS^z$dG*h7ZrtY+Aa+$wOf0x$NU)8l%$(Af8A zP^MKN-^U(nP<=Y9z!T>gL-$|wpcfN*RHfp^@Y47#&@H2$RJyl^1Esx%n-d-y$(u^w zqO3O8(n$7n{s>}rdI$6|yeH-T>fuhVPk>N0y%f_^G$@c)$fxh%)N+Uhx$z1a_#UWu zp$0k9k#;?G$@h)D9%a8r=z3e^{M>s?7%$mTiHvztJAXii$6qC_k61yM`2j7-`WIX% z`G8yepSMitD5Rqku7xU6UV=CVengGF;2;rGI{y*Z>9sQ_*`H8$Wy2#eF!~9V;DNh@ z!-f5|B*Bb6e?knW{UkrGeB_8VItWIISacS={yf{e07ButAaZF2nK}Fbr z9q6L91_ucn+Hw;5l|AIkdg{@yFG$Q>Y$<1k!0m*{Zc->yGXHkmkmf#zVewZOHjVsS z*F-RilaaJ*~)azytX}Mq;V-HG0BnEyvDWu0UV27sFtz@H(buha_sVDr2GeNr$zTAp$Zj# zLe(Ai6Eo4T`wn67)_AdlD`;(J%zc5pv*6KwU zW<^#fNEY;))dgG{FU4g8&hrhFW>oYWeT^q35(!bb*@!}#GDumrMrq(zJeQzF78}SAZAKm^r}UJqg*kWu(^qy8Mx127&g3(?w=NaN^wu;K7zox! zfRT4(x-xxb8^HiINVLWXq5<-Wg|;ir5q^;Y;=J$3g{KC}5TU0#7ve7WHlQ#=sCNWP z#GJM;5*REI2Wp~^u@_GxMBK2sh>esj1Pp3xVt^lWT2)2qM6a1m-7pz$XsoO+cz2bN zCC17C;cG96n9)yTL}(i=5ku->q6`$Gk~k?cQ8p5GWiX*Cm0LvVQs*kDB~?uk*B9b= zbH^xCN;6gZ3w5^2NK&gPd-kT`B~08cVJnO!fjlW;#EaINA@*Tsxv;5Uls;|l8>L6~ zsikP*U^UAo|+X6YwzR!iZ7RY4GGbYrcoGhf7?+dJg zfJiNQWs=#$CNwh>94}VLf3Z1t^)w`(Z zL+&|IHL04Fvc6)8p+@o~n|F8tU1FuQQ|!T7S{QiJ9V=yk;;l^|((;LN=O>_au*OZ5 zs!N)e!)aof06ubm2I?7UjvT6T*HCh42J0vTbOow2v$5B+lQan z!dts%5F@U5+K|5;M28B9d7icGDHEcQ@|}w8l&!T@+R-?WK--S0*yApAFp8#D_R6M; z>c-JD#a`J!QDz=ZhwYV}6k{!-$<#sFLb1p$n%+9#-W%wkY@`_LBua-Il>Q2G)ktj= zFKb6rpd%dF`b3kPvJck4v`4GI&Qa-LyvR5DpJ9FD2gUm~OQZCc=-533R*YyIOQhrOdzS7i&sY9Ie3roii@GhKI8Iv76x z{D+Yiop2&MHze=2P7Kv|Q?^p%>BZ1^H)Tu3M}rtrx}kmYHHx9m?r1VQuZ-pck^b%o zG0sAR+bUkzX#TMyJU_jx(TAJah>?kb$kNrAQ zzNgxT^lL)XWDEIwDXr+mx)YAnm629kIcc>XWH}?@MVy?gi58?cM#))#JNlc9aHs-O z98e23N!uB=rleZPY}yVk6ft4!PA&xLtT&_%0SI92g#cL1fB@};xx3k~73F%t`NBP1 zxW$BjF$B*vhdaj@QO*zqY*rfqH}2#3)JCLlHY2omky*%&HHAqVBO2+5iF1y+GLy8Vr7o@!}pLFMA0d-VeNL1Mt$G8s1J(9;tC? zMTHHJmx^AZWKw~ua61*|dJSRzPn5`=-+~vXfOlowyiY8pHAEiWqBZ~E+V@8uUof42 zjEKTMAnG4IQS}-&0&gB0ONEVCrT7T$HvqmSG2S&!!`mqm;zfh(&oCHQ8vz{~!(eDa zER{A!z}zq3Z}uW!KgK8Z75SpZXjSGXYNU3GRY|erriis7zb44pj$~0P{ec_=B_l93 zL11M+k#F3OTjl{nS5jgN0+FZ3{n;<-%3x$EBM_QT12}o}0fnzg*a?Pp2Wfm*)4;Fb z*{swogK($V4kq6qWqXBZYApF_$GXywflzIPO3`o#%3lXaQwKjY)H_Xstf{lnW<#nN z0@D^v;UzPjVw=Ltze6>8D=Kb^{HTYCQf4k{-HOAo_6&xX=fg#AI1fB79efzLU^}Xh0xlHIflVioYjd;}D+(x~IogWtt7t9zb=XGF+3%IZ z3>R*-#cNLTI4%UWLl-b}5*L=+$C>cG8>`wO^sd<)Uu%c=hFQdfXyMB;_FIRRwnxC$ zn9*YXAGcRF5FV}OLW2$viZ*beG$hWHZgfX~WpxL*oPz1C_UJKgoro#%SB!jDl0ipw z!y+zI`;N+Rq2qO0+7Xol(@prb$5e5gE}uNH?F4hLyEMKN9JKF*u3+PbOlYHM`7Dk) zWyMvcw2ml`Z?IDYyo#fylj7WIaXqZ-Y1TMi3Pm6P-#?SETkq;#7`#{?|D?16X zU)Zk`IfWrpQQxU^7&>#mYQ$4cn6kB^q?YC%94-}xp6#(Z=w5|GKe}!_O*k26L(g`> z-}G=qF)ARQvPkY@4mv;;($GJx)M#cgqU5V?0l?T#HuiQU+3Gn&>zR*asA ztk}id^7#(S?kJiIlgYO`OmEMnq1|EHB#(A8dCn60%H)b=)U*ea*Hd;6JdZ#A7f-)J z<8A0x4?LwW>>|CMaC~)7Jl*XS?@V_Gqd-RYgyYkDX+ckATcLO#mEl*hYkxc)4u{F+ zakvS4M8f3112i-eCd&`fLH0ZE5QXe@%b1O;(HrSJP(lNGBc1oJ&}Jq_T*v+p$R!UbAPRD`$22+$^0&8ifc+YLpkGl4 z-{%{J_JNEg#gqD=P<0duWV#6XyWI!Z!Br=L45F1G3M1nL>JSaRk7)wUWu%LB0+li{ z+BShEY>v04nlT7*-z9;%#{iqSC(yze7@n({KsOor<&{9ru^`{;CQxiF-j!kk5@ZR1sV>l_!5hSk@0Amo+cnC@o1SY4@#hI1_@Sl zC0S)ljT2z>C{08I67X)gZm1~jNx(&4KTIPzP+SsjjOu-HsfJ@kQ(uh9Y|UrCHnf5X zm~8nY=#h3J$nd3{BqS>93UdpYU`-nnaZ|q8PInT~O!V4~zLPSTRgIV=$nHmJMUt|W zu>UwcX20QT@=nI@^OH0@8Fufl(9UFBPUD;ODH%mP@=XF|O-Zn(PW@0#H@v4Y{Xm}^ z_N4>tpZaEf>1RLO+%G))Qg8}Lw>o_(I|U@UbzeHl$dmScsiGXEalHi1nrDBM#*pN` z)UrQxdIS5CxmI5*THGJkTz@)-N?rO|(`_d0ncbI)J)m6#yu2iYvwEm5o#-A1Gh!r;z-I1BId zK&0cHS0a5c?(0atgAieRpG4|22rsJ7{S#?5`zNb@BE4k)xHL|rfWi1@dr%^cWB+ss zO{A!+2#Pz^OL4qKA{nOwk7<)g-Pk`~9TI6N`{zXGL@IpI?z4>XAs! zFM)F-aeuBDg49gtl}HDfu3>Z{g}#T*H4Q;jafx*96C{V~upE^J%f!S)8vG3iH#Zu& zlthfnLejjX=%uqpV<1&cM+Ip*ga)$T8$)Ra`yDirzT;P+KQ@sp%o80cb|@U=k58oK zmXJ2bph?*?6fyWsNTkNLKyR4A^vQ`h)Fsi9e23vuWG$wsVJP3(D`?p;l=li1l`&ae zLT~l}5EPrxajc$R#2*hDiJ&9_J!0qdV^HY;Ypw29+pG4~z zxzHkso-mToCW&f}1UcCwi7vcMw4!k%k)UzClV}65P<$Uq*AR>u>X>sL|V2< zn4}nml-{09|A7j17Si)ku&T9`YLA9|yod&lM#r$rjwCwYG0BClj>eNpy;~zyBcCw{ z8+(j;k5RTUX;ktj_1#nZ^VUE;M(JQO=8T*l-FVcNw8x_8@0XI>SY@dB)JuQ#J>mzA zNWz(Nh1kwLjhVc_2wsNLl6H?(HW5zWP8FLW6P+ z4aOn;o9}U<&p2f2(L*j2jZ-!joL*>zf{Y}63Yn0kOUC2jG43rl=`bEGwCe{hG?|%% zm-#QaCr^w=q7HrHxG-C(Lw9B;p?jN&pm)B=a9Ac1{PUZPIOn0Prw_%$^+YC|c>Vla zXF%Fn=-otOu#ja~;~PP+IvQ9pRV$g|^OJ08a~AsL3l+(5OmIPbU9DT(?cxxNbEKHBvQl)rEo81Q={H0-B)gs5ovSdY}o2@VZ$t z-CL97PMhi=+gcN0xu8lixlF`6OQ@CRA3K^j5#xEqw#k&XHOZMSPDBj->@^aO>70bh z=johGemj!fX!J{XnK}txmb)g?x?M=nLJOq*f(E%K)9XoaytHaEZSp+oL_H>>-TJ47 zC{;g*jGvwie}OfV>C0qgnBtgMGMz4l7flCn^b|N=`83 zCR6swq#6ZN5oh12P{r4W%DtZ@l}}gd(c-DNA;yHt(bB6)rZjLe>@BCk-YZJ3?DQ7O z^ZIxOr7-2n;d14QY07#Euc>nMW}330;u}>W0}NdxwcO4LLV zTOvw+Gw{gFJ|{}%Q$$M5Jy@oTRrE8Y z@jB@9uV=c#G)dP|upTZ6I7K&B?LdQaU^9J`3?DQ>cnm;#2|vfm@VW&^n_n)hBQs@q zwiT?GuESkAkLgM$NIDZ5tH9ccR}8HAyjMOL;N4!1&m4A}^?t;zF-y^kQIe4#8c$pLGoLIiMkbw zl)6;&8Sb|I3z4IuBQpGTA>JGNAD5A^MIeJuNTi`)eOeN9DKtI>d*}mE*{UptGvzs% z?oA?eVc$@9QlVYU&s7=u$w>JPMmi~C?rKu*NK2L=Yi(X@B&@leo}y2g zlksQP9=NqyiXsYrSE)23=O5rB8ISxV@_kFuJhc6xks8o}Q!uEv4C$$gDWxrVN|i6c zyVIsfY;Me2h9uZ&%kT|GcIb1Gy&=Vpe2dUO@3b7@_ZrIZi^3FpidhBUhnOx2=Y}xf z2vUPe?*eE5^EI@8-J7yw|$KQ~_qoY!sK2Yx{Ag!L#Fm=27+^|;+mL?CHLz|uf$L&z`(r)- z8d$%a#7WK?WlQ1T8IoF`D%PM^S#yp=^r+ohWO(3wPUfz~*iK1-Bbf}RMU2CQ`t->$i zDfSq`{eFV${)rj1Y`_iT&h)pWEv%Q+ZZq&dSO?9bD&4F!q)D4G)HkH7M4AYXyK%v7 z3uaAKy(EnR&E3MPejFo?H0~1;TKWR%|GEWEhbD3Cw-pUUB93ZfHkn%yAa@KCaL|O= z023>%sDaP?g!j?PP-7` zasnsczi=1mDepoWXW|?zX4q3}AUd17kT$=860xEt6H%b8cEj*eD#N{mRGeM4TZzx| z>_#+)_fh;F6q4^A2AK0LEeRUT|S1 z6T&OFP|gI04_s()5JJr_T$s&-3hduy-tIHu`)@8ZIt1aKK<+9$I7;`U`sN&Bk?C;a zwinB&&MY5jfNddY8UEG(8>1K524$IY7`c9LB-6!C+pg(4}LD0>vGW?AhPVwL*v>2`VzusIZ+>11Nm*9Gz(no*jKrwc0dw0Iqd;}l}pgNzc;HfJ*8iL)+L%4$@uRBBUCcO?2c!{J+GIJ@N_?CVe> z(Wi>!Sc(2$IKCJph7S?W?qWhO;qxB$>rQT+2kFwApXed&P{HZWD>Olk*vkeEGAmHS zUELcTbXKE4cim<}l<>8j{Z=Kf03^ot1j0>!$j$cDNjKx2s^JWedB*YRK%4`8iV>Gr zoZutCW_0HQs!@%Tz_}G1qvK^u8H|*@XT*tioW#x5>=P3l3r^wxFACar0R^4C99iyh z3I(00FA-eOQ%JR*u|&+sumpwB-a5@BEviabpWM#C$)@TO(WCPRP}C>c_X;MRfptLu*Od+g z4!$_ZfR3F(LdQ1xU+jJssdWmH;ncHOceXuLMiAbR%C5rGowLY)a!Z-++ynToa}K_r zw)l}P<>hw3ZCog}z5@?-ADrZFetuv%X2hnfq$#mbl$#iqhqkS0IQ%+tD(&NLd z@0j(JWUf0>s?;a1QpEc)MMlPyqP&`8*)+ShuxTfBz;{YS0ZZO5KuuW^(Wh}2&`a62 zn2{brjpgjumGuX0P?(5r`3g?PT*OFY_G&tMQQ29r*+>?b*aR9@tX_g;+9h~xagbJC zMw?!I2@l_Yk8r`DCFZ!iFEdBSIH~;-Hd7d}RWs64sB((^I#bFDxbnUNjoxKW>I@hx zcKIeV>~fn&7k&+QaOlv%SafTSm)vVi_Z;mxOUfUeE+1;}x(eO#doo?zRU~ieLm4?d zb}-g%zQ#Rtidh>ymg#<9#f{PTnM9fhuU<)lHknNxY|bYj)z=WT{|B!7at&qrz=e+9 zK_ee}9q+e4J-Fbe8jL!<4-pzaM1nKVcUx{D?;SJQp7WE~fPmecX zx^d$T1Z~xb-V8D-He+khY77@iM>n zh#vXgLSj5)WF+GjLWLzV;!Fi=QQ%K*!Sk79PTX$8#r6S`fPI3u;o|)ePD~6_P3hWg z)Y+%QBw|H@caU(GF^qW9+&fUW9>;{9f=?Fvtx8SHnBQzBIPuQ;x-vxDe>Nl5biE8W z&H1@pxW5}+r$%?7-mr`l-!`fGbgo`1KD5&k!xYn*Zs7`5xe#|>X+)cQA%U6-eVZ9}QpMnWH|N#>f+i@649o84-ixcB>zX~+Ip_X1$BCe*dGLOqI(HftV|cFPiJ^0Hk&fT z%@0$>mlP$#9pe~wrQZ+X?Cek`bQ4IX*I-(kEB{Z0nWg&OHY&$!gB03d7-o_ zXf*_%{&<4cp_>^Vsr#6Tjl*B6#=_P*e}FEnpNb4eJ%!niRvJpPp5oR`YRiSoPf@Q_ z*s22Gl=gOrF70to5nG**X9(2|J6A-V4J&R;sWW__uY`4|+;Ij6v)TO`GedD@T(EkB*ATx)Tu6I^;yjFRc78<(hI^;! z(A|PG1O7&E?G2(iq%YHzEk|50YoHfZqXN2MBbhFCCBh+AY#?R2iPkdRh6+rom^#ad z?~XJR+UN=Es&8T4*!6E6J__{~5Ar3||He4{;W+9|DGPD}4Ji^`@D9(tk!U!-VhnQO zRTNR$JLLRcb55?WM6c!SJJ_FX$;q3WY1U--9yV9exUx{;_mT2`@39Eor=vu$iJ%86 z_tWaP-mGDG(tL({3Ns3LsL*eC5^r0`g}XlK;(+AdZ?N6FgyV0_rVOn< zizezj?w5y!T-f;?#b&yS3+QU%tD9??;70v_Ag58Axp3eIo-^7-T&UAJ-H2R%;!5Ui zX9Qd2e!|xN2p2-Tr{hb@OOcJ+Kaqy9$0TgT1{$#yY#(&Ze?eDGCDUQF(Uw*)?1;~W z{>EFvonNTFKBY{E7V5s`u+Ow~jJC7>&6(e@wf!Jr<9r*HX1A{@636&ECYXLb`6H&~YDaK@S3gy0#@zpg&p7vo% z6^!uZ36m0XvKz9CTYTVya&fbvXBjS_>`3Y9K(Cv*KgFJ$O4Lf> zG`~{PC7tTPs;g=w+#1M*?^?qUKo7}Vn99js z?O~cHtCz597$?W|R852{Be_svK1`b&_2I8{tVGQ4l|;ljSs!s4XGz$Aj_M<>;K>rv zCR+nlePPHnPI8=w8Sy#D2?hviFq7k2Zb$+@&6455xf~Z)8-_0l7$U8K^EipBiPXn2 zvWz%6ZlpnPB(^47`}G8!%qE&S@Jq;XAYewh6b2tgx98Ub6lV97$0C{ zg*oC1y~~BT5yLQW!kR}b3zdUbHA=Te`qPFE)1?Y?+;m|Us1!pUGvf|I@^kj66F)0ekno>36L2!zaU@}h71SSmILWnE z>5!`mS7G20AAk_DP4Exd@ z4^?yFXDSnh3l>A!uQ#>UAAys)Y9PU{tHRa;-z8?aVKr4Nq0VS7Y^;WWH8Qy1R2@Qf zOszAsIn@zu4a}u8AIp-%o-+?>5V zVZR8o=2g)exYojLe%^P49vuoo8+?H2F07R4&IBQdV@=>ZOpJ>`F!$AJgf^WGK{(AZ zixZiF9loe8H!!5@HE~<-+9}}>kEjh?iZk(RtA+`|x9M#i zRYNMOqcWuR-l+P~b)X(uF5wWN@BtIjg;r0wtE|isnpb)ZR^vQJmH@vQBQRUaUh*6I zAap}5at}fgh8Dtbs*kFfmNQ)lP}QUFKB^YNYZIBa*6I<~Jmf-O7O$O5_rw=BZf#oG z03mz(p_UPb(@ zj~MC7Twq+3VS@)8Hytw)Uod4jI0X2?BaUsyjkIS@aQM{=PRb^XbfCj6Vdx$T!@h4M ztWPVZAWDssWlXp0J*{k}!t$RPf3RgU;9M+UWH`DRTE@5^Oqe2k{KbAdv25GWtmb$N z_@Xt6v?52=raB9ew2I~`FU3e*5&gH6BYdK(1x!yEiu_OuRXfEoQ&D=kexzZ+nvpo= zmE|kCB`o(=snprCY~UbZ8xdvgM=fw_g}03n&XuSNX zu&T#C(9A-ETl0l^%NQTNOXN#CjKZ<<-4UCjGq~Pik%x3vHCN=E5T!lQqwt-9&g@#9 z7m-nzDny}uLzD)EsX`UA?upX5Fa%C}P$^kZP9*ATuW&?h=aHPRk3th$%=qm0BF~&X z%7hFea9MhMszjD-&7qg@N|%mCs@&*61ny;}DHmR@9)(Z$gd-Cjy5OcM!Mp>rnbrmU zxgnlhc-{rQu(-NhaO;NFYVOHV*yGREB#!Nh_let79I3)QCM!ElF+T(qo;8(1v=KJ8 zmjrxrq#Ii7m`;Ba2F&Rk!xZ*&5hoa4fc-iW*NbuKiCLdr+nV}d&^A2r&JU#Mfa?n0lZ47*WL z!Dwxoo;g~)9M$?jceaA-;`-pa-FPnv*1RgcXExJufHZ>yPt1^TGxmv;KS8TdXd;G)elC=V z9gUrZ8Km8b2o>_LgmL;zqcOS#Nhr$i>o|1@9)r_z88O=|5p%jZVTu`F5qdQVK054U zx;m5=(nQY=PNJrnzyPk?Q2#Pvxi8hSCS)H8L%1j6O~7 zhZm-+rF66(`g@+2*{>IMPQmSX6Z1m-RJ8~Ti12Bd6gcrJ<0NYM7z_I9g(1f3{ej=z zqh|e8kwPiH)6pM={yPJS(u~O5U}`1KFJ{HT7#Gi1Bsvo z48`&EO9rXzg*7G;#^IfV@Rob6u8f2XM$nfHWMmN|x0}d_(S7lEDyMT_6c+!?3u)jE-2|b0U z6WOm58QYJw;EVM~r6GcxnLMDM$5@O*S)%bh!?4M037e34I${`=OIpM5d|X;%EZ*T} zp!SbThoQ{^2^;5I;%R)1(bDCN;)LXYvFN3h!`Oc)u+v(O2M$G7zupE(z!Lw)Gcj>C z9Zkq1W;kdw(?tudw$s}YsDHKC(X2~{LDNIUNKGmqhGD&d_{NS#c!j4})NrW3UE^fM zaJ=0&xzB~4!!e9?{W%w+N1%i<-*X|$bhZKYd4u#_8G+DtKN;?$*r%I8_p--&l3@jU z?YSfIc(gJVQBnme$Qy=M+KQ;&C{=)BsIx|@Mk{vUqCDFTpQ}f~>h3TNccMF^RE-r6 z$BL4HMTQAqvE5}ftimRVeAZ}Hu;TZON(moq8;xgiX`UQ)83PozTts`)XS<54yvM*- zS)s@c$Eq4AtV%>FcC4zUu*r)2$KfhMz^uzyl;Nu0oMe24m>>BjLa$8A&rz+f)0AaOQuV;i}Xpb-XDb zr(ef#5I$MNaKCh5O@pUB3AjcX$C|;o-i!>zyACs4mNDLlPTj@Z*iMEEo^kws5^B9Y zUUQgD$H}PZ-`;72f+@Hn|4l|xPk#CX0)&F^+_KjcJT-g$=E8v~XvcpGls5xcpnM`a zYK~J;jBd?kByB1JB;d&^+040(l$TG%6ruZ@ST6x8<(@^Z%< z3zc-HBQG|wGF{8*h-epf!ZPc^>39aONa4co>1cEx43q?YG8Zy&JRsYJG-3w)gp6jo z6u}2iY-l$(@^!!1}ctIvg6{~|S;t4a`}vBGbTsy3C*#nriU zl}BeZI8$5>)HVmUhsrp9F+9_VI@CZBuVJ|7LpqwH>Mr>Aq@($$_PMzj0f~K;DOUUL zxv*K@ThcWY9QsKD7J2647TwXG5qzZWccv*nFR5=HLiNQu8-@$>P}Ov?poR&)W?862 zS8>xC&V$XoVvfU;vb5<)k1TP*DuwA9pg+rkXmlIqA!p%OX7Yy=%tvkTJkLSgd^A;w zx4AH9XqGrHb9p}84F1e7vu75`Bz4A7vmbe`%gw*FUHNGjc;2>q5N898&lL0qUEk6_RG*%)WwZc zsH#RWDcP91Uxo-*pufpT_SkHFzE$br<@&^prL+?1)|| zbMkUI#>>;uD`i6X3e^8|IH05uH}F;_Ow%HZ^{f$Fp)w=WLXejV8F5>TL}@lLO)i8} z98LVk+JMxBc%M6OC=tZI5}BKdBTt#f&@7gpmB?XJx4#J%>a9dXg&zNlHA`Ll{ELVb z)nz*01KAjm`4=U#3P+{>@m;VAKDq~U5WWfzQ0F#W*s==sC^AVS6s$(}#}DO--^LTL zv`K%0DR25FtVT>XM@l*m-m7@Y@D?0_!eT-YbE>}v^(B3Rj4WM)_&QDHLkx3pJPM0p>^eMo^0#y0{5m{KzVBv2jPP#> zrLR{-2rEn3uNysFkK%oT14`GU3u`ic0zQ7V0fmx;147T;ewaB4-A)f=J>pex;n*f z2XX1bN%+%=;xqOX!x6nWHrs(Zp+<|woHcS)d(iwHP%lW}q#MN9gLiK=w^wBt@7pnQIO>OtNCf(|8FjXEIWYf_Ec-`%0MLOl5JC z40(TZ-EM@oKgV(TZrofaZ*n1KAD+;S_aIc2av90lgPPLQh??y~@;~pveVU1<3loaY zPST^Oy@(ShN@&Qoy-+XAY{rfV~I)KL1 zyBg}>jQvPm>{CvrXHGWbPsT?K&v?yncOmv0`>jUf4xp?){NRGy{KDrpFs`5Pr@Z%XE1Mk;qF9GV;3!*4UqoQ_v2t?SIeW&Rm_rfSgC^*XHxjGqpEg7*curLJBI5tdj}`~9z%{_ z@8QDtW4O@*(b;05XL_pLY4~wC*Ts@w6)w@v;}{)#f&LZ~oRr8z{xvQPRieZ2`4$(> zDB-g4eM!)#dMenaVCawqoT0)EwB`j9k_E%J9ClLU^?txlE^Jn#MEd+gZ_l8voA;Tb zOL`~ZK;4>?us0Zwl9rIsgcC?&LPtqwL8nh3HD0|W;>eeZwL1yJpco0`S{+We;LF8! zFx|*Rna=DSbeh#-&ZnRofL8Pj>UHl^@cko|3)OX|Vz1gM+%m^Tabi+}(!Q4=2~}uT z36ef<3MXYHDEfgXnNX8T6Q+vWog+^phQc!v#@HMiH`;$1b${`B3F}g6(o}KFl*1VW z`H61?Gfy#R5XZ+`T-bXC)lK&a6XJwtPuZ^@O*)J6^?t>LH)m0ohreZlFGZh2*ctDb z;7z#~@X}Yz$kT5!QuRDC-R8H9Wam#cU?+}Q(CYIld&Nh6eAw_5+JN%&n4-FCR4Lh! z+rP-B<}`<~r5I`uEJS5m{#0`cTsPH_##rJt;~rCLS<96^7gY5WuFi6_;DV~Y;*dur zGNbPoutIM~!%Cz}1wJ^ocfdtB+%{U|8@O9#`aurxPs=U20o*~G-*u0HfN2HQwCpWub>_cO6J7rD%6(qxe#1yI;NYiLS6MF zC!J$J&NGsxkB?B`HYvV>cE#lyLY>5y7bG(L8Y;t)*)mdk4c9UyPe#n^&cM0j*Aev5 zlD{!VG=Jftyz)A-^kIWcSAHE0g&+HB2BHqXiA4*st!Id@EHO7=-EY_5I$au|g?8*P z)A?PL>rxQ8W^C2=CUi}%NxGJ7jN?xPmZZLkTG_8$A_nAg3nWyJjy}K=5x*#0w1LZJ zU;!x`>zRKG&hA=pU7Bi!1sSc!pRn!FePFuo*sj9DLFYpIuA&`{xD9L;%5nB>%poYz z_KP-E==E*1Y9?JZq~OC0JAAkTDer89@)>XkA#uVvGlt5I_T6EHiRPb!8vKBk`eiU{ z7XOE0vs)Q5@G@HisJIM`YdqE|vlt;*@Re%8cM)jUG=`lhrxu1h%bjN$)8Gck$Rehj zpDWWHt}#Q$XEkDruwTK;a_ZII(!$U z$vd|5J%SAmtk7W3I;er889C|2$^J(O)h~q!epuc-6Casoi#Y=x z!)D$9hDQlugW0bawR(!F2!kik%*tZKgM58w=~AaBaM5A1MDW0Nm?eIdPtB|+&5-Gg zpW^1*G*?E-s?9Q_4a3oJOnnOL%kyQrGf(lP)LA4EOLhXHm(X~*MD!`=8Lna1RWkDW z8R8hbUPd}UhfTm18QJ_CPuM{_WW@9ZLV53#hz<>Wfp*pV3OW|gXJNeRg{rBd@R}$& zy~Hr_`G=x3{3X0Ct4k~2Vw}79Z5u;_s<4tE9 zu~B<8p;*d z$7ffV&V$S?GIV+8cM8J`ZZVuFnBY*Yx9C;We1}?e-ip#cqXdU+o{cw@cW6R7+Db&c zyPTeF&Fguy_rSq{62{y8dw7g&!H7TKBlU&Zq~N>_MsS9M3-$c~(!L`n zMIZ3m{9l+P=+W~>aIblAcm4=N`>tG9dDz1qhTq^!4dxN&JOl`5;<$j*9U2SU`*8uA zsp<-usa(Ke4E2P>5lk2$v>(Tz=@%4i29CmDjw;VwnEwU-2hHXf$1Ma1ZE^YqvwLepGwlm^X@C}Vhvz?m%sRt9b;+XCqa5Kgj1A1lOV48*_xEZPa z9Vz)2Cu=j|R@XWBurqsi*!~?hiTL~$!@s|yXjhdmVU!SjUbOweUJI{?76a#4u%T^p zO8SX_b#KvxpLlE9dz&JDsT$&pJUGCJDugs4^C=7CM;{)s_T@Lsf3&A<0?v#K{f)Vd zNnsixzq4AOwmh1nN4JyV_87A($NpT{X;e0!PuS$!svQJ(?C#<)M8J86_}?{ui@Ls$ ziY>T;x)x;_qYSz(W^w$4!PpnZgoRb+I`IvL+Y|^m82iE)#*|KoFn==nYpZ(-on|uV zK}RNIrbe?;{+Kpww_jn{m4Z{}8d8)wQsbfnYjvwp1BB(zxS-0K>n3i7WHx!PIQG_4w-64$Vb&h2WI9b1>umzOV~vC@_|*JChJDvd*pN`!Pz6kZ9X3f=n^GJw&@hJK zp4&KfGgIT!NNsYA=)9@gOE|bo!tI0!`?!#6rVbS>4ss#5OO8Q-IZS`PW5AcyHh&@Y zBNq-a;qzxE#0g&C*>5e%us|i()h2g)+^B9da!l!}1@5w+dLmh#Q;Rp9@l}wr-8l9_ zG&G?#RS-0z5hu&fW^IaN#U$&-LAh4E@9b#} z-Bz4D!E{HgQJ68WF)5-M>z~eatBWLEb0KV}iVt%eTDbomznWCCO9Kqe@-{-%~-9XK}`|=5DDdg`ZRhB<#PCN-JZ!aU~afwHZIvT+Y8- z&&Aii*mI(zBV5O~sZ`>N5qD5%n&xmdQw|!EN9kTiaZamFo&#@Ube+I=4z1*t`~ZOz z#vR9qywFMAR8f{yX=OrYHgI9g=1=Q7!*t%{N~JN4bVk$jVYir+~lqEb1gbr z168ELRgFb$I+9>QhnFB4%^2-S44Mihc*heBO$fuN0a_nPtGe2Wg)||Iq6P`~%w;B- z?rMAv-clmQZ1mKIzPrQMohBMwa3Rl{zYX^E0PWwDQM_PzsOt&$L%2}xp{^_J?Z5@U zs_F)Ud1pz`VPl^-54kErKkCAC5ss^7=`fwqm8hqkNJ&opc zH8dF(Be>vFUENsl%wz&4Gp*)f1$r@DEvODx>+y~#Vk~AepJKspoli^`iA%$DjviCc zr`E-^amO0K#>+VFcnm$`HH<96i(U6AJzx{ZQOEI6 z+sH_xt&BKPpH}mX=(Q*A-u8PrN$rf}h1LXVb&-?)Df6({sT4268*3uyWW24hpuooT zrY0J^9IO?nrS2-M)FyvlHFj<}<83Rb7J4;rOfaTZSWDeR*otZ;=|0y|Hx%4k$cS_K zJbj!jF%SFqyb$%bc7N+kdH-64fga&P*S~f8^yAq)EYhomnp?Xz41PubZJf&YH?|6;sL`U?&4rPjZ#`}xc_=U=E@RR^)O#)sbjHh5YGSNXrq zf8$`m4HzbO7TM1P#FE4 z5hq%jH{XH}cUb$v@Cv@a?yK&p@D~bk|uxF-zvV^22QP{D4Bu z7Er1m3}V;J7rze{!T1VG4R0+BcA|StadA)i;bsZ+;DVJuYI*A#T!`_j~f{ihmHo$dk(T|gupYu)mhvCy3AXI37 zjtd*8n+pbmBmp0WWTE~U%88@?0;~KK-1Pk#B9H-A@iFglehbWLZ9~-DI+-%EJ^(!^ zhej}5H(7>zHBtu(JEzLXU8e;WRMH4HS&um~Y~L6$cU>qEJ63{zLaW6RK{v25LJe5T ziE9%y#GxxB0h{@o;J%r#QbsfzS)VmQqK>bUVa>}%P$2N`H8NZlxInXs-b?Eml{Zye z5u(r|RUncv@04VxM;1Y-f%`8@M3=fX#7e`_L2y`PNb#*vN=~a5n9=SaBuLAIlOI8N zYFSutA-pL{eiBZbW46mTEWlE-a5NvPrf_lEM#6gZy(waks>(@dFbZ=j_K~tsxxu*g zYSv|f6Lma^=my+Go30%K7q&PPkl~;ZR3@Jw$p&BF3xU7lcATtufKY~^NMr`~ld=FH zHf(+XpVP*sQjwVP4Z(Lp;rSO15fm{7Nt?l0yCE`CG4&XZD%Huy*XNtTNgR%~ldQ{{ zq0W5BkO$ZY*#x_ZZ1K3+3m&KPF~UbIIc}})E7Zg+R%>-# zifjYRU04O*T3v^Bw?PBs@`wv|ZSg=CUUFefTeNQ7-f-b|TbOx#;!$;;jihd5U+L}E z4rv2fP{@8V7FoyDt4iw*K1t^10G2c3{pVA z!ocDjJFYD%b_>QeuJwD*&S5!zzQ2DsJg?_@W@cw+XJ=+7l#>6IcvGtCfwbi-;`PP7 zH2&-X^ImQL$G}^rm^eUqP94&uI}zx(4xOut+VrgOmsKRH zqPHy)v?;wOQu1%ADz|QxU_!qbKasA=LwX?y^}ITyK{>r}E0>g0WiOO#qZ91clHZkq zy^#gWD-vk^kc5V`t~ZLImx2!VuIM0>pG&~!zl6p#u>+b+E&IT5)ddmZn8ncv>TExD zLs|kZ{Bwm;`&4w5ZM>R5$rBT-_<}0qzEHisMecnodI))U*l#1cG!33x`y!s+Rdlv5 z>fXGEq|>jWv#jys1ZqA%!GfatL3{5tZRv+1ul0_;^s5M#Ija$QQi3(_{Y>kR)cDGX z*7e7zgO(1_<^Cv8c(>E+JqgYDLZ{FHFzRMY)Uym_Av9Aa@U^!qr`$ZPg&d2|HJS6#9K9VD4fph zt5bH9#U4^h>AeV(m4>1){Wz>d)_ur>KY@P^gJbZqI_^NXhM|BvofMG;H5p#fN|tp> zlp3?ma9m`~MIzy$j!J3DL9*a8 zzppZ@RxTnBmeurB8r1<%%l&x|ytm~m(a%=^ZL%5iuLUQnY4)1dJk56xgK z8(~87cxX~}xG;D^g$_+Phl^=60Wmc(egzO{(vb%uvoMJdBnB%ke zx9C%NHn8&);LYJ2Po9F@n1%K>3lV}AMf#^=)x0v$y?W2KTj+HRJRv$%bS24T;?Q0h0g=k#$U(u3)-Rd{OX2>+y z1kGl+4Td-qvFvFAyCQ}i<}*B2&4Vt_NBbgbI`X98PsSQEL6d^B5yJE7F#WWOF3+fF zO8Sn8`t){0k}{a^8PHX&m2{>wd>cY9WjK2i!^4I3sDx*r#S%FaFPpik+;;y=#PvO$ z3odODXlxc7+s=aHtDPL*nT1Rgi&P@R@*D}b6Ydmp;ePi-OG-Gj1adV z#4?6EALKZqPog0eo`kjI9AF3R?#wOH^zzWV7!g7`T}Ie++zuXO=3sY7sgt=WTu`Mx;LvnK@-K0=eTT z>JrKlZD@Tg;=ab{Lg!j)P9c+F>l+KY*S(fvrxrybh9fhOmaRQ8S`Md?c_um#5w+yHw&iF6hQ;_!4S*R+@7VZYZ|g-lqAydDr*M-rZ*WL{i~ zV6Ndv^;%C*efmBTad!L@ajxuJr=lL!iN+MxEJcGq^tsHy0Y|OZ`Z9xtJmZa*L5Fi) zf75B=D-<4Dv3$>E2KPq(e+;|@oB~njmnNV#a{UX*oDuaq#uy{J$2kb@6|R)K7UsjgNP_b1=erI;7T2dGiR^n&&7V=&RvNe46UQZ+@Eon549Ay3?ygH36&IWKD?w<54B7)h2Qg3eINDI>bDwZcM( zMiW*tSdfn4SG+krg`OV2y}=%y`Xs6EmxN9E>+L^=4-|3S zeisVnfKo}&qqx722l8F8d3l`Usaa^;)V=+hXF(TJA?bXD@Jmc^rGRX7z{EG*7iRO} z9|`*i%N{VnOXaP0DjPNyPZ%C0Jb%l6o6w~k6bJD&wmt{yh3_TYUU>J7it^A<_ee;= zk&+wncC5}rg+3$~hV?Q3ybRyfJaW;LS^Nr@aFXFl8OIazfF~PoRl2z4L06?A={gJ9 zI$ZF}hwJNCs9}CFn?eH#cTtO>B?mC^B|AR_OU5f?bK7c5QywVUy@RNarr5t7s?b>?ry!u<0J))9oc} zL52^JDX|Q%4U(`r9lDWX#a-Sq-K@^P>u^#|Hg?SxqZ(Wc1A|}{gS6s`PQpj517LSe zybS;QNOW!HU|MGhTvkV@7#w(t92S$flj&ymQPI69spuvc4^ScJOOa#g50D3|OJV(E z@b9`{A!WD<3D{c^EUX^&J84L7*p=Vk3;*U=QBa1ubm$Lu_gR;{$3Eas6D4fSyX*%U z&cu=fX8mg)Dx|T~B>{7w6nHs`&EZY^VW>Zw>jHFB&3Lds7_OKnVXS*UfEsu5LQc|5 zQk6pnmk+?uV~K7-Olem;T9V9PB|E>2BV_H179&afvPUX+T1CfQg{7Q?}>C9KPP_2w18U#l5zK_1If@w~EelI0ASe~_@UfB%u; z>7TJ~q{4#&AWNUeu{ zDq1D)v912^_@x3bvjf`yi~F5MlsGA%&f4P)#{9&t-}BRmvYqkox=uoknF>Lac=%Wk z{mdCyAF}veXUafARR8)U}{673@4*p5jCr$wl`9Ug1A* z7>z2?BmawtMeLF$Uw}(Bj-`kJ#Dp_X}sEEii^B}`|639!tsR;NwP5>O#Dx(uCOUlrZ?%V%khF6s2>`z;jN=8pqeK2_CcJsN z_BKLVnx~@M-vNmiYqIZ5mrc06h040%4qkg}_x}cTcw44z zC2YGNVk$?PQ(4hn@Gj@Vvr4oBDo=2s{4Q^op>ntjhYNBEcNFHFq>MU4O66?6DfSn(591w$8#57%J*yO2%?Rj&o>jM@6CQ`FN?k-MKw*2-noQ#Ro zN-VbgJOppdrhZuAM~fcfQEU7!6QYD;UuelwG}zy+gSXfYpZN&h1>YrXk#HA}_hUwT z|3SxUaH|6!q3;=+kcLJuYiWi*hOTox6;o#032foJl z@VdU045BbPSkiSDx?)2{7IyTb+LC;e*#z~JuxfS(yn*fytixt5F>i1y-(%}WrJ!u> ze}99QN)cvU)}U`!`92Lj9@ec}_!h46NRAJ^MUG~V=0fvoJh1tgmB}0+C_5-;s^JhD z#c)%c4Y9Qm568O(I4+vwBkEhNct-7DIC3V#6NOQ8*>5{us$$+j(+tN$vEa+zAubxdf)uL(31axrIen>~g1mz|FmhiTO%F*|pI6 z2%BWA`>Vl(fTPW};)AI-KEU?}mhC7&P{)5l8g5q5;y+-Pi`6r*m_}~GxT$nOSQsuqX{0AAo2Yz) z-^}<=6Os3o$;>mzsGi)6Y-I8v*{3#jlA%gisWSLD4HK1(Y5hl}@*_hIqeRqORybCf zh;!e!ne)VLs|N$0s5-71;Af_sGfk;nR3A4~y!NpA;4iR2ig-offr8~)Dz7i^BrIA- z>gve2$LlFXT^=N~jHh+#@-X2#;ixj$9m3(vTJnbEts%$pb!lAa+A70<&(__hfh@eT zmE&s~a-98~&IIh%uPN6iFHO0purNa+KEi@bCN!ZucHG5hO?U_GV8oUDwP0(wiwT2; z<~aPBMH}j$Va#LF)Q0WzY>xf3<-Tk;Cefx^8@EYiD}H9UCr{FK6b|Qe;cmwaBO0nB zcM&ERaI&^@2Bu>yMMZQ>2VN5jIS%ZG>#L`W^w?pk9!m#^88u`30nF5ep?xvK<`fv5 zfg^ErQJS5!IKOfy3VY=FsrrUb=-&ojA8n! zXC_4%%Ohlq`(#qwyNrgE{t_8=m+1!fQ=+NW8CondPg&T&I)v}oMo3_S2|`{mSmZ7& z%`UQKs0a{NV=DZJun-Tvvzo%HGBT4QP357ov7<7nz*OEv)@f`e_4uCAgsjcrH-2Jf z{IpDK8gv)8d5#%8dQQ%yL9)!o^pdTTmjelY)98_zJXo-qN$w4hou+d#$yzTH$MCg* zNlpWJY0S?gLqqQ6B5SiqlyF?Txx9_c=TD`yh)HEDmC^+!Wv^38HVq+J#4DvKOj1u# zN=KL!nW>aw+hyvKr3Dfnn43w#K}h|oQAqtv3naBBpW-a!9R%CEWN(F=;6Ec1hcPxr zG6hShr(?%?hFe?81B3?;L?K~rrt;+IB4)DSF*iw?pJ_x#9pPEu3i#_&hPw*7Z)lDe`M0TO_?~23=L4Sb7HVr_EYpJ_sq&LSyUOn2PzcO8~~*do|7t|~at zPTpP+FtJDq1Voo|>|hw}&GFg`xSU7_1l!Oa!EWv#VeFsmgp^EWcn0PYu|U%8aRU^X zG{l6s`xj7-b>`pIwxK5qDVR2#3DwI4*FM`v_;_L?NLGoIhiV zJnZp5c5r2>o7)8DP13pfuO@Pg$+p?9!7us((=E!8bpFDF0xtaQyj@w1&TI;sW5pZ? z_Cc5BO>nLMS*B}zMADhjaC_vXy%TWS35HGSirvWuG>(y#59qQJu4{{vysfbLF%voq z$DXoZQ)=#v4BGvg9yCXq&n?}q+~Q+{GaRSjOA5nlRsvsgM&6G5!ijM+1ZDS=3;vt8 ze&ijzy@@>nY@+Yt7Q$LQu<=+|7{T1afkg?)WAS$CG1^X}gWw z;T7LS(sdKQg>s?#G47GwqwP4lm+fGEmKk0SlXTctpZPnr0KSf0T-X)E#e^1l;=iQ~ z=MI!Grb1P3H{~w(nNB0}cby*H_JyCX2Xx&=a@}MPWK+r*E=Wo+Qi2b{!vqY*D3RDGt)&(mvoj?<%y7X&XtG>Pee#d7(SWL@xqpP zJU%bv!o`*-0|GWVXHnZ(?J(kZ#Lo*3jnU2(Q{;sf(!+J4kkDj@4u8iyU?vUYYiT|5 zaovFrmFz{*x)oHIWeo3NAv2Zznp1HrR6S@gih@>aq#<;N=uCrKqa>})Mb-sL#WTi#As|BMSCneaDG zL}TIXUQz2Xp&cB$V!(vq^mg)gvcVcVv7_X6vxJ#D>eHgsT0=7*ydgdsa~*Z{k++ta zS}3K>K5{=Nl91e!y*PHFspsDTgQXa5M zL|A>R&YscsxVS}Ztr5I#q>#NolA%b$M8{S;8&Rx3BAA{|dH(WVLQQ5ufILtuCU55- zGe(Vw8bL77movWu0=r(raX|+}{0r4*2js-qA3JI4rk$AV&2~_o)Dd=e z8Whw8k;d)asY#tvcbd}vjtF&zorD{(O>ta=YFADoI>`qLSzcTy?}QpqtrHU(knQcA z*k`9RY|BGAx%UtWpU+5dZ28J;4s}NHI)@DpnV{E2-clGbnF&3Gz`69GE7}>6`nzx) z5lG*OE=XU;r5w*=N2lv`1*ybzg06BqO5eK^Q+K)|@Ku?N*pv0~ojP>5-7Xvr#jfuZ zvmTtwbc2OmyV-AJy3%P^L#|%c4eI85cwncx;X=;rk&uajY?FmkGxThG$-;pb#Wx>$uvqHVFYXyw31= z!QvkGIvav??0v|EdvkYTwg9`Xuu#|__HC~S&faN*A4+Sqk_z{cqf$Kik0x=v;| z5k-S#V0I7GT3-KhVesF(u(+QE?-d4{EOp!!EM( zL84?q)i+=u#(paT0f%(TqE8Vh{oY-&D5!Fm6HV+1^MtOVWJM zE9fpc;w2fybYJ_a=<<5wMKW`M3Q2zpYr{S$dv6D-;K)8O96wkh`ZQ!cLcH1sAwC+y zv0-1dAchW;Z0gaJzVP~IxC;68FM?0mg@iur3)k=wTxZh{4Hm1hOmL)EyHFFy^@BQb z94D9hp&4O5feTSxhUt*sSOn3fKWySBa(q`aPlu*XL87)XY!bzBfRF{;4EQ_48zys{ zpN%;B4*)Tk%874%7>2Zh;U0$9Mss{X9XP@TSZ^S(&UB7@3`B}n&EUcv7o7ijf~hrT zanjTk#AXo4ve}#z>LQ#NSA;Wps-{y`)xwI&9bzqCLfuTJOpZuB^;j*&eP@>_le=POF2H{hLfRt z4h1n?#)u;YS|UBR?nqA_!<+u%_^1`|oqh;bV;HdU3Xc7)frn3r^+<*{tmOExO_okV z3(&)i8m?y4p8gw#`nqHT7kUiG4L=gkg_AANWZFL*wv~yTXnKI?MuKSIhzsWJ(JD)W zA|g>PLo+x@jYJTIcvmv@Rpy{M0uHXZoHXWzbL`DIDxBWV013F`Fr4Gf33K?H}G;mWIAS2!^Xr&^DOf5Y*>TGu74PWm-)shk4c zOr~3XL#Z2&#OvJRg55-UeR6w`$9;WUgx!1s4Ae3{k=b|A2aK9 zcO{*VngMyvM{}ZZb`~bI?nfr4PLx{+aaEFuI^COyJ7)BdlekI9gMhhspsM#HoqZ-D zz>SY2osVGhL=w~~`2YqMb)#Uj`KgE#Cc`}}3IUp7H(wMg5iImU2{_5jaGHdY`UvK) zcu3_-v#@b%8A6Jg43jOdC2UA*CL$3x8MeSSz^ssp*3}XY7d-0Wq4(1XSDh6&Tr`)?nBBrcl{J0n4)6g>ktU<)FHS8*5D!eA@)63Y>`$w`!^2b6fHJ83ZA* zc{AmfY7SJj7{#k-((ve`)RQ;Z`?I)gIke$7U(Kbk4AL6#;m#9TBYNTm&25N=2v93Dx9ahCj7c!8RA*k~SBy9q?7b zFXtlc^#LlR{XCGF9T{<PyalGP+73oR&tUXH6gPgp z2x+RE$_0IO*aS>N4v$_88=Px~09~m@Gh3UISwrI#!$lZbTPz<=sVn8i6t@_cF*z2G zRr~^OeSrxp7x56?mmv66OSrI}2`iRyp+*!|aN&S8BF-O%#6>Md3@cVM>_i1iQP|2i z(}Sh*p0e2FY+B`+ZA-z)up9j+>{3!G_D>86v`J^bIGpiMxwq_QNj5#`p52I&m&2~h zGT6P?OCy(I5cKN)f)1t?-QTHp6|a%kadd9du3VGf;ME$=2fWtKx1a*+`p ze?y;PnL|VW#s`kSZF6YX-x#Rg=a@q^f5R}TSq}NGf$FVW4*j(Ts-G?3x(1z$JFRla zb}c#u1HHw6u&Vz;wi&H5Lt)st7KzyCn?tedaIapjMc&^IP)ecea3vo)h*E#q(r!7J z50LFdYU|~#WFNXKrQu8(*F%&%N&geVys;i(R)#ALbf2Q&Ev%2RwbpUqJ$fnm!sp<- zo4|e(<461CP+^>Wu&i}|r9tZr2zkdqrL>7j>O+*$#$BjwbvD9p#xM~%Qu@bib#dF3 zkqmzrokNQ^B0HXs&7pVSvn}bl;oGW|~+yR6C4rniKv z8}gkK_bqZS*+COb!yS}kLUXoYm?_XgDGe!r^|>vq8|bb?Rf?SYv~(2K;5#QGBTlxg z;~4ULiVyEI7(dY=m*Nu9kKNo|{Ku3+ljNH8GZCHHbv^2kx9rqprIefm-Sve^=|vKT z6N8qJYclRj-#>F{m_@D?-LymT*p`e7s<)gDCu0QY&EM=7D^XG~l+|@(E=4%!I@5v_ zq`7gtDB06#=!DCu^esi+LrB_2v0HI}hNq(U*gRhnH0etk%Fv}$1m3e)1#6|ry@aZL z649VRX$WuiEk>{v#ME33Do8_)Mm^^wZc(ldm8YU$7;i;j9jYZ|T9j;PUMBMUL_1Nkrqh{7LOVaDH2g}gCb?{fd7Qrz&D@Sc9@3HQOXRjx z^EkI2#W{ln$f~Oft{XjQzXQ6O?kc*N9e55-he<@A4ICI!H8V`>CE%cutw2H-H1Ji6IM0bv;!emB_=8at-3H51rHarU# zs}R5XXlRNf1`auJl`T`zwXj66;;=ys(+yk6b-@FX-Paj8yoQq-E+=iVUIwJW22R>L zQEayT&KiG&v2jdH1bMK^t>r<{f(s7*Owx?C_5t}S+ zj2{@0bs^e+8_qLTV>&b{PnY+`=M=)@k1HIzj?dFg7=?siVRR+VJ!i%zTApk~Zbcvs zaOfW+QAMbYx8egd69#)h{fMc}@x7UmoWWVx1(x+y{r3RpKj(Pi9(c8X!-Ym;P``X+ z>MQR!af^f(y5KHCPaODHf&rMgV%&&-{u70S4JZU+zq@`3oG_aQCIbbtdbH#yq6|#J z1&Q73GNvxp`C@nKwe^ATZ-J?9(faSQ&VIG*qoIF^k}v^)fSVI0R_e*lZ!=d}!XkK*{;A%vJ8 z%>+lP^h5u#BYMSx{VYy;=;ULe#Z&~A#_*nb9N#;P=0xx!E~G}Ib>HU*)VG&%vM3In z3-p)KGF`z*^$|E6`I`w%sJZTNZQe^Ba}-{Eu>kid%GIsSTrKvCtSIwmrLX*w

m(-Zz|veMTnd5%I>H#eJqCxy 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 pK1OQY%FW1S5gzH$vz5| Date: Sat, 16 May 2026 16:57:58 -0700 Subject: [PATCH 43/47] cleaning --- .../src/main/scala/edg/compiler/Compiler.scala | 5 +---- .../main/scala/edg/compiler/ExportTapCheck.scala | 15 +++++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/compiler/src/main/scala/edg/compiler/Compiler.scala b/compiler/src/main/scala/edg/compiler/Compiler.scala index 01a4caa14..7de306945 100644 --- a/compiler/src/main/scala/edg/compiler/Compiler.scala +++ b/compiler/src/main/scala/edg/compiler/Compiler.scala @@ -850,16 +850,13 @@ class Compiler private ( case expr.ValueExpr.Expr.ExportedArray(exported) => // note internal port is portPostfix val ValueExpr.Ref(extPostfix) = exported.getExteriorPort - if (!exported.tap) { - // elements propagates outwards in non-tap case, elements do not propagate in tap case + if (!exported.tap) { // elements do not propagate in tap case, but are checked to be equal constProp.addAssignEqual( path.asIndirect ++ extPostfix + IndirectStep.Elements, path.asIndirect ++ portPostfix + IndirectStep.Elements, path, constrName ) - } else { - // TODO: assert elements equal in tap case } constProp.addAssignEqual( path.asIndirect ++ portPostfix + IndirectStep.Allocated, diff --git a/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala b/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala index 890319fec..fcb62637b 100644 --- a/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala +++ b/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala @@ -24,13 +24,16 @@ class ExportTapCheck(compiler: Compiler) val (ValueExpr.Ref(extPort), ValueExpr.Ref(intPort)) = (exported.getExteriorPort, exported.getInternalBlockPort) portParams(containingPath ++ extPort).flatMap { paramName => val paramPath = containingPath.asIndirect ++ intPort + paramName - compiler.getValue(paramPath) match { + val exportedErrors = compiler.getValue(paramPath) match { case Some(_) => Seq(CompilerError.ExprError( paramPath, "export tap internal port parameter must be undefined" )) case None => Seq() } + exportedErrors ++ exported.expanded.flatMap(expr => + mapExported(containingPath, exportName, expr) + ) } } @@ -57,17 +60,17 @@ class ExportTapCheck(compiler: Compiler) "inconsistent export tap array port elements" )) } - exportedArrayContainerErrors ++ exported.expanded.flatMap(expr => - mapExported(containingPath, constrName, expr) - ) - case _ => Seq() // non-assertions ignored + exportedArrayContainerErrors ++ mapExported(containingPath, constrName, exported) + case _ => Seq() // other constructs ignored } } override def mapPort(path: DesignPath, port: elem.Port, ports: SeqMap[String, Unit]): Unit = { portParams.put(path, port.params.asPairs.map { case (name, _) => name }.toSeq) } - override def mapPortArray(path: DesignPath, port: elem.PortArray, ports: SeqMap[String, Unit]): Unit = {} + override def mapPortArray(path: DesignPath, port: elem.PortArray, ports: SeqMap[String, Unit]): Unit = { + portParams.put(path, Seq()) + } override def mapPortLibrary(path: DesignPath, port: ref.LibraryPath): Unit = {} override def mapBlock( From f08bf5a1ad4b2977e1ef1052160d52fa83cef8fa Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 17:03:13 -0700 Subject: [PATCH 44/47] Update ExportTapCheck.scala --- .../scala/edg/compiler/ExportTapCheck.scala | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala b/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala index fcb62637b..446ec7c76 100644 --- a/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala +++ b/compiler/src/main/scala/edg/compiler/ExportTapCheck.scala @@ -13,7 +13,7 @@ import scala.collection.mutable /** Checks export tap validity, that inner-side parameters are undefined and elements are consistent. */ class ExportTapCheck(compiler: Compiler) - extends DesignMap[Unit, Seq[CompilerError], Seq[CompilerError]] { + extends DesignMap[Unit, Seq[CompilerError], Unit] { val portParams = mutable.HashMap[DesignPath, Seq[String]]() def mapExported( @@ -78,11 +78,11 @@ class ExportTapCheck(compiler: Compiler) block: elem.HierarchyBlock, ports: SeqMap[String, Unit], blocks: SeqMap[String, Seq[CompilerError]], - links: SeqMap[String, Seq[CompilerError]] + links: SeqMap[String, Unit] ): Seq[CompilerError] = { block.constraints.asPairs.flatMap { case (name, constr) => mapConstraint(path, name, constr) - }.toSeq ++ blocks.values.flatten ++ links.values.flatten + }.toSeq ++ blocks.values.flatten } override def mapBlockLibrary(path: DesignPath, block: ref.LibraryPath): Seq[CompilerError] = { Seq() // block library errors should be checked elsewhere @@ -92,19 +92,18 @@ class ExportTapCheck(compiler: Compiler) path: DesignPath, link: elem.Link, ports: SeqMap[String, Unit], - links: SeqMap[String, Seq[CompilerError]] - ): Seq[CompilerError] = { - Seq() // export tap not valid in links - } + links: SeqMap[String, Unit] + ): Unit = {} // export tap not valid in links + override def mapLinkArray( path: DesignPath, link: elem.LinkArray, ports: SeqMap[String, Unit], - links: SeqMap[String, Seq[CompilerError]] - ): Seq[CompilerError] = { - Seq() // export tap not valid in links - } - override def mapLinkLibrary(path: DesignPath, link: ref.LibraryPath): Seq[CompilerError] = { - Seq() // link library errors should be checked elsewhere - } + links: SeqMap[String, Unit] + ): Unit = {} // export tap not valid in links + + override def mapLinkLibrary( + path: DesignPath, + link: ref.LibraryPath + ): Unit = {} // link library errors should be checked elsewhere } From a2b1949ec120625db75084e6ea6efd14d88b36d9 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 17:19:21 -0700 Subject: [PATCH 45/47] cleanup --- .../resources/edg-compiler-precompiled.jar | Bin 13139615 -> 13139665 bytes edg/electronics_model/BoardScopedTransform.py | 3 ++- edg/parts/StepperDriver_A4988.py | 11 ++++++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/edg/core/resources/edg-compiler-precompiled.jar b/edg/core/resources/edg-compiler-precompiled.jar index ee6d0102eef4cdf76e728b6ec08840b7d64ea0bb..7476dad382b75f2d9d224805434a9a95e65103e1 100644 GIT binary patch delta 116882 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�k<4U-aT9 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

khg^Vyd~txlb>OM52UXD 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

i1HVyk+~ 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 z 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 J>wp0R{tGgZcpv}( diff --git a/edg/electronics_model/BoardScopedTransform.py b/edg/electronics_model/BoardScopedTransform.py index efe4ce62c..76053a32d 100644 --- a/edg/electronics_model/BoardScopedTransform.py +++ b/edg/electronics_model/BoardScopedTransform.py @@ -7,7 +7,8 @@ class BoardScopedTransform(TransformUtil.Transform): """Transform subclass that handles board scoping for sub-boards and wrappers. - Board scopes are defined as a Path (root for the "main" board) or None (for sub-board wrappers). + Board scopes are defined as a Path (root for the "main" board) or None (for sub-board wrappers + that discard their implementation). Subclasses may define additional data structures, indexed by this board scope Path.""" def __init__(self, design: CompiledDesign) -> None: diff --git a/edg/parts/StepperDriver_A4988.py b/edg/parts/StepperDriver_A4988.py index f74e40a1e..487216df4 100644 --- a/edg/parts/StepperDriver_A4988.py +++ b/edg/parts/StepperDriver_A4988.py @@ -237,6 +237,7 @@ def __init__(self, step_resolution: IntLike) -> None: self.enable = self.Port(DigitalSink.empty(), optional=True) self.reset = self.Port(DigitalSink.empty(), optional=True) self.sleep = self.Port(DigitalSink.empty(), optional=True) + self.generator_param(self.enable.is_connected(), self.reset.is_connected(), self.sleep.is_connected()) self.out1a = self.Port(DigitalSource.empty()) self.out1b = self.Port(DigitalSource.empty()) @@ -265,9 +266,9 @@ def generate(self) -> None: ms2 = self.pwr_logic ms3 = self.gnd elif step_resolution == 8: # eighth step - ms1 = self.gnd + ms1 = self.pwr_logic ms2 = self.pwr_logic - ms3 = self.pwr_logic + ms3 = self.gnd elif step_resolution == 16: # sixteenth step ms1 = self.pwr_logic ms2 = self.pwr_logic @@ -289,12 +290,12 @@ def generate(self) -> None: "8": self.gnd, "9": self.dir, "10": self.step, - "11": self.sleep, - "12": self.reset, + "11": self.sleep if self.get(self.sleep.is_connected()) else self.pwr_logic, + "12": self.reset if self.get(self.reset.is_connected()) else self.pwr_logic, "13": ms3, "14": ms2, "15": ms1, - "16": self.enable, + "16": self.enable if self.get(self.enable.is_connected()) else self.gnd, }, mfr="Pololu", part="1182", From 384d50c31775f3879ae4b74b3287196d9131d952 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 17:30:37 -0700 Subject: [PATCH 46/47] fix types and imports --- edg/electronics_model/SubboardBlock.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/edg/electronics_model/SubboardBlock.py b/edg/electronics_model/SubboardBlock.py index 43adee41e..95458f9ab 100644 --- a/edg/electronics_model/SubboardBlock.py +++ b/edg/electronics_model/SubboardBlock.py @@ -1,5 +1,5 @@ -from typing import List, Tuple, override, Any -from typing_extensions import TypeVar +from typing import List, Tuple, Any +from typing_extensions import TypeVar, override from ..core import * from ..core.Core import Refable @@ -18,7 +18,7 @@ class SubboardBlock(Block): def __init__(self) -> None: super().__init__() self._external_blocks: List[Block] = [] - self._export_taps: List[Tuple[Port, Port]] = [] + self._export_taps: List[Tuple[BasePort, BasePort]] = [] self.fp_subboard = self.Metadata("A") # dummy distinct value self.fp_external_blocks = self.Parameter(ArrayStringExpr()) # names of all external blocks @@ -36,7 +36,7 @@ def Block(self, tpe: BlockType, *args: Any, external: bool = False, **kwargs: An self._external_blocks.append(ret) return ret - def export_tap(self, exterior_port: Port, internal_port: Port) -> None: + def export_tap(self, exterior_port: BasePort, internal_port: BasePort) -> None: """Connects an exterior port (on self) to an interior port (on an internal block) as a non-propagating connection which may coexist with other connections on the exterior port (but not the interior port). @@ -47,7 +47,7 @@ def export_tap(self, exterior_port: Port, internal_port: Port) -> None: internal_port_parent = internal_port._block_parent() if internal_port_parent is None or internal_port_parent._parent is not self: raise UnconnectableError("Internal port must be a block within this block") - if type(exterior_port) != type(internal_port): + if exterior_port._type_of() != internal_port._type_of(): raise UnconnectableError("Exported ports must be the same type") self._export_taps.append((exterior_port, internal_port)) From 0daa251c7cf1f0ad817f91e5aee66efe4bce866d Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 16 May 2026 17:32:46 -0700 Subject: [PATCH 47/47] fix --- edg/electronics_model/BoardScopedTransform.py | 3 ++- edg/parts/StepperDriver_A4988.py | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/edg/electronics_model/BoardScopedTransform.py b/edg/electronics_model/BoardScopedTransform.py index 76053a32d..c250ae0e5 100644 --- a/edg/electronics_model/BoardScopedTransform.py +++ b/edg/electronics_model/BoardScopedTransform.py @@ -1,4 +1,5 @@ -from typing import Optional, Dict, List, cast, override +from typing import Optional, Dict, List, cast +from typing_extensions import override from .. import edgir from ..core import TransformUtil, CompiledDesign diff --git a/edg/parts/StepperDriver_A4988.py b/edg/parts/StepperDriver_A4988.py index 487216df4..da0162dda 100644 --- a/edg/parts/StepperDriver_A4988.py +++ b/edg/parts/StepperDriver_A4988.py @@ -336,10 +336,9 @@ def contents(self) -> None: self.export_tap(self.pwr_logic, self.wrapper.pwr_logic) self.export_tap(self.step, self.wrapper.step) self.export_tap(self.dir, self.wrapper.dir) - self.export_tap(self.reset, self.wrapper.reset) - self.export_tap(self.sleep, self.wrapper.sleep) self.export_tap(self.enable, self.wrapper.enable) self.export_tap(self.reset, self.wrapper.reset) + self.export_tap(self.sleep, self.wrapper.sleep) self.export_tap(self.out1a, self.wrapper.out1a) self.export_tap(self.out1b, self.wrapper.out1b) self.export_tap(self.out2a, self.wrapper.out2a)