From 4b67be5604b4c4a4e6f629708d443f1eef887f24 Mon Sep 17 00:00:00 2001 From: mello Date: Fri, 22 Nov 2024 15:57:55 +0100 Subject: [PATCH] New Generator Fatballfeeder - Added generator fatballfeeder - Added translations (de, en) - Added sample image --- boxes/generators/fatballdispenser.py | 546 ++++ examples/FatBallDispenser.svg | 248 ++ locale/de/LC_MESSAGES/boxes.py.mo | Bin 57153 -> 67943 bytes locale/en/LC_MESSAGES/boxes.py.mo | Bin 54196 -> 64175 bytes locale/fr/LC_MESSAGES/boxes.py.mo | Bin 59142 -> 59140 bytes locale/zh_CN/LC_MESSAGES/boxes.py.mo | Bin 62142 -> 62140 bytes po/boxes.py.pot | 3369 +++++++++++++++++---- po/de.po | 337 +++ po/en.po | 366 +++ static/samples/FatBallDispenser-thumb.jpg | Bin 0 -> 6485 bytes static/samples/FatBallDispenser.jpg | Bin 0 -> 85468 bytes static/samples/samples.sha256 | 1 + 12 files changed, 4198 insertions(+), 669 deletions(-) create mode 100644 boxes/generators/fatballdispenser.py create mode 100644 examples/FatBallDispenser.svg create mode 100644 static/samples/FatBallDispenser-thumb.jpg create mode 100644 static/samples/FatBallDispenser.jpg diff --git a/boxes/generators/fatballdispenser.py b/boxes/generators/fatballdispenser.py new file mode 100644 index 000000000..368f1bde4 --- /dev/null +++ b/boxes/generators/fatballdispenser.py @@ -0,0 +1,546 @@ +# Copyright (C) 2013-2024 Florian Festi / Melchior Rabe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from boxes import * + + +class FatBallDispenser(Boxes): + """Birdhouse for fat balls.""" + description = """ +### Description +Fat balls are quite common to feed tits. Here you can build a dispenser that protects +the fat balls from rain and snow. The design was tested using 4mm plywood for the +main structural parts. For the spacer of the locking mechanism two layers of 3mm +plywood have been stacked. The poles were made from 8mm diameter beech rod and 19cm +in length. Some basic consistency checks have been made for different numbers, but +only the defaults have ever been built. + +The final dispenser consists of two parts which slide into each other. You can mount +a hook to hang it into a tree. All edges that have angles different from 90 degrees (chamfers) +have engraved guiding lines which indicate the angle. You have to sand the edge such +that the pieces fit together. + +The top part (roof) consists of the the following elements for a N sided dispenser: + + * The N sided roof bottom plate which supports the roof tiles. It has a central cut out + which is needed for assembly and on the bottom side an engraved line which indicates the + position of the mounting bracket. + * N triangles forming the roof. They also have a small arc at the tip (roof_hole_diameter) + which acts as a drilling guide if you want to mount a hook. + * The N sided roof support piece which has a central hole for the hook. It is been mounted + to the roof tiles through the hole in the roof bottom plate to support the roof + tiles and acts as a mounting plate for the hook. + * Spacer(s); in the reference builds 2 spacers using 3mm plywood have been used. The spacer + needs to be a bit thicker than the ceiling (see below). That's the smaller + "U" shaped part which is glued to the bottom side of the roof bottom plate. + * The bracket is also "U" shaped and a bit wider than the spacer. This is glued to the + bottom of the spacer and holds the cage (bottom part). + +The bottom part (cage) consists of the follwoing elements: + + * The ceiling is N sided with the central refill hole and N smaller holes into which + the poles are fitted. + * The N sided floor part with finger joints for the balcony walls and holes for + the poles. A central hole to drain rain water can be added as well. + * N balcony walls surrounding the floor. + * N poles that join floor and ceiling (not part of the drawing) + +Other parts needed for assembly: + + * Wooden rod (N times the length of the poles). + * A hook (e.g. M5x50mm) + * A washer to distribute the load of the hook to the support piece + * One or two nuts to secure the hook + * Optional, a pice of wire mesh + +Assembly: + + * Sand all chamfers + * Glue balcony walls to the floor + * Glue pairs of roof tiles and use the roof bottom plate as a jig, Hot glue may be used to + tack the parts. + * Glue all roof tiles to form the roof + * Glue spacer(s) and the bracket into a stack + * Glue roof tiles to the roof bottom plate and attach the support piece + * Glue the stack to the roof bottom plate + * Cut the poles to length + * If you want to use multiple colors paint now, otherwise you also can paint later + * After painting you may need to get the paint out of the pole holes again using a drillbit + * Glue the poles into floor plate and ceiling + * Attach the hanger + * Attach the wire mesh + """ + + # naming conventions used in the code: + # Radii (center to corner for polygons) are prefixed with `r_` + # Angles in degrees use `a_` and angles in radians use `ar_` as prefix + # Edges of polygons are prefixed with `l_` + + ui_group = "Unstable" # see ./__init__.py for names + + def __init__(self) -> None: + Boxes.__init__(self) + + self.buildArgParser() + # Add non default cli params if needed (see argparse std lib) + self.argparser.add_argument( + "--sides", action="store", type=int, default=6, + help="The number of sides of the floor plan.") + self.argparser.add_argument( + "--pole_diameter", action="store", type=float, default=8.0, + help="The diameter of the poles.") + self.argparser.add_argument( + "--ball_diameter", action="store", type=float, default=75.0, + help="The diameter of the fat balls. Give some extra mm to make it a loose fit") + self.argparser.add_argument( + "--balcony_width", action="store", type=float, default=15.0, + help="The width of the area outside of the poles.") + self.argparser.add_argument( + "--balcony_height", action="store", type=float, default=20.0, + help="The height of the balcony in mm. Set to 0 if no walls are needed.") + self.argparser.add_argument( + "--drain_hole_diameter", action="store", type=float, default=5.0, + help="""The diameter of the hole of the floor (to drain rainwater) + in mm. Set to 0 if you don't need it.""") + self.argparser.add_argument( + "--pole_clearance", action="store", type=float, default=9.0, + help="""The minimum distance between a pole and the central + refill hole in the ceiling in mm.""") + self.argparser.add_argument( + "--slide_clearance", action="store", type=float, default=1.0, + help="""The gap between the parts that slide into each other + in the locking mechanism in mm.""") + self.argparser.add_argument( + "--spacer_width", action="store", type=float, default=15.0, + help="The width of the spacer (part of the locking mechanism) in mm.") + self.argparser.add_argument( + "--pole_clearance_factor", action="store", type=float, default=0.9, + help="""The fraction of the pole clearance which is being used for + the locking mechanism.""") + self.argparser.add_argument( + "--roof_overhang", action="store", type=float, default=20.0, + help="Defines how much wider than the bottom floor the roof is.") + self.argparser.add_argument( + "--roof_height", action="store", type=float, default=50.0, + help="The height of the roof in mm.") + self.argparser.add_argument( + "--roof_hole_diameter", action="store", type=float, default=5.0, + help="""The diameter of the hole of the roof in mm. + Set to 0 if you don't want to attach a hanger.""") + self.argparser.add_argument( + "--roof_maintenance_clearance", action="store", type=float, default=20.0, + help="The distance from on bottom corner of the roof to the maintenance hole in mm.") + self.argparser.add_argument( + "--roof_support_fraction", action="store", type=float, default=0.3, + help="The radius of the roof support part as a fraction of the roof radius.") + + def calc_tile_angle(self, radius, height): + """ + Calculate the angle (deg) between two roof tiles. + """ + + def cross(a, b): + """ + The cross product of two vectors + """ + c = [a[1]*b[2] - a[2]*b[1], + a[2]*b[0] - a[0]*b[2], + a[0]*b[1] - a[1]*b[0]] + + return c + + def scalar(a, b): + """ + The scalar product of two vectors + """ + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + + def norm(a): + """ + The norm of a vector + """ + return math.sqrt(a[0]**2 + a[1]**2 + a[2]**2) + + def add(a, b): + """ + The sum of two vectors + """ + return [aa + bb for aa, bb in zip(a, b)] + + ar_center = math.radians(360/self.sides) + base = radius * math.sin(ar_center / 2) * 2 + base_height = radius * math.cos(ar_center / 2) + + # Points are + # P one corner at the bottom of the pyramid + # C The center of the bottom of the pyramid + # O The tip of the pyramid + # Q, B the corners of the pyramid left and right of P + + pc = [-base/2, base_height, 0] + pb = [-base, 0, 0] + co = [0, 0, height] + pq = [base * math.cos(ar_center), base * math.sin(ar_center), 0] + + po = add(pc, co) + + n1 = cross(pq, po) + n2 = cross(po, pb) + + cos_e = scalar(n1, n2) / (norm(n1) * norm(n2)) + e = math.degrees(math.acos(cos_e)) + return e + + def get_pole_callback(self, pole_inset, pole_diameter, r_ceiling): + """ + Returns a callback function that renders the pole (and other) + holes into floor and ceiling. + """ + def cb(number): + if number == 0: + if r_ceiling > 0: + self.hole(0, 0, self.ball_diameter / 2) + elif self.drain_hole_diameter > 0: + self.hole(0, 0, self.drain_hole_diameter / 2) + else: + rads = math.radians((180 - (360/self.sides))/2) + + x = pole_inset * math.cos(rads) + y = pole_inset * math.sin(rads) + self.hole(x, y, pole_diameter / 2.0) + + if r_ceiling > 0 and 1 <= number <= (self.sides // 2 + 1): + a_center = 360.0 / self.sides + a_base = (180 - (360/self.sides))/2 + clearance = self.pole_clearance_factor * self.pole_clearance + r_clearance = clearance / math.sin(math.radians(a_base)) + r = r_ceiling - r_clearance + base_length = 2 * r * math.sin(math.radians(a_center / 2)) + + dy = r_clearance * math.sin(math.radians(a_base)) + dx = r_clearance * math.cos(math.radians(a_base)) + dx_outside = dy / math.tan(math.radians(a_center)) + + length = base_length + if number == 1: + length += dx_outside + dx + dx = - dx_outside + elif number == (self.sides // 2 + 1): + length += dx_outside + dx + + self.ctx.stroke() + with self.saved_context(): + self.set_source_color(Color.ETCHING) + self.moveTo(dx, dy) + self.ctx.line_to(length, 0) + self.ctx.stroke() + + return cb + + def get_roof_callback(self, r_polygon, r_hole): + """ + Returns a callback function that renders the + additional features of the roof bottom plate. + """ + def cb(number): + if number == 0: + # maintenance hole + self.hole(0, 0, r_hole) + + # engraving to indicate the bracket position + self.ctx.stroke() + with self.saved_context(): + self.set_source_color(Color.ETCHING) + self.regularPolygonAt(0, 0, self.sides, r=r_polygon) + self.ctx.stroke() + + return cb + + def balcony_wall(self, x, y, finger_padding, + callback=None, + move=None, + label=""): + """ + Function that renders a balcony wall. + Due to the calculation of the length of the sides + of the regularPolygonWall used for the floor plate, + the finger joints need a bit of padding left and right + such that they align with the floor plate. This is achieved + using an "efe" edge at the bottom. + """ + edges = "efeeee" + + edges = [self.edges.get(e, e) for e in edges] + edges += edges # append for wrapping around + overallwidth = x + edges[-1].spacing() + edges[3].spacing() + overallheight = y + edges[1].spacing() + edges[4].spacing() + + if self.move(overallwidth, overallheight, move, before=True): + return + + self.moveTo(0, edges[1].margin()) + for i, l in enumerate((finger_padding, x, finger_padding, y, x+2*finger_padding, y)): + self.cc(callback, i, y=edges[i].startwidth() + self.burn) + e1, e2 = edges[i], edges[i + 1] + + edges[i](l) + if i >= 2: + self.edgeCorner(e1, e2, 90) + + a_inner = (90 - 360.0 / self.sides) + inset = self.thickness * math.tan(math.radians(a_inner)) + self.ctx.stroke() + with self.saved_context(): + self.set_source_color(Color.ETCHING) + self.moveTo(inset, 0) + self.ctx.line_to(0, self.balcony_height) + self.moveTo(x+2*finger_padding-2*inset, 0) + self.ctx.line_to(0, self.balcony_height) + self.ctx.stroke() + self.move(overallwidth, overallheight, move, label=label) + + def roof_tile(self, r_roof, move=None, label=""): + """ + creates on rooftile + + :param move: (Default value = None) + :param label: rendered to identify parts, it is not meant to be cut or etched (Default value = "") + """ + # calculate the roof dimensions + + a_base = (180 - (360 / self.sides)) / 2.0 + ar_base = math.radians(a_base) + h_roof = self.roof_height + l_roof = 2 * r_roof * math.cos(ar_base) + r_roof_hole = self.roof_hole_diameter / 2 + h_roof_floor = r_roof * math.sin(ar_base) + h_roof_tile = math.sqrt(h_roof_floor**2 + h_roof**2) + + a_roof = math.degrees(math.atan(h_roof/h_roof_floor)) + ar_roof = math.radians(a_roof) + + ar_tile_base = math.atan(h_roof_tile / (l_roof/2)) + a_tile_base = math.degrees(ar_tile_base) + + edges = [self.edges.get(e, e) for e in "eee"] + + overallwidth = l_roof + 2*edges[0].spacing() + overallheight = h_roof_tile + 2*edges[0].spacing() + + l_side = math.sqrt((0.5*l_roof)**2 + h_roof_tile**2) - r_roof_hole + + if self.move(overallwidth, overallheight, move, before=True): + return + + self.moveTo(0, edges[0].margin()) + + e1, e2, e3 = edges[0], edges[1], edges[2] + + e1(l_roof) + self.edgeCorner(e1, e2, 180-a_tile_base) + e2(l_side) + self.corner(90) + self.corner(-(180-2*a_tile_base), radius=r_roof_hole) + self.corner(90) + e3(l_side) + self.edgeCorner(e3, e1, 180-a_tile_base) + + # draw grinding line on base + dy = self.thickness * math.tan(ar_roof) + dx = dy / math.tan(ar_tile_base) + self.ctx.stroke() + with self.saved_context(): + self.set_source_color(Color.ETCHING) + self.moveTo(dx, dy) + self.ctx.line_to(l_roof-2*dx, 0) + self.ctx.stroke() + + # draw grinding lines on sides + a_face = self.calc_tile_angle(r_roof, self.roof_height) + + a_face /= 2.0 + l_grinding = self.thickness * math.tan(math.radians(a_face)) + + # first we need to calculate the height of the line + # dy is the distance from the roof tip down to the tip of the "grinding triangle" + dy = h_roof_tile/l_roof * dx + dy *= 2 + if r_roof_hole > 0: + # this is only an approximation, but good enough + dy = max(dy, r_roof_hole) + + dx_bottom = l_grinding/math.sin(ar_base) + dx_top = l_roof/2 - (l_roof/2-dx_bottom)/(h_roof_tile/r_roof_hole) + + with self.saved_context(): + self.set_source_color(Color.ETCHING) + self.moveTo(dx_bottom, 0) + self.ctx.line_to(dx_top, h_roof_tile-dy) + self.moveTo(l_roof-2*dx_bottom, 0) + self.ctx.line_to(-dx_top, h_roof_tile-dy) + self.ctx.stroke() + + self.move(overallwidth, overallheight, move, label=label) + + def lock_part(self, r_inner, r_outer, move=None, label=""): + """ + Part of the locking mechanism (spacer and bracket). + """ + number_of_edges = 2 * (2 + (self.sides // 2)) + edges = [self.edges.get(e, e) for e in "e"*number_of_edges] + + a_center = 360/self.sides + a_base = (180 - (360/self.sides))/2 + + r_inner, _, l_inner = self.regularPolygon( + corners=self.sides, radius=r_inner) + r_outer, _, l_outer = self.regularPolygon( + corners=self.sides, radius=r_outer) + + overallwidth, overallheight = 1.5 * r_outer, 3**0.5 * r_outer + + if self.move(overallwidth, overallheight, move, before=True): + return + + second_half = number_of_edges / 2 + + for i in range(number_of_edges): + e1, e2 = edges[i], edges[(i+1) % number_of_edges] + if i in [second_half-1, number_of_edges-1]: + length = r_outer - r_inner + elif i < second_half: + length = l_outer + else: + length = l_inner + + if i in [second_half-2]: + angle = 180 - a_base + elif i in [second_half-1]: + angle = a_base + elif i in [number_of_edges-2]: + angle = a_base + elif i in [number_of_edges-1]: + angle = 180 - a_base + elif i < second_half: + angle = a_center + else: + angle = - a_center + + e1(length) + self.edgeCorner(e1, e2, angle) + + self.move(overallwidth, overallheight, move, label=label) + + def render(self): + # adjust to the variables you want in the local scope + r_ball = self.ball_diameter / 2 + d_pole = self.pole_diameter + r_pole = d_pole / 2 + w_balcony = self.balcony_width + h_balcony = self.balcony_height + + ar_base = math.radians((180 - (360/self.sides))/2) + r_clearance = self.pole_clearance / math.sin(ar_base) + + r_poles = r_ball + max(r_pole, r_clearance) + r_pole + r_floor = r_poles + r_pole + max(w_balcony, r_clearance, r_pole) + r_ceiling = r_poles + r_pole + max(r_clearance, r_pole) + r_roof = r_floor + self.roof_overhang + l_roof = 2 * r_roof * math.cos(ar_base) + t = self.thickness + + floor_outset = t / math.tan(math.radians(90.0-180/self.sides)) + l_floor = 2 * r_floor * math.sin(math.radians(360.0 / self.sides / 2)) + + h_roof = self.roof_height + h_roof_floor = r_roof * math.sin(ar_base) + a_roof = math.degrees(math.atan(h_roof/h_roof_floor)) + ar_roof = math.radians(a_roof) + + r_support = self.roof_support_fraction * r_roof + + # render the ceiling + self.regularPolygonWall(corners=self.sides, + r=r_ceiling, + edges="e", + callback=self.get_pole_callback(r_ceiling - r_poles, + d_pole, + r_ceiling), + move="up") + + # render the roof base + r_hole = r_ceiling - self.roof_maintenance_clearance + self.regularPolygonWall(corners=self.sides, + r=r_roof, edges="e", + callback=self.get_roof_callback(r_polygon=r_ceiling, + r_hole=r_hole), + move="up") + + # only render a balcony if height is >0 + if h_balcony > 0: + # render the floor plate + self.regularPolygonWall(corners=self.sides, + r=r_floor, + edges="F", + callback=self.get_pole_callback(r_floor-r_poles, + d_pole, + 0), + move="up") + + # render the balcony walls + for _ in range(self.sides): + self.balcony_wall(x=l_floor, + y=h_balcony, + finger_padding=floor_outset, + move="up") + else: + # render the floor plate + self.regularPolygonWall(corners=self.sides, + r=r_floor, + edges="e", + callback=self.get_pole_callback(r_floor - r_poles, + d_pole, + False), + move="up") + + if self.roof_hole_diameter > 0: + (_, h_poly, _) = self.regularPolygon(corners=self.sides, radius=r_support) + new_height = h_poly - self.thickness / math.atan(ar_roof) + + r_polygon = r_support * new_height / h_poly + r_hole = self.roof_hole_diameter / 2 + self.regularPolygonWall(corners=self.sides, + r=r_support, + edges="e", + callback=self.get_roof_callback(r_polygon=r_polygon, + r_hole=r_hole), + move="up") + + # render the spacer + self.lock_part(r_ceiling + self.slide_clearance, + r_ceiling + self.slide_clearance + self.spacer_width, + move="up") + + # render the bracket + r_inner = r_ceiling - r_clearance * self.pole_clearance_factor + r_outer = r_ceiling + self.slide_clearance + self.spacer_width + self.lock_part(r_inner, r_outer, move="right") + + # render the roof tiles + for _ in range(self.sides): + self.roof_tile(r_roof, move="up") + self.moveTo((0.5 * l_roof) if _ % 2 else + (1.5 * l_roof + 2*self.spacing), + 0, -180) diff --git a/examples/FatBallDispenser.svg b/examples/FatBallDispenser.svg new file mode 100644 index 000000000..24d54d8a9 --- /dev/null +++ b/examples/FatBallDispenser.svg @@ -0,0 +1,248 @@ + + + +FatBallDispenser + + +Unstable - FatBallDispenser +boxes FatBallDispenser +Birdhouse for fat balls. + + +### Description +Fat balls are quite common to feed tits. Here you can build a dispenser that protects +the fat balls from rain and snow. The design was tested using 4mm plywood for the +main structural parts. For the spacer of the locking mechanism two layers of 3mm +plywood have been stacked. The poles were made from 8mm diameter beech rod and 19cm +in length. Some basic consistency checks have been made for different numbers, but +only the defaults have ever been built. + +The final dispenser consists of two parts which slide into each other. You can mount +a hook to hang it into a tree. All edges that have angles different from 90 degrees (chamfers) +have engraved guiding lines which indicate the angle. You have to sand the edge such +that the pieces fit together. + +The top part (roof) consists of the the following elements for a N sided dispenser: + + * The N sided roof bottom plate which supports the roof tiles. It has a central cut out + which is needed for assembly and on the bottom side an engraved line which indicates the + position of the mounting bracket. + * N triangles forming the roof. They also have a small arc at the tip (roof_hole_diameter) + which acts as a drilling guide if you want to mount a hook. + * The N sided roof support piece which has a central hole for the hook. It is been mounted + to the roof tiles through the hole in the roof bottom plate to support the roof + tiles and acts as a mounting plate for the hook. + * Spacer(s); in the reference builds 2 spacers using 3mm plywood have been used. The spacer + needs to be a bit thicker than the ceiling (see below). That's the smaller + "U" shaped part which is glued to the bottom side of the roof bottom plate. + * The bracket is also "U" shaped and a bit wider than the spacer. This is glued to the + bottom of the spacer and holds the cage (bottom part). + +The bottom part (cage) consists of the follwoing elements: + + * The ceiling is N sided with the central refill hole and N smaller holes into which + the poles are fitted. + * The N sided floor part with finger joints for the balcony walls and holes for + the poles. A central hole to drain rain water can be added as well. + * N balcony walls surrounding the floor. + * N poles that join floor and ceiling (not part of the drawing) + +Other parts needed for assembly: + + * Wooden rod (N times the length of the poles). + * A hook (e.g. M5x50mm) + * A washer to distribute the load of the hook to the support piece + * One or two nuts to secure the hook + * Optional, a pice of wire mesh + +Assembly: + + * Sand all chamfers + * Glue balcony walls to the floor + * Glue pairs of roof tiles and use the roof bottom plate as a jig, Hot glue may be used to + tack the parts. + * Glue all roof tiles to form the roof + * Glue spacer(s) and the bracket into a stack + * Glue roof tiles to the roof bottom plate and attach the support piece + * Glue the stack to the roof bottom plate + * Cut the poles to length + * If you want to use multiple colors paint now, otherwise you also can paint later + * After painting you may need to get the paint out of the pole holes again using a drillbit + * Glue the poles into floor plate and ceiling + * Attach the hanger + * Attach the wire mesh + + +Created with Boxes.py (https://boxes.hackerspace-bamberg.de/) +Command line: boxes FatBallDispenser +Command line short: boxes FatBallDispenser + + + + + 100.0mm, burn:0.10mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/locale/de/LC_MESSAGES/boxes.py.mo b/locale/de/LC_MESSAGES/boxes.py.mo index e409ac44442779156c80f8dfec18dc87fc9a70ce..061ae053ef65f900c701b3d81f7f5d969dc49d4a 100644 GIT binary patch delta 28519 zcmai*2YggT7q>4R0!WcwFCdUmLhnlNT|iOr6*tKyS=j8x-3<{eR}_1th+QnaR$fJe zpoopwdj}gW|M$^-*J+XlZP{hwnz?{GNvSkI%WcOq;8 zm%$eBB1m`M&2TKd4Q9iAaDe9pUhDauH=c|c@Hn^{B8&GWltAA?HEcj(T{sJBfa734 zxEMBt*THV^9@rSZ1?$1jT={;8++NM&J+C=z0&6qA*PTcsGO}S?I1*;U1yB{whRxvB za0;&J1D*qEou&yWA4o5)cFNVG0YUsnqU|aYR91Q=28hGG;Jg*j<2ZIbE3y4Sq zVJH=sKuqqP0X4%jp;UT4tPQV*s(&NY0GnVR_yQaX|8N|1qBTJb%0#EY`tTwsjb3>o z`tLzxqs!O{HSkwZD*Og&;3kW#Gj)c;NDqT8VG?$L7r~zJPS_g01-ruUp!#odlFc6j z+ml`h<+RIA3haz8Awy2J4r<1?Lk+wMO5(?%Bz_Ufi9Uuh!MAWAtQE2v7!Es;UJRwl zi=q0x0#<{!!NcGkP!o6{AR6tEl zl1oQi`c#)*>C)?5I#^Fc%j8}t8$ASN)0d!Zy${OP`=JD@mdl!lO`!xUc09%LOvm$~ z>R%4EEN_Bxx@Vv?@DgMqf%m?vuoq6Cpkba>^;{^86haNO*fHU_9BR3p1*MT|p)|4q zN~2q#O!gd;g^L`|art+_n&dwP8^Y(|5coEffKBqP z<_?F_TsPPkj)f{u!d|e%rEhlJ0BbS6cPkO8WFypad13Vu3a7LkBMKLIop92Hg{4yeJ$KK6Q-u^3;>S{&oa%lsV z9ttJU45;-!3#xqp>%i4eHopeegLgrd-w*r2XB>ZnbxHSHjQ%x)L5pq1B&hUkSP$kv zbr6MFFn|)^4p<%D1*MU@p)~Rk)XZOn>gO%k8Ga7czWx&1?;xlhanusopU6@>SJ zs$UBw;q6cz-3$A{awyyW1mz3eqIQ)Ggjyvdpah)eI0I@Tv!KQ~-ld~1y)+;q)m;Fk zx>ZoVa5L15?uBxyr=j+PPhcke6KcS2MRpYohMK@Es0l29nm`O{0;R6}0>`zE!Fm_D z)A4>-n+A`;3GivCff~lF&D%o_Gy`g&iN`=yoC`a_BIv`*pqA?<$LC=?(tDu>tWj(?n(k2TdP4~?3$}ps zVQ(0N8Cw6>5z$O;gT3HGrU0jL`9Ht`MwxO#3@kq&V+%s##Kb>!#kiF+z&^==U@Yvk+K7|ggr?2hT4#hgIaDU zKrP1*YzFh-WVj6SpSOcQSlJs=Voi4|oI(2W67
NQ%*J`YRa7`PisV!xEjC>#m9 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 diff --git a/locale/en/LC_MESSAGES/boxes.py.mo b/locale/en/LC_MESSAGES/boxes.py.mo index 78e21f2476254bc46508993a2fad3588f4d264df..4672ab7db60be4bfb9404db58834c3b7a3d58475 100644 GIT binary patch literal 64175 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 literal 54196 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 diff --git a/locale/zh_CN/LC_MESSAGES/boxes.py.mo b/locale/zh_CN/LC_MESSAGES/boxes.py.mo index 636db547259d007c886fd655b8706768119ecd7e..4d4751763e0e851b07f3a551bdf551c4f979932e 100644 GIT binary patch delta 11838 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 E0Wol_XaE2J delta 11889 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 G(EkBL(y_e& diff --git a/po/boxes.py.pot b/po/boxes.py.pot index 307f7afe0..e5ef4fbdf 100644 --- a/po/boxes.py.pot +++ b/po/boxes.py.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-16 21:47+0200\n" +"POT-Creation-Date: 2024-12-28 10:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -839,10 +839,6 @@ msgstr "" msgid "Settings for Finger Joints" msgstr "" -#. parameter name for FingerJoint -msgid "angle" -msgstr "" - #. parameter name for FingerJoint msgid "style" msgstr "" @@ -936,6 +932,10 @@ msgstr "" msgid "Settings for Stackable Edges" msgstr "" +#. parameter name for Stackable +msgid "angle" +msgstr "" + #. help for parameter angle msgid "inside angle of the feet" msgstr "" @@ -1345,6 +1345,170 @@ msgstr "" msgid "AgricolaInsert Settings" msgstr "" +#. name of box generator +#: boxes/generators/airpurifier.py +msgid "AirPurifier" +msgstr "" + +#. description of AirPurifier +#: boxes/generators/airpurifier.py +msgid "Housing for the Nukit Open Air Purifier" +msgstr "" + +#. long description of AirPurifier in markdown +#: boxes/generators/airpurifier.py +msgid "" +"See [Nukit Open Air Purifier](https://github.com/opennukit/Nukit-Open-Air-" +"Purifier/)\n" +msgstr "" + +msgid "AirPurifier Settings" +msgstr "" + +#. help for parameter x +#: boxes/generators/airpurifier.py +msgid "inner width in mm" +msgstr "" + +#. help for parameter y +#: boxes/generators/airpurifier.py +msgid "inner depth in mm" +msgstr "" + +#. parameter name +#: boxes/generators/airpurifier.py +msgid "filter_height" +msgstr "" + +#. help for parameter filter_height +#: boxes/generators/airpurifier.py +msgid "height of the filter along the flow direction (in mm)" +msgstr "" + +#. parameter name +#: boxes/generators/airpurifier.py +msgid "rim" +msgstr "" + +#. help for parameter rim +#: boxes/generators/airpurifier.py +msgid "rim around the filter holding it in place (in mm)" +msgstr "" + +#. parameter name +#: boxes/generators/airpurifier.py +msgid "fan_diameter" +msgstr "" + +#. help for parameter fan_diameter +#: boxes/generators/airpurifier.py +msgid "diameter of the fans (in mm)" +msgstr "" + +#. parameter name +#: boxes/generators/airpurifier.py +msgid "filters" +msgstr "" + +#. help for parameter filters +#: boxes/generators/airpurifier.py +msgid "Filters on both sides or only one" +msgstr "" + +#. parameter name +#: boxes/generators/airpurifier.py +msgid "split_frames" +msgstr "" + +#. help for parameter split_frames +#: boxes/generators/airpurifier.py +msgid "Split frame pieces into four thin rectangles to save material" +msgstr "" + +#. parameter name +#: boxes/generators/airpurifier.py +msgid "fans_left" +msgstr "" + +#. help for parameter fans_left +#: boxes/generators/airpurifier.py +msgid "number of fans on the left side (-1 for maximal number)" +msgstr "" + +#. parameter name +#: boxes/generators/airpurifier.py +msgid "fans_right" +msgstr "" + +#. help for parameter fans_right +#: boxes/generators/airpurifier.py +msgid "number of fans on the right side (-1 for maximal number)" +msgstr "" + +#. parameter name +#: boxes/generators/airpurifier.py +msgid "fans_top" +msgstr "" + +#. help for parameter fans_top +#: boxes/generators/airpurifier.py +msgid "number of fans on the top side (-1 for maximal number)" +msgstr "" + +#. parameter name +#: boxes/generators/airpurifier.py +msgid "fans_bottom" +msgstr "" + +#. help for parameter fans_bottom +#: boxes/generators/airpurifier.py +msgid "number of fans on the bottom side (-1 for maximal number)" +msgstr "" + +#. parameter name +#: boxes/generators/airpurifier.py +msgid "screw_holes" +msgstr "" + +#. help for parameter screw_holes +#: boxes/generators/airpurifier.py +msgid "diameter of the holes for screwing in the fans (in mm)" +msgstr "" + +msgid "Settings for Dove Tail Joints" +msgstr "" + +#. help for parameter angle +#: boxes/generators/airpurifier.py +msgid "how much should fingers widen (-80 to 80)" +msgstr "" + +#. help for parameter depth +#: boxes/generators/airpurifier.py +msgid "" +"how far the dove tails stick out of/into the edge (multiples of thickness)" +msgstr "" + +#. parameter name for DoveTail +#: boxes/generators/airpurifier.py +msgid "radius" +msgstr "" + +#. help for parameter radius +#: boxes/generators/airpurifier.py +msgid "radius used on all four corners (multiples of thickness)" +msgstr "" + +#. parameter name for DoveTail +#: boxes/generators/airpurifier.py +msgid "size" +msgstr "" + +#. help for parameter size +#: boxes/generators/airpurifier.py +msgid "from one middle of a dove tail to another (multiples of thickness)" +msgstr "" + #. name of box generator #: boxes/generators/alledges.py msgid "AllEdges" @@ -1358,11 +1522,6 @@ msgstr "" msgid "AllEdges Settings" msgstr "" -#. help for parameter x -#: boxes/generators/alledges.py -msgid "inner width in mm" -msgstr "" - msgid "Settings for HandleEdge" msgstr "" @@ -1402,11 +1561,6 @@ msgid "" "top_edge parameter)" msgstr "" -#. parameter name for HandleEdge -#: boxes/generators/alledges.py -msgid "radius" -msgstr "" - #. help for parameter radius #: boxes/generators/alledges.py msgid "radius of corners in mm" @@ -1478,11 +1632,6 @@ msgstr "" msgid "AngledCutJig Settings" msgstr "" -#. help for parameter y -#: boxes/generators/angledcutjig.py -msgid "inner depth in mm" -msgstr "" - #. help for parameter angle #: boxes/generators/angledcutjig.py msgid "Angle of the cut" @@ -1616,7 +1765,7 @@ msgid "" "plate. The width of the \"brim\" can also be adjusted with the " "**edge_width**\n" " parameter in the **Finger Joints Settings**.\n" -" \n" +"\n" "See ClosedBox for variant without a base.\n" msgstr "" @@ -1704,7 +1853,7 @@ msgstr "" #. help for parameter front #: boxes/generators/bintray.py -msgid "fraction of bin height covert with slope" +msgid "fraction of bin height covered with slope" msgstr "" #. name of box generator @@ -1735,6 +1884,106 @@ msgstr "" msgid "overhang as fraction of the roof length" msgstr "" +#. name of box generator +#: boxes/generators/bookholder.py +msgid "BookHolder" +msgstr "" + +#. description of BookHolder +#: boxes/generators/bookholder.py +msgid "" +"Angled display stand for books, ring files, flyers, postcards, or business " +"cards." +msgstr "" + +#. long description of BookHolder in markdown +#: boxes/generators/bookholder.py +msgid "" +"\n" +"Smaller versions for postcards (with a small ledge) and for business cards:\n" +"\n" +"![BookHolder minis (front)](static/samples/BookHolder-minis.jpg)\n" +"\n" +"![BookHolder minis (side)](static/samples/BookHolder-minis-side.jpg)\n" +"\n" +"BookHolder with default parameters (A4 size, landscape, back_support):\n" +"\n" +"![BookHolder (back)](static/samples/BookHolder-back.jpg)\n" +msgstr "" + +msgid "BookHolder Settings" +msgstr "" + +#. parameter name +#: boxes/generators/bookholder.py +msgid "book_width" +msgstr "" + +#. help for parameter book_width +#: boxes/generators/bookholder.py +msgid "total width of book stand" +msgstr "" + +#. parameter name +#: boxes/generators/bookholder.py +msgid "book_height" +msgstr "" + +#. help for parameter book_height +#: boxes/generators/bookholder.py +msgid "height of the front plate" +msgstr "" + +#. parameter name +#: boxes/generators/bookholder.py +msgid "book_depth" +msgstr "" + +#. help for parameter book_depth +#: boxes/generators/bookholder.py +msgid "larger sizes for books with more pages" +msgstr "" + +#. parameter name +#: boxes/generators/bookholder.py +msgid "ledge_height" +msgstr "" + +#. help for parameter ledge_height +#: boxes/generators/bookholder.py +msgid "part in front to hold the book open (0 to turn off)" +msgstr "" + +#. help for parameter angle +#: boxes/generators/bookholder.py +msgid "degrees between floor and front plate" +msgstr "" + +#. parameter name +#: boxes/generators/bookholder.py +msgid "bottom_support" +msgstr "" + +#. help for parameter bottom_support +#: boxes/generators/bookholder.py +msgid "extra material on bottom to raise book up" +msgstr "" + +#. parameter name +#: boxes/generators/bookholder.py +msgid "back_support" +msgstr "" + +#. help for parameter back_support +#: boxes/generators/bookholder.py +msgid "height of additional support in the back (0 to turn off)" +msgstr "" + +#. help for parameter radius +#: boxes/generators/bookholder.py +msgid "radius at the sharp corners (negative for radius=thickness)" +msgstr "" + #. name of box generator #: boxes/generators/bottlestack.py msgid "BottleStack" @@ -1868,6 +2117,105 @@ msgstr "" msgid "radius of the corners" msgstr "" +#. name of box generator +#: boxes/generators/brick_sorter.py +msgid "BrickSorter" +msgstr "" + +#. description of BrickSorter +#: boxes/generators/brick_sorter.py +msgid "Stackable nestable sorting sieve for bricks" +msgstr "" + +#. long description of BrickSorter in markdown +#: boxes/generators/brick_sorter.py +msgid "" +"## Stackable nestable sorting sieve for bricks\n" +"A stackable sorting sieve for bricks, nestable for storage.\n" +"You will need to export all 5 levels, to get a full sieve.\n" +"If you feel you do not need the upper levels, just do not export them.\n" +"x,y,h are the dimensions for the largest sieve,\n" +"they will be the outer dimensions of the box,\n" +"the smaller sieves will be nested inside, therefore smaller.\n" +"Of course 256mm or 384mm (base plate size) are recommended values for x and " +"y,\n" +"but you can use any value you like.\n" +"\n" +"Full set of all 5 levels:\n" +"![Full Set](static/samples/BrickSorter-2.jpg)\n" +"\n" +"![Full Set](static/samples/BrickSorter-3.jpg)\n" +"\n" +"Stacked for Usage:\n" +"![Stacked](static/samples/BrickSorter-4.jpg)\n" +"\n" +"Nested for Storage:\n" +"![Full Set](static/samples/BrickSorter-5.jpg)\n" +"\n" +"In Use:\n" +"![Full Set](static/samples/BrickSorter-6.jpg)\n" +msgstr "" + +msgid "BrickSorter Settings" +msgstr "" + +#. help for parameter x +#: boxes/generators/brick_sorter.py +msgid "outer width of the most outer layer" +msgstr "" + +#. parameter name +#: boxes/generators/brick_sorter.py +msgid "level" +msgstr "" + +#. help for parameter level +#: boxes/generators/brick_sorter.py +msgid "Level of the nestable sieve" +msgstr "" + +#. possible choice for level +#: boxes/generators/brick_sorter.py +msgid "large_sieve" +msgstr "" + +#. possible choice for level +#: boxes/generators/brick_sorter.py +msgid "medium_sieve" +msgstr "" + +#. possible choice for level +#: boxes/generators/brick_sorter.py +msgid "small_sieve" +msgstr "" + +#. possible choice for level +#: boxes/generators/brick_sorter.py +msgid "tiny_sieve" +msgstr "" + +#. possible choice for level +#: boxes/generators/brick_sorter.py +msgid "bottom" +msgstr "" + +#. help for parameter radius +#: boxes/generators/brick_sorter.py +msgid "" +"Radius of the corners of the sieve pattern in mm. Enter 30 for circular " +"holes." +msgstr "" + +#. parameter name +#: boxes/generators/brick_sorter.py +msgid "wiggle" +msgstr "" + +#. help for parameter wiggle +#: boxes/generators/brick_sorter.py +msgid "Wiggle room, that the layers can slide in each other." +msgstr "" + #. name of box generator #: boxes/generators/burntest.py msgid "BurnTest" @@ -1919,6 +2267,26 @@ msgstr "" msgid "number of pairs (each testing four burn values)" msgstr "" +#. parameter name +#: boxes/generators/burntest.py +msgid "date" +msgstr "" + +#. help for parameter date +#: boxes/generators/burntest.py +msgid "add current date etching to each piece" +msgstr "" + +#. parameter name +#: boxes/generators/burntest.py +msgid "id" +msgstr "" + +#. help for parameter id +#: boxes/generators/burntest.py +msgid "add identifier etching to each piece" +msgstr "" + #. name of box generator #: boxes/generators/can_storage.py msgid "CanStorage" @@ -2122,42 +2490,104 @@ msgid "hole to border spacing (in mm)" msgstr "" #. name of box generator -#: boxes/generators/cardbox.py -msgid "CardBox" +#: boxes/generators/carbonfilter.py +msgid "CarbonFilter" msgstr "" -#. description of CardBox -#: boxes/generators/cardbox.py -msgid "Box for storage of playing cards, with versatile options" +#. description of CarbonFilter +#: boxes/generators/carbonfilter.py +msgid "Compact filter for activated char coal pellets" msgstr "" -#. long description of CardBox in markdown -#: boxes/generators/cardbox.py +#. long description of CarbonFilter in markdown +#: boxes/generators/carbonfilter.py msgid "" +"The filter does not include the top rim. You need some rectangular wooden " +"strip about 2-3cm in size to glue around. The x and y are without this rim " +"and should be about 5 cm smaller that the nominal size.\n" "\n" -"### Description\n" -"Versatile Box for Storage of playing cards. Multiple different styles of " -"storage are supportet, e.g. a flat storage or a trading card deck box style " -"storage. See images for ideas.\n" +"The following sizes are currently hard coded:\n" "\n" -"#### Building instructions\n" -"Place inner walls on floor first (if any). Then add the outer walls. Glue " -"the two walls without finger joins to the inside of the side walls. Make " -"sure there is no squeeze out on top, as this is going to form the rail for " -"the lid.\n" +"* Height of rails on top: 50mm\n" +"* Borders on top: 40mm\n" +"* Char coal width (horizontal): 40mm\n" +"* Bottom width: 40 + 20 + 40 mm\n" "\n" -"Add the top of the rails to the sides (front open) or to the back and front " -"(right side open) and the grip rail to the lid.\n" -"Details of the lid and rails\n" -"![Details](static/samples/CardBox-detail.jpg)\n" -"Whole box (early version still missing grip rail on the lid):\n" +"For assembly it is important that all bottom plates are the same way up. " +"This allows the ribs of adjacent pockets to pass beside each other.\n" +"\n" +"There are three type of ribs:\n" +"\n" +"* Those with staight tops go in the middle of the bottom plates\n" +"* Those pointier angle go at the outer sides and meet with the side bars\n" +"* The less pointy go at all other sides of the bottom plates that will end " +"up on the inside\n" +"\n" +"The last two types of ribs do not have finger joints on the outside but " +"still need to be glued to the top beam of the adjacent pocket or the left or " +"right side bar.\n" msgstr "" -msgid "CardBox Settings" +msgid "CarbonFilter Settings" msgstr "" #. parameter name -#: boxes/generators/cardbox.py +#: boxes/generators/carbonfilter.py +msgid "pockets" +msgstr "" + +#. help for parameter pockets +#: boxes/generators/carbonfilter.py +msgid "number of V shaped filter pockets" +msgstr "" + +#. parameter name +#: boxes/generators/carbonfilter.py +msgid "ribs" +msgstr "" + +#. help for parameter ribs +#: boxes/generators/carbonfilter.py +msgid "number of ribs to hold the bottom and the mesh" +msgstr "" + +#. name of box generator +#: boxes/generators/cardbox.py +msgid "CardBox" +msgstr "" + +#. description of CardBox +#: boxes/generators/cardbox.py +msgid "Box for storage of playing cards, with versatile options" +msgstr "" + +#. long description of CardBox in markdown +#: boxes/generators/cardbox.py +msgid "" +"\n" +"### Description\n" +"Versatile Box for Storage of playing cards. Multiple different styles of " +"storage are supported, e.g. a flat storage or a trading card deck box style " +"storage. See images for ideas.\n" +"\n" +"#### Building instructions\n" +"Place inner walls on floor first (if any). Then add the outer walls. Glue " +"the two walls without finger joins to the inside of the side walls. Make " +"sure there is no squeeze out on top, as this is going to form the rail for " +"the lid.\n" +"\n" +"Add the top of the rails to the sides (front open) or to the back and front " +"(right side open) and the grip rail to the lid.\n" +"Details of the lid and rails\n" +"![Details](static/samples/CardBox-detail.jpg)\n" +"Whole box (early version still missing grip rail on the lid):\n" +msgstr "" + +msgid "CardBox Settings" +msgstr "" + +#. parameter name +#: boxes/generators/cardbox.py msgid "openingdirection" msgstr "" @@ -2394,82 +2824,605 @@ msgstr "" msgid "CoffeeCapsuleHolder Settings" msgstr "" -#. parameter name -#: boxes/generators/coffeecapsulesholder.py -msgid "columns" +#. parameter name +#: boxes/generators/coffeecapsulesholder.py +msgid "columns" +msgstr "" + +#. help for parameter columns +#: boxes/generators/coffeecapsulesholder.py +msgid "Number of columns of capsules." +msgstr "" + +#. parameter name +#: boxes/generators/coffeecapsulesholder.py +msgid "rows" +msgstr "" + +#. help for parameter rows +#: boxes/generators/coffeecapsulesholder.py +msgid "Number of capsules by columns." +msgstr "" + +#. parameter name +#: boxes/generators/coffeecapsulesholder.py +msgid "backplate" +msgstr "" + +#. help for parameter backplate +#: boxes/generators/coffeecapsulesholder.py +msgid "True if a backplate should be generated." +msgstr "" + +#. name of box generator +#: boxes/generators/coinbanksafe.py +msgid "CoinBankSafe" +msgstr "" + +#. description of CoinBankSafe +#: boxes/generators/coinbanksafe.py +msgid "A piggy-bank designed to look like a safe." +msgstr "" + +#. long description of CoinBankSafe in markdown +#: boxes/generators/coinbanksafe.py +msgid "" +"\n" +"Make sure not to discard the circle cutouts from the lid, base, and door. " +"They are all needed.\n" +"\n" +"![Closed](static/samples/CoinBankSafe-closed.jpg)\n" +"\n" +"![Open](static/samples/CoinBankSafe-open.jpg)\n" +"\n" +"Assemble the locking pins like this: wiggle-disc, number-disc, doorhole-" +"disc, spacer-disc, D-disc.\n" +"Glue the first three in place, but do not glue the last two.\n" +"Leaving them unglued will allow you change the code, and to remove the pin " +"from the door.\n" +"\n" +"![Pins](static/samples/CoinBankSafe-pins.jpg)\n" +"\n" +msgstr "" + +msgid "CoinBankSafe Settings" +msgstr "" + +#. parameter name +#: boxes/generators/coinbanksafe.py +msgid "slotlength" +msgstr "" + +#. help for parameter slotlength +#: boxes/generators/coinbanksafe.py +msgid "Length of the coin slot in mm" +msgstr "" + +#. parameter name +#: boxes/generators/coinbanksafe.py +msgid "slotwidth" +msgstr "" + +#. help for parameter slotwidth +#: boxes/generators/coinbanksafe.py +msgid "Width of the coin slot in mm" +msgstr "" + +#. parameter name +#: boxes/generators/coinbanksafe.py +msgid "handlelength" +msgstr "" + +#. help for parameter handlelength +#: boxes/generators/coinbanksafe.py +msgid "Length of handle in multiples of thickness" +msgstr "" + +#. parameter name +#: boxes/generators/coinbanksafe.py +msgid "handleclearance" +msgstr "" + +#. help for parameter handleclearance +#: boxes/generators/coinbanksafe.py +msgid "Clearance of handle in multiples of thickness" +msgstr "" + +#. name of box generator +#: boxes/generators/coindisplay.py +msgid "CoinDisplay" +msgstr "" + +#. description of CoinDisplay +#: boxes/generators/coindisplay.py +msgid "A showcase for a single coin" +msgstr "" + +msgid "CoinDisplay Settings" +msgstr "" + +#. parameter name +#: boxes/generators/coindisplay.py +msgid "coin_d" +msgstr "" + +#. help for parameter coin_d +#: boxes/generators/coindisplay.py +msgid "The diameter of the coin in mm" +msgstr "" + +#. parameter name +#: boxes/generators/coindisplay.py +msgid "coin_plate" +msgstr "" + +#. help for parameter coin_plate +#: boxes/generators/coindisplay.py +msgid "The size of the coin plate" +msgstr "" + +#. parameter name +#: boxes/generators/coindisplay.py +msgid "coin_showcase_h" +msgstr "" + +#. help for parameter coin_showcase_h +#: boxes/generators/coindisplay.py +msgid "The height of the coin showcase piece" +msgstr "" + +#. help for parameter angle +#: boxes/generators/coindisplay.py +msgid "The angle that the coin will tilt as" +msgstr "" + +#. name of box generator +#: boxes/generators/typetray.py +msgid "TypeTray" +msgstr "" + +#. description of TypeTray +#: boxes/generators/typetray.py +msgid "Type tray - allows only continuous walls" +msgstr "" + +msgid "TypeTray Settings" +msgstr "" + +#. parameter name +#: boxes/generators/typetray.py +msgid "back_height" +msgstr "" + +#. help for parameter back_height +#: boxes/generators/typetray.py +msgid "additional height of the back wall - e top edge only" +msgstr "" + +#. help for parameter radius +#: boxes/generators/typetray.py +msgid "radius for strengthening side walls with back_height" +msgstr "" + +#. parameter name +#: boxes/generators/typetray.py +msgid "gripheight" +msgstr "" + +#. help for parameter gripheight +#: boxes/generators/typetray.py +msgid "height of the grip hole in mm" +msgstr "" + +#. parameter name +#: boxes/generators/typetray.py +msgid "gripwidth" +msgstr "" + +#. help for parameter gripwidth +#: boxes/generators/typetray.py +msgid "width of th grip hole in mm (zero for no hole)" +msgstr "" + +#. help for parameter handle +#: boxes/generators/typetray.py +msgid "add handle to the bottom (changes bottom edge in the front)" +msgstr "" + +#. parameter name +#: boxes/generators/typetray.py +msgid "fingerholes" +msgstr "" + +#. help for parameter fingerholes +#: boxes/generators/typetray.py +msgid "Decide which outer walls should have finger hole, too" +msgstr "" + +#. possible choice for fingerholes +#: boxes/generators/typetray.py +msgid "inside-only" +msgstr "" + +#. possible choice for fingerholes +#: boxes/generators/typetray.py +msgid "back" +msgstr "" + +#. possible choice for fingerholes +#: boxes/generators/typetray.py +msgid "front-and-back" +msgstr "" + +msgid "Settings for Cabinet Hinges" +msgstr "" + +#. parameter name for CabinetHinge +#: boxes/generators/typetray.py +msgid "bore" +msgstr "" + +#. help for parameter bore +#: boxes/generators/typetray.py +msgid "diameter of the pin hole in mm" +msgstr "" + +#. parameter name for CabinetHinge +#: boxes/generators/typetray.py +msgid "eyes_per_hinge" +msgstr "" + +#. help for parameter eyes_per_hinge +#: boxes/generators/typetray.py +msgid "pieces per hinge" +msgstr "" + +#. parameter name for CabinetHinge +#: boxes/generators/typetray.py +msgid "hinges" +msgstr "" + +#. help for parameter hinges +#: boxes/generators/typetray.py +msgid "number of hinges per edge" +msgstr "" + +#. help for parameter style +#: boxes/generators/typetray.py +msgid "style of hinge used" +msgstr "" + +#. possible choice for style +#: boxes/generators/typetray.py +msgid "inside" +msgstr "" + +#. parameter name for CabinetHinge +#: boxes/generators/typetray.py +msgid "eye" +msgstr "" + +#. help for parameter eye +#: boxes/generators/typetray.py +msgid "radius of the eye (multiples of thickness)" +msgstr "" + +#. help for parameter play +#: boxes/generators/typetray.py +msgid "space between eyes (multiples of thickness)" +msgstr "" + +#. parameter name for CabinetHinge +#: boxes/generators/typetray.py +msgid "spacing" +msgstr "" + +#. help for parameter spacing +#: boxes/generators/typetray.py +msgid "minimum space around the hinge (multiples of thickness)" +msgstr "" + +msgid "Settings for RoundedTriangleEdge" +msgstr "" + +#. help for parameter height +#: boxes/generators/typetray.py +msgid "height above the wall" +msgstr "" + +#. parameter name for RoundedTriangleEdge +#: boxes/generators/typetray.py +msgid "r_hole" +msgstr "" + +#. help for parameter r_hole +#: boxes/generators/typetray.py +msgid "radius of hole" +msgstr "" + +#. help for parameter radius +#: boxes/generators/typetray.py +msgid "radius of top corner" +msgstr "" + +#. help for parameter outset +#: boxes/generators/typetray.py +msgid "" +"extend the triangle along the length of the edge (multiples of thickness)" +msgstr "" + +msgid "Settings for Mounting Edge" +msgstr "" + +#. parameter name for Mounting +#: boxes/generators/typetray.py +msgid "d_head" +msgstr "" + +#. help for parameter d_head +#: boxes/generators/typetray.py +msgid "head diameter of mounting screw (in mm)" +msgstr "" + +#. parameter name for Mounting +#: boxes/generators/typetray.py +msgid "d_shaft" +msgstr "" + +#. help for parameter d_shaft +#: boxes/generators/typetray.py +msgid "shaft diameter of mounting screw (in mm)" +msgstr "" + +#. help for parameter margin +#: boxes/generators/typetray.py +msgid "" +"minimum space left and right without holes (fraction of the edge length)" +msgstr "" + +#. parameter name for Mounting +#: boxes/generators/typetray.py +msgid "num" +msgstr "" + +#. help for parameter num +#: boxes/generators/typetray.py +msgid "number of mounting holes (integer)" +msgstr "" + +#. parameter name for Mounting +#: boxes/generators/typetray.py +msgid "side" +msgstr "" + +#. help for parameter side +#: boxes/generators/typetray.py +msgid "side of box (not all valid configurations make sense...)" +msgstr "" + +#. help for parameter style +#: boxes/generators/typetray.py +msgid "edge style" +msgstr "" + +#. possible choice for style +#: boxes/generators/typetray.py +msgid "straight edge, within" +msgstr "" + +#. possible choice for style +#: boxes/generators/typetray.py +msgid "straight edge, extended" +msgstr "" + +#. possible choice for style +#: boxes/generators/typetray.py +msgid "mounting tab" +msgstr "" + +msgid "Compartment Labels" +msgstr "" + +#. parameter name +#: boxes/generators/typetray.py +msgid "text_size" +msgstr "" + +#. help for parameter text_size +#: boxes/generators/typetray.py +msgid "Textsize in mm for the traycontent" +msgstr "" + +#. parameter name +#: boxes/generators/typetray.py +msgid "text_alignment" +msgstr "" + +#. help for parameter text_alignment +#: boxes/generators/typetray.py +msgid "Text Alignment" +msgstr "" + +#. possible choice for text_alignment +#: boxes/generators/typetray.py +msgid "center" +msgstr "" + +#. parameter name +#: boxes/generators/typetray.py +msgid "text_distance_x" +msgstr "" + +#. help for parameter text_distance_x +#: boxes/generators/typetray.py +msgid "" +"Distance in X from edge of tray in mm. Has no effect when text is centered." +msgstr "" + +#. parameter name +#: boxes/generators/typetray.py +msgid "text_distance_y" +msgstr "" + +#. help for parameter text_distance_y +#: boxes/generators/typetray.py +msgid "Distance in Y from edge of tray in mm." +msgstr "" + +#. parameter name +#: boxes/generators/typetray.py +msgid "text_at_front" +msgstr "" + +#. help for parameter text_at_front +#: boxes/generators/typetray.py +msgid "Start compartement labels on the front" +msgstr "" + +#. parameter name +#: boxes/generators/typetray.py +msgid "label_file" +msgstr "" + +#. help for parameter label_file +#: boxes/generators/typetray.py +msgid "file with compartment labels. One line per compartment" +msgstr "" + +msgid "Settings for FingerHoleEdge" +msgstr "" + +#. parameter name for FingerHoleEdge +#: boxes/generators/typetray.py +msgid "absolute_depth" +msgstr "" + +#. help for parameter absolute_depth +#: boxes/generators/typetray.py +msgid "depth of the hole in mm (in addition to the relative)" +msgstr "" + +#. parameter name for FingerHoleEdge +#: boxes/generators/typetray.py +msgid "absolute_width" +msgstr "" + +#. help for parameter absolute_width +#: boxes/generators/typetray.py +msgid "width of the hole in mm (in addition to the relative)" +msgstr "" + +#. help for parameter radius +#: boxes/generators/typetray.py +msgid "maximal radius (in mm)" +msgstr "" + +#. parameter name for FingerHoleEdge +#: boxes/generators/typetray.py +msgid "relative_depth" +msgstr "" + +#. help for parameter relative_depth +#: boxes/generators/typetray.py +msgid "depth of the hole as fraction of the wall" +msgstr "" + +#. parameter name for FingerHoleEdge +#: boxes/generators/typetray.py +msgid "relative_width" +msgstr "" + +#. help for parameter relative_width +#: boxes/generators/typetray.py +msgid "width of the hole as fraction of the wall width" msgstr "" -#. help for parameter columns -#: boxes/generators/coffeecapsulesholder.py -msgid "Number of columns of capsules." +#. name of box generator +#: boxes/generators/compartmentbox.py +msgid "CompartmentBox" msgstr "" -#. parameter name -#: boxes/generators/coffeecapsulesholder.py -msgid "rows" +#. description of CompartmentBox +#: boxes/generators/compartmentbox.py +msgid "Type tray variation with sliding lid" msgstr "" -#. help for parameter rows -#: boxes/generators/coffeecapsulesholder.py -msgid "Number of capsules by columns." +#. long description of CompartmentBox in markdown +#: boxes/generators/compartmentbox.py +msgid "" +"Sliding lid rests on inner walls,\n" +"so will not work if no inner walls are present.\n" +"Suggested to place walls close to both sides for maximum stability.\n" +"Margin helps to prevent the lid from getting stuck.\n" +"Vertical margin increases the overall height.\n" +"The lip holding the lid in place can be generated as two separate\n" +"pieces or as a single piece that continues at the back.\n" +"\n" +"![Closed](static/samples/CompartmentBox-closed.jpg)\n" +"![Half open](static/samples/CompartmentBox-lid.jpg)\n" msgstr "" -#. parameter name -#: boxes/generators/coffeecapsulesholder.py -msgid "backplate" +msgid "CompartmentBox Settings" msgstr "" -#. help for parameter backplate -#: boxes/generators/coffeecapsulesholder.py -msgid "True if a backplate should be generated." +#. help for parameter handle +#: boxes/generators/compartmentbox.py +msgid "how to grab the lid to remove" msgstr "" -#. name of box generator -#: boxes/generators/coindisplay.py -msgid "CoinDisplay" +#. possible choice for handle +#: boxes/generators/compartmentbox.py +msgid "hole" msgstr "" -#. description of CoinDisplay -#: boxes/generators/coindisplay.py -msgid "A showcase for a single coin" +#. possible choice for handle +#: boxes/generators/compartmentbox.py +msgid "lip" msgstr "" -msgid "CoinDisplay Settings" +#. help for parameter radius +#: boxes/generators/compartmentbox.py +msgid "radius of the grip hole in mm" msgstr "" #. parameter name -#: boxes/generators/coindisplay.py -msgid "coin_d" +#: boxes/generators/compartmentbox.py +msgid "holes" msgstr "" -#. help for parameter coin_d -#: boxes/generators/coindisplay.py -msgid "The diameter of the coin in mm" +#. help for parameter holes +#: boxes/generators/compartmentbox.py +msgid "width of hole(s) in percentage of maximum hole width" msgstr "" #. parameter name -#: boxes/generators/coindisplay.py -msgid "coin_plate" +#: boxes/generators/compartmentbox.py +msgid "margin_t" msgstr "" -#. help for parameter coin_plate -#: boxes/generators/coindisplay.py -msgid "The size of the coin plate" +#. help for parameter margin_t +#: boxes/generators/compartmentbox.py +msgid "vertical margin for sliding lid (multiples of thickness)" msgstr "" #. parameter name -#: boxes/generators/coindisplay.py -msgid "coin_showcase_h" +#: boxes/generators/compartmentbox.py +msgid "margin_s" msgstr "" -#. help for parameter coin_showcase_h -#: boxes/generators/coindisplay.py -msgid "The height of the coin showcase piece" +#. help for parameter margin_s +#: boxes/generators/compartmentbox.py +msgid "margin to add at both sides of sliding lid (multiples of thickness)" msgstr "" -#. help for parameter angle -#: boxes/generators/coindisplay.py -msgid "The angle that the coin will tilt as" +#. parameter name +#: boxes/generators/compartmentbox.py +msgid "split_lip" +msgstr "" + +#. help for parameter split_lip +#: boxes/generators/compartmentbox.py +msgid "create two strips to reduce waste material" msgstr "" #. name of box generator @@ -2607,7 +3560,7 @@ msgid "" "\n" "#### Caution\n" "There is a chance that the latches of the back wall or the back wall itself " -"interfere with the front panel or it's mounting frame/lips. The generator " +"interfere with the front panel or its mounting frame/lips. The generator " "does not check for this. So depending on the variant chosen you might need " "to make the box deeper (increase y parameter) or the panel angle steeper " "(increase angle parameter) until there is enough room.\n" @@ -2682,52 +3635,6 @@ msgstr "" msgid "the panel is glued and not held by finger joints" msgstr "" -#. name of box generator -#: boxes/generators/crypticfont.py -msgid "CrypticFont" -msgstr "" - -#. description of CrypticFont -#: boxes/generators/crypticfont.py -msgid "DESCRIPTION" -msgstr "" - -msgid "CrypticFont Settings" -msgstr "" - -#. parameter name -#: boxes/generators/crypticfont.py -msgid "ctext" -msgstr "" - -#. help for parameter ctext -#: boxes/generators/crypticfont.py -msgid "text to render" -msgstr "" - -msgid "Settings for the Cryptic Font" -msgstr "" - -#. parameter name for CrypticFont -#: boxes/generators/crypticfont.py -msgid "ratio" -msgstr "" - -#. help for parameter ratio -#: boxes/generators/crypticfont.py -msgid "ratio of height to width" -msgstr "" - -#. parameter name for CrypticFont -#: boxes/generators/crypticfont.py -msgid "spacing" -msgstr "" - -#. help for parameter width -#: boxes/generators/crypticfont.py -msgid "width of the glphys in mm" -msgstr "" - #. name of box generator #: boxes/generators/desksign.py msgid "Desksign" @@ -2735,13 +3642,13 @@ msgstr "" #. description of Desksign #: boxes/generators/desksign.py -msgid "Simple diagonal plate with stands to show name or mesage" +msgid "Simple diagonal plate with stands to show name or message." msgstr "" #. long description of Desksign in markdown #: boxes/generators/desksign.py msgid "" -"Text to be engraved can be genarated by inputing the label and fontsize " +"Text to be engraved can be generated by inputting the label and fontsize " "fields.\n" " height represents the area that can be used for writing " "text, does not match the actual\n" @@ -2891,6 +3798,64 @@ msgstr "" msgid "radius of the disc rotating in the hinge (multiples of thickness)" msgstr "" +#. name of box generator +#: boxes/generators/dicetower.py +msgid "DiceTower" +msgstr "" + +#. description of DiceTower +#: boxes/generators/dicetower.py +msgid "Tool for fairly rolling dice" +msgstr "" + +#. long description of DiceTower in markdown +#: boxes/generators/dicetower.py +msgid "" +"Feel free to add a shallow ABox as a container for catching the dice so they " +"don't scatter across the table.\n" +"\n" +"You can also configure the DiceTower and change the number and angle of the " +"ramps.\n" +msgstr "" + +msgid "DiceTower Settings" +msgstr "" + +#. help for parameter width +#: boxes/generators/dicetower.py +msgid "width of the tower (side where the dice fall out)" +msgstr "" + +#. help for parameter depth +#: boxes/generators/dicetower.py +msgid "depth of the tower" +msgstr "" + +#. help for parameter height +#: boxes/generators/dicetower.py +msgid "height of the tower" +msgstr "" + +#. help for parameter bottom +#: boxes/generators/dicetower.py +msgid "include bottom piece" +msgstr "" + +#. parameter name +#: boxes/generators/dicetower.py +msgid "ramps" +msgstr "" + +#. help for parameter ramps +#: boxes/generators/dicetower.py +msgid "number of ramps in the tower" +msgstr "" + +#. help for parameter angle +#: boxes/generators/dicetower.py +msgid "angle of the ramps in the tower" +msgstr "" + #. name of box generator #: boxes/generators/dinrailbox.py msgid "DinRailBox" @@ -3103,11 +4068,6 @@ msgstr "" msgid "DisplayShelf Settings" msgstr "" -#. parameter name -#: boxes/generators/displayshelf.py -msgid "num" -msgstr "" - #. help for parameter num #: boxes/generators/displayshelf.py msgid "number of shelves" @@ -3138,6 +4098,26 @@ msgstr "" msgid "Include panel on the back of the shelf" msgstr "" +#. parameter name +#: boxes/generators/displayshelf.py +msgid "include_front" +msgstr "" + +#. help for parameter include_front +#: boxes/generators/displayshelf.py +msgid "Include panel on the front of the shelf (to be used backwards)" +msgstr "" + +#. parameter name +#: boxes/generators/displayshelf.py +msgid "include_bottom" +msgstr "" + +#. help for parameter include_bottom +#: boxes/generators/displayshelf.py +msgid "Include horizontal panel on the bottom of the shelf" +msgstr "" + #. parameter name #: boxes/generators/displayshelf.py msgid "slope_top" @@ -3158,6 +4138,26 @@ msgstr "" msgid "height of divider walls" msgstr "" +#. parameter name +#: boxes/generators/displayshelf.py +msgid "bottom_distance" +msgstr "" + +#. help for parameter bottom_distance +#: boxes/generators/displayshelf.py +msgid "height below the bottom shelf" +msgstr "" + +#. parameter name +#: boxes/generators/displayshelf.py +msgid "top_distance" +msgstr "" + +#. help for parameter top_distance +#: boxes/generators/displayshelf.py +msgid "extra height above the top shelf" +msgstr "" + #. name of box generator #: boxes/generators/dividertray.py msgid "DividerTray" @@ -3219,11 +4219,6 @@ msgstr "" msgid "generate wall on the right side" msgstr "" -#. parameter name -#: boxes/generators/dividertray.py -msgid "bottom" -msgstr "" - #. help for parameter bottom #: boxes/generators/dividertray.py msgid "generate wall on the bottom" @@ -3294,178 +4289,75 @@ msgstr "" msgid "play to avoid them clamping onto the walls (in multiples of thickness)" msgstr "" -#. name of box generator -#: boxes/generators/doubleflexdoorbox.py -msgid "DoubleFlexDoorBox" -msgstr "" - -#. description of DoubleFlexDoorBox -#: boxes/generators/doubleflexdoorbox.py -msgid "Box with two part lid with living hinges and round corners" -msgstr "" - -msgid "DoubleFlexDoorBox Settings" -msgstr "" - -#. help for parameter radius -#: boxes/generators/doubleflexdoorbox.py -msgid "Radius of the latch in mm" -msgstr "" - -#. parameter name -#: boxes/generators/doubleflexdoorbox.py -msgid "latchsize" -msgstr "" - -#. help for parameter latchsize -#: boxes/generators/doubleflexdoorbox.py -msgid "size of latch in multiples of thickness" -msgstr "" - -#. name of box generator -#: boxes/generators/drillbox.py -msgid "DrillBox" -msgstr "" - -#. description of DrillBox -#: boxes/generators/drillbox.py -msgid "A parametrized box for drills" -msgstr "" - -#. long description of DrillBox in markdown -#: boxes/generators/drillbox.py -msgid "![Multiple DrillBoxes](static/samples/DrillBoxes.jpg) " -msgstr "" - -msgid "DrillBox Settings" -msgstr "" - -#. parameter name -#: boxes/generators/drillbox.py -msgid "holes" -msgstr "" - -#. help for parameter holes -#: boxes/generators/drillbox.py -msgid "Number of holes for each size" -msgstr "" - -#. parameter name -#: boxes/generators/drillbox.py -msgid "firsthole" -msgstr "" - -#. help for parameter firsthole -#: boxes/generators/drillbox.py -msgid "Smallest hole" -msgstr "" - -#. parameter name -#: boxes/generators/drillbox.py -msgid "holeincrement" -msgstr "" - -#. help for parameter holeincrement -#: boxes/generators/drillbox.py -msgid "increment between holes" -msgstr "" - -msgid "Settings for RoundedTriangleEdge" -msgstr "" - -#. help for parameter height -#: boxes/generators/drillbox.py -msgid "height above the wall" -msgstr "" - -#. parameter name for RoundedTriangleEdge -#: boxes/generators/drillbox.py -msgid "r_hole" -msgstr "" - -#. help for parameter r_hole -#: boxes/generators/drillbox.py -msgid "radius of hole" -msgstr "" - -#. help for parameter radius -#: boxes/generators/drillbox.py -msgid "radius of top corner" -msgstr "" - -#. help for parameter outset -#: boxes/generators/drillbox.py -msgid "" -"extend the triangle along the length of the edge (multiples of thickness)" -msgstr "" - -msgid "Settings for Mounting Edge" +#. name of box generator +#: boxes/generators/doubleflexdoorbox.py +msgid "DoubleFlexDoorBox" msgstr "" -#. parameter name for Mounting -#: boxes/generators/drillbox.py -msgid "d_head" +#. description of DoubleFlexDoorBox +#: boxes/generators/doubleflexdoorbox.py +msgid "Box with two part lid with living hinges and round corners" msgstr "" -#. help for parameter d_head -#: boxes/generators/drillbox.py -msgid "head diameter of mounting screw (in mm)" +msgid "DoubleFlexDoorBox Settings" msgstr "" -#. parameter name for Mounting -#: boxes/generators/drillbox.py -msgid "d_shaft" +#. help for parameter radius +#: boxes/generators/doubleflexdoorbox.py +msgid "Radius of the latch in mm" msgstr "" -#. help for parameter d_shaft -#: boxes/generators/drillbox.py -msgid "shaft diameter of mounting screw (in mm)" +#. parameter name +#: boxes/generators/doubleflexdoorbox.py +msgid "latchsize" msgstr "" -#. help for parameter margin -#: boxes/generators/drillbox.py -msgid "" -"minimum space left and right without holes (fraction of the edge length)" +#. help for parameter latchsize +#: boxes/generators/doubleflexdoorbox.py +msgid "size of latch in multiples of thickness" msgstr "" -#. help for parameter num +#. name of box generator #: boxes/generators/drillbox.py -msgid "number of mounting holes (integer)" +msgid "DrillBox" msgstr "" -#. parameter name for Mounting +#. description of DrillBox #: boxes/generators/drillbox.py -msgid "side" +msgid "A parametrized box for drills" msgstr "" -#. help for parameter side +#. long description of DrillBox in markdown #: boxes/generators/drillbox.py -msgid "side of box (not all valid configurations make sense...)" +msgid "![Multiple DrillBoxes](static/samples/DrillBoxes.jpg) " +msgstr "" + +msgid "DrillBox Settings" msgstr "" -#. possible choice for side +#. help for parameter holes #: boxes/generators/drillbox.py -msgid "back" +msgid "Number of holes for each size" msgstr "" -#. help for parameter style +#. parameter name #: boxes/generators/drillbox.py -msgid "edge style" +msgid "firsthole" msgstr "" -#. possible choice for style +#. help for parameter firsthole #: boxes/generators/drillbox.py -msgid "straight edge, within" +msgid "Smallest hole" msgstr "" -#. possible choice for style +#. parameter name #: boxes/generators/drillbox.py -msgid "straight edge, extended" +msgid "holeincrement" msgstr "" -#. possible choice for style +#. help for parameter holeincrement #: boxes/generators/drillbox.py -msgid "mounting tab" +msgid "increment between holes" msgstr "" #. name of box generator @@ -3481,7 +4373,7 @@ msgstr "" #. long description of DrillStand in markdown #: boxes/generators/drillstand.py msgid "" -"Note: `sh` gives the hight of the rows front to back. It though should have " +"Note: `sh` gives the height of the rows front to back. It though should have " "the same number of entries as `sy`. These heights are the one on the left " "side and increase throughout the row. To have each compartment a bit higher " "than the previous one the steps in `sh` should be a bit bigger than " @@ -3688,6 +4580,268 @@ msgstr "" msgid "Hole" msgstr "" +#. name of box generator +#: boxes/generators/fatballdispenser.py +msgid "FatBallDispenser" +msgstr "" + +#. description of FatBallDispenser +#: boxes/generators/fatballdispenser.py +msgid "Birdhouse for fat balls." +msgstr "" + +#. long description of FatBallDispenser in markdown +#: boxes/generators/fatballdispenser.py +msgid "" +"\n" +"### Description\n" +"Fat balls are quite common to feed tits. Here you can build a dispenser that " +"protects\n" +"the fat balls from rain and snow. The design was tested using 4mm plywood " +"for the\n" +"main structural parts. For the spacer of the locking mechanism two layers of " +"3mm\n" +"plywood have been stacked. The poles were made from 8mm diameter beech rod " +"and 19cm\n" +"in length. Some basic consistency checks have been made for different " +"numbers, but\n" +"only the defaults have ever been built.\n" +"\n" +"The final dispenser consists of two parts which slide into each other. You " +"can mount\n" +"a hook to hang it into a tree. All edges that have angles different from 90 " +"degrees (chamfers)\n" +"have engraved guiding lines which indicate the angle. You have to sand the " +"edge such\n" +"that the pieces fit together.\n" +"\n" +"The top part (roof) consists of the the following elements for a N sided " +"dispenser:\n" +"\n" +" * The N sided roof bottom plate which supports the roof tiles. It has a " +"central cut out\n" +" which is needed for assembly and on the bottom side an engraved line " +"which indicates the\n" +" position of the mounting bracket.\n" +" * N triangles forming the roof. They also have a small arc at the tip " +"(roof_hole_diameter)\n" +" which acts as a drilling guide if you want to mount a hook.\n" +" * The N sided roof support piece which has a central hole for the hook. It " +"is been mounted\n" +" to the roof tiles through the hole in the roof bottom plate to support the " +"roof\n" +" tiles and acts as a mounting plate for the hook.\n" +" * Spacer(s); in the reference builds 2 spacers using 3mm plywood have been " +"used. The spacer\n" +" needs to be a bit thicker than the ceiling (see below). That's the " +"smaller\n" +" \"U\" shaped part which is glued to the bottom side of the roof bottom " +"plate.\n" +" * The bracket is also \"U\" shaped and a bit wider than the spacer. This " +"is glued to the\n" +" bottom of the spacer and holds the cage (bottom part).\n" +"\n" +"The bottom part (cage) consists of the follwoing elements:\n" +"\n" +" * The ceiling is N sided with the central refill hole and N smaller holes " +"into which\n" +" the poles are fitted.\n" +" * The N sided floor part with finger joints for the balcony walls and " +"holes for\n" +" the poles. A central hole to drain rain water can be added as well.\n" +" * N balcony walls surrounding the floor.\n" +" * N poles that join floor and ceiling (not part of the drawing)\n" +"\n" +"Other parts needed for assembly:\n" +"\n" +" * Wooden rod (N times the length of the poles).\n" +" * A hook (e.g. M5x50mm)\n" +" * A washer to distribute the load of the hook to the support piece\n" +" * One or two nuts to secure the hook\n" +" * Optional, a pice of wire mesh\n" +"\n" +"Assembly:\n" +"\n" +" * Sand all chamfers\n" +" * Glue balcony walls to the floor\n" +" * Glue pairs of roof tiles and use the roof bottom plate as a jig, Hot " +"glue may be used to\n" +" tack the parts.\n" +" * Glue all roof tiles to form the roof\n" +" * Glue spacer(s) and the bracket into a stack\n" +" * Glue roof tiles to the roof bottom plate and attach the support piece\n" +" * Glue the stack to the roof bottom plate\n" +" * Cut the poles to length\n" +" * If you want to use multiple colors paint now, otherwise you also can " +"paint later\n" +" * After painting you may need to get the paint out of the pole holes again " +"using a drillbit\n" +" * Glue the poles into floor plate and ceiling\n" +" * Attach the hanger\n" +" * Attach the wire mesh\n" +" " +msgstr "" + +msgid "FatBallDispenser Settings" +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "sides" +msgstr "" + +#. help for parameter sides +#: boxes/generators/fatballdispenser.py +msgid "The number of sides of the floor plan." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "pole_diameter" +msgstr "" + +#. help for parameter pole_diameter +#: boxes/generators/fatballdispenser.py +msgid "The diameter of the poles." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "ball_diameter" +msgstr "" + +#. help for parameter ball_diameter +#: boxes/generators/fatballdispenser.py +msgid "" +"The diameter of the fat balls. Give some extra mm to make it a loose fit" +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "balcony_width" +msgstr "" + +#. help for parameter balcony_width +#: boxes/generators/fatballdispenser.py +msgid "The width of the area outside of the poles." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "balcony_height" +msgstr "" + +#. help for parameter balcony_height +#: boxes/generators/fatballdispenser.py +msgid "The height of the balcony in mm. Set to 0 if no walls are needed." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "drain_hole_diameter" +msgstr "" + +#. help for parameter drain_hole_diameter +#: boxes/generators/fatballdispenser.py +msgid "" +"The diameter of the hole of the floor (to drain rainwater)\n" +" in mm. Set to 0 if you don't need it." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "pole_clearance" +msgstr "" + +#. help for parameter pole_clearance +#: boxes/generators/fatballdispenser.py +msgid "" +"The minimum distance between a pole and the central\n" +" refill hole in the ceiling in mm." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "slide_clearance" +msgstr "" + +#. help for parameter slide_clearance +#: boxes/generators/fatballdispenser.py +msgid "" +"The gap between the parts that slide into each other\n" +" in the locking mechanism in mm." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "spacer_width" +msgstr "" + +#. help for parameter spacer_width +#: boxes/generators/fatballdispenser.py +msgid "The width of the spacer (part of the locking mechanism) in mm." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "pole_clearance_factor" +msgstr "" + +#. help for parameter pole_clearance_factor +#: boxes/generators/fatballdispenser.py +msgid "" +"The fraction of the pole clearance which is being used for\n" +" the locking mechanism." +msgstr "" + +#. help for parameter roof_overhang +#: boxes/generators/fatballdispenser.py +msgid "Defines how much wider than the bottom floor the roof is." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_height" +msgstr "" + +#. help for parameter roof_height +#: boxes/generators/fatballdispenser.py +msgid "The height of the roof in mm." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_hole_diameter" +msgstr "" + +#. help for parameter roof_hole_diameter +#: boxes/generators/fatballdispenser.py +msgid "" +"The diameter of the hole of the roof in mm.\n" +" Set to 0 if you don't want to attach a hanger." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_maintenance_clearance" +msgstr "" + +#. help for parameter roof_maintenance_clearance +#: boxes/generators/fatballdispenser.py +msgid "" +"The distance from on bottom corner of the roof to the maintenance hole in mm." +msgstr "" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_support_fraction" +msgstr "" + +#. help for parameter roof_support_fraction +#: boxes/generators/fatballdispenser.py +msgid "The radius of the roof support part as a fraction of the roof radius." +msgstr "" + #. name of box generator #: boxes/generators/filamentspool.py msgid "FilamentSpool" @@ -3741,11 +4895,6 @@ msgstr "" msgid "diameter of the axle hole" msgstr "" -#. parameter name -#: boxes/generators/filamentspool.py -msgid "sides" -msgstr "" - #. help for parameter sides #: boxes/generators/filamentspool.py msgid "number of pieces for the center part" @@ -3764,6 +4913,39 @@ msgstr "" msgid "FillTest Settings" msgstr "" +#. name of box generator +#: boxes/generators/flexbook.py +msgid "FlexBook" +msgstr "" + +#. description of FlexBook +#: boxes/generators/flexbook.py +msgid "Box with living hinge styled after a book." +msgstr "" + +#. long description of FlexBook in markdown +#: boxes/generators/flexbook.py +msgid "" +"\n" +"If you have an enclosure, arrange the living hinge to be as close to your " +"extractor fan as possible.\n" +"\n" +"![Open](static/samples/FlexBook-2.jpg)" +msgstr "" + +msgid "FlexBook Settings" +msgstr "" + +#. parameter name +#: boxes/generators/flexbook.py +msgid "recess_wall" +msgstr "" + +#. help for parameter recess_wall +#: boxes/generators/flexbook.py +msgid "Whether to recess the inner wall for easier object removal" +msgstr "" + #. description of FlexBox #: boxes/generators/flexbox.py msgid "Box with living hinge and round corners" @@ -3951,7 +5133,7 @@ msgid "" "all\n" " currently supported objects.\n" "\n" -"#### \n" +"####\n" "`rect x y w h [cr=0] [cx=True] [cy=True]`\n" "\n" " x: x position\n" @@ -3972,7 +5154,7 @@ msgid "" " h: height\n" "\n" "`outline` has a special meaning: You can create multiple panel outlines with " -"one command. \n" +"one command.\n" "This has the effect of making it easy to manage all the holes on all the " "sides of\n" "your boxes.\n" @@ -4187,7 +5369,7 @@ msgstr "" #: boxes/generators/gridfinitybase.py msgid "" "This is a configurable gridfinity base. This\n" -" design is based on \n" +" design is based on\n" " Zach " "Freedman's Gridfinity system" msgstr "" @@ -4242,29 +5424,14 @@ msgstr "" msgid "The cutout for each grid opening. Typical is 38." msgstr "" -#. name of box generator -#: boxes/generators/traylayout.py -msgid "TrayLayout" -msgstr "" - -#. description of TrayLayout -#: boxes/generators/traylayout.py -msgid "Generate a typetray from a layout file." -msgstr "" - -#. long description of TrayLayout in markdown -#: boxes/generators/traylayout.py -msgid "" -"This is a two step process. This is step 2.\n" -"Edit the layout text graphics to adjust your tray.\n" -"Put in the sizes for each column and row. You can replace the hyphens and\n" -"vertical bars representing the walls with a space character to remove the " -"walls.\n" -"You can replace the space characters representing the floor by a \"X\" to " -"remove the floor for this compartment.\n" +#. parameter name +#: boxes/generators/gridfinitybase.py +msgid "cut_pads" msgstr "" -msgid "TrayLayout Settings" +#. help for parameter cut_pads +#: boxes/generators/gridfinitybase.py +msgid "cut pads to be used for gridinity boxes from the grid openings" msgstr "" #. name of box generator @@ -4283,7 +5450,7 @@ msgid "" "\n" "This is a general purpose gridfinity tray generator. You can create\n" "somewhat arbitrarily shaped trays, or just do nothing for simple grid\n" -"shaped trays. \n" +"shaped trays.\n" "\n" "The dimensions are automatically calculated to fit perfectly into a\n" "gridfinity grid (like the GridfinityBase, or any other Gridfinity\n" @@ -4293,7 +5460,7 @@ msgid "" "You can replace the hyphens and vertical bars representing the walls\n" "with a space character to remove the walls. You can replace the space\n" "characters representing the floor by a \"X\" to remove the floor for\n" -"this compartment. \n" +"this compartment.\n" msgstr "" msgid "GridfinityTrayLayout Settings" @@ -4350,9 +5517,49 @@ msgstr "" msgid "Leave this much total margin on the outside, in mm" msgstr "" -#. help for parameter layout -#: boxes/generators/gridfinitytraylayout.py -msgid "You can hand edit this before generating" +#. name of box generator +#: boxes/generators/gridfinitydrillbox.py +msgid "GridfinityDrillBox" +msgstr "" + +#. description of GridfinityDrillBox +#: boxes/generators/gridfinitydrillbox.py +msgid "A Gridfinity box for drills or similar tools" +msgstr "" + +#. long description of GridfinityDrillBox in markdown +#: boxes/generators/gridfinitydrillbox.py +msgid "" +"You need to add a hole pattern to all horizontal layers except the very " +"bottom" +msgstr "" + +msgid "GridfinityDrillBox Settings" +msgstr "" + +#. name of box generator +#: boxes/generators/traylayout.py +msgid "TrayLayout" +msgstr "" + +#. description of TrayLayout +#: boxes/generators/traylayout.py +msgid "Generate a typetray from a layout file." +msgstr "" + +#. long description of TrayLayout in markdown +#: boxes/generators/traylayout.py +msgid "" +"This is a two step process. This is step 2.\n" +"Edit the layout text graphics to adjust your tray.\n" +"Put in the sizes for each column and row. You can replace the hyphens and\n" +"vertical bars representing the walls with a space character to remove the " +"walls.\n" +"You can replace the space characters representing the floor by a \"X\" to " +"remove the floor for this compartment.\n" +msgstr "" + +msgid "TrayLayout Settings" msgstr "" #. name of box generator @@ -4444,12 +5651,7 @@ msgstr "" #. possible choice for top #: boxes/generators/heart.py -msgid "closed" -msgstr "" - -#. possible choice for top -#: boxes/generators/heart.py -msgid "hole" +msgid "closed" msgstr "" #. possible choice for top @@ -4493,67 +5695,103 @@ msgstr "" msgid "split the lid in y direction (mm)" msgstr "" -msgid "Settings for Cabinet Hinges" +#. name of box generator +#: boxes/generators/hobbycase.py +msgid "HobbyCase" msgstr "" -#. parameter name for CabinetHinge -#: boxes/generators/hingebox.py -msgid "bore" +#. description of HobbyCase +#: boxes/generators/hobbycase.py +msgid "" +"A case that can be used in any hobby involving small pieces in need of " +"organizing." msgstr "" -#. help for parameter bore -#: boxes/generators/hingebox.py -msgid "diameter of the pin hole in mm" +#. long description of HobbyCase in markdown +#: boxes/generators/hobbycase.py +msgid "" +"\n" +"The hobby case is defined by units, \"cells\" of the case.\n" +"You define depth, height and widths of the cells.\n" +"By combining dimensions with number of columns and rows slots for shelves " +"are generated.\n" +"Slots can be populated by:\n" +"\n" +"* shelves (horizontal piece of plywood that covers full width and depth of " +"the column. You can put anything on them, but they also provide some " +"structural integrity. It is recommended to have a least one shelve every 2-4 " +"slots (depending on the unit height)\n" +"* rails (3 horizontal pieces that stick out of the side and back walls of " +"the column. They can be used to allow taller things placed on shelves below, " +"but also some sliding drawers can be put in them.\n" msgstr "" -#. parameter name for CabinetHinge -#: boxes/generators/hingebox.py -msgid "eyes_per_hinge" +msgid "HobbyCase Settings" msgstr "" -#. help for parameter eyes_per_hinge -#: boxes/generators/hingebox.py -msgid "pieces per hinge" +#. parameter name +#: boxes/generators/hobbycase.py +msgid "unit_d" msgstr "" -#. parameter name for CabinetHinge -#: boxes/generators/hingebox.py -msgid "hinges" +#. help for parameter unit_d +#: boxes/generators/hobbycase.py +msgid "Depth of single unit" msgstr "" -#. help for parameter hinges -#: boxes/generators/hingebox.py -msgid "number of hinges per edge" +#. parameter name +#: boxes/generators/hobbycase.py +msgid "unit_h" msgstr "" -#. help for parameter style -#: boxes/generators/hingebox.py -msgid "style of hinge used" +#. help for parameter unit_h +#: boxes/generators/hobbycase.py +msgid "Height of single unit" msgstr "" -#. possible choice for style -#: boxes/generators/hingebox.py -msgid "inside" +#. parameter name +#: boxes/generators/hobbycase.py +msgid "unit_w" msgstr "" -#. parameter name for CabinetHinge -#: boxes/generators/hingebox.py -msgid "eye" +#. help for parameter unit_w +#: boxes/generators/hobbycase.py +msgid "Widths of unit columns, eg. 215*3 or 150:215:150" msgstr "" -#. help for parameter eye -#: boxes/generators/hingebox.py -msgid "radius of the eye (multiples of thickness)" +#. help for parameter rows +#: boxes/generators/hobbycase.py +msgid "Number of rows in each of the columns" msgstr "" -#. help for parameter play -#: boxes/generators/hingebox.py -msgid "space between eyes (multiples of thickness)" +#. parameter name +#: boxes/generators/hobbycase.py +msgid "shelves_n" msgstr "" -#. help for parameter spacing -#: boxes/generators/hingebox.py -msgid "minimum space around the hinge (multiples of thickness)" +#. help for parameter shelves_n +#: boxes/generators/hobbycase.py +msgid "How many shelves should each column have eg. 2:3:2. Use integers only!" +msgstr "" + +#. parameter name +#: boxes/generators/hobbycase.py +msgid "add_rails" +msgstr "" + +#. help for parameter add_rails +#: boxes/generators/hobbycase.py +msgid "Should rails be generated for slots unpopulated by shelves?" +msgstr "" + +#. parameter name +#: boxes/generators/hobbycase.py +msgid "add_cover" +msgstr "" + +#. help for parameter add_cover +#: boxes/generators/hobbycase.py +msgid "Should cover for the case be generated?" msgstr "" #. name of box generator @@ -4650,19 +5888,6 @@ msgstr "" msgid "IntegratedHingeBox Settings" msgstr "" -#. name of box generator -#: boxes/generators/j.py -msgid "J" -msgstr "" - -msgid "J Settings" -msgstr "" - -#. parameter name -#: boxes/generators/j.py -msgid "XX" -msgstr "" - #. name of box generator #: boxes/generators/jointpanel.py msgid "JointPanel" @@ -4715,33 +5940,110 @@ msgstr "" msgid "draw pieces apart so they can be cut to form a large sheet" msgstr "" -msgid "Settings for Dove Tail Joints" +#. name of box generator +#: boxes/generators/keyholder.py +msgid "KeyHolder" msgstr "" -#. help for parameter angle -#: boxes/generators/jointpanel.py -msgid "how much should fingers widen (-80 to 80)" +#. description of KeyHolder +#: boxes/generators/keyholder.py +msgid "Wall organizer with hooks for keys or similar small items" msgstr "" -#. help for parameter depth -#: boxes/generators/jointpanel.py +#. long description of KeyHolder in markdown +#: boxes/generators/keyholder.py msgid "" -"how far the dove tails stick out of/into the edge (multiples of thickness)" +"Example for a KeyHolder with a slightly larger backplate and 8 hooks. This " +"uses 6mm plywood for extra stability.\n" +"\n" +"Closeup:\n" +"\n" +"![KeyHolder-2](static/samples/KeyHolder-2.jpg)\n" +"\n" +"Full picture:\n" msgstr "" -#. help for parameter radius -#: boxes/generators/jointpanel.py -msgid "radius used on all four corners (multiples of thickness)" +msgid "KeyHolder Settings" msgstr "" -#. parameter name for DoveTail -#: boxes/generators/jointpanel.py -msgid "size" +#. parameter name +#: boxes/generators/keyholder.py +msgid "num_hooks" msgstr "" -#. help for parameter size -#: boxes/generators/jointpanel.py -msgid "from one middle of a dove tail to another (multiples of thickness)" +#. help for parameter num_hooks +#: boxes/generators/keyholder.py +msgid "Number of hooks" +msgstr "" + +#. parameter name +#: boxes/generators/keyholder.py +msgid "hook_distance" +msgstr "" + +#. help for parameter hook_distance +#: boxes/generators/keyholder.py +msgid "Distance between hooks" +msgstr "" + +#. parameter name +#: boxes/generators/keyholder.py +msgid "hook_thickness" +msgstr "" + +#. help for parameter hook_thickness +#: boxes/generators/keyholder.py +msgid "Thickness of hook" +msgstr "" + +#. parameter name +#: boxes/generators/keyholder.py +msgid "hook_height" +msgstr "" + +#. help for parameter hook_height +#: boxes/generators/keyholder.py +msgid "Height of back part of hook" +msgstr "" + +#. parameter name +#: boxes/generators/keyholder.py +msgid "padding_top" +msgstr "" + +#. help for parameter padding_top +#: boxes/generators/keyholder.py +msgid "Padding above hooks" +msgstr "" + +#. parameter name +#: boxes/generators/keyholder.py +msgid "padding_left_right" +msgstr "" + +#. help for parameter padding_left_right +#: boxes/generators/keyholder.py +msgid "Padding left/right from hooks" +msgstr "" + +#. parameter name +#: boxes/generators/keyholder.py +msgid "padding_bot" +msgstr "" + +#. help for parameter padding_bot +#: boxes/generators/keyholder.py +msgid "Padding below hooks" +msgstr "" + +#. parameter name +#: boxes/generators/keyholder.py +msgid "mounting" +msgstr "" + +#. help for parameter mounting +#: boxes/generators/keyholder.py +msgid "Add mounting holes" msgstr "" #. name of box generator @@ -4943,19 +6245,6 @@ msgstr "" msgid "width of the shaft" msgstr "" -#. name of box generator -#: boxes/generators/laserlini.py -msgid "Laserlini" -msgstr "" - -#. description of Laserlini -#: boxes/generators/laserlini.py -msgid "Mini cross bow" -msgstr "" - -msgid "Laserlini Settings" -msgstr "" - #. name of box generator #: boxes/generators/lbeam.py msgid "LBeam" @@ -4969,14 +6258,6 @@ msgstr "" msgid "LBeam Settings" msgstr "" -#. name of box generator -#: boxes/generators/lueftung.py -msgid "Lueftung" -msgstr "" - -msgid "Lueftung Settings" -msgstr "" - #. name of box generator #: boxes/generators/magazinefile.py msgid "MagazineFile" @@ -4990,49 +6271,263 @@ msgstr "" msgid "MagazineFile Settings" msgstr "" -#. name of box generator -#: boxes/generators/makitapowersupply.py -msgid "MakitaPowerSupply" +#. name of box generator +#: boxes/generators/makitapowersupply.py +msgid "MakitaPowerSupply" +msgstr "" + +#. description of MakitaPowerSupply +#: boxes/generators/makitapowersupply.py +msgid "" +"Bench power supply powered with Maktia 18V battery or laptop power supply" +msgstr "" + +#. long description of MakitaPowerSupply in markdown +#: boxes/generators/makitapowersupply.py +msgid "" +"\n" +"Vitamins: DSP5005 (or similar) power supply, two banana sockets, two 4.8mm " +"flat terminals with flat soldering tag\n" +"\n" +"To allow powering by laptop power supply: flip switch, Lenovo round socket " +"(or adjust right hole for different socket)\n" +msgstr "" + +msgid "MakitaPowerSupply Settings" +msgstr "" + +#. parameter name +#: boxes/generators/makitapowersupply.py +msgid "banana_socket_diameter" +msgstr "" + +#. help for parameter banana_socket_diameter +#: boxes/generators/makitapowersupply.py +msgid "diameter of the banana socket mounting holes" +msgstr "" + +#. parameter name +#: boxes/generators/makitapowersupply.py +msgid "flipswitch_diameter" +msgstr "" + +#. help for parameter flipswitch_diameter +#: boxes/generators/makitapowersupply.py +msgid "" +"diameter of the flipswitch mounting hole (disabled of no secondary power)" +msgstr "" + +#. parameter name +#: boxes/generators/makitapowersupply.py +msgid "secondary_power" +msgstr "" + +#. help for parameter secondary_power +#: boxes/generators/makitapowersupply.py +msgid "style of secondary power input" +msgstr "" + +#. possible choice for secondary_power +#: boxes/generators/makitapowersupply.py +msgid "ibm-barrel" +msgstr "" + +#. possible choice for secondary_power +#: boxes/generators/makitapowersupply.py +msgid "usb-c" +msgstr "" + +#. name of box generator +#: boxes/generators/matrix.py +msgid "Matrix" +msgstr "" + +#. description of Matrix +#: boxes/generators/matrix.py +msgid "WS2812b matrix enclosure" +msgstr "" + +#. long description of Matrix in markdown +#: boxes/generators/matrix.py +msgid "" +"## Simple WS2812b matrix enclosure\n" +" WS2812b matrix enclosure for cheap chinease prebuild led matrixes.\n" +" This design assumes that the distance between the leds is equal in both " +"directions.\n" +"\n" +" There are several parts to this design:\n" +" - The inner frame to hold the pcb in place\n" +" - The front frame to hold a sandwich of plexiglass, spacer and the pcb\n" +" - The plexiglass to protect and diffuse the leds.\n" +" You may add car tint foil to the plexiglass to achieve a black look\n" +" - The spacer to keep the plexiglass from touching the leds\n" +" - The back box with an optional mounting hole. Please add a hole for " +"the\n" +" power supply to the side panels and the power and data cables\n" +" through the led mount frame with your favorite svg editor.\n" +" - The side panels with finger joints to hold everything together\n" +"\n" +" Assembly:\n" +" 1. Cut the parts\n" +" 2. Assemble the frame (side panels and inner frame)\n" +" 3. Insert the pcb, the spacers and the plexiglass\n" +" 4. Close the front frame\n" +" 5. Insert electronics in the back box\n" +" (for example a USB C port on the side panel, a esp32 with wled " +"firmware)\n" +" 6. Close the back box\n" +"\n" +" The inner frame and spacer should keep everything in place without the " +"need for glue.\n" +" If you are using multiple modules,\n" +" you can add the layout parameters, so that the inner frame adjusts " +"accordingly.\n" +"\n" +" Please Note: if you are creating a large matrix build of multiple " +"individual modules,\n" +" you need to enter absolute values across all modules for all " +"parameters.\n" +" Please cut the plane labeled \"Plexiglass\" out of plexiglass :)\n" +" You can use a different thickness for the plexiglass, but make sure to " +"adjust the settings accordingly.\n" +" " +msgstr "" + +msgid "Matrix Settings" +msgstr "" + +#. parameter name +#: boxes/generators/matrix.py +msgid "led_width" +msgstr "" + +#. help for parameter led_width +#: boxes/generators/matrix.py +msgid "Width of the LED matrix in pixels" +msgstr "" + +#. parameter name +#: boxes/generators/matrix.py +msgid "led_height" +msgstr "" + +#. help for parameter led_height +#: boxes/generators/matrix.py +msgid "Height of the LED matrix in pixels" +msgstr "" + +#. parameter name +#: boxes/generators/matrix.py +msgid "pysical_led_y" +msgstr "" + +#. help for parameter pysical_led_y +#: boxes/generators/matrix.py +msgid "Width of the LED matrix pcb in mm" +msgstr "" + +#. parameter name +#: boxes/generators/matrix.py +msgid "pysical_led_x" +msgstr "" + +#. help for parameter pysical_led_x +#: boxes/generators/matrix.py +msgid "Height of the LED matrix pcb in mm" +msgstr "" + +#. parameter name +#: boxes/generators/matrix.py +msgid "matrix_back_frame_border" +msgstr "" + +#. help for parameter matrix_back_frame_border +#: boxes/generators/matrix.py +msgid "" +"Border of the back frame bo keep the pcb in blace but allow for air flow and " +"cable management" +msgstr "" + +#. parameter name +#: boxes/generators/matrix.py +msgid "matrix_front_frame_border_offset" +msgstr "" + +#. help for parameter matrix_front_frame_border_offset +#: boxes/generators/matrix.py +msgid "Offset of the front frame to allow for the plexiglass to be attached" +msgstr "" + +#. parameter name +#: boxes/generators/matrix.py +msgid "distance_between_leds" +msgstr "" + +#. help for parameter distance_between_leds +#: boxes/generators/matrix.py +msgid "" +"Distance of the color dividers. Make sure your machine is able to cut thin " +"structures." +msgstr "" + +#. help for parameter h +#: boxes/generators/matrix.py +msgid "Height of the matrix" +msgstr "" + +#. parameter name +#: boxes/generators/matrix.py +msgid "height_pcb" +msgstr "" + +#. help for parameter height_pcb +#: boxes/generators/matrix.py +msgid "Height of the pcb including the highest non led components in mm" +msgstr "" + +#. parameter name +#: boxes/generators/matrix.py +msgid "plexiglass_thicknes" +msgstr "" + +#. help for parameter plexiglass_thicknes +#: boxes/generators/matrix.py +msgid "Thickness of the plexiglass in mm" msgstr "" -#. description of MakitaPowerSupply -#: boxes/generators/makitapowersupply.py -msgid "" -"Bench power supply powered with Maktia 18V battery or laptop power supply" +#. help for parameter mounting_holes +#: boxes/generators/matrix.py +msgid "Add mounting holes for the enclosure" msgstr "" -#. long description of MakitaPowerSupply in markdown -#: boxes/generators/makitapowersupply.py -msgid "" -"\n" -"Vitamins: DSP5005 (or similar) power supply, two banana sockets, two 4.8mm " -"flat terminals with flat soldering tag\n" -"\n" -"To allow powering by laptop power supply: flip switch, Lenovo round socket " -"(or adjust right hole for different socket)\n" +#. parameter name +#: boxes/generators/matrix.py +msgid "mounting_hole_diameter" msgstr "" -msgid "MakitaPowerSupply Settings" +#. help for parameter mounting_hole_diameter +#: boxes/generators/matrix.py +msgid "Diameter of the mounting holes in mm" msgstr "" #. parameter name -#: boxes/generators/makitapowersupply.py -msgid "banana_socket_diameter" +#: boxes/generators/matrix.py +msgid "matrix_count_x" msgstr "" -#. help for parameter banana_socket_diameter -#: boxes/generators/makitapowersupply.py -msgid "diameter of the banana socket mounting holes" +#. help for parameter matrix_count_x +#: boxes/generators/matrix.py +msgid "Number of modules in x direction" msgstr "" #. parameter name -#: boxes/generators/makitapowersupply.py -msgid "flipswitch_diameter" +#: boxes/generators/matrix.py +msgid "matrix_count_y" msgstr "" -#. help for parameter flipswitch_diameter -#: boxes/generators/makitapowersupply.py -msgid "diameter of the flipswitch mounting hole" +#. help for parameter matrix_count_y +#: boxes/generators/matrix.py +msgid "Number of modules in y direction" msgstr "" #. name of box generator @@ -5226,7 +6721,17 @@ msgstr "" #. help for parameter opening #: boxes/generators/notesholder.py -msgid "percent of front that's open" +msgid "percent of front (or back) that's open" +msgstr "" + +#. parameter name +#: boxes/generators/notesholder.py +msgid "back_openings" +msgstr "" + +#. help for parameter back_openings +#: boxes/generators/notesholder.py +msgid "have openings on the back side, too" msgstr "" #. name of box generator @@ -5800,6 +7305,197 @@ msgid "" "charging cable, without getting in the way of other ports." msgstr "" +#. name of box generator +#: boxes/generators/photoframe.py +msgid "PhotoFrame" +msgstr "" + +#. description of PhotoFrame +#: boxes/generators/photoframe.py +msgid "" +"\n" +" 3-layer photo frame with a slot at the top to slide matboard/acrylic/" +"glass over the photo after glue-up.\n" +" " +msgstr "" + +#. long description of PhotoFrame in markdown +#: boxes/generators/photoframe.py +msgid "" +"\n" +"3-layer photo frame.\n" +"\n" +"Selected excellent features:\n" +"\n" +"* easy to change the photo after glue-up, without disassembling the frame\n" +"* calculates the ideal matting size for your photo based on ancient Greek " +"mathematics\n" +"* can make the frame in one piece or split into 4 pieces to save material\n" +"* can make a frame to fit the piece of glass/acrylic you already have\n" +"* adds a hole for hanging the frame on the wall\n" +"\n" +"Features available in the mysterious future:\n" +"\n" +"* rounded corners\n" +"* a stand on the back to display the frame on a table\n" +"\n" +"## How to frame things like a pro\n" +"\n" +"There are 1 or 2 things that you can't change when framing: the size of the " +"artwork\n" +"and the size of the glass. So we generate everything else to fit those " +"measurements.\n" +"\n" +"Set `x` and `y` to the dimensions of the actual artwork.\n" +"\n" +"* If your photo has a border, measure inside it.\n" +"* If your photo does not have a border, still measure the actual artwork. " +"Don't reduce the dimensions to allow for mounting. We do that separately.\n" +"\n" +"A real pro measures the photo, calculates the matting, and cuts the glass to " +"fit the matting.\n" +"We will assume that you are not in fact a real pro, and can't be trusted " +"with a glass cutter.\n" +"So measure your glass and we'll calculate the matting to suit it. If you " +"aren't using glass,\n" +"we'll calculate the matting size based on \"golden ratio of areas\" like the " +"pros do. Everyone\n" +"will think your frame is perfect, but they won't know why.\n" +"\n" +"Matting is just cardboard. Its jobs are to keep the glass off the photo, " +"provide a clean border around the artwork,\n" +"and make the whole thing look fancy. You can attach the photo to the matting " +"or to the back of the frame.\n" +"Either way, the matting conceals all sorts of sins like bad cuts, glue " +"marks, or mounting with blue painter's tape.\n" +"Matting also lets you reuse the frame for different sized photos. Just " +"generate a new mat with the same glass dimensions.\n" +"\n" +"The hole in the matting is smaller than the photo. This is so the photo " +"doesn't fall out.\n" +"Even if your photo has a border, the hole needs to be a bit smaller than the " +"photo,\n" +"or you will struggle to line up the photo without the edges showing.\n" +"Recommended overlaps are given in the settings. Don't worry about \"losing\" " +"too much of the photo.\n" +"The matting will make the photo look bigger and more important. There's " +"never anything\n" +"interesting in the last 2mm of a photo anyway.\n" +msgstr "" + +msgid "PhotoFrame Settings" +msgstr "" + +#. help for parameter x +#: boxes/generators/photoframe.py +msgid "Width of the photo, not including any border" +msgstr "" + +#. help for parameter y +#: boxes/generators/photoframe.py +msgid "Height of the photo, not including any border" +msgstr "" + +#. parameter name +#: boxes/generators/photoframe.py +msgid "golden_mat" +msgstr "" + +#. help for parameter golden_mat +#: boxes/generators/photoframe.py +msgid "Use golden ratio to calculate matting width" +msgstr "" + +#. parameter name +#: boxes/generators/photoframe.py +msgid "matting_w" +msgstr "" + +#. help for parameter matting_w +#: boxes/generators/photoframe.py +msgid "Width of the matting border around the sides of the photo" +msgstr "" + +#. parameter name +#: boxes/generators/photoframe.py +msgid "matting_h" +msgstr "" + +#. help for parameter matting_h +#: boxes/generators/photoframe.py +msgid "Width of the matting border around top/bottom of the photo" +msgstr "" + +#. parameter name +#: boxes/generators/photoframe.py +msgid "matting_overlap" +msgstr "" + +#. help for parameter matting_overlap +#: boxes/generators/photoframe.py +msgid "Matting overlap of the photo, e.g. 2mm if photo has border, 5mm if not" +msgstr "" + +#. parameter name +#: boxes/generators/photoframe.py +msgid "glass_w" +msgstr "" + +#. help for parameter glass_w +#: boxes/generators/photoframe.py +msgid "Width of the pre-cut glass or acrylic" +msgstr "" + +#. parameter name +#: boxes/generators/photoframe.py +msgid "glass_h" +msgstr "" + +#. help for parameter glass_h +#: boxes/generators/photoframe.py +msgid "Height of the pre-cut glass or acrylic" +msgstr "" + +#. parameter name +#: boxes/generators/photoframe.py +msgid "frame_w" +msgstr "" + +#. help for parameter frame_w +#: boxes/generators/photoframe.py +msgid "Width of the frame border around the matting" +msgstr "" + +#. parameter name +#: boxes/generators/photoframe.py +msgid "guide_fudge" +msgstr "" + +#. help for parameter guide_fudge +#: boxes/generators/photoframe.py +msgid "Clearance in the guide pocket to help slide the matting/glass in" +msgstr "" + +#. parameter name +#: boxes/generators/photoframe.py +msgid "frame_overlap" +msgstr "" + +#. help for parameter frame_overlap +#: boxes/generators/photoframe.py +msgid "Frame overlap to hold the matting/glass in place" +msgstr "" + +#. parameter name +#: boxes/generators/photoframe.py +msgid "split_front" +msgstr "" + +#. help for parameter split_front +#: boxes/generators/photoframe.py +msgid "Split front into thin rectangles to save material" +msgstr "" + #. name of box generator #: boxes/generators/piratechest.py msgid "PirateChest" @@ -5813,10 +7509,10 @@ msgstr "" #. long description of PirateChest in markdown #: boxes/generators/piratechest.py msgid "" -"Do not assemble sides before attaching the lid! \n" -" Hinge of the lid has to be placed first because it is impossible \n" -" to get it in position without removing the side wall. The lid can \n" -" be a bit tricky to assemble. Keep track of how the parts fit together. \n" +"Do not assemble sides before attaching the lid!\n" +" Hinge of the lid has to be placed first because it is impossible\n" +" to get it in position without removing the side wall. The lid can\n" +" be a bit tricky to assemble. Keep track of how the parts fit together.\n" " Part with label \"lid back\" is placed in the hinges" msgstr "" @@ -5828,6 +7524,77 @@ msgstr "" msgid "number of sides on the lid. n ≥ 3" msgstr "" +#. name of box generator +#: boxes/generators/pizzashovel.py +msgid "PizzaShovel" +msgstr "" + +#. description of PizzaShovel +#: boxes/generators/pizzashovel.py +msgid "Pizza shovel with conveyor belt action" +msgstr "" + +#. long description of PizzaShovel in markdown +#: boxes/generators/pizzashovel.py +msgid "" +"\n" +"You need (permanent) baking paper to create the conveyor. With that you can " +"pick up and put down the pizza by moving the handle attached to the belt.\n" +" " +msgstr "" + +msgid "PizzaShovel Settings" +msgstr "" + +#. help for parameter grip_length +#: boxes/generators/pizzashovel.py +msgid "Length of the grip. Zero for holes for a screw-in handle" +msgstr "" + +#. parameter name +#: boxes/generators/pizzashovel.py +msgid "grip_height" +msgstr "" + +#. help for parameter grip_height +#: boxes/generators/pizzashovel.py +msgid "Height of the grip. Distance between the cross beams." +msgstr "" + +#. parameter name +#: boxes/generators/pizzashovel.py +msgid "top_holes" +msgstr "" + +#. help for parameter top_holes +#: boxes/generators/pizzashovel.py +msgid "" +"Diameter of the screw holes in the bottom of the pusher - where the screws " +"pass through" +msgstr "" + +#. parameter name +#: boxes/generators/pizzashovel.py +msgid "bottom_holes" +msgstr "" + +#. help for parameter bottom_holes +#: boxes/generators/pizzashovel.py +msgid "" +"Diameter of the screw holes in the bottom of the pusher - where the screws " +"hold" +msgstr "" + +#. parameter name +#: boxes/generators/pizzashovel.py +msgid "grip_holes" +msgstr "" + +#. help for parameter grip_holes +#: boxes/generators/pizzashovel.py +msgid "Diameter of the screw holes for zero griplength" +msgstr "" + #. name of box generator #: boxes/generators/planetary.py msgid "Planetary" @@ -6255,7 +8022,7 @@ msgstr "" #. description of RectangularWall #: boxes/generators/rectangularWall.py -msgid "Simple wall" +msgid "Simple wall with options for different edges" msgstr "" msgid "RectangularWall Settings" @@ -6281,6 +8048,11 @@ msgstr "" msgid "j" msgstr "" +#. possible choice for bottom_edge +#: boxes/generators/rectangularWall.py +msgid "J" +msgstr "" + #. possible choice for bottom_edge #: boxes/generators/rectangularWall.py msgid "K" @@ -6719,11 +8491,6 @@ msgstr "" msgid "diameter of the axle in mm including play" msgstr "" -#. parameter name -#: boxes/generators/rollholder.py -msgid "screw_holes" -msgstr "" - #. help for parameter screw_holes #: boxes/generators/rollholder.py msgid "diameter of mounting holes in mm" @@ -6848,6 +8615,34 @@ msgstr "" msgid "edge type for top and bottom edges" msgstr "" +#. name of box generator +#: boxes/generators/roundedregularbox.py +msgid "RoundedRegularBox" +msgstr "" + +#. description of RoundedRegularBox +#: boxes/generators/roundedregularbox.py +msgid "Regular polygone box with vertical edges rounded" +msgstr "" + +msgid "RoundedRegularBox Settings" +msgstr "" + +#. parameter name +#: boxes/generators/roundedregularbox.py +msgid "inner_size" +msgstr "" + +#. help for parameter inner_size +#: boxes/generators/roundedregularbox.py +msgid "diameter of the inner circle in mm" +msgstr "" + +#. help for parameter wallpieces +#: boxes/generators/roundedregularbox.py +msgid "number of pieces for outer wall (0 for one per side)" +msgstr "" + #. name of box generator #: boxes/generators/royalgame.py msgid "RoyalGame" @@ -6889,11 +8684,9 @@ msgstr "" #: boxes/generators/sevensegment.py msgid "" "This pattern is indented to be used with a LED stripe that is wound through " -"alls segments in an S pattern while the stripe being upright on its side. It " -"can probably also be used for small pieces of LED stripes connected with " -"short wires for large enough sizes.\n" -"\n" -"Both is currently untested.\n" +"all segments in an S pattern while the stripe being upright on its side. It " +"can also be used with small pieces of LED stripes connected with short wires " +"for large enough sizes.\n" msgstr "" msgid "SevenSegmentPattern Settings" @@ -6927,14 +8720,14 @@ msgstr "" #. long description of SevenSegmentClock in markdown #: boxes/generators/sevensegmentclock.py msgid "" -"You need a LED stripe that is wound through alls segments in an S pattern " -"and then continuing to the next digit while the stripe being upright on its " -"side. Selecting *debug* gives a better idea how things fit together. \n" +"You need a LED stripe that is wound through all segments in an S pattern and " +"then continuing to the next digit while the stripe being upright on its " +"side. Selecting *debug* gives a better idea how things fit together.\n" "\n" -"Adding a defusor on top or at the bottom of the segment holes will probably " +"Adding a diffuser on top or at the bottom of the segment holes will probably " "enhance the visuals. Just using paper may be enough.\n" "\n" -"There is currently not a lot of space for elecrtonics and this generator is " +"There is currently not a lot of space for electronics and this generator is " "still untested. Good luck!\n" msgstr "" @@ -6952,11 +8745,80 @@ msgid "depth (with walls if outside is selected) in mm" msgstr "" #. name of box generator -#: boxes/generators/sharpeningjig.py -msgid "SharpeningJig" +#: boxes/generators/shadowbox.py +msgid "Shadowbox" +msgstr "" + +#. description of Shadowbox +#: boxes/generators/shadowbox.py +msgid "The frame and spacers necessary to display a shadowbox / lightbox." +msgstr "" + +#. long description of Shadowbox in markdown +#: boxes/generators/shadowbox.py +msgid "" +"\n" +"The frame needed to build a shadowbox from paper cutouts.\n" +"The cutout used in the photographs can be downloaded [here](https://3axis.co/" +"laser-cut-my-neighbor-totoro-3d-lightbox-lamp-cdr-file/eoxldrxo/).\n" +"\n" +"See the diagram below for dimensions.\n" +"\n" +"![diagram](static/samples/Shadowbox-diagram.jpg)\n" +"\n" +"![backlit](static/samples/Shadowbox-backlit.jpg)\n" +msgstr "" + +msgid "Shadowbox Settings" +msgstr "" + +#. parameter name +#: boxes/generators/shadowbox.py +msgid "layers" +msgstr "" + +#. help for parameter layers +#: boxes/generators/shadowbox.py +msgid "the number of paper layers; don't forget the back (blank) layer!" +msgstr "" + +#. parameter name +#: boxes/generators/shadowbox.py +msgid "framewidth" +msgstr "" + +#. help for parameter framewidth +#: boxes/generators/shadowbox.py +msgid "the width of the paper layer frames" +msgstr "" + +#. parameter name +#: boxes/generators/shadowbox.py +msgid "frameheight" +msgstr "" + +#. help for parameter frameheight +#: boxes/generators/shadowbox.py +msgid "the height of the paper layer frames" +msgstr "" + +#. help for parameter extraheight +#: boxes/generators/shadowbox.py +msgid "" +"cumulative height of your paper layers, play between frames, the LED strip, " +"battery/wiring, anything else you want to fit in the case" +msgstr "" + +#. parameter name +#: boxes/generators/shadowbox.py +msgid "casejoinery" msgstr "" -msgid "SharpeningJig Settings" +#. help for parameter casejoinery +#: boxes/generators/shadowbox.py +msgid "" +"whether or not to join sides to front plate (disable if doing manual joins " +"on fancy wood)" msgstr "" #. name of box generator @@ -6972,10 +8834,10 @@ msgstr "" #. long description of Shoe in markdown #: boxes/generators/shoe.py msgid "" -"Shoe shaped box with flat sides and rounded top. \n" -" Works best if flex if under slight compression. \n" -" Make sure that the following conditions are met: \n" -" y > tophole + r + fronttop; \n" +"Shoe shaped box with flat sides and rounded top.\n" +" Works best if flex if under slight compression.\n" +" Make sure that the following conditions are met:\n" +" y > tophole + r + fronttop;\n" " height > frontheight." msgstr "" @@ -7072,47 +8934,126 @@ msgstr "" #. description of SideDoorHousing #: boxes/generators/sidedoorhousing.py -msgid "A box with service hatches at the sides" +msgid "" +"Box with service hatches on either one or both of the sides that are locked " +"with latches" msgstr "" #. long description of SideDoorHousing in markdown #: boxes/generators/sidedoorhousing.py msgid "" "\n" -"This box is designed as a housing for electronic projects. It has hatches " -"that can be re-opened with simple tools. It intentionally cannot be opened " -"with bare hands - if build with thin enough material. The hatches are at the " -"x sides.\n" +"This box is designed as a housing for electronic projects but could be used " +"for other purposes. It has hatches that can be re-opened with simple tools. " +"If built from thin enough material, it intentionally cannot be opened with " +"bare hands.\n" +"\n" +"The hatches are on the x sides.\n" "\n" "#### Assembly instructions\n" -"The main body is easy to assemble by starting with the floor and then adding " -"the four walls and the top piece.\n" +"The main body is easy to assemble:\n" +"1. Starting with the floor and then add the four walls (for any removable " +"sides, the wall will just be a small part on the base )\n" +"2. Add the top piece\n" +"\n" +"For the removable walls:\n" +"1. Add the lips to the removable walls\n" +"2. Sit the latches in place (it is importand to make sure the springs on the " +"latches point inwards and the angled ends point to the side walls. See image " +"below)\n" +"3. Glue the U-shaped clamps in place (it is important **not** to glue the " +"latches)\n" "\n" -"For the removable walls you need to add the lips and latches. The U-shaped " -"clamps holding the latches in place need to be clued in place without also " -"gluing the latches themselves. Make sure the springs on the latches point " -"inwards and the angled ends point to the side walls as shown here (showing a " -"different box type):\n" +"![Wall details](static/samples/SideDoorHousing.jpg)\n" "\n" -"![Wall details](static/samples/Console2-backwall-detail.jpg)\n" "\n" "#### Re-Opening\n" "\n" "The latches lock in place when closed. To open them they need to be pressed " "in and can then be moved aside.\n" +"\n" +"![Closed Box](static/samples/SideDoorHousing-2.jpg)\n" +"\n" +msgstr "" + +msgid "SideDoorHousing Settings" +msgstr "" + +#. parameter name +#: boxes/generators/sidedoorhousing.py +msgid "double_door" +msgstr "" + +#. help for parameter double_door +#: boxes/generators/sidedoorhousing.py +msgid "allow removing the backwall, too" +msgstr "" + +#. name of box generator +#: boxes/generators/sidehingebox.py +msgid "SideHingeBox" +msgstr "" + +#. description of SideHingeBox +#: boxes/generators/sidehingebox.py +msgid "" +"Box, with an hinge that does not protrude from the back of the box, and a " +"latch." +msgstr "" + +#. long description of SideHingeBox in markdown +#: boxes/generators/sidehingebox.py +msgid "" +"\n" +"This box is another take on a hinge box.\n" +"The hinges doesn't protrude from the box, but the sides needs double walls.\n" +"When opened, 2 sides are opening, improving access inside the box.\n" +"An optional latch is included, based on a mechanical switch and a 3D printed " +"button.\n" +"The latch is one-way: the box can be closed freely\n" +"(this side of the button is angled, and totally smooth since it's the " +"printing bed surface),\n" +"but can't be inadvertently opened.\n" +msgstr "" + +msgid "SideHingeBox Settings" +msgstr "" + +#. help for parameter play +#: boxes/generators/sidehingebox.py +msgid "play between the two sides as multiple of the wall thickness" +msgstr "" + +#. parameter name +#: boxes/generators/sidehingebox.py +msgid "hinge_center" +msgstr "" + +#. help for parameter hinge_center +#: boxes/generators/sidehingebox.py +msgid "distance between the hinge center and adjacent sides (0.0 for default)" +msgstr "" + +#. parameter name +#: boxes/generators/sidehingebox.py +msgid "hinge_radius" msgstr "" -msgid "SideDoorHousing Settings" +#. help for parameter hinge_radius +#: boxes/generators/sidehingebox.py +msgid "radius of the hinge inner circle" msgstr "" #. parameter name -#: boxes/generators/sidedoorhousing.py -msgid "double_door" +#: boxes/generators/sidehingebox.py +msgid "cherrymx_latches" msgstr "" -#. help for parameter double_door -#: boxes/generators/sidedoorhousing.py -msgid "allow removing the backwall, too" +#. help for parameter cherrymx_latches +#: boxes/generators/sidehingebox.py +msgid "" +"add one or two latches, based on 3D printing and a cherry mx compatible " +"mechanical keyboard switch" msgstr "" #. name of box generator @@ -7163,26 +9104,26 @@ msgid "Width of the handle" msgstr "" #. name of box generator -#: boxes/generators/simpleflexure.py -msgid "SimpleFlexure" +#: boxes/generators/skadis.py +msgid "SkadisBoard" msgstr "" -#. description of SimpleFlexure -#: boxes/generators/simpleflexure.py -msgid "Simple XY stage without separation of axis" +#. description of SkadisBoard +#: boxes/generators/skadis.py +msgid "Customizable Ikea like pegboard" msgstr "" -msgid "SimpleFlexure Settings" +msgid "SkadisBoard Settings" msgstr "" -#. parameter name -#: boxes/generators/simpleflexure.py -msgid "border" +#. help for parameter columns +#: boxes/generators/skadis.py +msgid "Number of holes left to right counting both even and odd rows" msgstr "" -#. help for parameter border -#: boxes/generators/simpleflexure.py -msgid "width of the outside ground frame" +#. help for parameter rows +#: boxes/generators/skadis.py +msgid "Number of rows of holes top to bottom" msgstr "" #. name of box generator @@ -7211,24 +9152,6 @@ msgstr "" msgid "height of the front as fraction of the total height" msgstr "" -#. name of box generator -#: boxes/generators/slidelock.py -msgid "SlideLock" -msgstr "" - -msgid "SlideLock Settings" -msgstr "" - -#. parameter name -#: boxes/generators/slidelock.py -msgid "finger_width" -msgstr "" - -#. help for parameter finger_width -#: boxes/generators/slidelock.py -msgid "width of the locking fingers in multiple of thickness" -msgstr "" - #. name of box generator #: boxes/generators/slidingdrawer.py msgid "SlidingDrawer" @@ -7321,26 +9244,6 @@ msgstr "" msgid "SmallPartsTray2 Settings" msgstr "" -#. parameter name -#: boxes/generators/smallpartstray2.py -msgid "back_height" -msgstr "" - -#. help for parameter back_height -#: boxes/generators/smallpartstray2.py -msgid "additional height of the back wall - e top edge only" -msgstr "" - -#. help for parameter radius -#: boxes/generators/smallpartstray2.py -msgid "radius for strengthening side walls with back_height" -msgstr "" - -#. help for parameter handle -#: boxes/generators/smallpartstray2.py -msgid "add handle to the bottom (changes bottom edge in the front)" -msgstr "" - #. name of box generator #: boxes/generators/spicesrack.py msgid "SpicesRack" @@ -7485,6 +9388,24 @@ msgstr "" msgid "width of the surrounding wall in mm" msgstr "" +#. name of box generator +#: boxes/generators/stackablebin.py +msgid "StackableBin" +msgstr "" + +#. description of StackableBin +#: boxes/generators/stackablebin.py +msgid "Stackable bin base on bintray" +msgstr "" + +msgid "StackableBin Settings" +msgstr "" + +#. help for parameter d +#: boxes/generators/stackablebin.py +msgid "bin (d)epth" +msgstr "" + #. name of box generator #: boxes/generators/storagerack.py msgid "StorageRack" @@ -7558,14 +9479,6 @@ msgstr "" msgid "use finger hole edge for retainer walls" msgstr "" -#. name of box generator -#: boxes/generators/testcorners.py -msgid "TestCorners" -msgstr "" - -msgid "TestCorners Settings" -msgstr "" - #. name of box generator #: boxes/generators/tetris.py msgid "Tetris" @@ -7615,7 +9528,7 @@ msgid "" "The traffic light was created to visualize the status of a Icinga monitored " "system.\n" "\n" -"When turned by 90°, it can be also used to create a bottle holder." +"When turned by 90°, it can be also used to create a bottle holder.\n" msgstr "" msgid "TrafficLight Settings" @@ -7726,9 +9639,7 @@ msgstr "" #. description of TwoPiece #: boxes/generators/two_piece.py msgid "" -"A two piece box where top slips over the bottom half to form \n" -" the enclosure.\n" -" " +"A two piece box where top slips over the bottom half to form the enclosure." msgstr "" #. long description of TwoPiece in markdown @@ -7746,39 +9657,6 @@ msgstr "" msgid "TwoPiece Settings" msgstr "" -#. name of box generator -#: boxes/generators/typetray.py -msgid "TypeTray" -msgstr "" - -#. description of TypeTray -#: boxes/generators/typetray.py -msgid "Type tray - allows only continuous walls" -msgstr "" - -msgid "TypeTray Settings" -msgstr "" - -#. parameter name -#: boxes/generators/typetray.py -msgid "gripheight" -msgstr "" - -#. help for parameter gripheight -#: boxes/generators/typetray.py -msgid "height of the grip hole in mm" -msgstr "" - -#. parameter name -#: boxes/generators/typetray.py -msgid "gripwidth" -msgstr "" - -#. help for parameter gripwidth -#: boxes/generators/typetray.py -msgid "width of th grip hole in mm (zero for no hole)" -msgstr "" - #. name of box generator #: boxes/generators/ubox.py msgid "UBox" @@ -7904,24 +9782,6 @@ msgstr "" msgid "finger holes" msgstr "" -#. name of box generator -#: boxes/generators/wavyknob.py -msgid "WavyKnob" -msgstr "" - -msgid "WavyKnob Settings" -msgstr "" - -#. parameter name -#: boxes/generators/wavyknob.py -msgid "serrationangle" -msgstr "" - -#. help for parameter serrationangle -#: boxes/generators/wavyknob.py -msgid "higher values for deeper serrations (degrees)" -msgstr "" - #. name of box generator #: boxes/generators/wallcaliperholder.py msgid "WallCaliper" @@ -8016,21 +9876,11 @@ msgstr "" msgid "horizontal width of the hook" msgstr "" -#. parameter name for SlatWall -#: boxes/generators/wallcaliperholder.py -msgid "hook_distance" -msgstr "" - #. help for parameter hook_distance #: boxes/generators/wallcaliperholder.py msgid "horizontal space to the hook" msgstr "" -#. parameter name for SlatWall -#: boxes/generators/wallcaliperholder.py -msgid "hook_height" -msgstr "" - #. help for parameter hook_height #: boxes/generators/wallcaliperholder.py msgid "height of the horizontal bar of the hook" @@ -8079,7 +9929,9 @@ msgstr "" #. help for parameter bottom #: boxes/generators/wallcaliperholder.py -msgid "\"stud\", \"hook\" or \"none\"" +msgid "" +"\"stud\" to brace against the wall, \"hook\" for attaching to a second cleat " +"or \"none\" for just straight" msgstr "" #. help for parameter depth @@ -8229,6 +10081,95 @@ msgstr "" msgid "WallEdges Settings" msgstr "" +#. name of box generator +#: boxes/generators/wallhopper.py +msgid "WallHopper" +msgstr "" + +#. description of WallHopper +#: boxes/generators/wallhopper.py +msgid "Storage hopper with dispensing tray" +msgstr "" + +#. long description of WallHopper in markdown +#: boxes/generators/wallhopper.py +msgid "" +"\n" +"####Assembly Notes:\n" +"1. The generator produces three pieces with angled finger joints.\n" +"Bottom panel, sloped front panel and label panel (if enabled).\n" +"2. Joint lengths vary to accommodate the slope angles.\n" +"3. Orient pieces as shown in the generated layout to assemble correctly.\n" +msgstr "" + +msgid "WallHopper Settings" +msgstr "" + +#. parameter name +#: boxes/generators/wallhopper.py +msgid "hopper_depth" +msgstr "" + +#. help for parameter hopper_depth +#: boxes/generators/wallhopper.py +msgid "Depth of the hopper" +msgstr "" + +#. parameter name +#: boxes/generators/wallhopper.py +msgid "dispenser_depth" +msgstr "" + +#. help for parameter dispenser_depth +#: boxes/generators/wallhopper.py +msgid "Depth of the dispenser" +msgstr "" + +#. parameter name +#: boxes/generators/wallhopper.py +msgid "dispenser_height" +msgstr "" + +#. help for parameter dispenser_height +#: boxes/generators/wallhopper.py +msgid "Height of the dispenser" +msgstr "" + +#. parameter name +#: boxes/generators/wallhopper.py +msgid "slope_ratio" +msgstr "" + +#. help for parameter slope_ratio +#: boxes/generators/wallhopper.py +msgid "Fraction of the bottom slope of the dispenser" +msgstr "" + +#. parameter name +#: boxes/generators/wallhopper.py +msgid "slope_angle" +msgstr "" + +#. help for parameter slope_angle +#: boxes/generators/wallhopper.py +msgid "Angle of the bottom slope of the dispenser" +msgstr "" + +#. help for parameter label +#: boxes/generators/wallhopper.py +msgid "include a label area on the front" +msgstr "" + +#. parameter name +#: boxes/generators/wallhopper.py +msgid "label_ratio" +msgstr "" + +#. help for parameter label_ratio +#: boxes/generators/wallhopper.py +msgid "Fraction of the label of the dispenser" +msgstr "" + #. name of box generator #: boxes/generators/wallpinrow.py msgid "WallPinRow" @@ -8337,49 +10278,79 @@ msgid "height of the front of plane" msgstr "" #. name of box generator -#: boxes/generators/wallplate.py -msgid "WallPlate" +#: boxes/generators/wallpliersholder.py +msgid "WallPliersHolder" +msgstr "" + +#. description of WallPliersHolder +#: boxes/generators/wallpliersholder.py +msgid "Bar to hang pliers on" msgstr "" -#. description of WallPlate -#: boxes/generators/wallplate.py -msgid "Simple plate with slat wall hooks" +msgid "WallPliersHolder Settings" msgstr "" -msgid "WallPlate Settings" +#. help for parameter angle +#: boxes/generators/wallpliersholder.py +msgid "bracing angle - less for more bracing" msgstr "" -#. help for parameter depth -#: boxes/generators/wallplate.py -msgid "depth of walls with the hooks" +#. name of box generator +#: boxes/generators/wallrack.py +msgid "WallRack" +msgstr "" + +#. description of WallRack +#: boxes/generators/wallrack.py +msgid "Wall mountable rack for spices or other items" +msgstr "" + +msgid "WallRack Settings" msgstr "" #. parameter name -#: boxes/generators/wallplate.py -msgid "outset_sides" +#: boxes/generators/wallrack.py +msgid "full_height_top" msgstr "" -#. help for parameter outset_sides -#: boxes/generators/wallplate.py -msgid "make a bit wider to allow stronger joint" +#. help for parameter full_height_top +#: boxes/generators/wallrack.py +msgid "Add full height of topmost rack to the back panel" msgstr "" -#. name of box generator -#: boxes/generators/wallpliersholder.py -msgid "WallPliersHolder" +#. parameter name +#: boxes/generators/wallrack.py +msgid "wall_height" msgstr "" -#. description of WallPliersHolder -#: boxes/generators/wallpliersholder.py -msgid "Bar to hang pliers on" +#. help for parameter wall_height +#: boxes/generators/wallrack.py +msgid "height of walls" msgstr "" -msgid "WallPliersHolder Settings" +#. help for parameter back_height +#: boxes/generators/wallrack.py +msgid "height of the back as fraction of the front height" msgstr "" -#. help for parameter angle -#: boxes/generators/wallpliersholder.py -msgid "bracing angle - less for more bracing" +#. parameter name +#: boxes/generators/wallrack.py +msgid "side_edges" +msgstr "" + +#. help for parameter side_edges +#: boxes/generators/wallrack.py +msgid "edge type holding the shelves together" +msgstr "" + +#. parameter name +#: boxes/generators/wallrack.py +msgid "flat_bottom" +msgstr "" + +#. help for parameter flat_bottom +#: boxes/generators/wallrack.py +msgid "Make bottom Flat, so that the rack can also stand" msgstr "" #. name of box generator @@ -8438,6 +10409,59 @@ msgstr "" msgid "radius of the slots at the front" msgstr "" +#. name of box generator +#: boxes/generators/wallstackablebin.py +msgid "WallStackableBin" +msgstr "" + +#. description of WallStackableBin +#: boxes/generators/wallstackablebin.py +msgid "A wall-mounted bin that can stack or hang from a wall." +msgstr "" + +#. long description of WallStackableBin in markdown +#: boxes/generators/wallstackablebin.py +msgid "" +"\n" +"####Features:\n" +"- Configurable dimensions (width, height, depth)\n" +"- Adjustable front slope angle for easy access\n" +"- Optional label area on front face\n" +"- Stackable design with interlocking geometry\n" +"- Multiple wall mounting options\n" +"\n" +"####Stacking Compatibility:\n" +"The stacking mechanism requires careful consideration of wall mounting " +"types.\n" +"Bins using \"plain\" wall mounts can stack on bins with other mount types.\n" +"Note: Using the \"outside\" dimension option is generally not compatible " +"with stacking.\n" +"\n" +"####Assembly Notes:\n" +"1. The generator produces three pieces with angled finger joints.\n" +"Bottom panel, sloped front panel and label panel (if enabled).\n" +"2. Joint lengths vary to accommodate the slope angles\n" +"3. Orient pieces as shown in the generated layout to assemble correctly.\n" +msgstr "" + +msgid "WallStackableBin Settings" +msgstr "" + +#. help for parameter angle +#: boxes/generators/wallstackablebin.py +msgid "angle of the bottom slope" +msgstr "" + +#. parameter name +#: boxes/generators/wallstackablebin.py +msgid "label_height" +msgstr "" + +#. help for parameter label_height +#: boxes/generators/wallstackablebin.py +msgid "fraction of bin height covered with label (if label is enabled)" +msgstr "" + #. name of box generator #: boxes/generators/wallstairs.py msgid "WallStairs" @@ -8563,6 +10587,24 @@ msgstr "" msgid "additional distance between wrenches (in mm)" msgstr "" +#. name of box generator +#: boxes/generators/wavyknob.py +msgid "WavyKnob" +msgstr "" + +msgid "WavyKnob Settings" +msgstr "" + +#. parameter name +#: boxes/generators/wavyknob.py +msgid "serrationangle" +msgstr "" + +#. help for parameter serrationangle +#: boxes/generators/wavyknob.py +msgid "higher values for deeper serrations (degrees)" +msgstr "" + #. name of box generator #: boxes/generators/winerack.py msgid "WineRack" @@ -8602,67 +10644,56 @@ msgid "no_verticals" msgstr "" #. name of box generator -#: boxes/generators/wirestraightener.py -msgid "WireStraightener" -msgstr "" - -msgid "WireStraightener Settings" -msgstr "" - -#. parameter name -#: boxes/generators/wirestraightener.py -msgid "roller_diameter" +#: boxes/generators/zbeam.py +msgid "ZBeam" msgstr "" -#. help for parameter roller_diameter -#: boxes/generators/wirestraightener.py -msgid "outer diameter of the rollers in mm" +#. description of ZBeam +#: boxes/generators/zbeam.py +msgid "Z-Beam (or U-Beam): three pieces joined at right angles" msgstr "" -#. help for parameter axle_diameter -#: boxes/generators/wirestraightener.py -msgid "diameter of the bolts holding the rollers in mm" -msgstr "" - -#. parameter name -#: boxes/generators/wirestraightener.py -msgid "roller_width" +#. long description of ZBeam in markdown +#: boxes/generators/zbeam.py +msgid "" +"\n" +"With the \"flanged_ubeam\" option, there is a fourth piece the length of " +"\"y\".\n" +"![U-Beam with flange](static/samples/ZBeam-flanged-ubeam.jpg)\n" msgstr "" -#. help for parameter roller_width -#: boxes/generators/wirestraightener.py -msgid "width of the rollers including washers in mm" +msgid "ZBeam Settings" msgstr "" #. parameter name -#: boxes/generators/wirestraightener.py -msgid "rollers" +#: boxes/generators/zbeam.py +msgid "flanged_ubeam" msgstr "" -#. help for parameter rollers -#: boxes/generators/wirestraightener.py -msgid "number of rollers (top and bottom combined)" +#. help for parameter flanged_ubeam +#: boxes/generators/zbeam.py +msgid "Add a fourth piece to make a U-Beam with a flange" msgstr "" -#: scripts/boxesserver:286 +#: scripts/boxesserver:285 msgid "" "There is no image yet. Please donate an image of your project on GitHub!" msgstr "" -#: scripts/boxesserver:455 +#: scripts/boxesserver:454 msgid "Help" msgstr "" -#: scripts/boxesserver:456 +#: scripts/boxesserver:455 msgid "Home Page" msgstr "" -#: scripts/boxesserver:457 +#: scripts/boxesserver:456 msgid "Documentation" msgstr "" -#: scripts/boxesserver:458 +#: scripts/boxesserver:457 msgid "Sources" msgstr "" diff --git a/po/de.po b/po/de.po index afd93e6bf..ecc05fe25 100644 --- a/po/de.po +++ b/po/de.po @@ -1068,6 +1068,343 @@ msgstr "Riegelradius in mm" msgid "latchsize" msgstr "Riegelgröße" +#. name of box generator +#: boxes/generators/fatballdispenser.py +msgid "FatBallDispenser" +msgstr "Meisenknödelspender" + +#. description of FatBallDispenser +#: boxes/generators/fatballdispenser.py +msgid "Birdhouse for fat balls." +msgstr "Vogelhäuschen für Meisenknödel." + +#. long description of FatBallDispenser in markdown +#: boxes/generators/fatballdispenser.py +msgid "" +"\n" +"### Description\n" +"Fat balls are quite common to feed tits. Here you can build a dispenser that " +"protects\n" +"the fat balls from rain and snow. The design was tested using 4mm plywood " +"for the\n" +"main structural parts. For the spacer of the locking mechanism two layers of " +"3mm\n" +"plywood have been stacked. The poles were made from 8mm diameter beech rod " +"and 19cm\n" +"in length. Some basic consistency checks have been made for different " +"numbers, but\n" +"only the defaults have ever been built.\n" +"\n" +"The final dispenser consists of two parts which slide into each other. You " +"can mount\n" +"a hook to hang it into a tree. All edges that have angles different from 90 " +"degrees (chamfers)\n" +"have engraved guiding lines which indicate the angle. You have to sand the " +"edge such\n" +"that the pieces fit together.\n" +"\n" +"The top part (roof) consists of the the following elements for a N sided " +"dispenser:\n" +"\n" +" * The N sided roof bottom plate which supports the roof tiles. It has a " +"central cut out\n" +" which is needed for assembly and on the bottom side an engraved line " +"which indicates the\n" +" position of the mounting bracket.\n" +" * N triangles forming the roof. They also have a small arc at the tip " +"(roof_hole_diameter)\n" +" which acts as a drilling guide if you want to mount a hook.\n" +" * The N sided roof support piece which has a central hole for the hook. It " +"is been mounted\n" +" to the roof tiles through the hole in the roof bottom plate to support the " +"roof\n" +" tiles and acts as a mounting plate for the hook.\n" +" * Spacer(s); in the reference builds 2 spacers using 3mm plywood have been " +"used. The spacer\n" +" needs to be a bit thicker than the ceiling (see below). That's the " +"smaller\n" +" \"U\" shaped part which is glued to the bottom side of the roof bottom " +"plate.\n" +" * The bracket is also \"U\" shaped and a bit wider than the spacer. This " +"is glued to the\n" +" bottom of the spacer and holds the cage (bottom part).\n" +"\n" +"The bottom part (cage) consists of the follwoing elements:\n" +"\n" +" * The ceiling is N sided with the central refill hole and N smaller holes " +"into which\n" +" the poles are fitted.\n" +" * The N sided floor part with finger joints for the balcony walls and " +"holes for\n" +" the poles. A central hole to drain rain water can be added as well.\n" +" * N balcony walls surrounding the floor.\n" +" * N poles that join floor and ceiling (not part of the drawing)\n" +"\n" +"Other parts needed for assembly:\n" +"\n" +" * Wooden rod (N times the length of the poles).\n" +" * A hook (e.g. M5x50mm)\n" +" * A washer to distribute the load of the hook to the support piece\n" +" * One or two nuts to secure the hook\n" +" * Optional, a pice of wire mesh\n" +"\n" +"Assembly:\n" +"\n" +" * Sand all chamfers\n" +" * Glue balcony walls to the floor\n" +" * Glue pairs of roof tiles and use the roof bottom plate as a jig, Hot " +"glue may be used to\n" +" tack the parts.\n" +" * Glue all roof tiles to form the roof\n" +" * Glue spacer(s) and the bracket into a stack\n" +" * Glue roof tiles to the roof bottom plate and attach the support piece\n" +" * Glue the stack to the roof bottom plate\n" +" * Cut the poles to length\n" +" * If you want to use multiple colors paint now, otherwise you also can " +"paint later\n" +" * After painting you may need to get the paint out of the pole holes again " +"using a drillbit\n" +" * Glue the poles into floor plate and ceiling\n" +" * Attach the hanger\n" +" * Attach the wire mesh\n" +" " +msgstr "" +"\n" +"### Beschreibung\n" +"Meisenknödel werden gerne verwendet, um Meisen durch den Winter zu bringen. Hier kannst Du ein Vogelhäuschen bauen, " +"das die Meisenknödel vor Regen und Schnee schützt. " +"Das Design wurde mit 4mm Pappelsperrholz für die Hauptkomponenten getestet. " +"Für den Abstandshalter der 'Kupplung' wurden 2 Lagen 3mm Sperrholz verwendet. " +"Die Stangen sind aus 8mm Dübel(stange) und 19cm lang. " +"Für das Design wurden Tests für verschiedene Parameterwerte durchgeführt. Gebaut wurden aber nur Häuser mit den " +"Vorgabewerten für die Parameter.\n" +"\n" +"Das Vogelhäuschen besteht aus zwei Teilen, die sich ineinander schieben lassen. " +"Zum Aufhängen kann ein Haken/Öse im Dach montiert werden, um es in einen Baum hängen zu können. " +"An allen Kanten die mit einer Fase versehen werden müssen sind Markierungen angebracht um das Schleifen zu erleichtern. " +"Diese Kanten müssen noch nachbearbeitet werden damit die Teile zusammen passen.\n" +"\n" +"Das obere Teil (Dach) besteht aus den folgenden Teilen (für ein N-seitiges Häuschen):\n" +"\n" +" * Der N-seitige Dachboden (roof bottom plate), der die Dachplatten trägt. Er hat mittig ein Locha, das für den Zusammenbau benötigt wird. " +" Auf der Unterseite ist eine Gravur, die die Positionierung der Kupplung angibt.\n" +" * N Dreiecke (roof tile) die das Dach bilden. An der oberen Ecke befindet sich ein kleiner Kreisbogen der als Bohrhilfe für die " +" Aufhängung dient. (Dachbohrungs-Durchmesser). \n" +" * Die N-seitige Dachverstärkung (roof support) mit einem mittigen Loch für die Aufhängung. Sie wird von unten durch das Loch im Dachboden an " +" die Dachplatten geleimt, um das Dach zu verstärken und den Haken zu stützen.\n" +" * Abstandshalter (spacer); Im auf dem Foto abgebildeten Häuschen wurden 2 Abstandshalter aus 3mm Sperrholz verwendet. " +" Der Abstandshalter muss etwas dicker als die Decke sein (siehe unten). \n" +" Das ist das schmälere von den \"U\"-förmigen Teilen und wird von unten an den Dachboden geleimt.\n" +" * Die Halterung (bracket) ist auch \"U\"-förmig und etwas breiter als der Abstandshalter. " +" Sie wird von unten an den Abstandshalter geleimt und hält später den Käfig (unteres Teil).\n" +"\n" +"Das untere Teil (Käfig) besteht aus den folgenden Komponenten:\n" +"\n" +" * Die Decke (ceiling) ist N-seitig mit einer großen Nachfüllöffnung in der Mitte und N kleineren Löchern in die die Stangen passen.\n" +" * Der N-seitige Boden (floor) mit Fingerzinken für die Balkonwände und Löchern für die Stangen. " +" Mittig gibt es noch ein kleines Loch durch das Wasser ablaufen kann.\n" +" * N Balkonwände (balcony wall), die um den Boden geleimt werden.\n" +" * N Stangen (pole), die Boden und Decke verbinden (nicht Teil der generierten Zeichnung).\n" +"\n" +"Weitere Teile die sonst noch benötigt werden:\n" +"\n" +" * Rundstab (N mal die Länge der Stangen).\n" +" * Ein Haken / Schrauböse (z.B. M5x50mm)\n" +" * Eine Unterlegscheibe, um die Last vom Haken auf die Dachverstärkung zu verteilen\n" +" * Ein oder zwei Muttern, um den Haken zu fixieren\n" +" * Optional ein Stück Maschendraht\n" +"\n" +"Zusammenbau:\n" +"\n" +" * Alle Fasen schleifen / schnitzen\n" +" * Balkonwände an den Boden leimen\n" +" * Die Dachplatten paarweise verleimen. Der Dachboden kann als Lehre für den Winkel benutzt werden." +" Ggfs. hilft etwas Heißkleber, die Teile zu fixieren so lange der Leim noch nicht hält.\n" +" * Die Dachplattenpaare zusammenleimen.\n" +" * Die Abstandshalter und die Halterung als Stapel verleimen.\n" +" * Die verleimten Dachplatten und den Dachboden verleimen. Dabei auch die Dachverstärkung von unten im Dach verleimen.\n" +" * Den Stapel aus Abstandshalter(n) und Halterung von unten gegen den Dachboden leimen.\n" +" * Die Stangen zusägen.\n" +" * Wenn die Stangen in einer anderen Farbe lackiert werden sollen, jetzt alles lackieren. Ansonsten kann das auch noch " +" später passieren.\n" +" * Nach dem lackieren ggfs. die Löcher für die Stangen mit einem Bohrer wieder auf die richtige Größe bringen.\n" +" * Die Stangen mit Boden und Decke verleimen.\n" +" * Den Haken montieren\n" +" * Das Drahtgitter einbauen\n" +" " + +msgid "FatBallDispenser Settings" +msgstr "Meisenknödelspender Einstellungen" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "sides" +msgstr "Ecken" + +#. help for parameter sides +#: boxes/generators/fatballdispenser.py +msgid "The number of sides of the floor plan." +msgstr "Die Anzahl der Ecken (von oben betrachtet)." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "pole_diameter" +msgstr "Stangendurchmesser" + +#. help for parameter pole_diameter +#: boxes/generators/fatballdispenser.py +msgid "The diameter of the poles." +msgstr "Der Stangendurchmesser in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "ball_diameter" +msgstr "Knödeldurchmesser" + +#. help for parameter ball_diameter +#: boxes/generators/fatballdispenser.py +msgid "" +"The diameter of the fat balls. Give some extra mm to make it a loose fit" +msgstr "" +"Der Knödeldurchmesser in mm. Sollte etwas größer gewählt werden damit die Knödel gut durch passen." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "balcony_width" +msgstr "Balkonbreite" + +#. help for parameter balcony_width +#: boxes/generators/fatballdispenser.py +msgid "The width of the area outside of the poles." +msgstr "Die Breite des Balkons (der Bereich außerhalb der Stangen) in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "balcony_height" +msgstr "Balkonhöhe" + +#. help for parameter balcony_height +#: boxes/generators/fatballdispenser.py +msgid "The height of the balcony in mm. Set to 0 if no walls are needed." +msgstr "Die Höhe des Blakongeländers in mm. 0mm falls keine Wände gewünscht sind." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "drain_hole_diameter" +msgstr "Abflusslochdurchmesser" + +#. help for parameter drain_hole_diameter +#: boxes/generators/fatballdispenser.py +msgid "" +"The diameter of the hole of the floor (to drain rainwater)\n" +" in mm. Set to 0 if you don't need it." +msgstr "" +"Der Durchmesser des Abflusslochs im Boden (falls es zu schräg regnet) in mm. 0mm um das Loch wegzulassen." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "pole_clearance" +msgstr "Stangenabstand" + +#. help for parameter pole_clearance +#: boxes/generators/fatballdispenser.py +msgid "" +"The minimum distance between a pole and the central\n" +" refill hole in the ceiling in mm." +msgstr "" +"Der minimale Abstand zwischen den Löchern für die Stangen und der Nachfüllöffnung in der Deck in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "slide_clearance" +msgstr "Spiel im Verschluss" + +#. help for parameter slide_clearance +#: boxes/generators/fatballdispenser.py +msgid "" +"The gap between the parts that slide into each other\n" +" in the locking mechanism in mm." +msgstr "" +"Das (horizontale) Spiel zwischen den Verschlussteilen die ineinander gleiten in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "spacer_width" +msgstr "Abstandshalterbreite" + +#. help for parameter spacer_width +#: boxes/generators/fatballdispenser.py +msgid "The width of the spacer (part of the locking mechanism) in mm." +msgstr "Die Beite des Abstandshalters (Teil des Verschlusses) in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "pole_clearance_factor" +msgstr "Stangenabstandsfaktor" + +#. help for parameter pole_clearance_factor +#: boxes/generators/fatballdispenser.py +msgid "" +"The fraction of the pole clearance which is being used for\n" +" the locking mechanism." +msgstr "" +"Der Anteil des Stangenabstands der für den Verschluss verwendet wird." + +#. parameter name +#: boxes/generators/birdhouse.py +msgid "roof_overhang" +msgstr "Dachüberstand" + +#. help for parameter roof_overhang +#: boxes/generators/fatballdispenser.py +msgid "Defines how much wider than the bottom floor the roof is." +msgstr "Definiert wie weit (in mm) das Dach über den Boden übersteht." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_height" +msgstr "Dachhöhe" + +#. help for parameter roof_height +#: boxes/generators/fatballdispenser.py +msgid "The height of the roof in mm." +msgstr "Die Höhe des Daches in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_hole_diameter" +msgstr "Dachbohrungs-Durchmesser" + +#. help for parameter roof_hole_diameter +#: boxes/generators/fatballdispenser.py +msgid "" +"The diameter of the hole of the roof in mm.\n" +" Set to 0 if you don't want to attach a hanger." +msgstr "" +"Der Durchmesser des Lochs im Dachs in mm. Falls keine Aufhängung gewünscht ist auf 0mm setzen." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_maintenance_clearance" +msgstr "Wartungsöffnung im Dachboden" + +#. help for parameter roof_maintenance_clearance +#: boxes/generators/fatballdispenser.py +msgid "" +"The distance from on bottom corner of the roof to the maintenance hole in mm." +msgstr "" +"Der Abstand von einer Ecke des Dachbodens zur Wartungsöffnung in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_support_fraction" +msgstr "Relative Dachverstärkungsgröße" + +#. help for parameter roof_support_fraction +#: boxes/generators/fatballdispenser.py +msgid "The radius of the roof support part as a fraction of the roof radius." +msgstr "Die Größe der Dachverstärkung als Anteil der Größe des Dachbodens." + #. help for parameter latchsize #: boxes/generators/flexbox.py msgid "size of latch in multiples of thickness" diff --git a/po/en.po b/po/en.po index d9dce2a75..58de6a803 100644 --- a/po/en.po +++ b/po/en.po @@ -1053,6 +1053,372 @@ msgstr "Radius of the latch in mm" msgid "latchsize" msgstr "latchsize" +#. name of box generator +#: boxes/generators/fatballdispenser.py +msgid "FatBallDispenser" +msgstr "FatBallDispenser" + +#. description of FatBallDispenser +#: boxes/generators/fatballdispenser.py +msgid "Birdhouse for fat balls." +msgstr "Birdhouse for fat balls." + +#. long description of FatBallDispenser in markdown +#: boxes/generators/fatballdispenser.py +msgid "" +"\n" +"### Description\n" +"Fat balls are quite common to feed tits. Here you can build a dispenser that " +"protects\n" +"the fat balls from rain and snow. The design was tested using 4mm plywood " +"for the\n" +"main structural parts. For the spacer of the locking mechanism two layers of " +"3mm\n" +"plywood have been stacked. The poles were made from 8mm diameter beech rod " +"and 19cm\n" +"in length. Some basic consistency checks have been made for different " +"numbers, but\n" +"only the defaults have ever been built.\n" +"\n" +"The final dispenser consists of two parts which slide into each other. You " +"can mount\n" +"a hook to hang it into a tree. All edges that have angles different from 90 " +"degrees (chamfers)\n" +"have engraved guiding lines which indicate the angle. You have to sand the " +"edge such\n" +"that the pieces fit together.\n" +"\n" +"The top part (roof) consists of the the following elements for a N sided " +"dispenser:\n" +"\n" +" * The N sided roof bottom plate which supports the roof tiles. It has a " +"central cut out\n" +" which is needed for assembly and on the bottom side an engraved line " +"which indicates the\n" +" position of the mounting bracket.\n" +" * N triangles forming the roof. They also have a small arc at the tip " +"(roof_hole_diameter)\n" +" which acts as a drilling guide if you want to mount a hook.\n" +" * The N sided roof support piece which has a central hole for the hook. It " +"is been mounted\n" +" to the roof tiles through the hole in the roof bottom plate to support the " +"roof\n" +" tiles and acts as a mounting plate for the hook.\n" +" * Spacer(s); in the reference builds 2 spacers using 3mm plywood have been " +"used. The spacer\n" +" needs to be a bit thicker than the ceiling (see below). That's the " +"smaller\n" +" \"U\" shaped part which is glued to the bottom side of the roof bottom " +"plate.\n" +" * The bracket is also \"U\" shaped and a bit wider than the spacer. This " +"is glued to the\n" +" bottom of the spacer and holds the cage (bottom part).\n" +"\n" +"The bottom part (cage) consists of the follwoing elements:\n" +"\n" +" * The ceiling is N sided with the central refill hole and N smaller holes " +"into which\n" +" the poles are fitted.\n" +" * The N sided floor part with finger joints for the balcony walls and " +"holes for\n" +" the poles. A central hole to drain rain water can be added as well.\n" +" * N balcony walls surrounding the floor.\n" +" * N poles that join floor and ceiling (not part of the drawing)\n" +"\n" +"Other parts needed for assembly:\n" +"\n" +" * Wooden rod (N times the length of the poles).\n" +" * A hook (e.g. M5x50mm)\n" +" * A washer to distribute the load of the hook to the support piece\n" +" * One or two nuts to secure the hook\n" +" * Optional, a pice of wire mesh\n" +"\n" +"Assembly:\n" +"\n" +" * Sand all chamfers\n" +" * Glue balcony walls to the floor\n" +" * Glue pairs of roof tiles and use the roof bottom plate as a jig, Hot " +"glue may be used to\n" +" tack the parts.\n" +" * Glue all roof tiles to form the roof\n" +" * Glue spacer(s) and the bracket into a stack\n" +" * Glue roof tiles to the roof bottom plate and attach the support piece\n" +" * Glue the stack to the roof bottom plate\n" +" * Cut the poles to length\n" +" * If you want to use multiple colors paint now, otherwise you also can " +"paint later\n" +" * After painting you may need to get the paint out of the pole holes again " +"using a drillbit\n" +" * Glue the poles into floor plate and ceiling\n" +" * Attach the hanger\n" +" * Attach the wire mesh\n" +" " +msgstr "" +"\n" +"### Description\n" +"Fat balls are quite common to feed tits. Here you can build a dispenser that " +"protects\n" +"the fat balls from rain and snow. The design was tested using 4mm plywood " +"for the\n" +"main structural parts. For the spacer of the locking mechanism two layers of " +"3mm\n" +"plywood have been stacked. The poles were made from 8mm diameter beech rod " +"and 19cm\n" +"in length. Some basic consistency checks have been made for different " +"numbers, but\n" +"only the defaults have ever been built.\n" +"\n" +"The final dispenser consists of two parts which slide into each other. You " +"can mount\n" +"a hook to hang it into a tree. All edges that have angles different from 90 " +"degrees (chamfers)\n" +"have engraved guiding lines which indicate the angle. You have to sand the " +"edge such\n" +"that the pieces fit together.\n" +"\n" +"The top part (roof) consists of the the following elements for a N sided " +"dispenser:\n" +"\n" +" * The N sided roof bottom plate which supports the roof tiles. It has a " +"central cut out\n" +" which is needed for assembly and on the bottom side an engraved line " +"which indicates the\n" +" position of the mounting bracket.\n" +" * N triangles forming the roof. They also have a small arc at the tip " +"(roof_hole_diameter)\n" +" which acts as a drilling guide if you want to mount a hook.\n" +" * The N sided roof support piece which has a central hole for the hook. It " +"is been mounted\n" +" to the roof tiles through the hole in the roof bottom plate to support the " +"roof\n" +" tiles and acts as a mounting plate for the hook.\n" +" * Spacer(s); in the reference builds 2 spacers using 3mm plywood have been " +"used. The spacer\n" +" needs to be a bit thicker than the ceiling (see below). That's the " +"smaller\n" +" \"U\" shaped part which is glued to the bottom side of the roof bottom " +"plate.\n" +" * The bracket is also \"U\" shaped and a bit wider than the spacer. This " +"is glued to the\n" +" bottom of the spacer and holds the cage (bottom part).\n" +"\n" +"The bottom part (cage) consists of the follwoing elements:\n" +"\n" +" * The ceiling is N sided with the central refill hole and N smaller holes " +"into which\n" +" the poles are fitted.\n" +" * The N sided floor part with finger joints for the balcony walls and " +"holes for\n" +" the poles. A central hole to drain rain water can be added as well.\n" +" * N balcony walls surrounding the floor.\n" +" * N poles that join floor and ceiling (not part of the drawing)\n" +"\n" +"Other parts needed for assembly:\n" +"\n" +" * Wooden rod (N times the length of the poles).\n" +" * A hook (e.g. M5x50mm)\n" +" * A washer to distribute the load of the hook to the support piece\n" +" * One or two nuts to secure the hook\n" +" * Optional, a pice of wire mesh\n" +"\n" +"Assembly:\n" +"\n" +" * Sand all chamfers\n" +" * Glue balcony walls to the floor\n" +" * Glue pairs of roof tiles and use the roof bottom plate as a jig. Hot " +"glue may be used to\n" +" tack the parts.\n" +" * Glue all roof tiles to form the roof\n" +" * Glue spacer(s) and the bracket into a stack\n" +" * Glue roof tiles to the roof bottom plate and attach the support piece\n" +" * Glue the stack to the roof bottom plate\n" +" * Cut the poles to length\n" +" * If you want to use multiple colors, paint now. Otherwise you also can " +"paint later\n" +" * After painting you may need to get the paint out of the pole holes again " +"using a drillbit\n" +" * Glue the poles into floor plate and ceiling\n" +" * Attach the hanger\n" +" * Attach the wire mesh\n" +" " + +msgid "FatBallDispenser Settings" +msgstr "FatBallDispenser Settings" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "sides" +msgstr "sides" + +#. help for parameter sides +#: boxes/generators/fatballdispenser.py +msgid "The number of sides of the floor plan." +msgstr "The number of sides of the floor plan." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "pole_diameter" +msgstr "pole diameter" + +#. help for parameter pole_diameter +#: boxes/generators/fatballdispenser.py +msgid "The diameter of the poles." +msgstr "The diameter of the poles." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "ball_diameter" +msgstr "ball diameter" + +#. help for parameter ball_diameter +#: boxes/generators/fatballdispenser.py +msgid "" +"The diameter of the fat balls. Give some extra mm to make it a loose fit" +msgstr "" +"The diameter of the fat balls. Give some extra mm to make it a loose fit" + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "balcony_width" +msgstr "balcony width" + +#. help for parameter balcony_width +#: boxes/generators/fatballdispenser.py +msgid "The width of the area outside of the poles." +msgstr "The width of the area outside of the poles." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "balcony_height" +msgstr "balcony height" + +#. help for parameter balcony_height +#: boxes/generators/fatballdispenser.py +msgid "The height of the balcony in mm. Set to 0 if no walls are needed." +msgstr "The height of the balcony in mm. Set to 0 if no walls are needed." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "drain_hole_diameter" +msgstr "drain hole diameter" + +#. help for parameter drain_hole_diameter +#: boxes/generators/fatballdispenser.py +msgid "" +"The diameter of the hole of the floor (to drain rainwater)\n" +" in mm. Set to 0 if you don't need it." +msgstr "" +"The diameter of the hole of the floor (to drain rainwater)\n" +" in mm. Set to 0 if you don't need it." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "pole_clearance" +msgstr "pole clearance" + +#. help for parameter pole_clearance +#: boxes/generators/fatballdispenser.py +msgid "" +"The minimum distance between a pole and the central\n" +" refill hole in the ceiling in mm." +msgstr "" +"The minimum distance between a pole and the central\n" +" refill hole in the ceiling in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "slide_clearance" +msgstr "slide clearance" + +#. help for parameter slide_clearance +#: boxes/generators/fatballdispenser.py +msgid "" +"The gap between the parts that slide into each other\n" +" in the locking mechanism in mm." +msgstr "" +"The gap between the parts that slide into each other\n" +" in the locking mechanism in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "spacer_width" +msgstr "spacer width" + +#. help for parameter spacer_width +#: boxes/generators/fatballdispenser.py +msgid "The width of the spacer (part of the locking mechanism) in mm." +msgstr "The width of the spacer (part of the locking mechanism) in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "pole_clearance_factor" +msgstr "pole clearance factor" + +#. help for parameter pole_clearance_factor +#: boxes/generators/fatballdispenser.py +msgid "" +"The fraction of the pole clearance which is being used for\n" +" the locking mechanism." +msgstr "" +"The fraction of the pole clearance which is being used for\n" +" the locking mechanism." + +#. parameter name +#: boxes/generators/birdhouse.py +msgid "roof_overhang" +msgstr "roof overhang" + +#. help for parameter roof_overhang +#: boxes/generators/fatballdispenser.py +msgid "Defines how much wider than the bottom floor the roof is." +msgstr "Defines how much wider than the bottom floor the roof is." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_height" +msgstr "roof height" + +#. help for parameter roof_height +#: boxes/generators/fatballdispenser.py +msgid "The height of the roof in mm." +msgstr "The height of the roof in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_hole_diameter" +msgstr "roof hole diameter" + +#. help for parameter roof_hole_diameter +#: boxes/generators/fatballdispenser.py +msgid "" +"The diameter of the hole of the roof in mm.\n" +" Set to 0 if you don't want to attach a hanger." +msgstr "" +"The diameter of the hole of the roof in mm.\n" +" Set to 0 if you don't want to attach a hanger." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_maintenance_clearance" +msgstr "roof maintenance clearance" + +#. help for parameter roof_maintenance_clearance +#: boxes/generators/fatballdispenser.py +msgid "" +"The distance from on bottom corner of the roof to the maintenance hole in mm." +msgstr "" +"The distance from on bottom corner of the roof to the maintenance hole in mm." + +#. parameter name +#: boxes/generators/fatballdispenser.py +msgid "roof_support_fraction" +msgstr "roof support fraction" + +#. help for parameter roof_support_fraction +#: boxes/generators/fatballdispenser.py +msgid "The radius of the roof support part as a fraction of the roof radius." +msgstr "The radius of the roof support part as a fraction of the roof radius." + #. help for parameter latchsize #: boxes/generators/flexbox.py msgid "size of latch in multiples of thickness" diff --git a/static/samples/FatBallDispenser-thumb.jpg b/static/samples/FatBallDispenser-thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e69d53d24705378dff109d04162531312d9fcc10 GIT binary patch literal 6485 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 H{o;QC)zm)F literal 0 HcmV?d00001 diff --git a/static/samples/FatBallDispenser.jpg b/static/samples/FatBallDispenser.jpg new file mode 100644 index 0000000000000000000000000000000000000000..add91326d9ca49e0ea1067dbc91c8a6c8784e922 GIT binary patch literal 85468 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
gmpUjQNSOa%{f><43M$N*$)z>e+Mu52eC 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�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�x4`;#@QP8vdAinzZ|A7kYS#KpA{F zHY`Bx1!|_^v_4Ch@%SLuk1w-2`}3^MDlJ#40vtXLv5$)hBmDmAkn35=8>0_A4Pv1P z4wN2DN4E}?Vn2+ADAz-{NUq@M2Tn+0HQA%(Z$(ovt$rC2Yhs8-hU z@u%AgS|`RchsYzxRjj?!pqtQy)bg0kuW3$4Tjem7wkPq4Imc%$BvN%-)k9|HRjC7~ zdUcms;y-DhX{(>n1EncFd&l|Kiol^?T`vI|Z#Dnz zsEJ@)14d_xJbk3@Ug`vTST;%#jtXrg>=`k={kE9!ayk zT_IoY5NkEANUeE7^f<>;ILu^lw?eTgML-2H8ql9VB~+zDCyUc~K~4bBhFt~2?c_Lz zRlI+EAoUHyY9L6sTd!&{pJS^X1Z?>#eTbb&BfZg`I;@N#l}~No;a$P`Ilex}Q3qiU zhD4i|UB{y%0!9P9I`$KhTL&BR^n}8PAsQ=B>?WqksNv(omz{%xO{;sQ8UmLmlnh)= zhPb_H-zd#>lEmo0P-~T=X5x)**pAluBA?quzy|vX%Q!cIt1z!sDprK4=WzEhU$LF_ zQh?f&NH#?rPEuW-%^UJ@=$=UneJ-BIO`HaM%>wi%{BEFI#Ctb3Pj?HY*G6y zt}NEH=^P#5wyZm#P*2>8MT|w+SEhxJa~`rNeD}CeW5ZIr z-6dgH>~-&>g++6z)22WIC?M2CU>W5<<11|r6M8KrEF7xrkAmHSSg}bY5ij&O3eem% zM03p9>rrReX_rjD4ywWwRaF@?@J#$;iqp)dW@809G``Kl$9B$j=t+n zRNp1K(Lz9!OP-LRo`^P|6UqJwo5FQ|!{Zu_&{i!i;!u?K3CnLL-3Qx z()S5y+iddjXEH8-Ejal4q)BM95dzcWhRpt{$=dGCTmu?&w^<%MLf9YyY-lKi>W}?&3WZ*fm?MO z6^s#ly=}y5oy3+a^0O$TV4CdHCDx8>H_5EFm3rpLuW2cy=ZDhDWXUQ~==H+)TH1U~Jo-2Ri%f$C z#T8~})KL@0*2)%l8Q5aW8lx;*F7(=8{fiOHu+-kta8}Zg{lt`!I!at(RfF|0@gwAT zMxC1fLVc*oy~cjRkLk(-dCV7#y@K`c@b5Ibal%QYhU|XJIW`LW5mSpqT;Qe{WX>`3 zd@5ZEOpjVGYMs#;fMkKateEOTKyXkx6u~;P{U0wQTI1%aY#IvHB}~zRb69&ptIOpXOij=OFaNw z;3)b6&oP7-=e@9*kos1Tmbh4t0?$i@iyqdXO5ko$$Ez`>oPl$|Toi;gN#nJxw>O*>(;QCvMq!^z&0H{eZMoVG95CY3m~WXh0pm``iCXbD3~t&R4Fnq8Bj7!dLJJT zUs-;yR3c=N^A~E0@zAGm1q{WRwgUs2oDL;lba6h+R444~*q%T|@pj}TxM}M6Fudtv zHRT!GlV3Tyg3LnArxo8-J1r&2`$?en%jB2EeAmmYiQMA!;#!KOk%G~Fi)o6zl_33F zU2H;W(!R4-U0{Uy0L*sGq~+L^wtjF`4RKZz)kVFwO0XoOFs`zZ>5cK zjN7xlP#W?~bhFI8+24_3S1>B_-MkAMc_HIH?mVOpm7B*PM&+L*LZu82l-e$4!d^EZ zU(86|v6@a@3Qy;g8l(ErGWt1}(P@!hfCOxqkG{AW2OR|8!$6T!mC&mWGkdrVYs~RPNYL7CyB~yPC#6ok>M#wx z26@*qiNuWUvwj!|xt`kR2}DPaoZ%r;{SJ3-Rf4XP(36Pe>Uv@gG=i^v`FarVPt)Lt zZ`MjReFBeWzMQ!|i;9!9*eAw-mAJ9ne`2~(Q^h0n`JP$N#CH}@dkh)PuJ^K%DD3*>$k8?%xN^%aDz!L@8Dz)rBvRZ1_@N)%1 z@z|dg1K{=5e&MNOqK@ zvi!w`j?_bM2r|=hQVQP=5`@)f<3&1po_|fb0kQF`Vc)rxgyq`nl|RZ;ue;v)+2vI5 z$6DYJyKRhmiwdM;So=S9#f>7EM`^!!gw-YikjN!JCC$c+1#4R#?8m38P6Ybc2hvix zS9Ts#{j`LZmDAyd(iM|4j*9}FqyYh$Vl>vBUk4Pra>}dHXlx>2_NbrHdjIXD<_@tg zjruh{j|%Os_^r+GpUCVCA=6>=)UQutiP(q(922X1w}m9JEyP`2paZFX}AO z8>LpIaPhVupdZ325Oad9pj$K(qcjR6h13myh)Frbq_mcwmQiPV zkVnf3=s!kNnzTw*I3QB>ATNDv-L?crAyjdvBX9q>r`~-7!u1-MklB*Cb%0 z(YBWZL|*TnCNjz4(VGh}e!i_SDpR*omdG2u>thKXh8>Fx@A#-t9rx2G*?s__@!j?h zz7hwVsY|OHO_P~N(anXFnZ7U&y|OhpO4y`TRyAcSf?}jqxP-40A2nhqGDb6OK&m=E z-w$QvRFIN=!cc!C4^O^aT+SQFM`5V22#K6V4>ooOAZP!z{2vV?8(6i45U$>|7{~Yg zpntO%$4rNtc3%f34KV|~n?SR(d*HH^u-XKc_7bDQY3rE&S?hyY>wb8Sh$ z+gXIZOcYk&B6THscQcjQ7;xjPn;Jf$ju~X8$^Rn&pA}K0NXp&e<-!7>Q2=91dGy_^ zdx#OH?w}9j^_rxNRo~)BGF3I*o4EB(!Pi*|82R8Sy6ZFmA+ns2ykKyI>Rb9Bm*oyU zASd?9;DuKDOwW65`0!H^qIn z>paac%yo*~qMYvU3BJc1A{YV9iG5ag+uJ)AjjMe)t$L1Sv{1601^t8)UfnM@?lg&I7#?!XbZ&kr$mJDV{y>P?G74Me!5h3tcSLhfQXrSnYXY z;zsQSaY7uaEf;V4F6@4Ok(9 zU~wJ>f#{jb5q#(_=(|o}0q5khD42TIt)&V~1fj695Wf~&-Ue%PHK==C7M0ms_#vwi zXEYL&D9DcC)aTQs)2e35yz6iqOY;@fRMCNnLkXDetyPw#l{UOZp}YFkteP;Nopq%_ zI~w3Hcp&H%zd!GW_xp7SXX$oNbGp$S`7OJ^(}wtQK|_2%t}DNrWW@r2xo;1yBtPtH zZiiySx3P18ocT(CW@^&ZND9)n_(f#@Ojm{vXA7r2)aDm?1i5UTgA1rCzFWv_j5QHl z0Ll4aZJRFicgur!JXq7*PP-*MM=l4O_AYmItxC$YVvPU|r|@n9v3f+kki+Ut52tgT zX$VomVscptC4SvNQo`(p=ncUQ9(r^-qZTl?b9r6Eg(j*i$O8|Tyz{Rubv}0#Ze1@saJMF~qij<7%G0evXfd&lljF?05q=r6M zB?)Oa{IcniA3Mpw^ zKNyf}XL+q@KlyNW74A2&;rnVrK(y7+sxLf`AKxqf;m@TCe#Z^{BQv&b*#3G)9Ztz3 zV`L7ZSsMe2{5<;=P~f`#l0(8`5N6+iP3eyRS>?4VGF@kco=*_Y@QdX`G@mdwnDvAT z>cG~pRZho8Q> z3Ei$M2a0M9^w5p=Q>!NWVC9A8DO)?)eN_Iv-{4+x7A?>T-D|vIqLH~|!=NUA3m@*% zHg`~KA8#4cn+`Tc7^dUMk4+hKCIk1e8k{Ko(+&|-BmM!)|8(;lXnkh3_q`d@TqnW8 z^;D1iIV%9KfpcO&xBz8PF4ZfL>JPr0%YWemSg?w*B=NnbJ>T1vsg+Cdcl1Vu1sP#F zZ^o$+Y8YfD`$KhN)OZt^*!d9e6JVK-l*Zf2*l>*c!x_#n*)w`vIBtO2X)%_?W5Y8A z-qcfqedxCcR#}L^C%fK=41wt*s9S&Tv09X4EXS2UkQFdd_90S3*ww>H`448zP>*Xy zLRlY9!W5Wbdm$5{{^) zrNYD9$^RJILv;ZUm!b_#N3}ksI%{@R_ zMEEGm@EI1-(pfj$1)>h}DdHN-vGa92)M0Q@5~WDIsNYvdl?_k+N(R=8{YXCrR&N=I zCOPj9-pURDux0y^5AVac{H92n{Cj+hj^#*b>ovpdYx2)7_qe<162hY@%lp9c@VM z(Rt_=bd;)Cz`Rc0mm&LliArX5&0M-kQk~n_b7u$GV)V^cofE=ljyvk{oBHoOL328f39Z$4df*!0GJY2f$ zw;&Sn0ev)c>Ni<23^panxFUU`@^W}Itqp-0;v+!-^g|&5P4tR+rd(c6 z;k9ay{_EW3aw&5^mm@aQ5QFge0=sASu}0STt+CK}<#;44I7wzS3?I@r3R2+R``z`X z8|U3Z`+j@_aHxl&_Y$coeAnkwY~RoKQ>d#3@rE(-_NfEfRm{EpcnFT(_&M83=Yo2c zpROKe=9D?f8!6t(%~`b`uRhF|*0wMk9S(ZMnOBALkerGPVRcSTmDyFzK-PUWc$gvpe_Rb2OhYZz-Sg&K4!b?*j+9~UbP)2 z0r+ZEMDFKq;T2p4?ghGI(^geccMBa%hki%%=VT2ngSk)Wb}NegHX(`vCJudgv!Rut z%|AXcOTQS}!t8@54F8yEsnAUZ)X9nDbpAn**h5aWs*64&y#N57dLf#CQuzKJ(EKaf z(o@?;m969u)qdilq~`aFwXZCxF`rzdu`}Kdm5o_U$f|GBKH|XRtKhbI@xk$gmjIG6 zFOM_s+z0#}X$}H8AWq5*h?COq8A7ho0zvKetSxo_L>ZTMv&jV$}CL$GA{ilp=tPnuyKl0%N0vSs$^vOYd;l)7}3xo3_8vz$RO z`s9xvlbIt6ib(xT=Cqp47_m3djSN1_+$XiyN;UVj`SAIL3_eg8TDl5@#CV}^1q%p60>oZ7t{v@bu>s$o}6CUgQ*Hudcj1ma;fLW%5FLX9+55qphO_E8_*ze)Vq1lRHQ(`~Gz zU<`u+pdi!(M|6w)HGFzUfJ(Jf*$IjwDJOnJJnf_)WhMYDt_(yBHbn_N8p-Wg%A%kj=0#qw{;-NxO& zP_Cy<2!sc75|*Ea$gX9GyuT+bt~HWzH~D+eh9yQ3q{(~?ld5z`V4GMQ@Ay4Dax7(R zj3%23OGRtd?i`z;6$3VhN>*Y;3z3 zqqDJ2#pNN42!Rw(ajgwD7MDp8A&t~kTn;r}er`0(-vr(Mg{qLeaSN(VxZ8^>CV17p zr{k;5m&{WAwlh6-0`f`W7dix=oLN0{}B{fVt4W?%F+sRPeCpV0A)5*T?0tMJv$rcU$%p5oz_mm zF>V4WIy$pm#aDdh89=HhiKnAAS1ebi^v$QN5&JBV7TIwIa`7J>zTOZHSyWpA7ez9< zSU5ID9}Ssq-$KXfBp~gHVbbwD%Wbo+w9#SW&ceg->U#15A~*x(Glz3Vl5sz&jhM!M zzscRfjzB9!;EV^rN4lZi;UPpB8XBH*zwMJ$TBG?m=52f}{_X)xj`xwA30B9Kx9ddyN{w7V+KJQo!g@IQdGw$) z1hDio*k#%0x9;ZyJMtvWZkS)>m+cOJp$H~-lq6!Mmmj{$pP~HZar{trN{HUzaepBO zocjxPhvJW*fbt~~lvU0%J)uWtXh${1?k=!aQ$n{l+it7XBW*TvSNwfcL%oWOo3dR z(ae(s`;2+b*qT7JBS~C@iCECVC z;ymGJ2*Bf1*x=#uvOt>N4$9!(!LJlcbZ>v;!MZ94&{Y^$r!@NuWfkopD}!mQt+d}? zjPHAAW^?5WIQ~X^b7yp};&l4qezeuR&oaJK{jNHgodc$Q%w`XqOz^6cTKA19)KZl! zQp9uAzQjH8LF2nJsmTDCAwpZPx$PuIK>AB=H zqaA&<&)YXb#&&`pdgR8qPElrx^i7n zNt_{G*DmX;KNBdo14$peo_-=enj*Xx1`GDTulD!a{O^JlrlE$_y@iEl=s_ms3%io2 zS*PUhzv}TC;B{3$Dd+LV`OuYXV&8U2U{!#WR##qzne0{k);^VGPu03QD7^f-2? zO_OUxmy`{pP=3n$a8@rC)UcYgHrm390c>5%Uf~Uz*2VX(^dRwf zA)uVrX%-`U{Y>Mt;n?7>an4@w*`uRWmXddBecO4MOtZ63g1YCuR8hHCg&@2XKrT`o z_K|esB6y+t7)+heGM@VluH_V_wj`=g^s~S`SIgbGr5{jkZ^%}O8(9#t!>%n^{Ez)RCkl>c>_~FMhUZiJ5pFZR0@Unx2f3Kli3oyaI^U#h(U4K<4lFG;0Ln zJU{Wp@h)Ds+9N^}l|;f~Ol;rH8eR|MS0Rx;dLMKR1ab^ELqdI}Rh!zj+-E&$ODSJT zsasq+l$=PSQ|2Bhi+NSjTO*j}>FUCn=6@$0}|0NrW z>o>^i^iWf4k;_yNo@#ayHls>R=kg+?2mBN!qK_#!&oc)gf5`^hLtEGvAt7p|pWQ$=}7yU>OAYht=B6WEOFd+2&p8(;;Ios{4A@(H8l;lp7r z-^AHxzRJ4G)ao>M|9agX+k0T`j-#ALJEaMA!C$Dczfc+)4%rvd-Y*buq}wx09KBb& zzy<-%uV+2#>Xnd#rr&9>4xg7bVQD~_tMIcH-{WBeMo3kycXnUIqO~GAxJRBwK5fS^ zr4o#6U1DT=F=Z+Ifb&z=-R|65IU0~=H%OBQB$I2?NPYb!_KlT>Z+Si z(pXg6B~CXs&cW;a35Y!|Sm_9z?;O^a7X3|j<} z4=RDHGo_HnXUGV7XjyFqihcY2scXand?#J5@@ll2$h~=?PW(_EehjZ)*2BIQP`wKT zsIhyIPqoa9ljUi0>Flb8IqQC)QMtX`)g|T{G*I38sm$Dt&Af3q+?SB)5wV zBbS2jg{rJ5@gcI~=$}Cg$*RO246zSTrHfN%r$?_D$1wj>8+UAhm2O@#tqXz#x{LsR0fSBS7 zyc80|V=+F^xIN=z2cR5u(_@g(CZPe!vMU*2J+^rAc`f|*)M?g{Xrd=%6ePsMMs74X z;cOSNuS6a9$IULTB2`(&BIXHSKFRztXFWC zwb#@OAT7Yxj9MBPcqSr2^i`dQA>4g5w4XUKEMQAtcK>pE4{Vfn)YI*=EbtGh{&#Kz zXIqV?Bvf7r_pq~hWk@Bg!9cE7$HMh>-vid=XrrK-#34HnT5?VRQ6E$X2_yK1n5mA* zjNcA=eFZW0Q$mHKtCq}hD>}Cre=mXG*ts~vlM?oqVa0|4OPh!^%uY3<@i?M3Cjab-4p&GFR3jvSb`iiJxTxQ!{!Ck-bB7@JHtHqAs;1zO_s zs0e~Pd~^FAu;lj0P)tu>ls^Y><|?vxnH-%fg#*;VV%2_MuYsx*fiU01nz>g$oC3Lh zL(zF>&j>%;gKNMBN{VqQz`(IOJ$$%IsgXtPaqq2I$q$o6?3GFMv&srnLz_8tRchO~ z$bOA>jbapOZq?Xg=R(r*Iu+)Py1J`_WQ$^<2d9hGO}B)Dafi2U6Et6<#EU8(34uDB z`?pWAna24#A+$ppKP~jhU2FZY z`RdiKj<$&2PxtlTb$jwhqgL=ISrNN+o^3VNX;KpBu;_0cC9CSp+c6){BzA@i3ECpg zU(7iQblg&-fRfk9QZ;+7DwBr;J9J;SCEjiGZmE%Ilx$mmU7$X8LJYO%?B%+$X|iqu zg1~tHnS;)okb&Oy33!LL(CSnTzs3R;lp^+O#j-`FF+<~tu)39rh`M})nLF*EIhZdm z(P!gXsM-^|mVjn)TpIRDD@NEL>AY#i*MiL-kp0l_X21zVU*tAuSo_W%Gl1In^i+U>YpART`w~`mu0k zQNGqk{nRU$?enmwYIcapKhv8IxANt5%62`s%ACx|#zM zewJJv&$5$5$h1$aALY)Gl;rd~SvH$x!w6o>@FXfKKJD)=8mP_p=-ZaT3B~?}nx`eN zD0{3Yu?`IS2_}G)m;8Pz$9QLF{`tVmPH*j~qz;v{z_R8d**s& z$~(>Yz*P5FAO8qLx>2n=CeU5E>N4 zWU!av%UJW$tg0j;uvIJSEA{R<$BQ+CZrt>-77va1Z7-Qw$s$x=b#(xJiboTxa!g}_ z)_xaukzC;#hTi+2dIsVz6p#owCR@<(j9vv7h|(0O&veeFE1l=yZ&)}Ghbt29wY1T1 zPDIY@Ip3StR##PSLB`#tGv+8PNd!?HKn@;)@H)Hm8QcdoCo--R$A5U^OIC6cl57SD z?aw~c6-|EaA8WzyHC(#*`5KZ}OTzn3$f`Ann|%(1e-DsY`X`4J+f!JGS)7|j@I0%L z@9OeKmj3Brimb=(;dXR%*~l@#9ct@3nD2Kz^Uz4BT(=JRsM$q7NKKNufk(F>v~Dox zbE%8T4xO4*3*!yoW3l1WbcDB3Mz|7L`1cz8U{aJQ*WQ$`pWhTlwt(&dU*s>n=tQDvXFQtSe;2Id&7B_4 zyOHK3Y&c4-{fBP zQE{IJjdn=0P&kYu9y;rN*r{Q+g+yVZGJ2XAtmeNWKGul>WbcblGy;LasBygg^fxZ8 zqCh4K^`v1QHTfIldlsx9&65^TCYWW<$Q3G(OW#kc&7cI@$4sr+6;W8SWu$x z%lw}MhO^({gx}#CEZQ=qbwUg@pgT+~tbcr?rU+C6sZHa3n6HD>054EEb8LekW~1_m4)Yvv;~`T(aoIh0RSGM&40^WRvmsmf(5> z1F}b8q58znOzSDU^UmsM_hzh;phuN;ta#xSI!wu=*A;TTQ{k~AD4fAY9l>(16n+Kc znT|n?nevGww~nH|0TH!Y@!Z9uo^uvKesq%Jt@0GI%TqcFJ`hB*eYf=fSS(`yDOiqI zEWBKP<^WcPNFSGU6T`qmZxos4?5rHq&U6}YyeMT z3Q(dw61;KEAz!_O&}AyrTC z32B@sWBhZBTd0qAJqLAOKexum;8KuYQ3lo>)pESVBO`UX72|cs7F{j*HC_HlJZd>i zy*ubZ&y5CIuqgHM4qb@`8<6lun|== z1+Rz`;GSWEyY2Z1+7HjNB+J25g{pqgq)c@!@W=g8w!k-(W>t}j-XZw!plFlIv{x!m zjkwEjh&o-k0z|m`mUSRC0&;Ip>7-XllVLPnblD63&Z+f`*=#IxGHVdJd?PbJ~1NZ#E8{+iaB|)~(33p6vN*y~`>PQ&Z^? z@pYWc;;Ronnvd(mawPTSws)4M#yXw9G z=l{doJGRH&w_m(r)3~wiWMW&5%}(s3vDMhNZB5eHX>6N~Z8k>t^t%81IQA>p&+{zj zcYY_d>Hcd4pRJAsrN}76IWh}3$&?r5U%W&{DGz1Z9C7MiH3WS`LrRiS zoEaU&`}!*nf=4ki8)Rts^tY#~4~S{Cb@3!rm!Z>-^~|uDTARD|)>xBI@H$Ll zw?hWB*9e3^>=#pDU?YrgC*_|GigU5C?^`NFBhz&Ve+^`cPO{`MZ5CqMmBJ2IWenul zh?&m7Whcl=yA=$Lj1ukrQuW-9kt{J*D8~gF?@qG7znj0RJCT9BFmEbE;SbP% zI@Dv@RjVt~#lf;}!;FTFwEmx{vgJc@J22QBOh&XBA%P`ZD&RFb;@xtx6%VzO)bIISgjbUKR>#{FWX}>E)U+o%b_Rb4AF1>g7%&cb4UB3qM$b#BTchUvsvbR2TGsAj76KJCN|%`1L>TzN z2aru}6w*9T*Zr(w{t6YFDieWLo8}HH=dUgUZJ@^AfL4BvkOx%~{YK&J|J$mdu*3+D zf`EFcch*D%{-*s5vl#2kk>Qi3?{$=ovMzL!MHI%pm+vBQcIMh?@ZvJ6Q@IsY-syi6 z$aDX|Pd=_c({;XRN(U|^npb}c&&~l%tuBI#&JZF-<`r>(^%I{|B8v3qtvp%`Omgqu z%Sds8b%<8C?eeITU9;>>m+#8FyT~S&w#%K1NN!a>VY>zM?{k}oc(Pbfsd|^l`UYTS zL=iJR4>=&*=~iroj4w^GW6$ETITfJg1?Ht>mFG%As;sqpoSx`pV7QGO^8Z^eKF0yi z>UTKp&c8pv;=%EzirZe4qyS^BWFs0K(7>6InJ1*h(Nkq#=~D8yCYk!So=olzq(v1XX3wo5YRi)$gp_&eh3+#kXY}lVB)q+TVt0#(W5(KGm8@qF{#or=)A6pl-v?@q1QZwC@$Cq%{^ z1XVQ1Wu-AeQi?b3?l7m=`!M`sWg!!jrsJF~rwBB91Ie!#t`v}PSNxk}S$2LUj zxg1=x=cH7xzCx3JCu6gn{~T?vGqlWxbj@D}eHj zMaX-YPn;t7UWrn4l%Mgi`HhZF&b$)(dw9EzqV-9(WT+&7?+7R8FT^*RS|);zU;V#m zKB$Hy*Cl8`Scq3@pNZ2Ss(9YM87Mu|e$Yil4%tBYfzKTwkueYSI8bOfYJ;vSL`hjI zO>_~NWvqg~qE+5P0&iK|S^-%9M_o{Qx;jfyf0}p-zxyD)qwvF&qvHKua}ND|Sk>QIu_av1wn@?i zZmX!BxV@0y*wZsgE~b%k;6e=K_ETcRt@*AlVV2x~@ghMj^2L4DAy&+EQz_0TdX~(~u_P z9KcfiGbxq`o^vqkOsTM;!Wrq&RmcRt2gdDlC`{}8PZ0K>qLg_$LiiumVe(&d4R%8M zqp-QRW)Id4Twc!oYntl!i{c+?-+HeK?0F+p8%_di57)kc?-uBFQWgWI0_m8ZH($K| zk;qJJS=8`6e?m2I8>Aed|FNxF%ZT2LZVYO_xs=)*1==hr#qCpu?9vwrFkF-cC9fqb zZop)C&{`j*$>(|s;LY4+lVzQ)a`64&8T zYtq@E*p?g8fwqg68$5#LKMg%4yA#(L1RHr?e>`oxB^yP5|0HQ!BMpGhSCOHxIiGIo z!|Pq#_<{vs0wnCO-6lOyLr$AJ(CG0mpfKVYRN6nZe4R5%E0%$Qu29br5Ubic3e29k zOWYm*wASxMzFg0c+V+!5E1!TPt4fN$LX;m4wT`fGAJHuyTXMCK`j9`#Rl)B26RH)l z^)g!g`lq(370DP|hU!O+TEaCJ{>o0da5X-7g6UzWIoNRJNdhe;Pdtx3XH;oByIRnx zwyqGaX->d}9Z0*CIZ|H)R-zvLK<%3n7m+BE^N=3Fie7aOto+j|1EKy5f!>sEUS_LJ z;|(&Yc|Lr%XREG;+|-_u-z-9I>Y^j@aGX^E{(pVT2?o@zo&#^E(S_=ui&33QZD0W( z1D$cJnp%bBh>}&f_UItbEmYWugPX;G*8fC_Isb_g+fBB>^@h2GkwB5v%x(vLFi2*>sA_+gwf zQt_WeP(1__J0b7UR1VIzfuq7FCCkWJBV8YS()Iq2(D5lAgZJg%Suyz#?0+Iywgc0 zVi5SVLEFoNjf`FDq?yy}9=Xr?=%q7Xfa{Or>HbRcr6N6!kU2-R*f13pdmMjiP?I>~ ztaaIK5K8+i_Amsue+_G|4B1OKOvuMY(0wMz7+ygb+Cv#I*v8=?U_dnq%wHn``XR*a z?&-?C%Wzi-me=pd4%SCJ$a|1|$-y>b6u0H!1tcjC+hpUqt(vPjHYsTuyjl*^PS@$_D&9}|PU0!uf#m=xD_ zy>GkW{YXUbmDI0MX`+=vR2_ zYA=2(Hw2DHVJwKws#pVt8-us?T9mbO0HT5-732<#6N*9B_w-At^NFv}KCttdj~9mg zG7@zWaw1M85WV1$N_^tSu5~PN&3J2saV_tYxBbS&!m9Z(3C!Iyj7eSW1IQu(8sFzj zNW_4T!G5kES^mosSqU}il~_~QV>R(#h=F9^UmuHcayEJ&<)V*X-eLt!h4;hP<r)c*Uxl3*-OHg6a@V^xk2rv~q^5R;DekN*f4BrxG} zEwXOVM3na5e_tG|!1$H8^mxmGBbe_R|KEK)A1rqU!@x!M-P`GRG6LNS;Ke!msFl{2 z-$^0HO$=yYu~N;E2#)c!b?-Ou4~Y6~jMmG?f8~d?_7Y zZ{Zm=1Ss^7Dew90t z3o(Lth(UcU2Xu-+x z-c$aQ5=7>0bOt==T^j-FJDe^nrmnZOpAFaxuB?Bzk|~9%&+n+W1{V|}l<`Q^NFS`P zIxMg(UxP!CaMP`fBbt=E`dPrXsXgkLaG$exRalQO@$A`XL1)`0 zLwIszfOuVt6+l!;P8DeE-zg+bcBjf zvM0X6bje=2ns}W1gtX1JWj^X(r6bBeV&!N}RYtPNkD$=8V!8oZuMz44Ar`}cVdEoz z)X3ffj${adBtT}OMm>aD&J@N9nnP10;CC$+Mdl%pNX;okN0kYGL)VRD;t`hE+<0es zx+Gg~*)>pnS{>(w5z-WS1T@(1Et|+@N@?9v=g``MCG&f~`&9kIf#`q-8FilFI_+kG zMExEEA|j}+K#twGtoaevxyo|V8lyVI2m*mWx23goHCSlv97ITDb2(vSQ(}^#VxINu z3n9cz2=v-mMkXX)PX1?E$T8)dGAZm8+rlG!Vi zi5+fAt+$V*dqdvCH9^{(;Zm$;R(AzDe{EEposBMCvx#bvdSM}v7{i#cvK}|Bys|oC z7Z;l|vI@-<)E*;(sB$yB85?-WUW8%iaF1yb4KRrkfmbyO6o7 z(99#xJ$!pjGb~emIOX}FV zp8lZg^Se**!v+3@z`EgNM*r3;qke;=!E9qF(w{GcP=mmk{z0H==8LDtMf}qKVIpN3LFic%q;b+S#0u$G?XL@x%SMPc$8GPtaHCvn3=OMr?uKLSwfzw z#5EoEr?qhouROvs%W}?SRZ_hC#;OzNNZHk5!UcNPQhnFZL0Rp9J!gJSm6&W=}zgq!neUew57XO&uUnr zuQ~iNny>dkvC`_L$eIL}wtbW+wBFF|so1q(J;^`4psJkA^XBU)7kHUQTqYF%77>e` zm*0Tnf<4E^pB@p9&0)(SbNLa6tk!?a(*V|Tg0rJjeX|Ic`HP*hD(H(Nb|oeEvh6g8 zTpHA!RoNMP>u9+-Ce8KwkdFw3xE7sRCvhR7xEsnre&N3l zV5j37J;k+3H5pfL>3yJC zq&H;mH`VV7DH{Ck@yvE1608XHA;>byQyHYR{^|*V2-OkNlk>lCq3d_b>*pl%{u!Cf zus7bSvE}CAJ~P;5L|G0J>tz& z0^Y&UC0?0$JyYP77=oA1?EjX|=e3EYj)~2MimN%J0S!XrsD>IvIlJD}#O0T_|DWU9 z=0{j4PeLiengExBDEh!(h)sm)C#mzQ*Yv{P)+K^ac!r|IP(1Xh(O6%fmgct0J?F@!%jdH7Tc{%l zVf87r3+GwgSZvHb4-ku>kG5-B>RoT-oc1emw_t~fI?!AJ8;76L2*q+<49gGs#*PB` z0y;&=DD%DI(g4EYYO2huF3c>-z|uAXxEioH2)*RQ#-uGRMzIqx2+bz09T#Y3Z+>sd zP@Gt>&9T(eIkEG=0M|ip1mVXH@+k{RgJB|XFKd&I^PBPMXVg68V%7`x%?E5>SJg}v zQiM7i)eoiDh}4)xJ9{T!jYnail1*VP4ZCSz`3Q=`^#cHM zX^&28aldG-B2L;P`LYHG<|cnVc`%Q#wI6j978UfBd`Hs|h<#qi{4%e~HW8oNdOxC@ ztwY4?$;HH{Q>Q#SG1np{ms8zAn@!BtxSsGx7GJ+ix!LnjWt4aAh^W|HcB6Ic6nfGoj{)PHtO=Q{cz%m z0cdxLR%d8|%If@Iiq<+g2MwOA(O-hjm6c-BS0~gY5`JPkdMr?=xToP7Pbju9{e^HP zymV|~#}M5T_p?H84fG7}x((iT&P!@xd6D2e8Z$vgMd$hR)ec(!EZ8)cOta4_E8{2o zMjEB7o*{aGM(}XFKRrCkct^Od5mnvtOM$A)kMvH*3w2`Cf3O_dFZmmW2;mCz`>YGy zOAXBJ5FYEk+$7FL1$d=^2?a+4-l_tSibnY<^HQ*X2oTazEg(a{+aGCwyRiyB!*Znz ztP7&{aFx>;4Qdgh?D-Fm`!|W^<+iJBjrLbf>VmJ#q9&;0&Xyi)woO|Ta07e)>EkwTxzQzosw{PoXw zyQ|KG&pN#tB0n0yQvB-s%PEGJsfLe^jGrsAUtN$PVX5lHt=PNbc8OSW=cikON z(3Q-hYrahbH7{HN8wR!9nwlxLYT}6~zm@McC?}Ep$NKf`h0rhnC28b3^1Jkt_`F}l zq7wCmXwQ0?&_F5QH2l1o`MVo^MNMi|mq87b zWZycG0EV9%=eqngc%y$Iib)3YKg=Kv`vl2bpA4{i-~A33sqsX)hg8MrUlfM7=C4to9mW-z{IO6HZ9(!>p6pc(wN zI%e8T>YI+=qq@U{T-O)9;6OQvt7VWEB65g$1W}CrD;egr=hHX)R_OO+^}+dJc=nBV zvweW3zuLg<9%TlR;SqX82C7U|AcXiMqe4t{G(@it2SVPiQaR_V@;u+JCeHP}7r$|R zX}Y))-NzJlmaZGjv)sP(ZRjC)gBt>~5ctm0ta}j1)RF6@@uiDF<~|}w*9-h5#ou`+ z?d!O~@k7{CIy-tPP$AIhKWkYl=la*g70q!mkyET|y&D$OvuRf3Fd`)8R1?r0_qLaV z`?uOt4CEwAG6})<1+@*u*FcavZC<=ui=etVSYMf8WK{*;&AL9{U~GWvd|Fqw1f2E& zuJfdg+;1Hx#EMwvU~%RB=SJ&r%5gcGz$i_FmMya*2D-gJx!AblB3rQkf?rtPo}ymc zSj>+GbpG4o?6!e{z~Xl->}cp(6h+K9vCI4ZJjA%&yLZx=) z$vjH<8Sp?K0Md6$2wM8n(8)Zr5`#mr=GZ7v_&lH(PCI@>vjz0&AT z7c<$RupqwURpZoZxLI0s{!n(g1q3A=qTJ>cSHB8Ig+{#D`+X$6%jP{Ne_DGx7#4e4 zLc9-qr#~6sEhY-DPd9bmalM>O;i!xJ#M-;s|A;V^kuV64Oo}d-q{PKr{~Bsn7%3Y8 z90BSQJ)+!d;)JvpT9t3n49be4#efITp5Jw010!dk_H(vKQ52`o*u1y^Ox#o=-n$Ja zN!24WU9sLvz%-l%_gaVmb4=%_uz)rMZ$92od(Ky+GFMqfc(CNswap~c2+Ox{kUpZs zo2-+r1ErUb8>M)X`t{2X0+jo(vuIV6QB3XeSij?yTGZneuoY;6d!1uJvoQD!fc4gl zS_O8Dx*(|*4q-dwNyF%1f)|eRskkk-fQ1Vza$>_u=Xa%qJk@3qomCQ(>=mLJZjTwG z17yne5fbSevXQ*tD$7 zZkB!j-~cWq2aa?fVIp&%QX#RIzXZq8MCUc`wTdu;Cz-hP>+ECT-i5?|c6t0!2V3HV zuTj01b5>yP?Ic2Uz5Wp_&7kCwUG6Ua(S1CGzLT|W#`38y%{z5bZ^diN61`)kw`{pj zS&M@%%h`=f_lvoC3vkh$9Dr(!zn^kbFSrMbrn{PPAVp7UCJ12D*% z$R{!al*_4YE>PJqs_Ilm7hF3)hz$Nrc$kEvjNCj9Z>uC25l(GFaa+{k+8(~EbflvS zgM>3q>sEbjRkd@duG%oV<>~dRcpw~Ry%*kALj=KxS6%6_4u&W#sk{ij;CL~2bw(j2 zR{W`A4{!fzp@)s#K1uV7-j*CJ_$riU0zRY*8Z1_v$X8G7IoER-;rcWCZhh8yO)BSy z@AO7jDTH8o~!Z71npr5 z9n~(i!7Dw_eq4w_q^71@Pc96Zsyp!KgNbH%idDctb$EZpjCNc>kuS{h>RHlGj=Blb z%v5xpRCb~vKJ#is`|KXk#~*;A5WooTfL&u~{XHxnUI~AmYd@6o}tEe~|d_d@YwuX3tbjVt} zq|Iv-{TR!8PO;WmHV6h5Wws!iPBR)Y>5GQ&cX!UETxt?6psvzs{83Svl@kOsG)u;| z$si(?fGQ!x*lPJM9areBfEB%mt2H{Y2Wlc5j(B6~*nG<;IU*gZAai%O!hea17AtEod zPMV73&N{ZqA|tX)EFH_BrAs6Qs*_WCcF?z6#nV|)+5XW;N`t;d!HNCncU=g)yPX$A zsaIKbn9!mF{u{Zr+)OV7vf}>}Is6}Hm{t*y^YIrV2rsj_R011(c1WWFg#7z>ZU3uI z-0?j8h}^|7f4s$bgnsP!hsmnIm_|Hi#Y zN^x<;m$7&h|K6NhN4)GcObm50E~wlM#PY zUvlp@Fi!d$2db`$`}r4Q)hhyWVF4`sTGV*rB&e+zr>gK;o7>4$V8X@`m1816j5=Cu zaV;j*Eee^jz*{*%+2g1do>V)-J0B5_;8(sM{7Dn)NXkh~g@PkCLLRdae>V{ghw+6s zriH!%x#W;t;|X0-7k}C6w!VZrwf;4)tuofwbNImFk5~ao+JC>D zVTV8Vp49!YNL-h3{zB}Gfs0sWAs>((G_S9wFRGB@9MJ?rG*6>YULRY`*LTdFt-(>; zAOf;&_|z5ak83F<%<`JzYR;`ESB($hu~DN~TodhbT=EJ#i(&Jkm9^Vf z8%x?>L2gY?{PYG?*|i}DPRZ7`2Dayxn%}85^;%f2_Nw{6{HN7u{EYw43K8tXq>TF2 zYu9G(8}#5a`__pdSQP@c4%!Z62rV3y!T0_5NzdNJkKM)_{knc%$K7eNX5a8?ryELD1IXFHU?#Kx!IeHO7QV3f`A|OGBforH7&%i+cF?^Mkm)rz7Hb5f8 z$Rqpd6OEiSY3a|(TPu+6ej|VDl`#&6T&RRVx*eVfIc7sEU-7TBaeKqZNr4!7f#?kh z6vuLfQme#lx=?LNAMCA5hG4BMv`RlU5%}QHG?Hw4QyE5zi_ZouI?X4=&}J&C+UJ#H zgtyQ?7C8*th9siUd)DLdP*qXtx8V*eDzB~hQhyApdln76VsrUj;eM1e!E^6wedL$B z6I0m<54B$ZM(dldc}vJ}9!Ig0j*e}%~0GQ4PZvwf|8yopZYn}y!k zeMIVtZvU?Ndm98W1#W;Cya02b0yeN4%^#!q7fp4P62eKYp~O>(3j|!)R5Q7rJG+K_ ztD1zir%l~z`>G)fb`d{iU(qDA*An9=bHBk73?-d<H z(im+}@X;uIKvA#4dfj~)H-Oh~|Ej#b23+MziQ_q<%PM89FsnE`%8n}CUzY>FxTXlo zy0k4Ma0L1Z1J2_VrVSM;DievnOB;vH+8ywb$~&@HJ^JU{0dY5nV#S7X)(|+Z`8|N% z+8EbsG|vmOd3C}NeOsLb7*9HgzB8#$m>%M&8*v$B%L+TsyHC-IZZta{Q#wdS)A#8h z4-2eR6T0$Ed8?!zQz`T%;pwa=b9$O^ky%HN5)MgImDg+`--wNa$&~0>;(oo8BI1zA=~3 zG$g^9drNeVV-g;+2CF{&>b?YK{X|T$zFU^}T7nPO*z-uDEzfZ8_$F{Zbf4H7hEtrM zFTn3Fd@GqZ25LVwxJ6<{D-H@`9fLP(Qc&AwsUOy@Y1Mm$;nSP3 zLZtaomy5p$5%OpE^yivu8*7H~ZHRBZ&XRs7X<%;maJC=R3Ek z%&$t0ljha`r5)oY}{?w8cMqytHkBpL&+FodWxzXVt7X#w8dVNtjtE#T8o+s`j zEAHST9su6I(c@10wrxFP?aS$rZFj$Y3tA?z{1%#5^&vf0Fv&3)QTC019_YMA_UH~9 z!dW$VLy9tOsnSxc+uwEY_49X^z#igMw8*Xs?Gd|vQxe7 zI%Hb2_3xO`F>N`3V6N2$n_|{cQeJzLBl=9hihU~bs^-Ichy)L;Dmd?kag*Sj0hV%E z;*SwnN~0mU_-EtEyTIWgVMq8wbgQp!28D*kUlPJ1I!@k81AF#I|H}U!%1OUQo<)=3 zNUmfex0t$VyRl(A(yV#C^=t~8DmZ*H%PvR7{KNH@Gw_m2QpS9aHKnse3R)KfcrB|YF_fw&QGdJPVb%0bFolgDXG ze74nfsZS*JRmuCw(uGhysDot4KXnSE*iFr-j@a32Ggdl0p>#KqQOO>hqEUS${$~v} zx8FPMScUWs!`pTL&*2g11FOj#*_;^3PI=pXdBs35VCmt77aJO}DMnS?4~p*T(xLE~+ko%}f*FQhBHqlp?t)ijcBqiI@ID z)Nk{UC>Q|yE2V9-yS#jiL9Qm=-!KSUi~Uq_prBYEALmn)-p2S5T|0fhJod-cyrsJK z-$XD_dM;CN+|bkP`-JI7p+w6??*_CWH6RA4@NjYeHb*nen8MZms*oJxbY*%>_S5#j ze?X`5x2qHkiz7A}B0Ot5HNOHTS~K-NX+5b#5uAcr=2Ba4J_oe(vMC-f^Vp0GPJNYm z3?|I-Sn|j0y0)0HUG7=K_>r}+anc43!`DUc zXwC&wo-cG%mZay>TtHIBAb2AR;j}a$aU~OJ5)(7CzkEC%*vL?lBW{TV{3TGhVTdB| zC8{JQUKBtfpy6n72$&Vf-%a1A1bdmW9Y?3pRWqm~c!f*4yM5TiW0W!R8sWuRnd0!4 z@MilT?5sR*Qij#V(Co+ZYRjAgrIf}>`MZouA`)wxCBsneu?YXD-mQRD5bgyXvOjmV zYe-WOUQ~&JA_-aaPV)pd_GMrXQuns^GuS6Ph5_?GxD>!f_QeDRIlM$mMNJNXWHri{ ze$zgdHkkBZyNio9ALGaDcMIySoc9W)g#mXH7wNrDp@=~aGZ>D5zWQ#rof(onr(uuW zZd@qn)Xb1fDVa~vBsn(rjNKVpXdeHHt^*tH0k0| zHqI|(Mva{p?cTqRp-fJ8SSM;I1nHbH(U@#S)DEpLh3mrh%y-GV4M4!Mk~ktjdOamy z*ubgvy-~C_tl!;7G#RRN!42K+ZXb^46>nZ%*YchkV>~nRpUOqq=ZXNb)bwq=8QVhs zLbM>HdaDYk7K_6mrD{T58#q9SKJ_?ITXC(Ulo9yuQw?M<|3)u4=QX0Q`BGU@cS8d%TSv-lItNdX+vlkXgjLVQ zgK8_G*5_Lk+aiF1j69LLmzmGwHp>aMm#RD0-NCsl3iN+(cvLLE) zn)bwzlLa{En~%y_{z7omm0Lt?<7f16Eqsas!~T8pmzC+=d57b6Z1J7FY1t096EANM zB>U>PwlV`}mU1WAFb9gNkS|= zT0`nF$pgAa`qAQBc996W;_}$=EExT4Sb+VqUaBQEqvPNq&cI3R$6o}* z-uk6VqIr}9`-in-X%CW`NWYCH+{@+;obex4d%l1ifW&g!)HIJaWr5X6dnQxUGL^w4 zAv5vI(Hl|Vq_>g*bHlbwFW3Q%y-=1m3063)jAl09fD&|FxojCnZpuqP{!oXcw|HX# zaaERf)UuoUA3rsIX<=b89P?S`(iaLoRfV_q(wK)14Ua@@V%gOVYi>`Uh6v54)_`t{++L z>-QsO5Qv*WThwnefbUC3Bm$YID*=kb-h{HEc}qVEFq z^GjCMG2*}&pgFe=O&NjM&ee$%%5T7TUp3JU1@7yVz`qb0+nrAlx{hRo(qK}W9?xC{ zwOSAqeL_;bwWD%|_@f1Q-G!#ID_F75f~BX7+@l!XHhN9NHVA|9nSPwv7==->oC*$X zVYT-0-KA1*eanY((!%o`F}PqbS_5O}&(D;QC5Ew^r$0$h@sCYs8<|7aTxhBbJgKO8 zGMdx4@w@W;N1YS*ndOxgmFWgDED1$Uyy8L4q#w=^;5tM|S_718P0oJZ9E$rPLOv)H zG6)Emfs0F2O|D=d)PRHL6{`)-$RSS5?`H7C${MV7^3Eb851Y(#Yp_BN& zqxL7yyU}8s8;0>~Vyt<16IL5_doAX{ufG1kTpFFo#mvl?uxYw8xBga?nt0ZVe26>- zU}vBEN{0G%XX_+^oH(Ho*^*#Z6(3O4ni%*PkjB}hRpjE7lVeLc zzJzV@`H{DiGkl6Id+IocW5e)nKeo1RKtS;b5fxU2F1v$wY_9?ViZ{y#?M-@X$E$D9 zpT~RWx0&j%p&oou_X0Eh-ib5fJq7PYXy$&FK$~Ip0KZ01`%?Y4rnrfjUC0Xr*+6se zpd%)d`7bx$83>HqN|`KLLAQz=z+cy)urvRq_?mZ|C+>~6kf_=*pQlC(oaht6hxMX9B5+jjj+a$ zY3z>&S4pOLv|=2RN%T|IcM{yBT3?#DiClOM>!&p2Vjl@TD!NF)as6@&P7W3M!vkj9 zi_wVP#wSCgiphB{$if5e2#3A4gf0MG`Um#K>B<%sF`Xz)h6diNniZKxhnW$0BAq}X zLSl3fI4=OPrgFvhUOB|#4b*+-eZn6SUwBpsN_J7XF8);ii_J#i5p(8p$%hSOkqRof zTM!s!m|Wil)t*`<%tyny#USJ%RhBMcOiQgUWwA`AY}ajs-C??-@#2o zMt~6^Pp>ehBE2=YIRWGcH^4cP;l^W-WmHCF5)a%pJbwW};+J8b5NbMPe50l{sZmifo+*cIeT1j$=$=4r)^4x!yBa)tBWjlSUiegMq z637dRJGsv-QqN2{1Lbk1{#nL`IF}^>>7tdPbDx53mGvwJA-k(_c1U)=`?%*X6NxZD zj!~9R7Trcy)Ob-KGom`jD$A_6f?5&=YWHo&E2NbbCQsq11| zEPc0>U1_A~bsh&i@1Lam4_%bH=YXcX6lf#Ek!i%!k@%||3w`=)5hl*=FqTd#$> z?TpOXyvA(Jxs2BMBFp?>=eOK>DOJz>x4HIdd^<>uSy2Ib02`NziBkbdQl7dW`tNMu zRI8rSH;J#fdMS74JBRC+psi^xu{k-3u+^nZ+rFEP-CZYb%*3`!${bmm?T4=Q;AvRGa;1R2tb5GUF-rl@;?al!*^0a7qQa)uG5w zM|Vei669Y^Lc0uIDuCzi&?U5jaW94;Hwz?PIhCEaJ7Q?Q%>H6=p{SA$i)Ea0@~5 zqZf7eimQ)nZ};sM46aakWnk%SZsZ!frnOfknh2!ZD%?hCbL%{Ys6+{-4|0l@Wn|Bg zLe0CIx6V++W=O;c$|(+nEA;V{u;Xr%RoJzs4O}R#cP`?b4Dy~X(SXOyJp3}&&^rY$ z-)tBXA;Q~-I4yp(qR>w*xs+SFAZQO%FSsV(1e3eZEI(GKCd_7s9Zn$F z1ScHM7`bRocpS}w&)Y7z;4e_UL=pw+HaA$8*E=U2VeV!<;9+O;6RMytxP{WO)m8Cj zo<~Z`9HBP2S2d067Zjj#Ukn0b&S#H~5cLdQ6T0N7W7=^+cbl&pju@G&5%A}qm+BJ1 zkXjEtMzJsW)Sfx8h2C1DPf#Us+-afU3*s&yl_(gUg{73aiI3^CPEt1ZvVG1_D0IA3 zFP!1zbAt=r+^@i=ERSTb+mI1ZzZmI3Y|q53U66j1)+%cG+`LEYf2iJA9e(KCbbbJG zi3v`Bl=lJ$VNS$*eQ~*1)9e^jTeyn@cr*moO8gWQg@9uWOvIM%o8y-BzZdjGDw=dw zqq9J7TJ4%qBT@U(sNu}sdn%xW8?{@f)n|cba=!MfV@c)4@5}J7+U~)~8j_!tgO-(* z1t^D**v17zw3Q(lq^M^mi*Cp=n$8D@2d7?G>K>tA*e7mOlulfOhb;`jH@_KQ+zQr%lA1be?-4 zGL}3_qMQW#D#N|?ON9E|)MGpRkPL9Mq1|2p0-AMcq?h+QuRn>LNbM@&EUWeH8}m2) zu~N5@$IrUE9L;8*l8+XM7k(q1Mc6)d>tv}+(ndRuED1&CRUM&)0aTLf2JkS7*gB?= z%>8Laj&xSIR8*DN8#_~w;cr(9+$Rj3dW?)ptn&y6p~qbjF$znt{**M%Lhn2CE`2|> z1j^ylvOq6cNA78jvmON;!(x^!#vA;Jc>ocZ#x2{|vG0aeeZxBIcikkJ`7keEgQF$O^;kpgty8b3_uPf9R8`voBwEB2LjWpDL&E4R zr?0kPlV%WIinWgy%N) z=QH_spy166mV}auLHIZkfH~8WlB~+Gja~p6VdoJ33FPZm>1I?*(D7zwlC7o}*+)l? zRM?+UL`OQ?ZEruid7pdwC{VISgB3WBUnLVmkw2C6hOtQ=-1$2w0V>{wRclDxax3NfL`CX&OARYt%!!L&+&zrRpnx$igoK^@KhFWo=7u8ITHzIx==!#; zGt>+4Hu{J0r}ta|NdK6dIPvvK8ul|MfaBf(pr?o(MG z@vKa0iS!kJH)MK3!RfmQ6*Wld6Wc?j1o5v!$jMqJ!)Nw~;o7zE_HdlP$((-T)ZDX- z%JzZNRUEE-v~(S|Uf)0RmAP-reZgd;_@UHU%L*7w{4wZg@j+O9@0UrNtlyCThgdm& z6|V|MDEL@_m$&>l{od=ty!H=1s!kGU9eh$Qwf#s_y=8fAw@4Exk|CWBn)3;*?9Tb-N>;^`zU-dEUwPT$%w_ ze9Zo_cPNHXLo{UziZb4|d$B=!cu)H^4K%{DV!tfh_Ea^B%}2XErw9qCs8pBb(oQ&r zjmwW{0{!HSScVf$|F#D5TrroUn4diA6BVsN*a1XkCQ&F$e6Yy;dCIzvYeE-28Xg|8;!Jh{_~`1@$k=ud zi)#MI>#*Zdf2clb{XboOWmH>T6E093+Tva)?oiyJNN@`f+}(n^l$PR7(BSUwTHM`T zin|ppl-~6H?vK0fTFJ^GhisjBX3p%rpSgJNG{0;4OvxLPw4KXW^T2xL2|Z@R(lUY5 zK$f33QPG`excO!S8PgiLnm{`lfw#9GN;HHOd!^j3Qw@&q*r?N(Qmy;h?fUjff{+5s z`*R9P?A6vS3EO&{PBQFYKaXF>3L2zt;k2Gnz|Cgx;r7ei7w_bYY?OyP%eS5A99Cq` zimrORhsz-d{z1Xmmqu?10)}+X9N{$}b;?Z(bi~4y*o^<;qUu^A?wHej27derGw1^L--+b~v}YyOh)0(XJ2JLL z<~>ZhZ*nOkUoyJ|97=P%4rnRh%T91%$St3N)ak=Fgw|&3+^Rh%$@`72;ya=v@N?P= z&N{<(Bt5?FxXn{*k`MAMtrZ|gXmuH%zG>|o0V+R^*zvtX5}EXJ-8`3T)mWX2zKik& zH6-+y7Vct{a=;l87H>CUxccIM;Yh%WW+KO-EC=a4UVeLu1#q1jx1C`58=2 zk|qYq2k`Iar~1*L&QAWM9Qj$I%`BXiBdA0D_AOk-t{YR1yCL0$cd|cfbjYh~GSNK= zIfbPMlvJw($$9GT`VQgiE9m_q-)c#$w3yD1-u%bhQ~dtzFYH=AVbSxI`m1&X8rv0N zfRbocmqR$6X&1Ja^*D|{nj*RH8A8n_dA!|%mZjk@fr|((v=fc?Wm zpY`_LoyR^ta^iCJ-a{UE&iM#eOtdorAVs$#=r1M8dPLT7mF1F0%fRnAJbp4l6auli zp@8xi!`i2l)1wu+kkL=8{2im#aG0WXki539`&Gr`Q?rA$KEqbMml!?c+qg)nD5Fk- zSc@3dG}hsogM$#f#BrCj#0CiNvg>k%AU1AP@j*j{yt3mv5i98u@vIUa%`6YS_dJ0; zf6T%-GX`LWm3j3TCbq7Q{Gh+6a{$8clr)I%%W)aXn+VEVvP>mMr z&s;hU9(v$T1bp?gYX-KNZYUbRMFAKu>lJ@XLTHjT6n`v&lSoG^gES;BjZ%TzRQOy2 zQ{KkHxG~d(?^)S=>rd2c)--S@Cx`WF-P&3~vjnn>eLzaWC9ZGHFfy!9mXBJb2!Q1| zSa=dNH6PYLduv`(?-H~wQGg6Z)IBZ`CzIAZ8}4x7;luqX@N3_?X(9|q-7ZsLc(9qa zOL{F>qWADNqkGnkEefY7!X{sYE~If)_Y*!5x%}GYM64~TSdUp9krUGhk^O-LEGWoi z?{((sOP3G%11Kzy_*kBhR?*LxYYAn?NEBZA*cfZ=5O~jrR#9+kA!a5ayy=a?Dfz}< z2tQaIJ#=so@Gg2&A&DH5{7heknpFigK9CNsCW7ea19}}_i>S>_XD7gUyGdxLJ9oB> z9kv4$_$~+rO%d#obw z$8a9C4c?wzU2O~L=7y=y4ZpVQ=*X@Wb4T7J;>u9+iXTHhI>4wL+>I83&S}Wo%71a` zS#3Cr-Tro6!}z0~Zs(>K|Rx0`l0X(fH$G<69o=S+u%2ILZq!``Woy@Y2kBQzkY-`76!We zv6%&_Yu5zIof2yF-sZ#7cT#Y?mTKoCrh+8R7h)p+(4wG`>%*4AD4p%rKgEr?dC!>L zHcI#q7CSAC57)@|mhaX5FPyW!=O5o!xV*?&HfXDi(XbYFKHPspIRsWS43ZeEgdc{fC zN|8&`1y+VOl2KR1Pz3Iv8&MB`h#8+SVBsaJ6^$boQ7-H;4bR9PH z^9u;1CL1WQXl3%we)1jtbLp%JZL}Y_1>GA+T`%fxC*I2$^3%m2!-g)J>a0_ zr7Q_*@=U?z zjbm9!ANg2oguD%kn%}!qTQ@0Y7jC*6;k;8i*}Qls%9kJIC%v9oA{Khr0lWH=$lmGn zxy1T3Gmirjud{#Qwt=xb%1eA<`bzLw=$0|X3Fq4QB2abuT+OSxCOM3($@mYZOX{N+ zrk{sLd}UH`?O<7=+0*DH00Q95oiayCyL2b+31i;NHov;Y{x-hIBe)v%MRdy-?$3eX znfWqkPFY1Pje|9cYEkK^EseAAGzBv1dYK@UiO7(O(59B!6sp|wDQSY0jigkYz9>HG z1G9TDKqXt~(BkLE1_PzCTVTf(dIG3&T&s3? z;Hp@{gbc&PWkW`&LCEm;Wmr< zcBoM`E9gtTNW=#!m^Y-a5-_lO33SMhIZdmBCb#+d6a|}me{h@rj;s4!W;kQ|rzu;e zEIeD-KGWx;J68o2I}qM4;gxQI&W=X4HadfEyz-&8G^U3q#D|~wJsIfjyVoT6Q1*mb zA0>$l@joEbD$w-8TNi{ohvJU)H`aEg9oXa`0w`kkZZzhbKJd95(mAu?d|QWtgu<=i zH;&_Q&VG?i!Yr3!MaKu6+NT0vO~cQrH-v)9Cum~^u$?eCzNWt1jJK6SI=)%t zsFa!}xjCiVEZ(R&X%RjQ2I>P`lTpmya@;^kw11q7z0dC!9Qu~D7ouq;*9G-g^y!Ou zLVRHJj~=O+br?XS^z9mhIE`NiJ7HFA!UR7GOKa#@Q{;5i-1SXfEfPuh^6;2l@Ranr zTUU9i=)yj^s*3a`Y2s?AR5u#Zg-}-i{Q#TQk+Nf>DF?C&#)_rLUgVaAIubxhQRORt z|KTd%yYdh6U{T}6P-Kd?^ED~5I{qO)iH5(eR8ZT&D8iZ0zN&vh`5;GM4odpn65aMq z!|X=(wS>C;42e@rqNUIXp@S-J7&LZf-4fh9lnwHLf*{rd$3FFLPmK`nkcR zw_T+~ft6iO(FwHU!}O_o#UIi&qyF(JA0^AGLZmEoXZJ2Of0i2NSF~N-IhN#y18}@% zlru{|GgF02m9L(VvO*R7=q7a!;;ACNs7VtQ}oe;d!ADPAP+KX=?A zq!^>ow%`bh^ZpAb$!D8i>BfbDk_F|&%yMR88Zm>9>N_0ul~t)Ii4(|+J`;`idbPP3 zxk#^{6PP-%3x>@ibNTYuGMaxrH6HUc(EZ5j(hxtbHT3(#q~Xy9pnqBt1L6g z@v?NbT-(`jH0|Aw_;e^Hy5EH9{AZhfaS(n46XGSkFYXE;7Ry6TPx0h2%jZSW7qZ!S zp;cY#yyA&2DYcHwnvkU$`I8Eg~fXSVB?_LTs5+4w-AKMP>@Z?s5^S<+I4|8g->c)wDA% ze&0kjETtt>8H+W@>iwX%XU;80S<@Y<(S<$-MWo80GMW3Y6?c-Q!HP^UW+m$Gat*%H z)2tE-fi0Kf3aTBu2U1F{_XWXH^fm}MHD}xPd=1oESk8ziSY<&kSD7@Ne2lKL472V7 zl(q--e;AmuQu}Wn+V*bdf3=FDxL;fSTvmwH0d^n1UBv_gC6))j8*Zf--yLRQ0z$0W z^yX{51WG$J!qN?l;ya?eZOtcvpw@JJa;mGJWkvn@9w&T#p9tz8NujERxyVPrxA?-? zgVXiBgN)9o)F0%F2_0GqQRbo7B zm*&%UU&eU1cfa?=*%-Yve9B%zH^!p~BHvW@nSh|z=|Ese6(im3N1;{p?L~@xdtgm7uP(A6ABrJm z^YT}L%IdV*ID_wt7>>%9KbhZwg@IBZ?X(q;ze^A>Yn~{I%73FY87oRzkh+NpAFUeuycDXlBES0_xSM^N?5_=Mx^xWF_J1n!8CU!z zOr|MPg`so8X#Q4Bsp@#D%{L*V9-n$dg_gg3D~@@^vhCfIhbk~S)Fa3^>ZLoHMdqNI z)(S{TLU);wFSER7y>*O4R2uy)pAp`5f!b@eqX^hR>uqJPjH)@bNG95EYs41E_X3cC zL*Wh;>bgOf`2|vP>7&7!eUH@dWRu}eUy5Lh{*r6J9ZYTvh$v1vg9qro)|HnRnA;z$ zi_`KEm6}zJ(ZN^?P7{MK5;pDcF+Axt`cRlLT27D!Ria$;ck3iJ~`^5tZduA z!4+9T!a5<>!hGEpv^gVNduEwHP-xC-saQSXjno_azQEea?OGVN{%Z2vz!;Jxs5vmz z)Hh?J?#dZW*X(6lXu&F?UynBOzQ)1Q76D?-Gs4!qInsz7b_11b%FnHH-H9Wc%k*r= zi~npDd_5_{7XbBNv__0(ixbFqA}&iA*?%`e>1YA1LqQ+T{0Q+L7n95!QLiD05hewJ!E(UW4qiW{Jzx7b<)3bB`=bMLsLxy-Pk~mkh|NU&d7*BGI-;*^-|RXhw>_6V1-bFo?{G`6a)A8!TcFTN0D3n zooXOFa+$S$>KGr0N_oJRxnuYF<#8*#EAFUm&xn(^`t_cWaFPw3;?ex0Hp9j4%V_)%`$uIXQ$!RbZY2*&t^$;g-V*w(4Kc`~kP=o-NRNq| zIw%3*t@!s>%y_3YSB!F>^7?Yo40d-IfUro!5%fWcQtw873jJl(x@$< zB;t`;oeK@!nxYk30Z%4&{u>nLd;BtTczq*}ioUud^6nq|JD;Bknp&tYGd)ef zZ4ELZ3^+D87F%TX#U}n3DBD*6q6&>2zSA4)ySLP8V6&>;F<00_TJ*Yar*AWoO9=Pp=xewTLb&tRY83)ZL3UIpz!4Tr zA9H@q%hM<1gXIa{A%Qf$ff(rz@%M?F8E*nvc=s@YwcIX*0X^T0C2#WZrn70839P{; zsKxJoNT2M>C}ad`Xq+3X$u2UK?3XU=^r#xwIGjcB%>iq^wSf57h@Hy#Bb|myZKHvl z?fwbw^Z8@*`K^cu2*VdktZ^T@W0WMG3D$x{3_pjXTI?T{$0*!D0)KRtpD|7%rE#YR z2Oy%*Zh#jZhOlBf3-bEytG4jugp&yETylSk&H+ybl}{t3YoCV7U}=Oz~Q4%zM)XtD$0_=h>2@dkbFYFF4{h&s51pO+q=A*RD!Oek zGxWmn%>$J$sd2a@*uY%&Hm=!rE~V1|!J91*r4vCgOzRRugxeLfz40QKQ6| zyPxGFBGRB~E8YeypZD!RUw9WALgLD>+haQjIFy;T8`&-FF*Wfsj=ylV5?Kb0s*|Um z^54`2$eV}+2lHmnmKgtqgI5U@_e&Vq@JQ4>T1AXC+gM7l$UsWP(r{{KIHapTFTq~- z)#5-~%K8iUyX!$Yl#)hviK}elW2Ml{Xr7rNn%mcRxk;#bLc?NXFmOCDIZ3~yc+U4- zb9X%|`RdxuHayqLFo1GAv>v5;KDG723=J)FT(6Tx$->VgIeboB@eb5uPIH`@rdkm! z5Zl*Gus?h$v1-n~{~DIa9nZcwt+mSb<0@?ac9@(2{H^~;vM*&y1P>7;oQh4 zyiZK|>GQmin?Y5SwN3^l0Sn^!w1f_sJB&Eg8mrVp#-ROpJ^)hw3T4aYFaJ2dXq&c> zBoZNRzWWyr*;_%j9-h{uPSKEU3@LF0hu@Cu<`D6WGiyjSs-Yoae;A!;fIp^>0d!Xt zcNng*>r$U{M@P?<;nI;Wv?oG63RG5I8pBjFwnMdPX_3T@-*mHAtYUL|8x902ZtKIf zssrZ%<*Tggn#N1o(dslGD6RCGM(X10jdn=1lHX=K?+_+^zRWheuV(xjU@yAUQJ3Q2 z-{q`SRw&4;xXH>`hvNNhs3%wu?Z7O^SyqmOth8nv_0S}ZV=YOJh66%w$hwro+ZI2` z%84bT7kJaAT)LDrhg}e!1jO-CrpaW%)u%XUlH8tuK=o1QIsb4b1EUTQbfA>^Z49g~ z7)MPcKUb~#HbG4GWhY(jU3c~sKCOaTjhCxqvpD+jNR4@DFK0TV$BaDuxe4l6Mu_ZC zgM)zuOKlBgvE$R*iMYz}H9|bQZPJ71_pomu{4{48i;3FsR{yo! zFM2z4$h%Nxy@lyL<|blXtf)hYFbQ{oUG5POiS&c95pF9d+LemjOzx6FlYhNIhfGa@ zPY9mnmwv&3(R_CdBXvV#pwl6_;klgtwEn8S%{SD!Y8`DPjbht>dM{EvJUxfI0G}3nzKCj)A+Qw=`Q_5KXYyNx~LOc z5qc>PX*8zIBlcKyOSnGgB?t#45h+jOWM!~KjJb!XLO;_m*>ma6{jC*Cx z{1WQCYUI*LL`om**k!TuDbR6KS4#BfbrRz$zG8QqiHy>f^CS5kzA-gSrniDijN~jLl$&TEPgc}ND9QuQY1`K!7mp(N?TebfozebYLDC%()#lx*q=?R^^QrO{)kv^!9}zhz ztY<=5cDck1N6xISjQ8kmvhj2#m0$QQlcbY;RCEuZNA`A8ah1MZ>Q@U8Hnr${!hxD7 z($uvo833iSp;M(vjVJw^Kqn<$MW!sz!Jnojr{BN6Q?IRSI;qMoP{930T1*w#dmJ_Q z28>V?#7P?sa+n74xfDC}AkhSMoP;yhq?GCNnY9%a3=^2(fcpQ;0*I2pbJiz>5W8C#n~nA6Q3+7vHBiEr^th(76WNg zvLt{et!Tt0)lJe|c5K8PscU=i^CAncN9f*I|0N2+%XT0 z1sN;+BnapGm>&Ls;?Dt`wK|Yv*xPBUCi?A8Z*C&_SI%< zP9!22mhtM4&&p2f0?U~lp1Di1jq$4ub{i&kO?(SA<^`Q zl43T}}^*Qt&lnw6%_v6Vi-Rn#z56ij82goK~#7l6KeBC!|OIqNl zf6%CF?cAz7!ZZJ_;6AfRnXsLWey1=OdsDQ=zmsgNsfyIy{UsY#^Z6cbF;%eE&MUAra3A-0ZI@#U$E#% zgX9ySpKy5E=6FatO$VD-t}%U~RXraAmiT5UR1|nK3xy0wGWRX8`i-wK#S)aV)?&wR zgABwWdxHa-r0u$-U;1GW=Av)S3B}zNxYn5= z7j*Q6kzXd*^>5+aP2_4RS$WeH&RJ-G+f~mfExQ6H zhLg;L^`jLcq~Zz$BJ%k-THkS+Gm5ZI%QmZ>q%{wxL23<2l}(+-Zb@2+!hOtx#!~)} zLZr(1dR#KH5iJ6ywYCEtq^eD4aTGOFbIoi_fq1xhI4rPE-mv1<)039x!7_9i>cz{w zyhU4Gt*DqZZG%l*7wJvwEQ48Ot%=)Y5T!_1|9$lN>{!loT zul`+Ev3lR%xDb3Ew>*4LHdZ9F3Mk%m0q(6I?g(vFl^O69{a!Y=df2RddrsztZNjdu zMRh(m`v-5S6W=WjYX;@ia$cS)ow3}LEYX`*?+9GS<-9weH28{5=w4u9BJ@C?H{-KP z_2<2mlbTjM&}~*qV8-oB)2-}kl|wUl>d2vM=1189{k~mlc9s~!%d{A)SiPU<*w7iU z>x~jK)p+FUopP_|`EZH^J75`7k2}k@7hK6WC=4mZ(Ba(0t)Dd@iad2bHtp3i&;2q6 z^}KPBo(0nh07NS9_^Q}k>|>{o#b4e9i{+Zw410MEfE8b%FS0K@S~$E~MpTKr_$^Vp ztXSE$=1J34vBNXOMReJvZ}km`hVyjwe}t#thck=NggGxK)KRs0kjjGVUu`hC3z`*j zRj7Ntdy6$;+&EllDn2D^<{r>P-Nqin+E8Byg$SE zCR-vuDBYwM5}aklpi8KQvh9>*D|1J^KJyqeY0R&Zxcd90uPpNI`)wmbdxb#P>e>y3xKs^q1bkg5;jWj>; z*3B|&XyhEy0Ed8;tW~@pkboO*rdt5twzz8ITLW%qwY@d|$A~8{%~K6Vb=6y_GGrd#3U23U zU1#V_Tv$Q>3zsD{K52l%+46jOGG1tlZ1iCvF2Rs?V?;eDsBCVxjM9+vuqc|*#oqZ8 zS-NS-2CbC28f3cXb8;r1Gy#dERNFwjbCGrJvJq3NxL`B_RAg=huLbK!MawEZN1RKi zr#%8>+DcO_YAe4-B|H#!7zj?LKXRVf0zG*bi?=U=qnwZV;|FE}c&RlrS|D@0N%?pd zz>dqp`Q(IwxscPXTm?%;L#90^9-Bg*?y~Y#1Man!APxMKvXWsT5f<&5$rN0{WV@_A ze@#BUcoBMLDvqZaPYw{7wQOixZg9*fNAnDH-kpQf@od?1De{aH$dph*hi-1Clw>x z$;1@DN$MOp9PT+uS@g{p&H@aAQ<5kb#;nH0Uf(5yXnWE|6mVHPD4sf+lG%bX_RU~R z5J5VARHc&-oNbM^8n((urOKHkoPO>2T|@ZyYn;pWz5R*v-b|V5viq4kbR55hw2GMGqYQ z+1+>#hH&ll)769qJ?72@ov$&gs1y4>$(&x#=^S-y5&)jIQYBq9yA1hh+0lHT0js8r z)a2hIcnf)^`+ttR3SgtK$vibBmISgpsp(@i$L*V@H@Yez0wc4Jp*?t!%$dkyR1B2|ymSC}g6hWD z8@{BR_@p6si=zpPwsy|2)pSc6W+3PAMU~R(+obIKzi_9Y zIM&2H=}#fllnSyp+>(&~SJ+3T^LxmdU!oRGhYsQV6NxBtXTSW|x-5`NMr(D#!dCMW z_J$6=;WDqvhHB3c7!}&zc}y(qfBu`JZp#2B2%jfu&t*q;y_-xenxddu5zY*(4SDSe zcXdOE=ISSdl4EkYY#r&^c|$19;*dy&ayo^9xX5+ziS{Gu18PNQpDxusZp%OE?&VC~ ztc`*R)yHNKBWsQ91g+2b$nLqLPCKB^(On(wLxZUm&cpIZ{+azatt}>`(`)FMifOD> zOp^V`)PnGW_&qBVo9wT=Jr}v}7T_1=bs zQCT8-T#UNkf?`gFe-f=YRE$^g=2tQ4S&t+xo)pqr(^x_}EiHhJh?b6PM1Sf6x1s|c z+Qk5oXx4+;xd)snPu!3_psnPQ!--sb-8s&u7tSv%LDE?}WDk>skrtQlfK%anX;&!QH4j)qaFDhcNqhR{eBLgPNC%ZJn<{bFZ zp5pN(_}KPfHliUMuWPJeO({Z)tk7BRW@KI-#;=&&!{|KSCsd>|5MMGx@9K*E+Dktf zt7%l~Fm@CL(-Ww@$F#IFyNk36>3nNM@+zmf{{lKQn7eUe-&T&;+*1=EV-1^5jl4?4 zDD$o^`detiP|8L*j13@4KQnA5V$UgbMlItDa@uT4+^F4inudP(9o^Yj!hSq0Gp#FH zACp%tU|ma%#9Zcps{FzFR#GZVbi%4B-5i#}iN<3lf=kD+p402re%t~E%wz5vv=&va zY^B7)jzX!e;Cwoh#TN;qk@vXx%x!hBWb_ssjdahAKah^{ekhHDGo|BZ6o%tfrsSHc z&0Of&U5^9`ujEQaF{<-4S2Lrylwc#RZh6?z68kV)omGiyZ*3sNzXHysf^4W3HT6(` zfI(uC^t^-RY$JD6n^1YRv?KFkZ9?Db3KWK$7Bd@RlE*mFO!ziR^M3V6M1v7)Lmpi{ zgk_A6)lw-+jNX{VhXpgVmMZb(b)KE^7cKj?HbjQR>I3lxfPH@|Wo0gGyH9h z5SXay+%cM()n@d1*4<2H*lYQPaw)O@BEoK6HZ(cGgP!(QuKdbSOsZ)s@anfn6+^C_ z5bm{UhWfS=A(fa2v$xF$Vt?Ly*Kl7o&X$XcD8;6k1j4plad07?mGpJzF}d@n3<*2GiY+sddaqW&SbI;onY z?#-IK%Hw~nD2h*)zl$p3&9iiTmc!D!PQKJ!KnL)70Hc$}jebCA6VZ zj+z~&v;P;uQ-;7uRib)MH~*xJEo|r?5MHl|6MyfNmFi}FEM`CK)UdWTWq3+ijfgq# zBt|7Xso+e1JxG!n5uC6CZZuzY1MC7h$7qBUwxU2W5VD5K^Ijmn=q(H84rzn`A z(fS{lzlDK$BMcA;IFBx>!i4~Juvzbu0dvDt=q2_sDvK}O|KvN-jM=+t&Vov0Q8~^G z&%8BITu0n!!2WDC^$5-x(&Du~f%z8KbD$6W2F!h{7 z`$8-QMt)x4sWp4oIY?z-FN%g|VPV1{=0mLV(q>AkMlFDoST(?_?9zHk_NRz+FFW#M zI3+ekR?^F@X6++eZq-_y)8xc ztho@HO;y{Z`sJ_EpRLEJZ9g0*vuM}K|jl!&0K7;8{gLhqPi zZ0+x3lY6X{kjm>1%f2jhq>Q#L&~G;5NGjn%OEI-o@QIZ)&nL%JCT}m>9JIJ{%1hu1 zcZ0Fe_-y{Oo%M{-rM#APjm*Tb^UZZIM`v_vH{#j;pDB9C&aF#lqU@L76J*9w9$=^8 z%zh$IT3crv!O5s%g3t@-Z&CX--I(avtY^#CyE5@YK5h)(2>9NX?`d1Wo(UBe6RftQ zI-*GSk9G-1Kaex4(z&+M zM5T%7aX?@`gQ3mPBg|MSblloI%KIhI&;U5ZLL>;1mfn2qyp%6rS8}5n9OUk=MmF&> zf6*}ox=2wCLw?OxCnvLTuIj#)%sIx>w9KJ*W|nQ*;9Jj?Rr0t9*fSW+a`74) zIYhiP34I&}&v9@Vhmz&bfH=B+nIGGZdFPl^9%(tbv`#ciZv~@80l=0YMI=f^3L#(Q z#31SrO1j}2p36C`KYMz(w>0dE!i`A^Zc-fhA1hL88x=*F+^rfR$;(YFeqVxPiqxvn ze^5gr+VO22_tYYPCU}YT zIq6U-eCw)1zqTX{Q5gtt8VrjkOa8;m?va6ZZ{s3B6MgYu-Taw7*3c;ATk?B1XW7Yc2~DOJ%oO z(}9L&Gy5OUkKTi5>&di5vv@f>8yC-w2f3t)Xz47Y=%qBH=E96;= zrPesADL*D1{@EGA&OHDmluVOIGpD_j{Mb45daOxk|6-r-zE4=(hfU`z$a5_TYZfC zWF8xg>5Wiev*`x=R?9QD_n*=v0YZ`{(Yz@2mc6vPKX1{(D$yGLjy;wU4)C zkjsvd_|D6jp>MF_&&Iw|R&;KvVposTQhJL=_I|`cYHkL1JD9J%I=<5CD`saEmtguz~m7RpWa@4Ir?C2KWp`$g5eETn}e8{UjBm{1nxnVIReH`?^5JSi%CR%iLU+4JNQCsb_e5i#$rvLG|NZCY~Bgky|h?&jK%CF1686tmY$qm(`e7ljgWmEUrHW0 zmgVN3mX8Ma$ld&terzob-To}%9*OtN`)$z*tiaN~FyRPLp;!os)c1^Mpl@|V^*xZg z6F$w_O?jLSn3HN@^u&%fuiqHDH~S-Zj+4IC)Rnt%>#ivi3G$V?H{Ho%#7$!*ocFHfRdvIE!ova{zS1ILYk7gL}~jI5bFeD+ZoL5CCItaAcjC zRHG#dJC2_SpoHEXZ=3T|da32cys;Vz(FA0Y6&{b|i^Dee9N8EP5|)idV7nxrl5ZZ= zg%yZh-~WYs|NilqBG`nDMr`N2uz%=<#i+@=E4ZWuLJwBM;9rx$8(2W#Q9o>c&nDy? zna~Sh7K6qG2KL_Y6zXYDd7X{SB?{c+dg_v|M{s5zV+WZHmgFjM-og0#)?dQ16L4>+ zn66ASh{;9@3FPrhEAG(uXXQj@7}Q$71P3-I>H0ZDPtRJ?lA|s>^ZI#E@2k`#Csxw3 z?$`*Q_h4yT=nG$8c};O~Irr>S)5?VzZb- z9?-;Hl~6!rnj{m3XfU7ChG^Dgc!nG~JA0YQ-MBTL;~Rye6(7Vp<5eE27CNE_+$z*8 zLELtES~VAen?kwXuIq{;_{m}C2rmAPNL8n_x-qy)#7&irfDo~rT#;kh>}x*kpXQmF zUakcEaxSsEyJPIx`3S{)y^Mo}VjdAV$zoQKg6zah>rA!&K>XfGy4oU6fLk>;V7d2` zdclcEy!_&)O}(T1m9$@==3tdMCSazhUu36@ckVfY3a5RO_BUtxrCKHV{2oEq!jln< z(U~3d07zM@T=q-Emm@s$Vn!tv^GpERenmoS!cQ9CEWO#ZJN8HYj(J#on#tW;BG4f0 z-ZY~Lz^np|kBI2S!3)R_tjzQ6Gj&QNrwQF^)G5*Q`r2$k8%Fq^huAW*)s$ZUOH2vz zH``jpsy}{-W(%wjZ23e(jA*TL=Akg|liu?2&FFix{N3S(LL0_Q)_CPa#>(Vyj8@v^ zL~5Q8Q2pQ)EkTp%#R|K+#oPd|x=tFw3{%HMvcjz4@EE6gL9G%Y&V;lMn~u*T03Vts zESHe1ciul43AO=dDx+&qs=S`mn2&Ns-DjOPswLX8jyBbWoVw?qFIT3s8|5_Xl!Tun z=+!Nlrm-89vKrUZ1UH~pb6G%c39A=%E5;`on%8xyN#+tYG!J#31@rG22mG>FM5hQS ztis>d_lK_RNS<9&-h0J83(NZdyMgon-KcpM_VUl-{_hu&6!inKD?3AH*VOl3@q#mp zF%9}={azP3ET4b)QB7D{^!1Y`YJM~jo?i@{kW$)tvyohmH{LZgm1UldoUztnQ~`@wcp~}qFB~bmA!W>-U%9MGAvxdCb$~==X!k{z%-(D4 z$RCP?-!Po{qH^?-J@aIgf72zi|0US{zwfk;$_?iANh7IDlULOt3cr~>)V064z#7Xu zYa~*m3L983jtZyGa<#g}Za=ymrwkVDh`0|`m&NG@+n)QB&B>iE<6DgBH z8cQ`9Z#J{1gKJ9o=HvY*o~|`7tkHVhAjDwOXQgcn!=8^f&`@!`dsy2 zpA5THAb|tiu*qT3JWrW2k6`AK5_{&%AK!8z*{x+mREVbHt4&}=fb`6Vjo^9{(xi14 z)G%7N5WhpD-Ky1xO#u>8T3GTl-7h+wiqDL$d6)$RR< zy@_MFAFAPE~^R~^o4W4O_*t13mB6-lKuzXat1KBpMDq%ve z_c>u4YF(??4l7Mrk4ZG`!?FiK{kGJfHu~<>?q-f!a_(@ASei6k11dW}_i)%`d8;i< zZ>s0x%{!G+9Pw6Qhy+GxpOC36o6yko`aT=jk8N;}&$`Gs0=s*?0W(o=ZJ`iH6Wse_ z{O;YFyc+&Ij!_wvv#0jdwF z#Su&Jf7SdO&h+sJjK6Rsf9jsD+8bUfx7|qv3#3&Jb)2a5ZQiL4J49jqB%&T;_QT!- z8>`IHPew*l9!^g^pqc@2Z*1V=tD~yrf1Zp%9(9KmpJ_>ht6LzZs$JfI8G7 z8VZls85WHdM>vj{*CO0q#M{=Zwt5w?t_aKr&4wE^i#*pX*ogYY`zT61&R_(RVFYF) z_xqn!Udcctwv7Z~ViSAxKdFuM5I05Yn~>J7(((C2u3!;i-R=!FucsSZ3ZsF+7v(q< zbl})d!Ls<9Vebe}4OONH3~n$V%T^-uOorml>Z4gij)p(G6&LWs z8rV7hZzQF7^ljdA8I)nb_UBGW47k9C3~$jg<|D{EeR0Av*X3F%@*m284is~`t^;Q8 zeyd%|3`6?y3aG`WI-#W1KC`$LK&^LBiH|l&|u32z#@Y?0NM~L2Tzpg9QYy6V^d;AJDylZ!0a(L6z0uJ@E@9|jl=%H(t%K31Qcj_mpsqh7(;G2aJHo$ zXUWhR>FShG#sDrNnRhhRl!i*lMBWy^R;XZ>NHUz$k<yb zCj6=)907sKg7}WAxrf{>QVzQA7r!g}U?J?pyP3kiv5Z%)=c$(Mn~VX74Ig-fr93ZaZ)Qwi${-3z1z{iIXd; zZ00#$$B8nIka{on4dvG8@5`m{DG1F|HEm&c7MU(ah_=F=FF!r#WY5qPzH;)<)~- zMR!YzmFYZ@*(Y1dTI07c+8^{)Z*Q4zV)@eJmAn12lYXZL#NMB*2&ps z2aP*RKmxXRou2PqsK|W(GvVgKtA>=B{;9Mr&KQ0_k|u>YQ=f1a&Hw9z^_^Xt+7R&BvD$U@XZ!)!$E*=mYvH|6ncdz?TY$xaHAqh8 zrNkq(19~HqfQ)&M^B0cyL(;zKLai_d$GzT7^^LlZ`D7{dS3Y}frurO