From 0a93657548451206be78fcf1229923aafc019ce9 Mon Sep 17 00:00:00 2001 From: Jakob Dalsgaard Date: Thu, 23 Nov 2023 23:16:51 +0100 Subject: [PATCH] Adding codegen tools --- codegen/awd-indicator.py | 43 +++++++++++++++++ codegen/cog-indicator.py | 43 +++++++++++++++++ codegen/compass-rose.py | 61 ++++++++++++++++++++++++ codegen/font.py | 92 ++++++++++++++++++++++++++++++++++++ codegen/hallberg-rassy.py | 98 +++++++++++++++++++++++++++++++++++++++ codegen/matrix.py | 56 ++++++++++++++++++++++ codegen/rowmand.jhf | 96 ++++++++++++++++++++++++++++++++++++++ codegen/rowmans.jhf | 96 ++++++++++++++++++++++++++++++++++++++ codegen/timesr.jhf | 96 ++++++++++++++++++++++++++++++++++++++ 9 files changed, 681 insertions(+) create mode 100644 codegen/awd-indicator.py create mode 100644 codegen/cog-indicator.py create mode 100755 codegen/compass-rose.py create mode 100755 codegen/font.py create mode 100644 codegen/hallberg-rassy.py create mode 100644 codegen/matrix.py create mode 100644 codegen/rowmand.jhf create mode 100644 codegen/rowmans.jhf create mode 100644 codegen/timesr.jhf diff --git a/codegen/awd-indicator.py b/codegen/awd-indicator.py new file mode 100644 index 0000000..5a17203 --- /dev/null +++ b/codegen/awd-indicator.py @@ -0,0 +1,43 @@ +#!/usr/bin/python3 + +import font +from matrix import Vector, Matrix, pi + +try: + import svgwrite + has_svgwrite = True +except ImportError: + has_svgwrite = False + + +gmap = font.glyph_map("rowmans.jhf") + +lines = [[Vector(0.0, 0.5), Vector(0.0, 0.4)]] + +vglyph, width = font.typeset(gmap, ["capa", "capw", "capd"]) +xform = Matrix.rotation(pi/2).multiply(Matrix.scale(0.1/width)) +move = Vector(-width/2, 0) +vglyph = move.translate(vglyph) +vglyph = xform.multiply(vglyph) +vglyph = Vector(0.001, 0.35).translate(vglyph) +lines.extend(vglyph) + +def accumulative_range(vv): + offset = 0 + for v in vv: + yield range(offset, offset+len(v)) + offset = offset + len(v) + +print("val awd_ident_color = Color (0xFF, 0xF7, 0x00)") +print("val awd_ident =") +print(" Design(listOf({}),\n listOf({}))".format( + ",\n ".join(map(lambda l: ", ".join(map(lambda v: "Vector({}F, {}F)".format(v.x, v.y), l)), lines)), + ",\n ".join(map(lambda t: "Design.Trace(listOf({}), 1.0F, awd_ident_color)".format(", ".join(map(str, t))), accumulative_range(lines))))) + + +if has_svgwrite: + dwg = svgwrite.Drawing('awd-indicator.svg', size=('1000', '1000')) + for pl in lines: + points = list(map(lambda v: ((v.x + 0.5) * 1000 , (v.y + 0.5) * 1000 ), pl)) + dwg.add(dwg.polyline(points, fill='none', stroke='black')) + dwg.save() diff --git a/codegen/cog-indicator.py b/codegen/cog-indicator.py new file mode 100644 index 0000000..02ae224 --- /dev/null +++ b/codegen/cog-indicator.py @@ -0,0 +1,43 @@ +#!/usr/bin/python3 + +import font +from matrix import Vector, Matrix, pi + +try: + import svgwrite + has_svgwrite = True +except ImportError: + has_svgwrite = False + + +gmap = font.glyph_map("rowmans.jhf") + +lines = [[Vector(0.0, 0.5), Vector(0.0, 0.4)]] + +vglyph, width = font.typeset(gmap, ["capc", "capo", "capg"]) +xform = Matrix.rotation(pi/2).multiply(Matrix.scale(0.1/width)) +move = Vector(-width/2, 0) +vglyph = move.translate(vglyph) +vglyph = xform.multiply(vglyph) +vglyph = Vector(0.001, 0.35).translate(vglyph) +lines.extend(vglyph) + +def accumulative_range(vv): + offset = 0 + for v in vv: + yield range(offset, offset+len(v)) + offset = offset + len(v) + +print("val cog_ident_color = Color(0x00, 0x00, 0xFF)") +print("val cog_ident =") +print(" Design(listOf({}),\n listOf({}))".format( + ",\n ".join(map(lambda l: ", ".join(map(lambda v: "Vector({}F, {}F)".format(v.x, v.y), l)), lines)), + ",\n ".join(map(lambda t: "Design.Trace(listOf({}), 1.0F, cog_ident_color)".format(", ".join(map(str, t))), accumulative_range(lines))))) + + +if has_svgwrite: + dwg = svgwrite.Drawing('cog-indicator.svg', size=('1000', '1000')) + for pl in lines: + points = list(map(lambda v: ((v.x + 0.5) * 1000 , (v.y + 0.5) * 1000 ), pl)) + dwg.add(dwg.polyline(points, fill='none', stroke='black')) + dwg.save() diff --git a/codegen/compass-rose.py b/codegen/compass-rose.py new file mode 100755 index 0000000..dd9ab96 --- /dev/null +++ b/codegen/compass-rose.py @@ -0,0 +1,61 @@ +#!/usr/bin/python3 + +# application to print out the required code to draw a compass rose +# of size 1 by 1 in quadrant 1 + +import font +from matrix import Vector, Matrix, pi +from math import cos, sin, pi + +major_len=0.3 +middle_len=0.15 +minor_len=0.1 + +print("val compass_rose = ") + +# North +print(" Design(listOf(Vector(0.0F, 0.5F), Vector(0.0F, {}F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Red))) +".format(0.5-(major_len/2))) + +# N +gmap = font.glyph_map("timesr.jhf") +vglyph, width = font.typeset(gmap, ["capn"]) +xform = Matrix.rotation(pi).multiply(Matrix.scale(0.08/width)) +vglyph = Vector(0.0, 0.3).translate(xform.multiply(vglyph)) +print(" {} +".format(font.toKotlin(vglyph, "1.5F", "Color.Red"))) + +# East +print(" Design(listOf(Vector(0.5F, 0.0F), Vector({}F, 0.0F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Gray))) +".format(0.5-(major_len/2))) + +# South +print(" Design(listOf(Vector(0.0F, -0.5F), Vector(0.0F, {}F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Gray))) +".format(-0.5+major_len/2)) + +# West +print(" Design(listOf(Vector(-0.5F, 0.0F), Vector({}F, 0.0F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Gray))) +".format(-0.5+major_len/2)) + +# NE +print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +" + .format(cos(pi/4)/2, sin(pi/4)/2, cos(pi/4)*(1-middle_len)/2, sin(pi/4)*(1-middle_len)/2)) + +# NW +print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +" + .format(cos(pi/4 + pi/2)/2, sin(pi/4 + pi/2)/2, cos(pi/4 + pi/2)*(1-middle_len)/2, sin(pi/4 + pi/2)*(1-middle_len)/2)) + +# SW +print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +" + .format(cos(pi/4 + pi)/2, sin(pi/4 + pi)/2, cos(pi/4 + pi)*(1-middle_len)/2, sin(pi/4 + pi)*(1-middle_len)/2)) + +# SE +print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +" + .format(cos(pi/4 + pi + pi/2)/2, sin(pi/4 + pi + pi/2)/2, cos(pi/4 + pi + pi/2)*(1-middle_len)/2, sin(pi/4 + pi + pi/2)*(1-middle_len)/2)) + +# minor markings are 3 markers within the other markers, 8 sections of 3 markers. +for i in range(0,8): + print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 1.0F, Color.Gray))) +" + .format(cos( i*pi/4 + pi/16 )/2, sin( i*pi/4 + pi/16)/2, cos( i*pi/4 + pi/16 )*(1-minor_len)/2, sin( i*pi/4 + pi/16)*(1-minor_len)/2)) + print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 1.0F, Color.Gray))) +" + .format(cos( i*pi/4 + 2*pi/16 )/2, sin( i*pi/4 + 2*pi/16)/2, cos( i*pi/4 + 2*pi/16 )*(1-minor_len)/2, sin( i*pi/4 + 2*pi/16)*(1-minor_len)/2)) + print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 1.0F, Color.Gray))) +" + .format(cos( i*pi/4 + 3*pi/16 )/2, sin( i*pi/4 + 3*pi/16)/2, cos( i*pi/4 + 3*pi/16 )*(1-minor_len)/2, sin( i*pi/4 + 3*pi/16)*(1-minor_len)/2)) + + +print(" Design(emptyList(), emptyList())") diff --git a/codegen/font.py b/codegen/font.py new file mode 100755 index 0000000..07351df --- /dev/null +++ b/codegen/font.py @@ -0,0 +1,92 @@ +#!/usr/bin/python3 + +import sys +from matrix import Vector + +glyphname = ["space", "exclamation", "hash", "dollar", "percent", "ampersand" + "quotestart", "leftparentes", "rigtparentes", "star", "plus", "comma", + "hyphen", "dot", "slash", "zero", "one", "two", "three", "four", "five", + "six", "seven", "eight", "nine", "colon", "semicolon", "lessthan", + "equals", "biggerthan", "questionmark", "at", "p2", "p3", "capa", "capb", "capc", + "capd", "cape", "capf", "capg", "caph", "capi", "capj", "capk", "capl", + "capm", "capn", "capo", "capp", "capq", "capr", "caps", "capt", "capu", + "capv", "capw", "capx", "capy", "capz", "bracketleft", "backslash", + "bracketright", "uparrow", "underscore", "quoteend", "a", "b", "c", "d", + "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", + "s", "t", "u", "v", "w", "x", "y", "z", "curlystart", "verticalbar", + "curlyend", "tilde", "p1"] + +def char2value (c): + return ord(c) - ord('R') + +def read_hershey (l): + # + # Format is like this: + # ' 700 18H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF' + # ^ ^^ |---- coordinates ---------------| + # | | + # | | + # | Number of coordinates + # Character Identifier - not ASCII + points = list() + ident = int(l[0:5]) + coords = int(l[5:8]) + left = char2value(l[8]) + right = char2value(l[9]) + vdata = l[10:] + for t in vdata.split(" R"): + c = iter(t) + points.append(list()) + for x in c: + y = next(c) + points[-1].append((char2value(x), -char2value(y))) + return (ident, left, right, points) + +def glyph_map (file): + m = dict() + f = open(file, "r") + i = 0 + for line in f: + (ident, left, right, coords) = read_hershey(line.rstrip("\n")) + m[glyphname[i]] = (left, right, coords) + i = i + 1 + return m + +def typeset(glyphmap, idents): + vectors = list() + offset = 0 + for i in idents: + (left, right, coords) = glyphmap[i] + xlate = offset - left + for v in coords: + vectors.append(list(map(lambda c: Vector(c[0]+offset, c[1]), v))) + offset = offset + right - left + return vectors, offset + +# +# lines: array of array of Vector +def toKotlin(lines, stroke, color): + def accumulative_range(vv): + offset = 0 + for v in vv: + yield range(offset, offset+len(v)) + offset = offset + len(v) + + return " Design(listOf({}),\n listOf({}))".format( + ",\n ".join(map(lambda l: ", ".join(map(lambda v: "Vector({}F, {}F)".format(v.x, v.y), l)), lines)), + ",\n ".join(map(lambda t: "Design.Trace(listOf({}), {}, {})".format(", ".join(map(str, t)), stroke, color), accumulative_range(lines)))) + + +def main(): + f = open("rowmand.jhf", "r") + number = 0 + for line in f: + (_, left, right, coords) = read_hershey(line.rstrip('\n')) + coords_text = "listOf(" + ", ".join(map(lambda cv : "listOf(" + ", ".join(map(lambda c : "Vector({}F, {}F)".format(c[0]/10, c[1]/10), cv)), coords)) + ")" + print("val glyph_{} = \n Glyph({}, {}, {})".format(glyphname[number], coords_text, left, right)) + number = number + 1 + + + +if __name__ == "__main__": + main() diff --git a/codegen/hallberg-rassy.py b/codegen/hallberg-rassy.py new file mode 100644 index 0000000..fa4f978 --- /dev/null +++ b/codegen/hallberg-rassy.py @@ -0,0 +1,98 @@ + +from matrix import Vector, Matrix, pi + +hull_length = 559 - 18 +y_xlate = -18 - (559-18)/2 +hull_port_side = [ + Vector(80, 18), + Vector(71, 21), + Vector(60, 27), + Vector(54, 34), + Vector(28, 120), + Vector(14, 180), + Vector(9, 218), + Vector(7, 261), + Vector(8, 288), + Vector(11, 328), + Vector(18, 367), + Vector(29, 414), + Vector(51, 479), + Vector(78, 542), + Vector(85, 559) +] + +hull_port_side = Vector(-86, y_xlate).translate(hull_port_side) +hull_starboard_side = Matrix(-1, 0, 0, 1).multiply(hull_port_side) +hull_starboard_side.reverse() +hull = hull_port_side + hull_starboard_side + +hull_detail_port_side = [ + Vector(54, 34), + Vector(65, 32), + Vector(76, 30) +] +hull_detail_port_side = Vector(-86, y_xlate).translate(hull_detail_port_side) +hull_detail_starboard_side = Matrix(-1, 0, 0, 1).multiply(hull_detail_port_side) +hull_detail_starboard_side.reverse() +hull_detail = hull_detail_port_side + hull_detail_starboard_side + +stick_port_side = [ + Vector(86, 77), + Vector(84, 81), + Vector(85, 85), + Vector(86, 133) +] +stick_port_side = Vector(-86, y_xlate).translate(stick_port_side) +stick_starboard_side = Matrix(-1, 0, 0, 1).multiply(stick_port_side) +stick_starboard_side.reverse() +stick = stick_port_side + stick_starboard_side[1:-1] + +cockpit_port_side = [ + Vector(84, 90), + Vector(59, 89), + Vector(52, 92), + Vector(48, 99), + Vector(44, 113), + Vector(40, 139), + Vector(35, 203) +] +cockpit_port_side = Vector(-86, y_xlate).translate(cockpit_port_side) +cockpit_starboard_side = Matrix(-1, 0, 0, 1).multiply(cockpit_port_side) +cockpit_starboard_side.reverse() +cockpit = cockpit_port_side + cockpit_starboard_side + +doghouse_port_side = [ + Vector(37, 203), + Vector(37, 277), + Vector(40, 317), + Vector(46, 356), + Vector(55, 393), + Vector(66, 431), + Vector(68, 435), + Vector(73, 437), + Vector(80, 438) +] +doghouse_port_side = Vector(-86, y_xlate).translate(doghouse_port_side) +doghouse_starboard_side = Matrix(-1, 0, 0, 1).multiply(doghouse_port_side) +doghouse_starboard_side.reverse() +doghouse = doghouse_port_side + doghouse_starboard_side + +scale = Matrix.scale(0.8/hull_length) + +print("val ship_color=Color(0x80, 0x85, 0x88)") + +ship = scale.multiply(hull + hull_detail + stick + cockpit + doghouse) +hull_trace = list(range(0, len(hull))) + [ 0 ] +hull_detail_trace = list(map(lambda x : x + len(hull), range(0, len(hull_detail)))) +stick_trace = list(map(lambda x: x + len(hull) + len(hull_detail), list(range(0, len(stick))) + [0])) +cockpit_trace = list(map(lambda x: x + len(hull) + len(hull_detail) + len(stick), + list(range(0, len(cockpit))) + [ 0 ])) +doghouse_trace = list(map(lambda x: x + len(hull) + len(hull_detail) + len(stick) + len(cockpit), + list(range(0, len(doghouse))))) +traces = [hull_trace, hull_detail_trace, stick_trace, cockpit_trace, doghouse_trace] + +print("val ship = Design(listOf({}), listOf({}))".format( + ", ".join(map(lambda v: "Vector({}F, {}F)".format(v.x, v.y), ship)), + ",\n ".join(map(lambda t: "Design.Trace(listOf({}), 2.0F, ship_color)".format( + ", ".join(map(str, t))), traces)) + )) diff --git a/codegen/matrix.py b/codegen/matrix.py new file mode 100644 index 0000000..93b056f --- /dev/null +++ b/codegen/matrix.py @@ -0,0 +1,56 @@ +from math import cos, sin, pi + +class Vector: + def __init__ (self, x, y): + self.x = x + self.y = y + + def translate (self, other): + if isinstance (other, list): + return list(map(lambda v: self.translate(v), other)) + if isinstance (other, Vector): + return Vector(self.x + other.x, self.y + other.y) + + def __str__ (self): + return "[ {}; {} ]".format(self.x, self.y) + + def __repr__ (self): + return self.__str__() + +class Matrix: + + @classmethod + def rotation (cls, theta): + return cls(cos(theta), -sin(theta), sin(theta), cos(theta)) + + @classmethod + def scale (cls, s): + return cls(s, 0, 0, s) + + def __init__ (self, a, b, c, d): + self.a = a + self.b = b + self.c = c + self.d = d + + def __str__ (self): + return "[ {} {}; {} {} ]".format(self.a, self.b, self.c, self.d) + + def __repr__ (self): + return self.__str__() + + def multiply (self, other): + if isinstance(other, Matrix): + return Matrix(self.a * other.a + self.b * other.c, + self.a * other.b + self.b * other.d, + self.c * other.a + self.d * other.c, + self.c * other.b + self.d * other.d) + if isinstance (other, float): + return Matrix(other * self.a, other * self.b, other * self.c, other * self.d) + if isinstance (other, Vector): + return Vector(self.a * other.x + self.b * other.y, self.c * other.x + self.d * other.y) + if isinstance (other, list): + return list(map(lambda v: self.multiply(v), other)) + + + diff --git a/codegen/rowmand.jhf b/codegen/rowmand.jhf new file mode 100644 index 0000000..ee550c5 --- /dev/null +++ b/codegen/rowmand.jhf @@ -0,0 +1,96 @@ + 2699 1JZ + 2714 24MXRFRTST RRFSFST RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY + 2728 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM + 2275 12H]SFLb RYFRb RLQZQ RKWYW + 2719 51I\RBR_S_ RRBSBS_ RWIYIWGTFQFNGLILKMMNNVRWSXUXWWYTZQZOYNX RWIVHTGQGNHMIMKNMVQXSYUYWXYWZT[Q[NZLXNX RXXUZ + 2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT + 2718 71F_\MZMXNWPUVTXSYQZMZKYJWJUKSLRQOSMTKTISGQFPFNGMIMKNNPQUWXZZ[\[ R\M\NZNXO RYNXPVVUXSZQ[M[KZJYIWIUJSLQQNRMSKSIRG RSHQGPGNH ROGNINKONQQVWXYZZ\Z\[ + 2717 24MXTHSIRIQHQGRFSFTGTJSLQM RRGRHSHSGRG RSITJ RTHSL + 2721 24KYUBSDQGOKNPNTOYQ]S`UbVb RUBVBTDRGPKOPOTPYR]T`Vb + 2722 24KYNBPDRGTKUPUTTYR]P`NbOb RNBOBQDSGUKVPVTUYS]Q`Ob + 2723 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO + 2725 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R + 2711 24MXTZS[R[QZQYRXSXTYT\S^Q_ RRYRZSZSYRY RS[T\ RTZS^ + 2724 8F_JQ[Q[R RJQJR[R + 2710 16MXRXQYQZR[S[TZTYSXRX RRYRZSZSYRY + 2720 8G^[BIbJb R[B\BJb + 2700 42H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF ROGMJLOLRMWOZ RNYQZSZVY RUZWWXRXOWJUG RVHSGQGNH + 2701 12H\NJPISFS[ RNJNKPJRHR[S[ + 2702 34H\LKLJMHNGPFTFVGWHXJXLWNUQL[ RLKMKMJNHPGTGVHWJWLVNTQK[ RLZYZY[ RK[Y[ + 2703 48H\MFXFQO RMFMGWG RWFPO RQNSNVOXQYTYUXXVZS[P[MZLYKWLW RPOSOVPXS RTOWQXTXUWXTZ RXVVYSZPZMYLW ROZLX + 2704 18H\UIU[V[ RVFV[ RVFKVZV RUILV RLUZUZV + 2705 53H\MFLO RNGMN RMFWFWG RNGWG RMNPMSMVNXPYSYUXXVZS[P[MZLYKWLW RLOMOONSNVOXR RTNWPXSXUWXTZ RXVVYSZPZMYLW ROZLX + 2706 62H\VGWIXIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQ RWHTGRGOH RPGNJMOMTNXQZ RMVOYRZSZVYXV RTZWXXUXTWQTO RXSVPSOROOPMS RQONQMT + 2707 12H\KFYFO[ RKFKGXG RXFN[O[ + 2708 68H\PFMGLILKMMNNPOTPVQWRXTXWWYTZPZMYLWLTMRNQPPTOVNWMXKXIWGTFPF RNGMIMKNMPNTOVPXRYTYWXYWZT[P[MZLYKWKTLRNPPOTNVMWKWIVG RWHTGPGMH RLXOZ RUZXX + 2709 62H\WPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLXMXNZ RWMVPSR RWNUQRRQRNQLN RPRMPLMLLMIPG RLKNHQGRGUHWK RSGVIWMWRVWTZ RUYRZPZMY + 2712 32MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY + 2713 40MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RTZS[R[QZQYRXSXTYT\S^Q_ RRYRZSZSYRY RS[T\ RTZS^ + 2241 4F^ZIJRZ[ + 2726 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V + 2242 4F^JIZRJ[ + 2715 58I\LKLJMHNGQFTFWGXHYJYLXNWOUPRQ RLKMKMJNHQGTGWHXJXLWNUORP RMIPG RUGXI RXMTP RRPRTSTSP RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY + 2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV + 2501 20H\RFJ[ RRIK[J[ RRIY[Z[ RRFZ[ RMUWU RLVXV + 2502 44H\LFL[ RMGMZ RLFTFWGXHYJYMXOWPTQ RMGTGWHXJXMWOTP RMPTPWQXRYTYWXYWZT[L[ RMQTQWRXTXWWYTZMZ + 2503 38H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV RZKYKXIWHUGQGOHMKLNLSMVOYQZUZWYXXYVZV + 2504 32H]LFL[ RMGMZ RLFSFVGXIYKZNZSYVXXVZS[L[ RMGSGVHWIXKYNYSXVWXVYSZMZ + 2505 27I\MFM[ RNGNZ RMFYF RNGYGYF RNPTPTQ RNQTQ RNZYZY[ RM[Y[ + 2506 21I[MFM[ RNGN[M[ RMFYF RNGYGYF RNPTPTQ RNQTQ + 2507 44H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZRUR RZKYKXIWHUGQGOHNIMKLNLSMVNXOYQZUZWYXXYVYSUSUR + 2508 22G]KFK[ RKFLFL[K[ RYFXFX[Y[ RYFY[ RLPXP RLQXQ + 2509 8NWRFR[S[ RRFSFS[ + 2510 20J[VFVVUYSZQZOYNVMV RVFWFWVVYUZS[Q[OZNYMV + 2511 22H]LFL[M[ RLFMFM[ RZFYFMR RZFMS RPOY[Z[ RQOZ[ + 2512 14IZMFM[ RMFNFNZ RNZYZY[ RM[Y[ + 2513 26F^JFJ[ RKKK[J[ RKKR[ RJFRX RZFRX RYKR[ RYKY[Z[ RZFZ[ + 2514 20G]KFK[ RLIL[K[ RLIY[ RKFXX RXFXX RXFYFY[ + 2515 40G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG + 2516 27H\LFL[ RMGM[L[ RLFUFWGXHYJYMXOWPUQMQ RMGUGWHXJXMWOUPMP + 2517 48G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG RSXX]Y] RSXTXY] + 2518 34H\LFL[ RMGM[L[ RLFTFWGXHYJYMXOWPTQMQ RMGTGWHXJXMWOTPMP RRQX[Y[ RSQY[ + 2519 43H\YIWGTFPFMGKIKKLMMNOOTQVRWSXUXXWYTZPZNYMXKX RYIWIVHTGPGMHLILKMMONTPVQXSYUYXWZT[P[MZKX + 2520 15J[RGR[ RSGS[R[ RLFYFYG RLFLGYG + 2521 24G]KFKULXNZQ[S[VZXXYUYF RKFLFLUMXNYQZSZVYWXXUXFYF + 2522 14H\JFR[ RJFKFRX RZFYFRX RZFR[ + 2523 26E_GFM[ RGFHFMX RRFMX RRIM[ RRIW[ RRFWX R]F\FWX R]FW[ + 2524 16H\KFX[Y[ RKFLFY[ RYFXFK[ RYFL[K[ + 2525 17I\KFRPR[S[ RKFLFSP RZFYFRP RZFSPS[ + 2526 20H\XFK[ RYFL[ RKFYF RKFKGXG RLZYZY[ RK[Y[ + 2223 12KYOBOb RPBPb ROBVB RObVb + 804 3KYKFY^ + 2224 12KYTBTb RUBUb RNBUB RNbUb + 2262 11JZPLRITL RMORJWO RRJR[ + 999 3JZJ]Z] + 2716 24MXTFRGQIQLRMSMTLTKSJRJQK RRKRLSLSKRK RRGQK RQIRJ + 2601 36H\WMW[X[ RWMXMX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX + 2602 36H\LFL[M[ RLFMFM[ RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX + 2603 32I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX RXPWQVOTNQNOONPMSMUNXOYQZTZVYWWXX + 2604 36H\WFW[X[ RWFXFX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX + 2605 36I[MTXTXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX RMSWSWQVOTNQNOONPMSMUNXOYQZTZVYWWXX + 2606 24LZWFUFSGRJR[S[ RWFWGUGSH RTGSJS[ ROMVMVN ROMONVN + 2607 48H\XMWMW\V_U`SaQaO`N_L_ RXMX\W_UaSbPbNaL_ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX + 2608 25H\LFL[M[ RLFMFM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[ + 2609 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMR[S[ RRMSMS[ + 2610 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMRbSb RRMSMSb + 2611 22H[LFL[M[ RLFMFM[ RXMWMMW RXMMX RPTV[X[ RQSX[ + 2612 8NWRFR[S[ RRFSFS[ + 2613 42CbGMG[H[ RGMHMH[ RHQKNMMPMRNSQS[ RHQKOMNONQORQR[S[ RSQVNXM[M]N^Q^[ RSQVOXNZN\O]Q][^[ + 2614 25H\LML[M[ RLMMMM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[ + 2615 36I\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM RQNOONPMSMUNXOYQZTZVYWXXUXSWPVOTNQN + 2616 36H\LMLbMb RLMMMMb RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX + 2617 36H\WMWbXb RWMXMXb RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX + 2618 21KYOMO[P[ ROMPMP[ RPSQPSNUMXM RPSQQSOUNXNXM + 2619 50J[XPWNTMQMNNMPNRPSUUWV RVUWWWXVZ RWYTZQZNY ROZNXMX RXPWPVN RWOTNQNNO RONNPOR RNQPRUTWUXWXXWZT[Q[NZMX + 2620 16MXRFR[S[ RRFSFS[ ROMVMVN ROMONVN + 2621 25H\LMLWMZO[R[TZWW RLMMMMWNYPZRZTYWW RWMW[X[ RWMXMX[ + 2622 14JZLMR[ RLMMMRY RXMWMRY RXMR[ + 2623 26F^IMN[ RIMJMNX RRMNX RRPN[ RRPV[ RRMVX R[MZMVX R[MV[ + 2624 16I[LMW[X[ RLMMMX[ RXMWML[ RXMM[L[ + 2625 17JZLMR[ RLMMMRY RXMWMRYNb RXMR[ObNb + 2626 20I[VNL[ RXMNZ RLMXM RLMLNVN RNZXZX[ RL[X[ + 2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb + 2229 3NVRBRb + 2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb + 2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O + 2729 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF diff --git a/codegen/rowmans.jhf b/codegen/rowmans.jhf new file mode 100644 index 0000000..fc9c18b --- /dev/null +++ b/codegen/rowmans.jhf @@ -0,0 +1,96 @@ + 699 1JZ + 714 9MWRFRT RRYQZR[SZRY + 717 6JZNFNM RVFVM + 733 12H]SBLb RYBRb RLOZO RKUYU + 719 27H\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX + 2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT + 734 35E_\O\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\Z\Y + 731 8MWRHQGRFSGSIRKQL + 721 11KYVBTDRGPKOPOTPYR]T`Vb + 722 11KYNBPDRGTKUPUTTYR]P`Nb + 2219 9JZRFRR RMIWO RWIMO + 725 6E_RIR[ RIR[R + 711 9MWSZR[QZRYSZS\R^Q_ + 724 3E_IR[R + 710 6MWRYQZR[SZRY + 720 3G][BIb + 700 18H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF + 701 5H\NJPISFS[ + 702 15H\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[ + 703 16H\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW + 704 7H\UFKTZT RUFU[ + 705 18H\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW + 706 24H\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT + 707 6H\YFO[ RKFYF + 708 30H\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF + 709 24H\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX + 712 12MWRMQNROSNRM RRYQZR[SZRY + 713 15MWRMQNROSNRM RSZR[QZRYSZS\R^Q_ + 2241 4F^ZIJRZ[ + 726 6E_IO[O RIU[U + 2242 4F^JIZRJ[ + 715 21I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY + 2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV + 501 9I[RFJ[ RRFZ[ RMTWT + 502 24G\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[ + 503 19H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV + 504 16G\KFK[ RKFRFUGWIXKYNYSXVWXUZR[K[ + 505 12H[LFL[ RLFYF RLPTP RL[Y[ + 506 9HZLFL[ RLFYF RLPTP + 507 23H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZS RUSZS + 508 9G]KFK[ RYFY[ RKPYP + 509 3NVRFR[ + 510 11JZVFVVUYTZR[P[NZMYLVLT + 511 9G\KFK[ RYFKT RPOY[ + 512 6HYLFL[ RL[X[ + 513 12F^JFJ[ RJFR[ RZFR[ RZFZ[ + 514 9G]KFK[ RKFY[ RYFY[ + 515 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF + 516 14G\KFK[ RKFTFWGXHYJYMXOWPTQKQ + 517 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RSWY] + 518 17G\KFK[ RKFTFWGXHYJYLXNWOTPKP RRPY[ + 519 21H\YIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX + 520 6JZRFR[ RKFYF + 521 11G]KFKULXNZQ[S[VZXXYUYF + 522 6I[JFR[ RZFR[ + 523 12F^HFM[ RRFM[ RRFW[ R\FW[ + 524 6H\KFY[ RYFK[ + 525 7I[JFRPR[ RZFRP + 526 9H\YFK[ RKFYF RK[Y[ + 2223 12KYOBOb RPBPb ROBVB RObVb + 804 3KYKFY^ + 2224 12KYTBTb RUBUb RNBUB RNbUb + 2262 11JZPLRITL RMORJWO RRJR[ + 999 3JZJ]Z] + 730 8MWSFRGQIQKRLSKRJ + 601 18I\XMX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX + 602 18H[LFL[ RLPNNPMSMUNWPXSXUWXUZS[P[NZLX + 603 15I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX + 604 18I\XFX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX + 605 18I[LSXSXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX + 606 9MYWFUFSGRJR[ ROMVM + 607 23I\XMX]W`VaTbQbOa RXPVNTMQMONMPLSLUMXOZQ[T[VZXX + 608 11I\MFM[ RMQPNRMUMWNXQX[ + 609 9NVQFRGSFREQF RRMR[ + 610 12MWRFSGTFSERF RSMS^RaPbNb + 611 9IZMFM[ RWMMW RQSX[ + 612 3NVRFR[ + 613 19CaGMG[ RGQJNLMOMQNRQR[ RRQUNWMZM\N]Q][ + 614 11I\MMM[ RMQPNRMUMWNXQX[ + 615 18I\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM + 616 18H[LMLb RLPNNPMSMUNWPXSXUWXUZS[P[NZLX + 617 18I\XMXb RXPVNTMQMONMPLSLUMXOZQ[T[VZXX + 618 9KXOMO[ ROSPPRNTMWM + 619 18J[XPWNTMQMNNMPNRPSUTWUXWXXWZT[Q[NZMX + 620 9MYRFRWSZU[W[ ROMVM + 621 11I\MMMWNZP[S[UZXW RXMX[ + 622 6JZLMR[ RXMR[ + 623 12G]JMN[ RRMN[ RRMV[ RZMV[ + 624 6J[MMX[ RXMM[ + 625 10JZLMR[ RXMR[P_NaLbKb + 626 9J[XMM[ RMMXM RM[X[ + 2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb + 723 3NVRBRb + 2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb + 2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O + 718 14KYQFOGNINKOMQNSNUMVKVIUGSFQF diff --git a/codegen/timesr.jhf b/codegen/timesr.jhf new file mode 100644 index 0000000..2f247c9 --- /dev/null +++ b/codegen/timesr.jhf @@ -0,0 +1,96 @@ +12345 1JZ +12345 15MWRFQHRTSHRF RRHRN RRYQZR[SZRY +12345 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM +12345 12H]SBLb RYBRb RLOZO RKUYU +12345 42H\PBP_ RTBT_ RXIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX +12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT +12345 49F_[NZO[P\O\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\Z\Y RM[KZJXJUKSMQ RMKNMVXXZZ[ +12345 6NVRFQM RSFQM +12345 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\T` +12345 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\P` +12345 9JZRLRX RMOWU RWOMU +12345 6E_RIR[ RIR[R +12345 8NVSWRXQWRVSWSYQ[ +12345 3E_IR[R +12345 6NVRVQWRXSWRV +12345 3G][BIb +12345 40H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF +12345 11H\NJPISFS[ RRGR[ RN[W[ +12345 45H\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV +12345 47H\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[ +12345 13H\THT[ RUFU[ RUFJUZU RQ[X[ +12345 39H\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF +12345 48H\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN +12345 31H\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[ +12345 63H\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO +12345 48H\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[ +12345 12NVROQPRQSPRO RRVQWRXSWRV +12345 14NVROQPRQSPRO RSWRXQWRVSWSYQ[ +12345 4F^ZIJRZ[ +12345 6E_IO[O RIU[U +12345 4F^JIZRJ[ +12345 32I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY +12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV +12345 18H\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[ +12345 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[ +12345 32G\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[ +12345 30G]LFL[ RMFM[ RIFSFVGXIYKZNZSYVXXVZS[I[ RSFUGWIXKYNYSXVWXUZS[ +12345 22G\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[ +12345 20G[LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[P[ +12345 40G^XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXX RQFOGMILKKNKSLVMXOZQ[ RXSX[ RYSY[ RUS\S +12345 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RLPXP RH[O[ RU[\[ +12345 12MXRFR[ RSFS[ ROFVF RO[V[ +12345 20KZUFUWTZR[P[NZMXMVNUOVNW RTFTWSZR[ RQFXF +12345 27F\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[ +12345 14I[NFN[ ROFO[ RKFRF RK[Z[ZUY[ +12345 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][ +12345 21G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\F RI[O[ +12345 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF +12345 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[ +12345 64G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF RNYNXOVQURUTVUXV_W`Y`Z^Z] RUXV\W^X_Y_Z^ +12345 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUPMP RUFWGXHYJYLXNWOUP RI[P[ RRPTQURXYYZZZ[Y RTQUSWZX[Z[[Y[X +12345 34H\XIYFYLXIVGSFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[Q[NZLXKUK[LX +12345 16I\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[ +12345 23F^KFKULXNZQ[S[VZXXYUYF RLFLUMXOZQ[ RHFOF RVF\F +12345 15H\KFR[ RLFRX RYFR[ RIFOF RUF[F +12345 24F^JFN[ RKFNV RRFN[ RRFV[ RSFVV RZFV[ RGFNF RWF]F +12345 21H\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[ +12345 20H]KFRQR[ RLFSQS[ RZFSQ RIFOF RVF\F RO[V[ +12345 16H\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[ +12345 12KYOBOb RPBPb ROBVB RObVb +12345 3KYKFY^ +12345 12KYTBTb RUBUb RNBUB RNbUb +12345 8G]JTROZT RJTRPZT +12345 3H\Hb\b +12345 7LXPFUL RPFOGUL +12345 39I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[ +12345 33G\LFL[ RMFM[ RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIFMF +12345 28H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[ +12345 36H]WFW[ RXFX[ RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTFXF RW[[[ +12345 31H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[ +12345 22KXUGTHUIVHVGUFSFQGPIP[ RSFRGQIQ[ RMMUM RM[T[ +12345 60I\QMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM RONNPNTOV RUVVTVPUN RVOWNYMYNWN RNUMVLXLYM[P\U\X]Y^ RLYMZP[U[X\Y^Y_XaUbObLaK_K^L\O[ +12345 28G]LFL[ RMFM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIFMF RI[P[ RT[[[ +12345 18MXRFQGRHSGRF RRMR[ RSMS[ ROMSM RO[V[ +12345 25MXSFRGSHTGSF RTMT_SaQbObNaN`O_P`Oa RSMS_RaQb RPMTM +12345 27G\LFL[ RMFM[ RWMMW RRSX[ RQSW[ RIFMF RTMZM RI[P[ RT[Z[ +12345 12MXRFR[ RSFS[ ROFSF RO[V[ +12345 44BcGMG[ RHMH[ RHPJNMMOMRNSPS[ ROMQNRPR[ RSPUNXMZM]N^P^[ RZM\N]P][ RDMHM RD[K[ RO[V[ RZ[a[ +12345 28G]LML[ RMMM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIMMM RI[P[ RT[[[ +12345 36H\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM +12345 36G\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb +12345 33H\WMWb RXMXb RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTb[b +12345 23IZNMN[ ROMO[ ROSPPRNTMWMXNXOWPVOWN RKMOM RK[R[ +12345 32J[WOXMXQWOVNTMPMNNMOMQNRPSUUWVXW RMPNQPRUTWUXVXYWZU[Q[OZNYMWM[NY +12345 16KZPFPWQZS[U[WZXX RQFQWRZS[ RMMUM +12345 28G]LMLXMZP[R[UZWX RMMMXNZP[ RWMW[ RXMX[ RIMMM RTMXM RW[[[ +12345 15I[LMR[ RMMRY RXMR[ RJMPM RTMZM +12345 24F^JMN[ RKMNX RRMN[ RRMV[ RSMVX RZMV[ RGMNM RWM]M +12345 21H\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[ +12345 22H[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM +12345 16I[WML[ RXMM[ RMMLQLMXM RL[X[XWW[ +12345 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb +12345 3NVRBRb +12345 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb +12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O +12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[