From 71ee9d61e4a44013a19a0921ac18db15cd5cfeb9 Mon Sep 17 00:00:00 2001 From: Jordan Date: Fri, 20 Mar 2026 13:36:29 -0700 Subject: [PATCH 1/5] feat: add applied biosystems plate adapter --- pylabrobot/resources/__init__.py | 1 + .../resources/applied_biosystems/__init__.py | 1 + .../applied_biosystems/plate_adapters.py | 25 +++++++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 pylabrobot/resources/applied_biosystems/__init__.py create mode 100644 pylabrobot/resources/applied_biosystems/plate_adapters.py diff --git a/pylabrobot/resources/__init__.py b/pylabrobot/resources/__init__.py index e186b6c47be..de41ae009d5 100644 --- a/pylabrobot/resources/__init__.py +++ b/pylabrobot/resources/__init__.py @@ -2,6 +2,7 @@ from .agenbio import * from .agilent import * from .alpaqua import * +from .applied_biosystems import * from .azenta import * from .biorad import * from .boekel import * diff --git a/pylabrobot/resources/applied_biosystems/__init__.py b/pylabrobot/resources/applied_biosystems/__init__.py new file mode 100644 index 00000000000..8b9e32c797b --- /dev/null +++ b/pylabrobot/resources/applied_biosystems/__init__.py @@ -0,0 +1 @@ +from .plate_adapters import * diff --git a/pylabrobot/resources/applied_biosystems/plate_adapters.py b/pylabrobot/resources/applied_biosystems/plate_adapters.py new file mode 100644 index 00000000000..387dbf2979e --- /dev/null +++ b/pylabrobot/resources/applied_biosystems/plate_adapters.py @@ -0,0 +1,25 @@ +"""Applied Biosystems plate adapters""" + +from pylabrobot.resources.plate_adapter import PlateAdapter + + +def AppliedBiosystems_96_Well_Base(name: str) -> PlateAdapter: + """ + Applied Biosystems™ MicroAmp™ Splash-Free 96-Well Base + Item No.: 4312063 + Spec: https://assets.fishersci.com/TFS-Assets/LSG/manuals/cms_042431.pdf + """ + + return PlateAdapter( + name=name, + size_x=127.76, # from spec + size_y=85.85, # from spec + size_z=22.86, # from spec + dx=10.25, # from spec + dy=7.34, # from spec + dz=0, # from spec, just an open hole to the deck + adapter_hole_size_x=8.0, # from spec + adapter_hole_size_y=8.0, # from spec + adapter_hole_size_z=22.86, # from spec, just an open hole to the deck + model="AppliedBiosystems_96_Well_Base", + ) From 218fdc103e766ff948a7802f7ae30f429bef8833 Mon Sep 17 00:00:00 2001 From: Jordan Date: Mon, 23 Mar 2026 06:08:38 -0700 Subject: [PATCH 2/5] fix: AB is a subsidiary of thermo fisher --- pylabrobot/resources/applied_biosystems/__init__.py | 1 - pylabrobot/resources/thermo_fisher/__init__.py | 1 + .../{applied_biosystems => thermo_fisher}/plate_adapters.py | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 pylabrobot/resources/applied_biosystems/__init__.py rename pylabrobot/resources/{applied_biosystems => thermo_fisher}/plate_adapters.py (94%) diff --git a/pylabrobot/resources/applied_biosystems/__init__.py b/pylabrobot/resources/applied_biosystems/__init__.py deleted file mode 100644 index 8b9e32c797b..00000000000 --- a/pylabrobot/resources/applied_biosystems/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .plate_adapters import * diff --git a/pylabrobot/resources/thermo_fisher/__init__.py b/pylabrobot/resources/thermo_fisher/__init__.py index 008b938ef84..a190a16dc23 100644 --- a/pylabrobot/resources/thermo_fisher/__init__.py +++ b/pylabrobot/resources/thermo_fisher/__init__.py @@ -1,2 +1,3 @@ +from .plate_adapters import * from .plates import * from .troughs import * diff --git a/pylabrobot/resources/applied_biosystems/plate_adapters.py b/pylabrobot/resources/thermo_fisher/plate_adapters.py similarity index 94% rename from pylabrobot/resources/applied_biosystems/plate_adapters.py rename to pylabrobot/resources/thermo_fisher/plate_adapters.py index 387dbf2979e..4168bd2bed6 100644 --- a/pylabrobot/resources/applied_biosystems/plate_adapters.py +++ b/pylabrobot/resources/thermo_fisher/plate_adapters.py @@ -1,4 +1,4 @@ -"""Applied Biosystems plate adapters""" +"""Thermo Fisher plate adapters""" from pylabrobot.resources.plate_adapter import PlateAdapter From 793d403143206d5e765f2d0083100d138fa4b8fe Mon Sep 17 00:00:00 2001 From: Jordan Date: Mon, 23 Mar 2026 06:13:58 -0700 Subject: [PATCH 3/5] fix: cleanup naming and documentation --- pylabrobot/resources/thermo_fisher/plate_adapters.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pylabrobot/resources/thermo_fisher/plate_adapters.py b/pylabrobot/resources/thermo_fisher/plate_adapters.py index 4168bd2bed6..e2fc2a9e3b3 100644 --- a/pylabrobot/resources/thermo_fisher/plate_adapters.py +++ b/pylabrobot/resources/thermo_fisher/plate_adapters.py @@ -3,10 +3,10 @@ from pylabrobot.resources.plate_adapter import PlateAdapter -def AppliedBiosystems_96_Well_Base(name: str) -> PlateAdapter: - """ +def thermo_AB_96_plateadapter_MicroAmp(name: str) -> PlateAdapter: + """Thermo Fisher Scientific/Fisher Scientific cat. no.: 4312063 Applied Biosystems™ MicroAmp™ Splash-Free 96-Well Base - Item No.: 4312063 + Item: https://www.thermofisher.com/order/catalog/product/4312063 Spec: https://assets.fishersci.com/TFS-Assets/LSG/manuals/cms_042431.pdf """ From a692d995d322030b504d6dc733933bf8aa1d7ed7 Mon Sep 17 00:00:00 2001 From: Jordan Date: Mon, 23 Mar 2026 11:00:36 -0700 Subject: [PATCH 4/5] fix: add plate adapter to library --- .../thermo_AB_96_plateadapter_MicroAmp.jpg | Bin 0 -> 25057 bytes docs/resources/library/thermo_fisher.md | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 docs/resources/library/img/thermo_fisher/thermo_AB_96_plateadapter_MicroAmp.jpg diff --git a/docs/resources/library/img/thermo_fisher/thermo_AB_96_plateadapter_MicroAmp.jpg b/docs/resources/library/img/thermo_fisher/thermo_AB_96_plateadapter_MicroAmp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ee6cab58cfb3a3555b5ced6b1b72280a759b1b5 GIT binary patch literal 25057 zcmagGWmFwY(*R)2KMh70QNt4u-B*mZT!C!`bUD|=Qoc?|A(X> zX6iW}>5$JWuizb~Rrp^tqI2=BAHnFdeDD#kcU4wjsTcq6f16l5x3LcRDH(`)f4!~? zaqY5uo(qKkGWoX|EQDF;W(E#@W@fl65}$#oEy1eP^0eo2LBP%FzXEU%z8`#O?fFuN z?(@xUyFKT&Chl1BrB%ls9ePLh_8q5s|A!6&npES>y?;sDEYsx04%KtA;+=kZ+4qdz+5Yrksx$qfTf!v4Ekf>L)|^2n_rR1YR@MXAb{XfG;Gqpl%TlGHReShH(T)924ee=O)UGrqFvi??IJSg2vSP%=|^!y&t&4_l^<=j5>BFw!IZ!=Ge}89g4Ay{1vtPnN z3_#R)wkNxmzd2`oQ=>{c@VaEhSyEg6(MBAcmbLz8%Wo?;_U?m|*h^1UP=28Y`s&>3 z?R+7&*o&69wF%pG!0`(HqA4svka!pZTD^zGbpm*(2U0ae$O-uSVx%2AhBX6~&uslj=U zW1Nz)!}k18^2}afu8zt zH(kWb_ZPDkA5Vu%9fLn@Dr3e!;FctJowYPqTAP3k5+xA#=!*x_h)|u{pRI|c~9Foo7)vz z?xR=+9i6GBCj8UV&W0EJWdN(eRXl4><8otKSbByz)v15pU`|b0$<@ZY3-6znw+mlW z1wKZ42K*yloBbKqy}L^_{DDiGhFI4HJ!jJw>Q4bPgKtM;N4E8WG8l3utCyq8#-pmP zFXAA3%;vIa<6{9t{88wq1-FcO9HhsUH2#Ua6<%}v5aQfI{C9B=h*0TtD+eN4Isn<;J2k{^_Q3bE61{B4Y;2Ue6|+uq>ltHU(oI(^&8A zm-z2rCH1rHb4oUU1JqY62N+={P9LV7TU;4z9hqjjE&1-JHJ7<)viZzy3Jz6!UyXH- zct&^)yy9g9KlzSq&Qo4>1CZznoe%J{4l%pTZ687<5%3?IqOI3U(e_4n`z!^j3S82d z>shnA^j`esjLFO79@crxZGUS@0T6%mcF8N93Ys6ft=m4tOB&QBdFi?wU^5Fgnm!m~ zITf4ZS!eHVJubY+;1RiR+cu>-O?K%u#RNdJ8tBw<-~R;&Uh~=at~(c3FW}bi$IVl@ zZ)We~uIS>Lw;Yw;wW9O6Y}*|1m}WN#jsXA%3Zwcyq)&Od`@Rp`+S)a&R3_71<~~Q{ z`r7r0p2xmKA-Os3)9Y;0TBbSG2POc(kp_;w581OqmczR3i?s-7(D&2wX|3@%-m&hx z-l&1k4mi*LM||Uqr*hk;25T)8d7mGjvu^tGd7obS^D29*+jveUpWcg*n4qNX!?u~z zFLR!W<_bMF001oN<(+dMyXX*8=kD}-Nt|=5(==|f=P~n<)cJyMQ|e^nc=kgEb^hlv zVg%nM?^Cqwvp;@!E>jcdG~zZiaVg{d&&Zv(Iw$k6cgp5Ed1d^wuAxhp=#nO9Nm(lcEANss26tx4l%j8;Zvor9_+`khv{zCvjvNqnA^R%4d zv+Z4-U}(gfv1I$FBR&Bv>ZyH%H3p9jF{g=2{Vd==NC?yd)-YVe4BiP~6X}0207Qv^ zK}5i`_sq$E>i}>8Hx?Fi0;x-Kn}B~&#z4D*nEOO(pZ`HXbJQHVB>#VPfU#yq;sW=7 zHGeXJ#rzNDzY_lc7n0BLh#B=WIs$+LAR(duiIP5>KdWGnP-xJo=opx!WGq-;SlNUX z$qm^#L?{COjhMio!2bfS`S4qod+pIppYjEC&1ti2{Y(C=X0RJXI5SyYL$^-rWR{>g zZ>u^-c7d+xc0FHl!)mJj0wmZ0HM+eN3aC#&kEOPu;-5=1DE@I>OIg_nOe%2#FrF?; zRmi3CWaQD@td!j6FOE1Eljf@ie{}x>=m>w@dxWddC;rx?pPS0iY5p_k#&s~KcQjm( z9NYcu6s)W=w8lXp1=>ke?FU&*OCL0P`w?CnrN&&UoW8D{PG;;8dvjs-%8c65whi&! zB|X=0x)$&kayVu#K?s7nJ%6!lxBmrbwzSuD<~m)rH<6`3(--_!$&5QWS;!ey$B`Ji z8Q=^zcFseYrWUWNsyqMn6Rs+KD5Gs?WrcO`{LJ|A)YBu`x#hb0t+A^kk1BPVkJl;v zVoZIZaQdM+vkBiUNImV((9*<7nS}GMo{UBf%;?Efeh1obiwI7=qy0OUgtKF1{K8)9 zjJYJo*V|K+v%3pWls|K3`=`+gv~796U4Ty7CpWiAuQw8PJeZ-T$TanDgvJKO!;w3D(Zjsdiep86iL`d0w;4nV&*1+>$H}SLDUD51# zBhHMfwU*!e;5{-Ql+zhdPBn)^tqxhKtgrEOuTi47yw}{V=6vKI>juj-#7?>*CrX+G zv8uz9hB#`pe(@g*wkRR0hivhU$VpVExwD(hjxD05B8#nM`tD7CMzNr2{di;cJ~A`8 ziQgQW1c==!50#_(wpC8=48#|gd={wUVb|S-%^Eo4eRz(#wZ6gc@;R$YTAntUYM`fe zg*tbkF^jJCs_u>2(A4Va-|9a4{gjSfbSaY^bC%zNdbAm&x&vxUZGR5;a9#jd>IR=( zD88o7cyh`N*Cov!pExG5{4p8Z$Z!sxRT;8#K-zXjNP*Y4w))kC5T%1>D-tqTd6N{2 zG}YXJK!*doZr8bpRzda83O~}U$T;!(3n;j-*aWg`L^Q=L&79dx&74DdL=UZpwAe4c zUbP;Xw8A}_Vx))@}!sY(3)M^I9o2bH2_hi@}lqjL5gfAN3gM6Maks4d&|5CiN9$X?b3*< ziPv`Y7#o%Oid> z{s{V1lD_!hbYaU*LAhwQSB3Rj`(!YBm3_-6MJ!Dx@`WysLpsZ=5w9pl35y&DdgRauGW+B7D~aCux-B54;q(#_!i& zj>k+&Z%GsT?n~EQ&)`ftR8**;CSRSHJB?+_Do?I&@Y%CgqMf2T8!pZkjWrFfruHAH zr5yPeZe$6RYWzpP6l8kxTV!@iRc3ZFalB*I zsi%}$2PO|K{{=`^b`2J*-UF=6V(h-_8C1|3lRGvT=fr>}d9g}#{IT!VZUk!uvPPU} z2h6B6<<>bGi5|gUx_yFGypt0v)B8)0R;!TRg7e0S<@sH1kZl)mRib|0&e`ZK)#y2` z=Uodt!Y@zSO|R)a(@34Axq7&m-E}5seXWTz@;WPn0zOuqy62ovZxQ4{3zM;a5N)eX zc*OR;ww=0O%=65Z0T(Bp&Q++H^JNnEPxVOf8f$dzdT-X)!i&DP>E~eKYPh@K6J-07 zTN9mp=bP8N#%<2c6>qNgm@`&L`dy7bh0G_-$?M1yOo3foI`GigCZj8CBvCi}U_H6C zw33uGfKPxvSVUfWjx>$}+}sjWQDaXKbvHFrunG5CMp`dO-VnUCo6TyP7>6!S!h2Cb z@s2?{iXn)mqNaRJN}qx>-L8D&ZewHsC1<8)cicJQ>(Hx5Wq8Wbbx&cJMIGE3Gf@Ml z+J!>?0-oFwQONQn*qQ@+nD+=Ybk#fZ;-qo;PqfUoSl8ayHO=ubr4g?7r#2Mc?ZcZ4eTF z7@LI}j^`;*n8FRa$MfB>(j7x3`Z~RQ;LeDpYgRKelD^|?CoJA!$;!&%*Y7;!OrR2x{%mfh*J8)H%Xu4V}Q$rJi14|Iv~HbDZn zDWu-7AH8#`9S){S;yJ7ldu(hz_9Q`@pn{d5^ZoLUX`XG=Vz)~LqFe(SW3h>|s;NmW z{R_6~38sQ(a@V9r@ACDbsKL13J*?|%F5>3A&vY-n%+~6JLV~S7Sy^AxUOi(Eo@Qpl z{oi$7G&hunb94!ebK;4u3di$$vg9DoGw}?WT(4mnR%=w9lR5WfS_Klh);&32GdC!> zRua@U!SrN3>TO__iMiu5yCQzGy=DhhB@ArTD$%tcXzU4QGD(_ydis)i`NpYvsW0Z> zsqWqx4Bc=y3_Du-rV%AmtQ0X0l6DMow$y156gPsY!pYV9c3D6EV>p9XtBPv-CSe2hc6swYY1Is4!n}I&a6)O`H3L^U>1pX z=I!GIwZovfVw!ZxNTkT1hh}jzzJ;z5_Yf5&%wzXR{Z1Y;wNrOz=LuM;Vl}~ZJU6;- zPhi@P!ImRPx6MO8J9YXCfE{<%Ga7Oq>plEJj$*%X$b~7+C3zh~3>!7eZ%^#qw!6X| zKRDb=4*Cm-lCECkcBZ3u^O^5heu%S`>s7#j3zs8MadD02<`c~2t-Qij9!pm-m^bhH zs1xk&3Ncp9feUr+-3bL&S!0JaRQG-cI8A>6{SWsBTK5KCwR)OzBKK*(o1$z8UJm?g zaSjcrM_FN9g`|jv@_Jnd0ztK0aD2e&*?}$g&1-14Zq+KPx33h!Tg3{aoL)`NJ=@I5 z+qqTcWh~5*Ug?{Tm|xx3GW`eB+h zh*F|c%uC+8qV8OUZqz1u*Ha?R$C^EALNr;*@NNu{DjhOvVD>QPuJfBrt77c6E}?1o zr#;jB+@{qS^()Plba>SnqLyR%od=Bc4Wx(`nJ!c>^d@fTU-)}F{sPWlMhYxK<~ug< z*#dLH!^#ZU>PoL3Pxk$`1@+^ofB*PX8X{U-SK)wA-s;OBU_X7M7pN5XMpilz#^a;B z@O>qoG@K)Dt_C02A~*dPpf_~JDldEdtL!>cgBd&S_F5a+YLYJKThad4t>)9cyO*k% z^(}t8N$<7;!#`ls__jRmzj5ySpBsgQNVbb`_3B^LUd?m-lGAS4@9ZxTj<;%e0#guI zpvaV~>Y5C?22D?Pd$*(QYtc2v`U`7dV+g8l2u^5ogn2ual4=;SXBALYtd(#Q65%vR z+YTAdBF78T2KKvw?Vb>BBoT<~tvpk2!)Vbm)VL|ez%trzI9hj{F&61DPoeCzMqf#n ze`r13CzNp0}uS%`Ett#YBLRV-aRfWe50Rzu>E>r&ToulN2jjCf-ct%^R)7XdHc{qIwIer{rE;NJYm4=dzFh8E$YI~U47G2GE_hEpW*jsvHm-1| zo>hz$5fEHpL-Xl}iM9*X63NTB?97ysz$tnxLaIOkxa6wIe{^h5C?9NGcvTWm=D7hD zLW%=`;q9&(J`S6hb(tU184gwpe#q0F9`UUw=h`?LJiSaK9|mt;-ldhJpwn^lMHQ-~ zV{T={NKr^#1nmdARd+kvHS~9=k>aKFMRuUazD%<~6Au(u624sxy`dgdiX>4rV21eb%FfD*N`nb^zMLV` z+2iD3BUxQ(Ec7V+0l}DUyU(yE{+Y1%G;6O%u{@+#y{`RUPjB&b3?A$qXDNtKx`l`c zJz&>-vZXIsNbP)y{WE0?SOWd_$H}*Ae|IJ!D2ts76`AHfn0pkL#W6NrGa)eCe0mU35H)}h7_byRrK4+TZ8Tv-L` z_1jZCoa`o#Gv0NsrKW)b&#zSk;i<8$JojF#{RJ@4#llTE?iPO~%gERUiAiWD(9ZrQf~7Kq0H*5(3E`AE>!^eDn?A z?RcP_d^$BX-xA8|3=ciT^e0s&Y8pr^Rn!!=N>|<-Pvg2<-_0c^J<;<1>|E5@UP%Hc zwqBjuQ&GQIgHi*a@0V%HoWYZkR{kGn8G5R9f@R7F35(RCrW;K!(bE12M}r%eEHd+o z)loz6JLdEO2^D&(7Y4tSGuI~uEp0{zNWZW#(5TT+B31%bDpn@K`h+&g3d<@-bUR!T zsm}5bZZ@3Rhz!Q{6%g&>rw$&rH2} zC??j^4LNGQ#U<6<-Cx5deel7}$LjOd{^_@{&wlfbDH2yxGZ_5EdE^Rf4AjtFLA&og zIR$lBvIw}ApjK7o2s1@*GfM!s6Usr*UICRAY6qWlJ8y2r3h=E*zA$A(_8+m?U%<^r z>hl#8MPX-TD|6&~x9DE}0+50wyp5RRJ3l1q+{o9;PN=qOnzbVM-kS6vF9p@M{~mNEU;9 z#5w|T(eaYnXb$FYxmDLc!@2bfPClQkpUc!#R|6QQ~Ry zzAEHCwVlM)(Zq~6kl_)+M9mU|B?2e*U)$e>QodclGac0nsCxx9)EyI6(uleG%9kv% z#%efc?g=>k38=Jw|MeGOkW_hLKJ>7qk6LT8r`TRSz(H3b@{ikoj>&;4BygB1z^dvc zl_@I5u1uxkbI8?rYH2uBQiqx}F2-M8O1z@X`wNG6i9IDf_zxsIL=f{3!=q0YmiV`inT@sPS0>O##=E#>B z*q4WHi$+z5a=u5Z>2bOV`pQ%oGf=mvtXGH#{O7^-1qBth!&Zo?z1OVFO`L*0INE3K4%IBMx)_T$&x1(T@Z{@P9t)WsBmue%$-@30I?r^o-yhZ%gP)3{LqU=R>s zP|%<0w9kCnXFBck?IRilI@uRU3|1v0R8n#l5l1$5;Xq79Wy2qd6rxT6P+|oQ|K`=8 zg+B9Y#W#ts3onw z*}=!{+$6u|j{r@|zCdb4oJ;OI4L-}jF-9cko)r*0T_et3tGWJ4IY-nm^SPFCdGeBQ zIeex<;)^N~77xiUTP90KcK}Wp!?)5otzikOf$;X~2SfB;1WC3~a$SYW1*H-Wl|hA9 zsI;W|z0m2N9`%Qt6)Ky1%Z|mFkHJ5sK;g@oZs|!9mlYwkH#7nPZjD8k>VY@DyB=X2 zK!a4p+8NSGVOF-TQZYVt=8|G9z08NTwVrj;HzQ zY<~f&@zb2`P`6A1XdCl!B|ItH5QUk*ocEff4qFMKNBs|H%=6)+6QY(u|RSV9HgI~LZgb&PP(^&nQCoS-nYeQ+3^fTg_IGr6zwuwX?y1RYzBf-nXd>d6K5Spr;&v?giMw$yfNMhK%vE zMuF5tOCU|fi>k`q)icyJY|Eh#$c1GcdI<)m@&i>xg7?dji*{~veO@D$TX>jcVeGAH z!<3V^70(n#=&+?HEL(4WUH+{lUk$1XP2Iz%o&b<3PWj5l#169&$^|j zgvfSbgm%{cJf#10 zz~yGFtYzwpnspiX9JGoiJj~~ELqsC%wxsr|ibd{|>a}(2zX0Vg868DS!ssPabXP(x zT^=o`Vh4G}7B0r>; z8SL3YiLSJ*IPz(C%OVj}qRK~q{C2lfe8?R$hSLrNriOD|r&!sju6LhwtCKXwt|wHf z3<6&2GM8L=^X4~gy|ShZzCWUjy-C-=(=>ONo2aNKtlZPPb_aPfqgUt%mtLlifgHcc zK3Ev3G^<-nQqZ>iLO7(lme+wALYCvi3Y1EU;@0^oH*<^9lZ_3KW^LM7q~@^WEdyjNz)}aI>;S8>*4l z*3^xao2z0%uUWnlJl$`<)5qd> zRgIg{ZM)}S;ON*?=cvn6-6SQ`weT8IP19Od!m7OFrMGOHE}zFj5+I|Iv zA^RqyqhJCkZXW1HhNn}usEoFpZ^=!qd-zDOm1f(r_U=V=FBdJaC?D*XV4;nRRvFiH zG{Bm=hr(aXrBx%;E)WKdg*qDgch1`KCz$HFEG^~=^cE?BSyf{yl}gXss3={~yGof_ zl`Bow{>MLa3hN<~HXD8+$jO$bPG1%t)-euz<)ySTBG26MFDcES*VJG|AK_4Y&`STH zgTD4pw#`v;CMmD7MeYjJ@5mKJ=YJd`pe^G0DBIn zE9eeP7(GjA-);E?NYEb|FrOn)I@0zRP^A+oYjRMzL*aG|`C#XkDJrDAWs}8HvE&ic zcGga&KEE7i9o3s$L!+|RoNINMK_r-@^5<-pk(FN0oLar2Drw#p;Rq8-#appXZaE2? zfKEPeS_!MlUT~~6iy@G$&0W|ITTh@Xr$~=|N`4HXEFu)uJjwcu(Lx`IKJA%+o5%>C zk5A0@J~S<ud zwX=6qCz=J1etm*KgkAXa%KFj5HV;x}vA=9UAE@7a3>Gun=B8V2ZT{dQ#x!w$(^S9 zzI#{h_mK>!s<-+Bg0Itai**^q6NkW#HSuuzazU6c?JaWVpN`LA2sNT6FcSMcPO#>M zF8m3o@*yF$SM6^cD@domr(l-GJa}G{_>#CGlktmA#9Fi^g_&?}+oqsCmMAkzhqy}Z zyCQ8;taJ;6t}iz6;z^AmORe*=bm@s*I;@Q2dRY1y=E*`!zXt(F-eNnTGpxzmk6@IMC$H9{S@{t=&0d*}sOJ?P6te_^p5+vq)N6aXU6Ed(@2^}y8 zo8*zZZqRQMp)uz$Q@B%@1*dpb;|-CivG>)B>?kQ>^A5~M{5{1MldOBr7e1e7D`KJM z+fgVYSa9K#XoF(S@=coUI5I zwk0H8ilW z158|8oS~XEf?@ks6-M{MV5u4gAy>QEjXNEX!tNjSiz35NMC=-S>Mq(AOa8bBl{J^H z%+w5GSF@!FyMff-)ZXr-g`@moP|o77Rk1A91x>$r1{PJ}O{#RA)V1N;Rd7Dd`I9Nr zqc$}e3Mpw11#SDg+0wmSse{=ocEU(bF55R@qbnQ=#f~S`F*8p6>@IWZ7Jj9|Kz3cL zHwqMlO{iG9>)@2u=@(kZ_i zskZ_zPpT~t?IpDL*%rOi>idOlu^3N^)v=wGPqILP9w5z+{-p%=`X7 zI8S$e2R`}1R%}DoXD@39P;u}-=Orm5KJ(Ni$_L;P9lcddA^h3yP*i}=C8}Jy&_Bui zO)~vrU|3%CIG8dJFov>s`$k@fHZ|u1Z^J?Mxne zqM}WYmby=Mi{Tx*;89bdPd({dD5yn2^Y@+AGtohrt`NSq2F**>+J&*-$sBdU zt&AilDU0heOKWs;=CouDopmORZil}Mv@RG4sAy@uq`-@8n-*s2JZL$k7_Zd3H>~%Y zcgg+*P=5Z<4%LK)x$n;tirwp-s+~H_t-1U5>qc!0LE=Vl~*IbDyWJ71)#7sd@NIWL)INHlLFlX0sNcdKI`4`|1h!fM*~`;^gEAi^(qV8_bAAr}8OP#W0(6L(UY8%p${iTGU`74F7P{#x=dtlCGN-obD20#KdO%5AMEeyE#aHcSgD{?mhak?R1-aFcROR+{a|9^z^k=d zzrq%7dSM{z;jTlxYt8LhGpFf9&_Ehi;DJS{>XMM@)pt$QO#T%&{AO{!q?Q2`KS_5w zY$wd-8aXJO&h&vV!D9Hmjw-$ris4ZC8@<}d%q=>K;BC#w6+4ZaGBFI#-Q=5AKCg_7 zT8`(S-G5{*x-bVx4~p*oLM665XEF>g1O=h^BM2PZL&ecFY{2vNi1-xt;wlP~51abP zNNEWqA3ABd)FA1q!gR13(HR7^AoMJ!2DJOK2(0T1o+_rk5I^`t-Ya5uKXadrnkAGL z)fiMrd=0Da)PTxk!<|>}A+y54Dhcomp9YO0A6pMq*l8URKVlU#bTxrl(TAJH&bOEv zGCUZA!dQTHQp)ENmWIT3;4`xm-mUFM_B4_9%;d!K*t+dZ2$V)WTPz*bDD+}*+RYVy zg$30RGoYU@JQu&EIm>+qf`hkCw?0kfW53hJm0l{Q{fB}?+%E~+dmSW7TwPB3tVxui zD;WOCepjPKFC#f`WPa?togRLxu1fTWKBO)P8)o*{h)yq{WGyu{@NQLCFc+I|x!rdW zjqy%Mt|ZiYV5z)@5zIkXFh1y0@wmN5%XvcdFRHvbOC#kshUkBox-n}>5@fuGP-C?r zhzlgMN;CAyLI>3G1*6o#XUwq%Z)6!BW39l6CNf(FU~jk?Sn5#g!qj2rc1=ZhpVhrr zIK<}4l;OxzsaM(GI!s}O=f zyU)$>r2-kcLcEE08Jce|lCwspl4lIhj;p}<)m2>~vmJ(Nze!NPme5_(=eC^=^>ds4 z4}d{J0RG*!qmi+SD4`lT1}3ryD;AI%HU#v~UH{Jk7$LI1fB~6+t`7 z#xSX@lNUsp*0X=CO`z+vP zZ?O^Vq>#5PCCy8UVmfHi;=X4$IJS0EgaU2epGDxUiuocOuisESk>|&56AwYu#_|M< zeX`RMg4dS}7!M4XKB^MpL=8^btiVQoF&#Y0ukfmxl-d zY3O&CRd5r*U)4*(t2CTRsW2p)8gV#VA35Jb`=g-RWB$xd&PHUiU*p5`>o$>O&`O58 zvYuwgFnr4qrIk|6%G%VFomB`l;tBSt9`27CEX&X}KTAVV$RsrSCE7pF_J^L)$}N04 zQKx@a)~5j;c#z>Y{K%Bzs3;Z#O`bZ3AoYmau#U9cD7ojzjp#n_Po&Ij%@~!2Ov?@L zs&$OXrHHZ)>d0_E&qkaaMjk>99G-+_DGv;(LqsRGBV)(LHSH*qAK)kA`=Wtz4O`}w z6e%rUQ&+iI3h11~X>A)q(ti25c<~%#uk9Q{Cy&wlup26ybjgDCJcp7Z- zFJLP?auy}Mi$c()L%RySzGjS7XdLyN1Z|Hl*`)t*EPG@#GyL@Q8${lQjHY`=fyF(e zxK)^G<+cXnA-z=(i!OGXiN{+eDZI!r8AYjV4g9**53=Jh3#UJ6-n~?^@fF%)48D1e zOX*fo?%Psb>$fo60-(Jw^?CVbq`K-{jIfg5k^F9U6*de%Fp(Mrl4IgbK;OG$3c?p% z^JWM!HgLD*C0zuseo?36xvGH-UJ*!d@Ea!086SSO2a{vIoSE6`p;{T}y$vY2H$X7# z>P~|(26Ng3Gps38d|Tf!7o%V+F^&PLo<(!Tou{sf7;S@0VO>HTL(18Kcal8uig;<^!AZ>5*S!84po6I`WDfJ-HynN*) z@wi3P;}})FM*B>7i>4aI9wy=YAAV+Ug=tlsrxlX91zBdUwik2yN0@JF2W5eo(5(&7x;2GxsX zjXiB*(mMEhqiKr~Nd}DfS9ZyBbTXa`2au58j?iu<3DJEgZn3ch6p<&2CRBk=0#9yq zhl6g#EKXTlb7A6#nUMtiMmAmE-_ewDS1G3H@EYqTZQow;tvCdU2FjUZmB1Gn?T{o0 z(#@6$`;YMkL*uFJNc{O=u$`)q8EmuNmzE2>JmaeJ9gYJcFT<3!_r?bZ^~p?xLv_HT z!&mtsXy_}^P3D9UvK@N##fd{0MCrSt6IB?Dc~z_gOBw^IG_2N&cEuu4A}omo><4Ug z^|_eaiNKwr1f2vJ1Qr*V)jg8QxQ+R6EQ^!vI8E9tXlA1#z85vy5XlZsI@XpO`zbN) zZuy6{ukkhZukWHDCWBdGmYAPav)C38q@M@P+xeuoXN#p1rwf-Xh^c6e(>;@d9IQ^% z+$O(FnGf~SIYwsddi>CgKB5rL`wJ)};6X6T?0`AT2!0*rT6(0}rrjN4JaLqdcYyL! zGt39%XOTZLzRG3B(^U_%7Pna);w0uw?5bc7p6FC`$Vc{5swEqzzlIGm`w@xO?P2i9 z52l)HGMF0P$thgU1va9TDr%?87uAg7_=*z-WAT)PiH3;&1aEFm?eHU(5o+DA zxQ9ZbuhDqyhAlDHZozb#tki#>&YSXj_d`b^sR$7U{T<;JPWmNrS|uUEk&a}B&@_^( zD&B(w+UA#t&z@=zp$ycwAiYRL9lo+ccwp(i(f6y*Qw~PskT^Tp=?xnF{~KX8L4lNdY zv1vJ-n}4xZp4uWVK;HXS=Zt<1d2Oom=pucsqu6!+rPyd)=m}|{mjD!SgR{qcuiFZa z+u#2KbC0HsJuN~marYH0rnLJ>q;Z9so`m5%5 z1D5ok-;~o|=`N_KZQCGfnDi#Nk!WH37(>8bF`%Kt^aZ%Uxa~6TgBBZx!Pl|}6mJQK ztR)}u8X0yy%p<%a)X-0?BVo3|;WV24#+m2t1^v>{pS`3)-5Ljhu?+Rhh2*W< zkQn8T5TZ33OpU`9;GB-G`Qhl@tWwSn3}{`8fYR)S@bGcs8k7?{yA<&G+mzOqACYcW zD$(hb_R&IGscz5c4}uHW{$DiE?XdaPqS{}DRDCs7`z@pTP6QDd)7DHf5f+QB92CTM zH>}MNRlYXyHt8Bt9!PBx>;mB)z%h;|jd;7i4n!j*YCsnXG-gdU1)Xr>FO{q;8?V=M z2g3+wi{eK|^rNvHsGPZmfX|^RUZx|*vi-3;8dQs4^pVbeK>x|Rjt%EZ61G@~lI|i* z#|n;&Cvl<*AEPIZk&;oA9(4vvqK;0`?@`-Rg;I)I=zH?Zzn?ZaqeHJ?Wn4-fYtaNk zV*Wrrawcq1Q1lp4;l(#H>%1QFoxCa6N~kq2Q8(hNpuD$_Ar>l6bZL%~V-)@{)u&*` z^JSOJfG~|zlUT(-M9PQ;T3pa;_PnOFc#~i39II|zCJX_G2f}{Es}*oK_)&QTvWO|a z!-$8SBo?*ytGKax#Mg@*>nEk~;SeRdGk&J9$UOHg?{RE%hKJmd^rcJhuUlg!H>QZb z@bx>0mi$nuBMxTYG`M+JP-=fqiX>sVAYt2Mg<++Vn%hJ$i$i1Y(?75=sa3Mu;eftL zO^h@14!7xeie;OBFV@!x#gM{j)a&XzZGj=#kqPwzuFxreAE3BSd?i zj`YNy-zV{j9MG7Q=GOFkR$6?5OQX%7qK7?rYNwUZO@5j76s6Az9PeB1>Xt;rfOgDt+^0ybpNI_=`5WC4+w_T&a@%<>LmDko z>Blae3}ftl+EVWKz@ZtZ6~$yUpZ?A=3Jp08hN+%*(I%HT#O zIyC1KsSjp9l>1@nm0gt)8>>i5AE@_Bna7_(qAdif!=XDV^;JeA!_ls((H5OjF7(ZZ zbtX#Ez?(Hj147LBS!JSk1G+jjjvGI~(vN}7r$2+3e`1ogs*`gng~Svg??#!O#!-2m zM@W|n2%D@%QC$nDwo7#ZRmD^Iduv;uLMS(7%x20*>E&tovK|DBRCB$N8-Hs(q6tslaeip*x@*Zi_eN%KO}4Y^M??v zKkMq;lFVZZ`8AsyQ+~}TgEkqEdQVeui*4n)d)VSdzK~Bl?x;>ya*+$Hg*H;}T!n>V zw`c=$?6Ev^N>{ft);4(2lGYDWRpdw17vih18LZ{dDMq4Qu&zx}X`z&?)=tvr3~P8Q zxpZ5hYs3!mC($Xqr#N*(9I$Z7 zC_)`MBB$gvMY=j_svCtM)HA1Ie#FY`%AJ7AE9z;+SqJt@<1}r>Mrjbr5bARpCO^&3 z-J&T8kX?lETNpT;9xCj;v_glX<4d-5PvaBgK6+-_BQESde}9xglATKvdSD)y3dM3e zbgpS#ulV%RWQbK*Ew5Q8+1kW4jhoiEn?+3j{*1;sK-0kkr9zpiRbqN~&!xGDmD;P;i3S5xm=Q~?y z#(TdO^$Ut#El0}$!?-n^@OI&eE7@S@)ZRk}@$8U-D`qY*CM8ZT8x7m3AaNR7mT%sX zzdiOL7LnxWO!2?iRmTB`762D0XuM{J*CY;H@~#=FHe!Y3!g66|3~+wn8bJ*0Ed&Vh z%6-QrYLzSoupS~OC?P?xaPFu1o_tf{yZXH1KZG@=CPK)-3!tZdkl#azN6{ZDmpP~# z%6uJln!(kBA_o6@y)2N5rFyFzO|>5r(=ELLC^~ldmPR*ArT48-bQiXb#fq}Obx^~nBfqb z2*pWQsLS{b&uGsW{0RLu(wXlu05*8B)t0+gNc_Tp1wRi}Oo}(7U!Q-BF82dap!}9A zHnSri8Rt@t-<8r=oq{T*k1h%cr$|QUWO6cl+U2i{MC9?38M)sb5mfXY*FC{X>mHic zQDzcM?1V9I0GS6kRD1=sF^71|fizHm6>tQX15Y=`q~Oq5<0BnuLyu-U^pc^f%Ly^Q z_l9;Y`tn_Mu`xg~rI@%34yK%97?v~u2(DV8T*{WY^Pc`ED-xr>lZ}=yB^tHcY%G5m zwqTe1OS;(tdMO^&77fdjq1wRVpNcb5uOR8C5MpRp5xUZ?Ps#m0VE7of(mxFe70L-o zvxUiah~WdlHG;>aGve3uRgiwD5+kBQvOXco&+P`M=MQ6!Kho*24-yws^5w)ia0nl) zBm5LB*wF~wi93)EMgwMu+lRTekKQe4S5Ksh&i0m|_wpa_K%!ic?G@~^75rop*h_n; zj#IufxksnyhsPb+H-u4K+2Lmip(%_Jb5@Nk^FysQ-2oijtU=`%-WN;uS)Iz*XTCDLu<^fjjz0gL8f8(7M!*hUht- zM&!SDzsZl?G3`e*IQ&REuzRzFrD$isGg((&D$n6nH|j?mY*Z9P4RB;yFZz&8fT9XnO+)Def$z%DcSrbU#jjY3!-512(}y6<40B9u$~1JNAJzfqHI zum--#m!#K-p@iF`_Yb*|f9~PQ-jA>4=87Ve6Qg&D4^$Kik&ODBkrm2`q@Qy0z#t*( zu)sB68lz z2;!TU%}{Y294##^ooYErk@A^MwyTJZq@KVom-*YCrN>-<$#a1^Wl`6 z3Z-m*zal!FAT8MUhXQlMUF^hu2ug#Z1_0IvT35M!k|{97c%E&sPd=2maO7#o-aG#kqnpw!B>uw#`yhYZFY}3lm`yP%SLFNrgaQC>C2F_^ZR7LY zQ7Dj0(FoGC9ss!E^xU90B)kEDZDjJ=#CI#10s!USElCYXc8U=IpX>3rUoo~Q5CF79 z?(gQFDh&<*2wBGsNktv_Qc}RB7Ebc>a)&M^V8y0TE%b-FTrGfMvcN@39<5saCjfpK zb@e9)E;K5{U%*0v%(s3FGk!p8C9kCS|7qjA!kW;Ug`Ge`2|*Hi@1cYisv;^SG^wGt zAU$-XNEPWN^dcQpia@ARqzO_(4{o}Y;D#uuh$x7Fih4NbJLkXpuhx69Zf2gjSo1zJ z>)=Dy6hKb4lv?`V2Kp@xpn+r#H{flFS0GR^to^3)7O!A401<%Qe(Olw-2*UAes*f~ zTgax1qeiP)zTr>ge?AZJRUIKnY+jX$1JG7;-*BdNgscGo70`(%YhRd?008=b&}s_C zQ6DbD-rV(AMh-Y%(rJ%s9<|$lC;H0omRIEcxJv>)nxbu48NMWdIAovY{eJ@hsAgWn z`#%IwG3RRj4?$kXasG#ZD^!C2ApleF*Z(DOQr!O%pjzYqh_&+ni0c2~|8uHeYG#@L zXl5V?2)cC5)R(t_fdA3VF0f0@T!q54k7z6iI`13>#(n*NrWy7Z@KG2$rToK_J%r_; ziFx}Ba+NyrivNp5prMsIb6UoaM~r^~3(E*3SyKkMF|l72;a|9W9@}Bntiuqiuua!s z8Wd6dER1T_Gu!HqS;nX8oANr&>TL;_takGr6FD1Fujiknm8*nv0Y9fp*C>o>{+KnM zcEw5Il;f`duN>O%r4Qwwu_(JTSk7m=(K}IjL+Bqi4M!LfvCQLN$h2u1q2<=+>6MsK z@3NSS?G>4k5O=n6adwu-n40_7C5B7gk|yNYno_&I@k?* zPL*H-A?MlzSPr%@i?Xz*hTVSF#}B*nM!{Y>RTLm~R^eTkz2!Sb?5|fxw71lw`rMxa zg4^h7Dh>W6JEweaKTD1bnnh-P_B+M78?0Ytv$FfzCix){g z$PX@?&!kb5*t$t>V-S~@Gu zsztoL@RXL`71OjQYxQDkQ^OiYgFP+n>y5@&rB#z1{Pb~tFDfXi!$-mWzJ=o#dKws+ zoZiuSi=6XP!(X<}1zXm+C3WMzH;@d@AFF=pv5K`~()??cpmVOF|H8}nFUL{~swWWF z)=pR4HtHm2BQ?+HQ3*w5w$eCxUfI#Lxg=G|*iyIJ*7XO|t~ZRvUvNF#gJuZ~D|0bw zm=2FMb@w9{uJ!*eoA#`oRja^iIlge;Cjq;~T!%z0mm0cjSi-w3L;&N()o(K$8+gLM z5^Nc^oHOPpuP^kOSNq`fvCkUzgYqDeZgUg7Jem5&@0#Dqmx#D*(U_rRgJ>jO0~#eV zsIt;Z8zdyp<7i7{-QbBu)og*g!)|gQ+|+#5_vP5#(V7bDM;l5LaQ8B#URCs%i6PZY z-0Xh!s(_quA}wDV182Z*&Yx^DcYAD)P&GQj(OUgu(oF;CQ>|~IyS~2OmR0R`)RDo^aE;7i;rD#uj^?RA({L~eF~nKZ(%ZKODem;ev1PETzJnfxWN{Y4DFkLbengm)%6<;1wj!}PQUyNTQ-84F0=BQ>+Puu;%cIED;&D^iso+ z{)HmPA7MN&BX_oBv}@cw6gnr1#C&FjrGphRf%#spqR^8uku2{ANCYNg$Gl+apIs6+ zSZLhtFW`j`k`r>CrgeC8Q^M9;f9j;jNqWO>Cx*zG`jk8|$q4EVlnXas9w1K1_#eAb zZu)dcoo^e^lEW&f;6EiPnPLRdtVkj)!rK1S&|#=whsl27tUw>qS|Upvz@JQ5N95-a znJu5&5!q^yT@fH-7fgDbMG=3~qHxbW z;I2_&ZTbHG#}Y%k53IT_2Q*IdT8k#O6)9LRd9BGgGnwX4RKs;29G}BI5r9=y-tw64 zs!`hx`S1Q^;a=aT7%EQD)()wg|=IG#!#(v8=$BXf$#Ypu3^IL}mhthhWlGubJ_ zcaK9J5BEYCS;I&5uD)kS32lJk$Wta5r!!3Y(Z$6Q1zW6#6tjFJdzEy*M1SByr|)yh z8kyQM_bj9JlvBGu-w?Pc4G*O^6{}J4)Cs(pnM|b%kbL6097X5i&o83O+>_BE6;5DR zhj#)j?N*F}tmr&1G#|$Z?>yE>GP;3qsdS^&Zd02$I)E%L(vYc?VECAIVnh-QvwSa`7x47B#pP98 zb}i#^5#D`PzI+!kWw~8VnV)a1LHS7d=S>Y=i%nuO3+K$B#)#34*VJ8T7_1h#MtEs) zq9LO4PrG&0|CAamv^8zu++K<7a7);6UJax^$LYHz z+nTqA`ph&_#`H*Sf{QGO4fSr?OfSm72*w)AWiWXjVa(;#rvX=V`2%bte+vtm_gLCc2qIeu4ypQInh3UHUHiU9z4^&ZLE&+ zI5hv0zhm9e79)09z84f4uH4N@h1UE^b$kPkzId7^DqiA&u9IE?Z~S{KRN62h>&Qls zjs&@vrQ1Ut8nYB>EiCk>Jc&}o&>s(IW;0v$0QQ-<-HiIiXrQw0?D`Yv{j(JF26YS3 zrl<865IA^nmHLg;w&5$wo8V2eFOrGe?$O~imrFM^g(VZcvBdicb`N%?wR!JpRU|W+ z28CyFm{pc{LW0wc+QcMyS$JnhAik)3mtD@a0E&613t(|!c0-uKpo?zqX9~}>A#92B zg?{MmCI(@?U8Y@`6JO?sEVxsnwy{way5rME%RJf;dTrwXWy$YXtRGwN>VI~iVpKV5 z^Yb@?8w?cUmox8@Aq?dyl`m*8dVy*2ownKW$8>3WQ*>9cTN1N@nHLH;B|y8a(0p`N zkaGKTdoi_xK2v5qC z{yIGQ%zo2|uSYoOhvvp4-%!bJd>kw6vXm;*zU>8UD4S6rfUwxF35@Va5n=B50NIgW zZX)_kw#?tvOzi&x00U$mevvyIxxcEG^ZGx_?u~PknBvF#N_jU>nd80fBjmOXs*Xet zna_Zuh_uF}XX+C7(5{Zm4V{US)+nmJ!(7l)2dx2|Hn&+fU)d%r zZ{Ty)eh4IVMT(i1Xk0D>_@7~3OHR4&0{JkE29Kv&AI${p3e|>-zy;8#W9b zHcR$hQZgU1be85f<@?6B1%ZME;A>1f?04*{f~=YR+tX`5^cU;5yTCNLQ=bR+9_JZ% z+cScSMzWd#ifIuq(x;Q4XZ|^J>~p#M;@G*2Ml;I8k$eHe);a5z9-Bh zf8W+ET=aQQzMfL%i|XRS-W{Lc+ZZLshc^aC^-wXU^t`tZ&Ys`}TLO0>Du*+IK1@o= zQc|1fS1uv8G*g(NCZMCiaDuthz6GV=1)G8vPuO|VD(Z-zdK;;Q74>&kL|Z9yW7i2K z;cg-XU?j~qg0!VX>mRXHmk^B%+cKdXLOq6dngKMNus*;0nTAJ3yK77+-iENh_8z`- z%n8r6m|*@P$I*8rZ&$Pu&HyUn6Xw#IF)4Uo;vNa5fhJCTm)@x@*DFzw)KfSw6j4t8 z3qX0xH2#yR!)HGej1c@uOHCJOTwD6~aj8c_G}^)c7M)VcmvEl-7Ob`H%v*`3EquxM zLh42rs*3Ca($_g!<~61moX!w|EE45$J$QUD1fE1+vlmpFG~5tOY%gAoHBS%B;AFJe}%6p?fGbycJ+sSe<~ zU})*3A+x{M>tqV`vuhsQdkjEJ*FyZZvpQCCK^_6q(qze|D>AUpRwT2sF={XTw7seu zy9gJesO)-5hHT0js*d~K7ZjU%gzQS(+zj)%k+y#HB!On}2!jyaOsgzI&?Q+aRxC)G z8}&ORRXv}}1D`xz$WeYNy}TWLw=cGCpSo=3+=DBNLDsdR9(d*2tiQ3weS}U~R-Z7Z z4Ro+^GcwK!M`mG-Fgs+S{HXJ<^fhYHO2SP11x#P5DaDWp*c?C}imfeB@S#ivs7l+r z+hbWKE(wf|)Jo>;dwCFplD9&S{t*dP7p{Esx}$M`{EatZBL1~ytVL6V2w4l5ohxAR z=(m-79EV6miVC%+?DZS7f-zrE$ETky8TXgMNz%NRQ&>TSj1Ae^51#_Fxg~vn6s&YW z?)z{cxa*nvbZS&~f9BB5u-j)m{7Q%~X!Ly}YuM8AlvBicTDxV;wpod${GeEvJU3z&~7hxytJR<9K*eqp=Qy1O7$NPGeIP!;j*bVv*{V!%A~j&l4=2I_4Q za1P&86K$&OvrFUW&J672JaFu?)MZ7+j|vFg-HC>TAEgClH-@iKL5r1-(LW84(?l-P zpp<|j5=YV_Jy4zDIPLwJkK%d^NM7#$j`lFz+*V`4>#06uO$I7c_U(xT#)&PzRc)Et za%Cxn!q&Ar)(s?$mOCa@9EMJGWe%>hIk3&Oz4}Wxk7if;3)tnQPm1Fzr(W~B>&O?E)40vD{ba@(=dV4Z72-a@{L!S z30IxNWWmg_@33=T{HT-q_95<;e2L)8wm8=JaNaV#85^r>Z7XLf)L~5ZA3I+qSXMkE zwP7_Su$9dvlLTsI{*-)Ik5&KFggxZAe5U`+S!*KAVaOb9DJkxAGmb z31b#C<6vZQli3C!uZ7nvcG2X%i$Y0 zd6)fz(mNAn>HBm{&Bh2^uJLXZ8|HpR6mN0*PA(8T7&KXF^A`~06d{{OkoBSl29^3y zeP8A+zAe?#eTWQg##Dv6`?PLf-}X zr%-iS6s6m!jN|86M{XE!zk8ld55mx{P4zNs*yl(SzE>`?sg$B*DLXT$WCN<~Dk#{AI-=j61YTPzs~ z?ln;Td~MmiFk4w`!ME#lH%R|Ng$u2`@YY~&*A`we6FX0IRgv+|BvDym97s=V;i6(DH?O4x9=IBwl zL^HNy20BZ3#M<}5`6SPLCIEP1l?m;Fd}5x@{&I4xEjrt$z#&|u@H7B@^}vwESSqNi z!su7QK~~bJhLG(9eL%%z_Cct$9X(1dZEr%UFrKBL&R<%iL-0pJGtK^(DTk@VBjiKK zc}_985j2iK35(^@$ICGVtfgj-TUXtRoYv%QYzRh?qD$Oz8+>7y|lKU|Bhs) zI9ZGWpZg^9VxePz5R9yIfc==6!jeMyg&zBI4ysoIXWEZP)C%_- zK<*v8BOOXJkJMm98Q_$2#0d(Ok-?TlWJ5p24r{0(%IT8XMLAn5s-n=TCC;#Qg*&3w z-_qKOEY3BHFD;(TnIp2~y1Sb1dIdT_DD;CrjEF{A1S`Ie2bR1oCDH(<@@c7`+e5v`e# zIe<3f*ZD}ZwnZE1LoadI2&NkU5~f=l05#w_aa4Y;6!BYw#C$c|Bb@5BAB<7d%uXU? zkFm>ulJ&8m>vl{=&jxgB+&)aGx`>xLNM|L&NTBaTIk08Z98-f2FcoCc}y&6Y^nrnvKF5q;e};gt`0vKz3v+U8wh#W`WGa8VWj zTD4Rd%6+2M1?oV#j(3Y;Yw|@>=bOXo&B5fmdzPxNJ_dt-X5V|@h(ir#B1*Rm$3a~x zDU@5{Ecv#ftc}SUbRepbDYNuw~sdKXMTJWMOzI* zM$yzK!j?9_V;*JlzR~Ahh;4}9^Mu7?gv%OkEyRxFv9=a2L}cd^bKjbh*K9PS-Jzi5 zp&Le<3h1^&X~rlhsn1lS@xF+iTB#(+o8dYCfsQ}|pfD2W$2Cvt`5{r~cvdY*wQhYX zf@E%{*{e)B^LY7>l)TrY<=5g@IiK6$KZpv>5M2Ybt|@*GE1!H~wZY;1nL+KXiE%Xu0Yu`HwJ%-ET~Gob}Xp3vZ!pZjNXx zOQ5~_Q%3xka2%A7WWvN>F(q}>xcBkha<(SX6(*5A zZqoz{AJB$hJ=!jRqZjlO7H!$)vS0TneCG0N?Lyiqr{~zR5``m81=*0Plt@jSAWM2F zxYwcUJP|JBoudv5rT&KkwAFPw`R0=j61pp`7g}6TVfvsO8(0$?JsevFSojWDRRy}&W=kUeFZ$vw%p%=5zjbfT7MIdT;;!(Cxz%LsKbdhFCr^XM9VKD0$6 zP{Yq{1;aIK|DHd=5=V#We|9K$9Bju~4_zKknA?XyRTxfctj;Qg7!u6)K|ty|DgR&; zCE|0m9~LuCpT&kGe6qS+t5A|~4cc$4bGdB+8c{UbEZlhu18zH~ z?O)NAzsF3i(B~uIBvBf&An`a@Y5_T`{j#q7c2tN}me-?5gqK%ZzOU*u5(%%tGWUjrQ8c|3A%Y%+3VN>_D zFA~rfnqJ=4M;t&lyTYPjOI;Rd1j}?P+|OVrf&%fHx~>S}8|}-nEjq7z3m#lj3<4(2 zgmpC!Cu=oQzoA)A*cJuvaaRl%Jw1f7+e9RI$GB-fMONRR=#^($b1czN5f=-vhSik_ z3fGI$>c5U$zA72MrydUg6WaC^>x?&G z*4PYUfT$aDw*%OY(^(mug~(M*mH4GHcPkxPgcdShF{DKHRaEO4Aq}##k z){F>juxvumjOcbq5L8*wU`}IovkV8|r2d^}U3jGI)+s3y75~FZV;}Q#HFmmrizxCQ z?*h5uBUal<+QLsaq(ZeV%O?cgqrjQn51O5(w5c8mJ$%E*d|Zz2j*NGDE>K)E0|;O> z^G+=fRal@ddNBi~ie$~;ID{&NFc@!AS(reQP?|G|bA~$9dl7=xb&dwT@qz}S*XaZB z$Ru_OEgNt<&5Nhu4su{DU2lMI^)qklGt7ou7^XT0&sDngi$-w|vn@{68cUQ%eN1T6 z(hSmmmy$Mt6MBsRzZ?$xX}8 zPeynR_1`{`UlRbSQd7L?Xpm+fP(>e-#Yd?zH_-~U8gfDJoRV%XM2~cE#;8Y7>%@G( zH@iM%yJ}vHm(iIhNuw|jzee%X@z-}Qba4I!#JPf_c;8d(yWyh}Z%LaMc|u;-d5uN2 z%ItJJ6^6n<;LPejK*=sCgqwR{Hp{xC{S&!!&|g5B6cNd9&hLguqNua=P_r$69eVO+ zgWwx?G0v94S(v@6{Y{D)|KxZYx;4k8C9ZE&K_&e1$-j%caIa@9K{DFQ&Dw=X(FXHI zWb=~{R`OI9> zerHl$TgaImkqyt@Eo~;F5X-lmsF>Part no.: 165218, 140156, 242811, 264728 | ![](img/thermo_fisher/thermo_nunc_1_troughplate_90000uL_Fb_omnitray.jpg.avif) | `thermo_nunc_1_troughplate_90000uL_Fb_omnitray` | | 'ThermoFisherMatrixTrough8094'
Part no.: 8094
[manufacturer website](https://www.thermofisher.com/order/catalog/product/8094) | ![](img/thermo_fisher/ThermoFisherMatrixTrough8094.jpg.avif) | `ThermoFisherMatrixTrough8094` | | 'Thermo_TS_Nalgene_1_troughplate_300000uL_Fb'
Part no.: 12001300 (non-sterile), 12001301 (sterile)
[manufacturer website](https://www.fishersci.com/shop/products/nalgene-disposable-polypropylene-robotic-reservoirs/12565571)| ![](img/thermo_fisher/Thermo_TS_Nalgene_1_troughplate_300000uL_Fb.jpeg) | `Thermo_TS_Nalgene_1_troughplate_300000uL_Fb` | +## Plate Adapters + +| Description | Image | PLR definition | +|--------------------|--------------------|--------------------| +| 'thermo_AB_96_plateadapter_MicroAmp'
Part no.: 4312063
[manufacturer website](https://www.thermofisher.com/order/catalog/product/4312063)| ![](img/thermo_fisher/thermo_AB_96_plateadapter_MicroAmp.jpg) | `thermo_AB_96_plateadapter_MicroAmp` | \ No newline at end of file From ad5c38504350752ec8bc22edbfb73922ae6275d7 Mon Sep 17 00:00:00 2001 From: Jordan Date: Mon, 23 Mar 2026 11:03:34 -0700 Subject: [PATCH 5/5] fix: reformat --- pylabrobot/resources/thermo_fisher/plate_adapters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pylabrobot/resources/thermo_fisher/plate_adapters.py b/pylabrobot/resources/thermo_fisher/plate_adapters.py index e2fc2a9e3b3..c67c5928090 100644 --- a/pylabrobot/resources/thermo_fisher/plate_adapters.py +++ b/pylabrobot/resources/thermo_fisher/plate_adapters.py @@ -6,7 +6,7 @@ def thermo_AB_96_plateadapter_MicroAmp(name: str) -> PlateAdapter: """Thermo Fisher Scientific/Fisher Scientific cat. no.: 4312063 Applied Biosystems™ MicroAmp™ Splash-Free 96-Well Base - Item: https://www.thermofisher.com/order/catalog/product/4312063 + Item: https://www.thermofisher.com/order/catalog/product/4312063 Spec: https://assets.fishersci.com/TFS-Assets/LSG/manuals/cms_042431.pdf """