From 611e170e2a56bc8b262e3d920bf2117e09cfa694 Mon Sep 17 00:00:00 2001 From: Mike Molinari Date: Fri, 15 Apr 2022 01:14:40 +0000 Subject: [PATCH] Added start of paterning commands --- .../modeler/features/hole/Hole.operation.ts | 15 ++- .../features/patternLinear/docs/index.md | 2 + .../patternLinear/patternLinear.operation.ts | 86 ++++++++++++++++++ .../features/patternRadial/docs/index.md | 2 + .../patternRadial/patternRadial.operation.ts | 86 ++++++++++++++++++ modules/workbenches/modeler/index.ts | 10 +- web/img/cad/patternLinear32.png | Bin 0 -> 5642 bytes web/img/cad/patternLinear96.png | Bin 0 -> 3119 bytes web/img/cad/patternRadial32.png | Bin 0 -> 5351 bytes web/img/cad/patternRadial96.png | Bin 0 -> 5351 bytes web/img/cad/scale32.png | Bin 4301 -> 5561 bytes web/img/cad/scale96.png | Bin 4301 -> 5561 bytes 12 files changed, 195 insertions(+), 6 deletions(-) create mode 100644 modules/workbenches/modeler/features/patternLinear/docs/index.md create mode 100644 modules/workbenches/modeler/features/patternLinear/patternLinear.operation.ts create mode 100644 modules/workbenches/modeler/features/patternRadial/docs/index.md create mode 100644 modules/workbenches/modeler/features/patternRadial/patternRadial.operation.ts create mode 100644 web/img/cad/patternLinear32.png create mode 100644 web/img/cad/patternLinear96.png create mode 100644 web/img/cad/patternRadial32.png create mode 100644 web/img/cad/patternRadial96.png diff --git a/modules/workbenches/modeler/features/hole/Hole.operation.ts b/modules/workbenches/modeler/features/hole/Hole.operation.ts index 839d034d..95b6e22b 100644 --- a/modules/workbenches/modeler/features/hole/Hole.operation.ts +++ b/modules/workbenches/modeler/features/hole/Hole.operation.ts @@ -2,9 +2,13 @@ import {roundValueForPresentation as r} from 'cad/craft/operationHelper'; import {ApplicationContext} from "context"; import {EntityKind} from "cad/model/entities"; import {OperationDescriptor} from "cad/craft/operationPlugin"; - +import { MFace } from "cad/model/mface"; +import { BooleanDefinition } from "cad/craft/schema/common/BooleanDefinition"; +import { UnitVector } from "math/vector"; +import { MObject } from "cad/model/mobject"; interface HoleParams { + sketch: MFace; diameter: number; depth: number; counterBoreDiameter: number; @@ -20,6 +24,7 @@ export const HoleOperation: OperationDescriptor = { icon: 'img/cad/Shell', info: 'creates hole features', paramsInfo: ({ + diameter, depth, counterBoreDiameter, @@ -39,6 +44,10 @@ export const HoleOperation: OperationDescriptor = { created: [] }; + let sketch = ctx.sketchStorageService.readSketch(params.sketch.id); + console.log(sketch, "sketch info here"); + + oci.pcylinder("basehole", params.diameter / 2, params.depth); if (params.holeType == "normal") { @@ -76,8 +85,8 @@ export const HoleOperation: OperationDescriptor = { type: 'selection', name: 'sketch', capture: [EntityKind.FACE], - label: 'faces', - multi: true, + label: 'Sketch', + multi: false, defaultValue: { usePreselection: true, preselectionIndex: 0 diff --git a/modules/workbenches/modeler/features/patternLinear/docs/index.md b/modules/workbenches/modeler/features/patternLinear/docs/index.md new file mode 100644 index 00000000..dd619908 --- /dev/null +++ b/modules/workbenches/modeler/features/patternLinear/docs/index.md @@ -0,0 +1,2 @@ +# MIRROR BODY +The MIRROR BODY feature allows for selection of one or more shells in the 3d environment. A mirror plane is specified by selecting a plane or existing planar face. New bodies are created in the mirror image of the selected bodies. \ No newline at end of file diff --git a/modules/workbenches/modeler/features/patternLinear/patternLinear.operation.ts b/modules/workbenches/modeler/features/patternLinear/patternLinear.operation.ts new file mode 100644 index 00000000..cbf5ee25 --- /dev/null +++ b/modules/workbenches/modeler/features/patternLinear/patternLinear.operation.ts @@ -0,0 +1,86 @@ +import { roundValueForPresentation as r } from 'cad/craft/operationHelper'; +import { MFace } from "cad/model/mface"; +import { ApplicationContext } from "context"; +import { EntityKind } from "cad/model/entities"; +import Axis from "math/axis"; +import { UnitVector } from "math/vector"; +import { OperationDescriptor } from "cad/craft/operationPlugin"; +import { MShell } from 'cad/model/mshell'; + +interface patternLinearParams { + inputBodies: MShell[]; + patternMethod: string; + face: MFace; + distance: number; + qty: number; + direction?: UnitVector, +} + + +export const PatternLinearOperation: OperationDescriptor = { + id: 'PATTERN_LINEAR', + label: 'Linear pattern', + icon: 'img/cad/patternLinear', + info: 'Creates a linear pattern.', + paramsInfo: ({ }) => `(${r()})`, + run: (params: patternLinearParams, ctx: ApplicationContext) => { + console.log(params); + let occ = ctx.occService; + const oci = occ.commandInterface; + + let created = []; + + params.inputBodies.forEach((shellToMirror) => { + const newShellName = shellToMirror.id + ":mirror"; + oci.copy(shellToMirror, newShellName); + oci.tmirror(newShellName, ...params.face.csys.origin.data(), ...params.face.csys.z.normalize().data()); + created.push(occ.io.getShell(newShellName)); + }); + + return { + created, + consumed: [] + }; + + + }, + form: [ + { + type: 'selection', + name: 'inputBodies', + capture: [EntityKind.SHELL], + label: 'body', + multi: true, + defaultValue: { + usePreselection: false, + preselectionIndex: 0 + }, + }, + { + type: 'choice', + label: 'Pattern Method', + name: "patternMethod", + style: "dropdown", + defaultValue: "Step Angle", + values: ['Step Angle', 'Span Angle',], + }, + { + type: 'number', + label: 'Distance', + name: 'distance', + defaultValue: 50, + }, + { + type: 'number', + label: 'Qty', + name: 'qty', + defaultValue: 3, + }, + { + type: 'direction', + name: 'direction', + label: 'direction', + optional: true + }, + ], +} \ No newline at end of file diff --git a/modules/workbenches/modeler/features/patternRadial/docs/index.md b/modules/workbenches/modeler/features/patternRadial/docs/index.md new file mode 100644 index 00000000..dd619908 --- /dev/null +++ b/modules/workbenches/modeler/features/patternRadial/docs/index.md @@ -0,0 +1,2 @@ +# MIRROR BODY +The MIRROR BODY feature allows for selection of one or more shells in the 3d environment. A mirror plane is specified by selecting a plane or existing planar face. New bodies are created in the mirror image of the selected bodies. \ No newline at end of file diff --git a/modules/workbenches/modeler/features/patternRadial/patternRadial.operation.ts b/modules/workbenches/modeler/features/patternRadial/patternRadial.operation.ts new file mode 100644 index 00000000..fa5ce996 --- /dev/null +++ b/modules/workbenches/modeler/features/patternRadial/patternRadial.operation.ts @@ -0,0 +1,86 @@ +import { roundValueForPresentation as r } from 'cad/craft/operationHelper'; +import { MFace } from "cad/model/mface"; +import { ApplicationContext } from "context"; +import { EntityKind } from "cad/model/entities"; +import Axis from "math/axis"; +import { UnitVector } from "math/vector"; +import { OperationDescriptor } from "cad/craft/operationPlugin"; +import { MShell } from 'cad/model/mshell'; + +interface patternRadialParams { + inputBodies: MShell[]; + patternMethod: string; + face: MFace; + angle: number; + qty: number; + direction?: UnitVector, +} + + +export const PatternRadialOperation: OperationDescriptor = { + id: 'PATTERN_RADIAL', + label: 'Radial pattern', + icon: 'img/cad/patternRadial', + info: 'Creates a Radial pattern.', + paramsInfo: ({ }) => `(${r()})`, + run: (params: patternRadialParams, ctx: ApplicationContext) => { + console.log(params); + let occ = ctx.occService; + const oci = occ.commandInterface; + + let created = []; + + params.inputBodies.forEach((shellToMirror) => { + const newShellName = shellToMirror.id + ":mirror"; + oci.copy(shellToMirror, newShellName); + oci.tmirror(newShellName, ...params.face.csys.origin.data(), ...params.face.csys.z.normalize().data()); + created.push(occ.io.getShell(newShellName)); + }); + + return { + created, + consumed: [] + }; + + + }, + form: [ + { + type: 'selection', + name: 'inputBodies', + capture: [EntityKind.SHELL], + label: 'body', + multi: true, + defaultValue: { + usePreselection: false, + preselectionIndex: 0 + }, + }, + { + type: 'choice', + label: 'Pattern Method', + name: "patternMethod", + style: "dropdown", + defaultValue: "Step Distance", + values: ['Step Distance', 'Span Distance',], + }, + { + type: 'number', + label: 'Angle', + name: 'angle', + defaultValue: 50, + }, + { + type: 'number', + label: 'Qty', + name: 'qty', + defaultValue: 3, + }, + { + type: 'direction', + name: 'direction', + label: 'direction', + optional: true + }, + ], +} diff --git a/modules/workbenches/modeler/index.ts b/modules/workbenches/modeler/index.ts index 8545b501..c47f5ee6 100644 --- a/modules/workbenches/modeler/index.ts +++ b/modules/workbenches/modeler/index.ts @@ -16,7 +16,8 @@ import { ShellOperation } from "./features/shell/shell.operation"; import { SweepOperation } from "./features/sweep/sweep.operation"; import { ScaleOperation } from "./features/scaleBody/scaleBody.operation"; import { MirrorBodyOperation} from "./features/mirrorBody/mirrorBody.operation"; - +import { PatternLinearOperation } from "./features/patternLinear/patternLinear.operation" +import { PatternRadialOperation } from "./features/patternRadial/patternRadial.operation" //imports of action type commands import { GetVolume } from './actions/getVolume/getVolume.action'; @@ -39,7 +40,9 @@ export const ModelerWorkspace: WorkbenchConfig = { LoftOperation, SweepOperation, ScaleOperation, - MirrorBodyOperation + MirrorBodyOperation, + PatternLinearOperation, + PatternRadialOperation, ], actions: [GetVolume], ui: { @@ -47,7 +50,8 @@ export const ModelerWorkspace: WorkbenchConfig = { 'DATUM_CREATE', 'PLANE', 'EditFace', '-', "EXTRUDE", "REVOLVE", "LOFT", "SWEEP", "-", "BOOLEAN", "-", - "SHELL_TOOL", "FILLET_TOOL", "SCALE_BODY", "MIRROR_BODY", "-", + "SHELL_TOOL", "FILLET_TOOL", "SCALE_BODY","-", + "MIRROR_BODY", "PATTERN_LINEAR", "PATTERN_RADIAL", "-", "CYLINDER", "BOX", "CONE", "SPHERE", "TORUS", "-", "HOLE_TOOL", "-", 'GET_VOLUME', ] diff --git a/web/img/cad/patternLinear32.png b/web/img/cad/patternLinear32.png new file mode 100644 index 0000000000000000000000000000000000000000..30deca39731ec425c362d24e13a7ac271adcf72c GIT binary patch literal 5642 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 k8TbfM;(uC|97Voa@O-gbRR91007*qoM6N<$f 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 FV1gla89@L5 literal 0 HcmV?d00001 diff --git a/web/img/cad/patternRadial96.png b/web/img/cad/patternRadial96.png new file mode 100644 index 0000000000000000000000000000000000000000..003a70d36fde3b60af9989a8b4d453e40ecf2863 GIT binary patch literal 5351 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 FV1gla89@L5 literal 0 HcmV?d00001 diff --git a/web/img/cad/scale32.png b/web/img/cad/scale32.png index f4434ea55e95c9cd4f05198625baf5504d89f3fb..2514315b6b1b6b0b6ee9d5fff6b1107cc38191bc 100644 GIT binary patch literal 5561 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 Hu0mjfhDA@- literal 4301 zcmV;;5HjzHP) z2~btlAIFcoiKgHRistUPYYOHr;WC+~C7N4kLTP61IvSFwIJqT4u9H}rnPh5>N~X!s zq-BeP;TknCl{$`Tq9};V@6Y$X|INqazH{zd?gHH3%y-6-_wGIS{66p8-|wu9S!S7K zmRV+*WtLfHnPrw)R!S{CKAzUEUr$Dt!!i@ui4!L%EG!IANP6a(XDBHt$%3Rb+tsUA zY5x5ARK9%q|G==<*s){j)TvVzB&E$ZZrn)Cnl)2|!d_22@dQOhMbXWhH!Vm?x+Nzk zQ)pvDSlAoWS zQ-@cmz$iMJ(cQZ?;op@i@gbQuZ5m}|Wm%9ESKGOBCw1=Jnd{^+V;KGVD4{X z$_J!={rdFYd+%9*6emM!`qE1;aUB~J#Axr{qEI+$-#$j&y73|D*|TTC=k{5UnAt90 zzD%=c&*nO^dUZxCR*0c+)auoYYSrRHGJgDcI(_=I1&P@#At8aDdg>{z^CBY|{qcwE zV95IOPexOw@B#7h@u7F#d53P@x@AFPv>iBbfco|8$8}iWzKjkZb{`5yee(^Y{{8uo zv}@OnKK$@Q3lJmh%$YMZapFX-gZ%v&tzYjwC>*tA3!^4Y_>c@8I+RjVQ!PmJu$-J6 ziiwG#C!c(h>y()@8C|`q9T>81-)1y#p12cj`t<1qucbdNNVKx;+qYAP4jlxYRE&-v z*B%N-ojSz|G9*4Afq{V(7Z+y%;!XSZ+i&TG7hd32e6wbZKKe+1C>*tWH=~Xn`H=MP z-J8Dr@=FU6PYlg4nqwwtvZJCH-MM2t81`DWj8WC9{Blp2FoDw3(=A9`H8j6yh8d@F z!@?M)r5O)`Gi7G7f}oiX2x2G1P>7|BsOMs3`}gmsUcGv8E3|!kMtk-c?|ilT`fFD3 zOngWXOChE*qRvfkX=!Ov4ic zpMJ8X-MnYVZ~%q{jPQ+NcI?)ijj?+^yF^tNW=hw@tuf9rW&z>!LkgQ(4n*9C!xep%_!YDP> zct;r}#8l(P@d2q(qXsQqx|DKrbBjMD85tSWq)8L*1J|!_8^ki&Ic5=Jtl(fiBnaS( zed>#KA&m2ovuE1|uZ(tx85JMT$j^_L+E*&xaD<14bK$@*3WxR8Y($7CLYTH&d z6y}1XAQLSp%wvrhL6nojhr|^)WFhY_OW`}v2rC*&z@9JC}j|w zsZ}eYAAc+gh%-3kO8V+6ED91=5=Jw(Z#Uklp6c(v#fzk5EnLVbH}~;(4T0m}L81v0 zh>9gQEaDm9gsXr4b`^!vKQF?FhE zKsXA3?cMtr5VdeXd3lT$ED%>-*|N3@G}_r}g%x(Z&Ma9ydhkb}b%W#5C88EBJOiOd z;|EUvW(!_jgG1K2bBsoh7FQ;gHpa#p?|f&%bBab>Aq*dE+$g@DE^uUJi5*|A0#UVq zhg7fQeQNw{eh~#tyGtRlIpo{aIUwuSA&7My4p|2eVt+1iAkiohQE)OG4z>bEpUa=seXZGYeC^+H09xebS`4I6B$*F+VK zC5r$2V=NfcreUinaal)=QjRMOg(D)uIT#(nb5#T3s0Q8gIW19pkKlmN-=St@8RnTz zovJ?+iHWw?gQ$GSR1O_-?;e`M;jEvcdf-EsS_)^v>qZ%l2#?{Ah5nI|BgIarS5Kd5 z04PtFF6zpIF%wVjr70Xr0chEB@wS^xm^-2FIX5MI9H|J)i6Jc4P9WQSW@o`HpJw{5|P2m3<#M1;f*9MXm1N zw@n%nIjdSVMvE4?f1d*fY?+bhKIo{^V#d5CaOCC|bzB9XM_e#!w|3qdsF5fA9PSD| zr=pea5cbsAzhC`zvDO6hTSeEcUE7vfY4L2D!Ey0oQRm^;?+lE9uFg|akv!=k^_DPR z^YqhVXZG$b-Ue#&WZU4M=vs&?9z4+Yxio>}$dRH>tRJlWN^zcXh~>%HiWWkzqi9AI z_8^@!$u_6L{<~-akYR|RKueX8q0jSZ0>{>^MIG5<=siU^>UDCj)o^!IR%^lObLWbk z42agPv(3ip)Jgn#WI=lO%4!0KQvXJ$2;~khrOZQ%`5byyDuiFRns@}64e#$5KvOdg zQmo-n8ZUvA(^8x5+gJ2D?#u);0uEW&4gtS<5hO}N5ACBz#+6++I9!v>{{5FIH1zTR zyE})}NH}C+{s<;CtAS#~2y?9PH#HoxA^XYB=0jn2IAmc|)EN}Wc#a$~zKoi}k(A^< z7#%yRgTR@Y9S#WPaV#SoVRX54fdkgJuj^nSHC?;bg2OD*bl^?SIED{TE6CwD6pnml>3 z5DG_i?b?-g?b>C%R!kzV!g1%$9a^?*8P%*=(`7L1g@bL}-QmuH!-R0)I0w-_;ZVnd zbmWy+UXhN-6n%Eaj2SL(?ryTH z*H`G!K7IPorcIlif?=;kixvs@2!%$C8bv2ho^)DB3l4+e*t&HqwQbv0=)m^v+e_z; zse!^#*cvh*Ab@-Qa^=d=+_`h<%9Sfc3TwfkGaQExAErTr1__~P)Toj4s&NMjM~xjj zRv5Hm$KCk&_(BD?;Lr&UY)~2z5g~*EdsU7YF~TcQ*lXj)jjDoO95#c~4=gxzf@A8` zsZ_agWuaq2LqnyY(%WFzYx(l!Qa~yy3r>Sp3X&~2ybOoP5$Mfauwa3vP&f*4Mypn> zxaF!?v7!ZsQE;H&;f*)m&=m?tO`0@`s#U8dY)LFQbcO@+^YfDqvM~aT{{8zawhk5? zCV|7g6~S5VdO$IH^l0JPt`;07fo={9DwEwOeIG{d#82#{r@s)0NIL@9G9uz2sLl(Nt)i|d`ixyH( zr~P;5%$Xx)JfiPnun&jqDBWKz9I_%J7+t?^!Qm*Z*vHC!UfunF)LcCr5C*^Ss}?y1 zaRlOtwQJW(fn=F7WrVFxWMm}w-b!%Pu3ejZU93-Cxzd6|)(0Ojs##O~!%9j@avcs? zQBhIUvSmx*O+-*2?!Y`!HTP7413kESRf)=h4P9N?RHdZBas0S#7h_R9!51e^ocIq6 zx8RV4!7l`)YMOaR;Y?GsL~8G)1jqkJX4$@d`&6}PID6#GnbHHtwQIK5tEgTukhyc` z&O%Ul42LXa6>6ct<_jf%Mi}Z@GPaHE_UiPCEkNvSrJ1D+c?UV?}&Pg9BT4t2wd@ zF&^dzJA=ZjaLAfBZ(fmtAcOJrx@zH&?fdV)r;#H^3M&aa^c_7~{Ncc+cG%KE^t_mt zlboC^ghCTIATz)r+wR@Fsav;h!b%%ER=mlZS>eDom!juu)~uN{<4!FUr2-DwR;^kk zoX`y6?DygV$HyOw4;sQ)82XN`UcKrv7^MadSY~FX6!(Y#!TD!9c9<8AlP7H_If$ME zuT|di4mDP4;E*jfHC0uH_3X2@J_57AapMLnfLjbjP*4!zb?Q#tI9jQLL$)0|c1StC z<8>W1WeTIqmyLxZA;GqdHm{s@>eQik-+k9BTU^LiYT~fPMoL<9I~lhFFb3O?eqh0z_Du= z>WY8AN|h?n!i5Xz`t|FYgTWkcUZqMEY5l5M;J^Z>rcIkFR+N@-z_PQmrF)1bJ7Irw zrK7ae!hwC!pMPH5T42WAFTebv3ly>`7NlXrhBSTpbi?34rxhkL^D67mp+mY4 zG>?^676^y%VQfP!9NF27X3i8tfhD4Q_UzFW3fZ^?L#h`O6Qe5}g9i^5R#@M@eRZ#_ zg9i^vV-upX$;X28;K0!uqGQ7R{r#l@O`RX}v3>Ey7Zef_B7EQh0|pR=#I=MYJUm?0 z@<;47cHzPW!zvA96nG|4Ip2O;84fiQZ?Jy}dUW-DGAD+}SG3~}W^Q3cnz!M=LhZ(l z8w)E8v)1)`m5A)xwQEvfsAh)(SAlQ6tx>VR9gvr8FrcCh|j)a5+ zX%#>3UJ!OB+_r6-`6{fy5Fo0VswfhEn2CvrrhLXihMqPwYfOdHl(uJZ{G1XTYIYdJ zf+lnaqZd=(8gSjzPE~Z2kB<*UM@JJfBV$VLreOowu&^-U10p!IUuWX@cY8QqfBki- zLU`B1#AK|2$;!$qUKPgFPgR7lgF#waTCsb^LiYLRpHr`1y|@pG6>7tW4|fU&G9EQ? z1!5XchnbBw(Nsm$rM!JriLnhEHVC71rIqq(B70;^$eeV3Bux!d742U&RjXE|xVX3y z^^Aq=#*G`&JFTU;L_Cg@0#~6W;mXeYpbz&8V*vTt)?%X*keqe4wfs6>55i%qr z%5RwthF^s%>sBCSLR!o{u*{_P>8GCxw~0jNe2%CzJi4q}alr00000NkvXXu0mjfBON49 diff --git a/web/img/cad/scale96.png b/web/img/cad/scale96.png index f4434ea55e95c9cd4f05198625baf5504d89f3fb..2514315b6b1b6b0b6ee9d5fff6b1107cc38191bc 100644 GIT binary patch literal 5561 zcmV;q6-MfbP)Px~b4f%&RCr$PoeNx5MIOihs1Sh$S{Nu|DeUG8Ftrd(Bj2f5DjGiWfv%6l_qye_ zE4w|`-St(bF22oIp_XE%rfIq6D~UD{r7+D*QA5o%71Xnz-<;0vaye(tsZu4HG-(n8A}lP-91ua^%h>Zfrj~~~SYeGT- z1EPEP?jF$x9-)M;7W9zBJ9g|~qrld!TNO3x+?i?w0ya8F;%Npwb>6rK|yZm6Sowq ztK~f;@$K8U82}gs&YwT8sMVkTMD*f|M8Ux&lWf^S^v{11{rA7h6>8kLF&iC*4jt<9 zesOt$9@4M6)X2!lU=SQUcu?`XUcE#Bnm6ZX{pOqE2yyP5a=NZvyD}i!wQJ|H{&87B zx?0{t5+6Erh}i+}yz`EtM$yqC0LjVPl?DX=_y^J4x%_WNj~>l{h>VQ1yq_#DKzs9e zPRffHFR~E;KgGqxvWofn5xxAf2!XG!G2Qp<5l07(y-77|*0k9VzP`Se^_OKC8*3W( ze}!#f0PywKUn?pzaG+=mHfUguzRQ-0KyZqr7A;yZAf9{fIZOJ?l1$BM9@plwefxF> zz(*f_q*(Cdj}uLuN|cyrzHT>e5WV`U2*lmH%K0ZHC9&zEWy_YP_MNGjncqCt=a`q5 z$LxUg^mN6-f`W+t@)x2>ldRY0tFMS&dyOa~L%A#;A0OLvQL9!hQ~J=9OssDn^Ghfy zDze!DKmPcmVgVyYh|@sby5{S^%W=a7(V)!AQcm^ILk}?^Qd3i%?nkFHaBcILQ`*|K zYuPC9`RAW2X87cjqA}R6ojGM1%>`2het!B%Ifu4w+cF>$6B7;hr{NEcR?MB>9XN1+ zjRNb|ty5GZG?ZxCG@_9s-KlBGvQM8T`upFBmMr1xG-%KuWP^Jv$k zprF8ZI(X;K9mNmFk0<)`pNSrLKzrV(euw+r-xNJU%g87x4#k1n#C`nOP4MTi1zK^AVpRbkHgD#aH*(}i21Ha;lx&}u8xU^XxM8yc zE?v5$*eX4HipC($2+EV-I0Odev17`$3JD3Z*$;kxekJ<8T!658^=dW>eDTE>imlM7 zkqAIiQhDnB(sh9`i64a{681s!=FJ%p$;rvK{x8!YtXj27Sh;c~ZQs6Kv3Dz17VQ8` z0~JMJ7h}3uxsqSwPMtc@fB^$&;J|@CWfp{~Q>O~Azy3P6rv3Yi5JW~+6a-4vbK5o% zhyw@s^`Aa{I+a-v?!W(jp|G$}wuW#H!8FjVTg3#xvDWZ=01yhzMSgyMWfue@5|p~R zS~a4H6UEWMD@1?z0}+n8Z{JpKjWRnT@Ia8NTd$tz1@!dO6%&Vf^Ta;}&Y7C6VLS$e z>})~67Aj=G0HV-PRr^J8L~!hO93W+85@DpM2!h4apg}}AIofOM5g=T+AP8;R5J`7L z9(hD`|Bj2}!k`%hGzVPEh7Kj-c%f@=H4jY*hn8ob6`|KF9s$CLb8ArwNn|tpSVd&de7KTzF?A}eZXp!jhg`-=Z#KaJ-SV4q;%d)Ir zFB-;ZSDr*fhhCY6bvX!cz9|SZW~l#ls#k^R-~T51;~z`Fpa_DL zANJibI>_8oFHvOGs^VW2*4kx3U@t96&E)mC=kKXcHRzRvWM%?FMo zZ@*pA&c&($#-f@O6%qaQui}MNp5XS<;K4+&PuwLqLBt&joT&*ai)CEC#cBx4WHqrI zgjZe>1Pn=X64|+kBA$@HKBlDjg`6ssv-Tc^Ut>c5Z4X&12vTO)v%s#K+Vm9?A`Y_{ ziCifYCWsKKEeHGd73+b$7p-C`2+NiU!jK{Isx%vMlY%0Yokn>T_~~>d%1XaiCdpY0 zhPMB&7X;};+&hGk$hqjulERS%OVh_5)7sp|(&6YBRzA-k5jo@56%N+mZ>d)-0|84! zG?d)h{i)Zk>(#SF`rLK*P{Ef~Wb(ij^*E8Q`IW< zaeh7#j?E7p;^zyy1tXN>2Am#kECXTwd_fpJy0j_{lWtLHEa%9Jqy3#?qTCFBx|mzJ zR4UBh#l_A|4RS?eIfflNEO~hn7)Uf`jCk?H48bxFS1r_*gOewVx1XxW{axr##4-?C zw-yA)&7wN-#T3=GNKriu`Iqub*Qi>pI}{KiP~Ij#x_qKE1h|KY;nVR_kI|_?PC?vC z#{CBD+VKR};QsY5#8K4I3wBAd6a;jaFY~|e-CJ~D|K0D5mE-u8B_QnBAqX8hlq?FX zgV-VRVdh`}p4#P0*Unc`tX1HHcj>y!@591G2->$dwtUpvjIh?R96NlN|7ELI;#Rm; zPblO&Zk!lji6?Nd!E(1#C%u~U(^~?};~)pe=P)Rh0%zdrJ8TSGwcsrWanlM*!BL}})m;92 zOF($}WkCS7_M&7PWH0rX9q!et+oXvIL2RtPEoQZR_52HMHbr(dCnsDSPp+rye?Lh~?UO zA3EvCUUyPh_W(lepbGo@7)ieQMqK8d#cG!$2*w2fv`#O&6}S7q5)htzQV<-EkmZ() zCwKXk+BU{U2)1)^sZ-9s5C$M12oKkO4DCz<>G>9cRRBbGww|v_r)}C)1fXL_=kn3> zwaY+wxSjkCqT~4iIzKJV$7j_lLBRZKFYq%21T|`CcTCZ;#jK~nw4_C#6-)(cmcL_O z)vJq3L3cRFxC{g>4Tv-n2!(}$fUQ#LzABbWfWY5hyQ`X+%SWyHOX*Z9}Tpbu20}`1t65-aNxQf0DyP3JH-+Z z($WOM==}i<=HE%!m^T_R8nYGYkQW^@3oK zD$78CJ||8H!Z+XCV)2RAuU}6;IYfWLgB87d_o6Oco~CBaaA@Nc1YQsfLV(XK1!38; zWy0*)v*{}(uasXE@6e$GjUPXrx_0gAtOvDsL@)@0B_JSTDFE08$3Pu2aNs}&M6+hi zi~`{WK}UPrCp8s>BS(%1bLPyUC7hUV)v8sapMU;YQC(kOUk1atapNdFJX|jjUJ%>~ z!lg@>*a!d!c%A&zQ%_OHjvXmKKcB@nKFzstQm0NG8xU2hRM85A7X){KuwcOgHVWi% z&QF^*ZOQSA&q5naM_h-JCt#h=>U4+_^L6 zd`0yxU%t$2iBIJ2x7mHwy?b{Cgi1&_F9@yz;qc+ZYy?<^{aytL2nfIm0G*~;Ed;*= z5Na!oVZ(;8DWh@Y#&RQs7X-~MUNWI(WAW_SvkU-?0!lBKAZyqG7zKjhKW0D>6dORC z;kfML1vJT^3<(Lb2f_=2fi~B?k1%J>90tLuQ>PS*iH?qDqX5Fhn<20t0K_jGC;rID zNCt%63#wia3^qP@L`X|Z6EZV1xv>gs)vAS;OX<-^A2q0g@@Ft2H*emoYCpgR!J}6x zcvR6&+t024s)><90NpuO|$Q_6y{d-rYu4_5O8AzSf=F?Ir7C7U*F zqFuXoslL80>Ej&{wD*i*5Ksglz=2T@i-QO3-@l(WZrn&$u3XVxGa~YWpuM@A0zoPU zOU2&3d(&ek-v&K-@+2Xy@(*gk3l!?>1;NE2NX6lNVEFLi^q`Z`B#MfPX#V{9bWAM@ zgi1ZVAXoqbjKhM00`4nlQnA=mc){S++~v!cvxm3u@?N|o-2H!qrQyBK>IK0f5W02i zMn{hxWg9)b4nXmhD_3T_jF>XC2v!3-cI=>Aw{CHhW8VUy$vvY}ioB zjmD;+W05vu98Cwo|KCt$cJ%4RZZ-{P=MOgj#1fehWvI z#Kc5uf;;aTL}5hmkzRQP5Ey-w1aX})I=CV_n!7;23oQu5r4|wpQvm?LTTW7YISqo8 z5ez{9q4d0tl&*U9>I{H*ga_3jN+3vC96EG}J@@wx-o4`pf^Y)}v!jsM7wHZV=FAa| zLEh_bI4=SKlP6E6z`($g&;4mxHR$Lswk&-A{rAc74Q4DcpLymP!zY+(AV@l{U%#FK zu}>x5F76>BE>TpJp4w?k>q-z19uW5}Rj!i|9uNlrO`0^3e*n~M5YSXBR;(!15sphz zZB6=HDy<+$U(A{{ivgi_dWoP}xR>Z`q%v2J2zb&Dx~l~Y#py9dfgU}2@Sg-OuOOgf zPM}lN9#@+)AF}-3I2v@I)QvlwO;7Nl94Hy6^DJi-EsIVYN70=JlXF%WxoF~8k zy%_UQ&vvyLARr6HS;L^Z+qP|EK;Sw*PY@##Ks0P9rcwjpfBzE!*tn73sPGyG0G&E@ zvb3HIgo_t13Q9fzlA7>50t~HNx7LJ%vmoGT8vyV;qHu1papOkI8weFnPfuq+@Zv%s z9X5La1fr_Th1bKO5CBjM%vryFeFng&QKMW^KL!H+bKt-MVcN85%=?HZxbzBFG$_gw zqaeVg9ZoN~@T=koMyZ7h7g9t-gv%PLu&~f(KiuGiSg%uus9igG5D>zj=dJJK<72Y} zLPJAcRyP|6QkySXvV`4)K62!U%G}rjXW4YmJ@PNG=>-7+G~foeXU`sPxv*Qtjvb4W zG?zA#y;9lP*$fEW!7x*L_3Fh8!T9)ix74jvp|G5#7)ffr1xhE1T0ww|I=rOe$G{WZ zp+E!`K;Y-+=az-n5nA2}L8u{21O5B=cWb>A3(w2TW23_YY;kb}&JO+h z^&?bB5-lLWGkVLGEnG(yj5q)QKecPuc56c^HNo7ua~Tkr*7OK&j7iJEfPetE*G*Lc z98+V2z}(Ff*bPI53}McvJP>kna+ocmc2@$IZUI2krcG6K)YAc0q&;`;oXvi4bjXn_ z5AB3$Kp`ZM6)LLcskxC?uU^f7P&>J6+qNwWx8vv`r1ka`PS7v~xMInq+B!ND96WfC z0r9Saw+Pw>03NIa z3;1bbRW^S7cwO!7O05kkcIwnAW{$g1qfnd zVoWJtOPSs@{1z~^Bi?x94K_k3Eu}O@RQ2|m8(P3r5THM99$|EtF=K}9ZUZjG!X3R| zzka5d=Y}>bmql9EFtW#aOSYKa00000NkvXX Hu0mjfhDA@- literal 4301 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