Solutions to some exercises

Exercise I.7

Let ω ∈ ℂ be a cube root of unity, the ring ℤ[ω] is also known as the Eisenstein integers. Determine all elliptic curves with complex multiplication by ℤ[ω].

Let's start with ω: we can use Sage's symbolic calculus engine to construct it as a complex number

In [1]:
w = e^(2*i*pi / 3)
w
Out[1]:
1/2*I*sqrt(3) - 1/2

Careful, Sage's symbolic elements do not evaluate powers automatically:

In [2]:
w^3
Out[2]:
(1/2*I*sqrt(3) - 1/2)^3

To verify ω³ = 1 we need to use the function .expand()

In [3]:
(w^3).expand()
Out[3]:
1

Now, we can construct the order, and get its discriminant

In [4]:
O = ZZ[w]
In [5]:
O.discriminant()
Out[5]:
-3

Of, course, we knew this already, because we knew the minimal polynomial of ω.

By the way, we could have used Sage's number fields, instead of the symbolic engine.

In [6]:
K.<w> = CyclotomicField(3)
K, w
Out[6]:
(Cyclotomic Field of order 3 and degree 2, w)
In [7]:
w^3
Out[7]:
1
In [8]:
chi = w.minpoly()
chi
Out[8]:
x^2 + x + 1
In [9]:
chi.discriminant()
Out[9]:
-3

Constructing the order also works

In [10]:
O = ZZ[w]
O
Out[10]:
Order in Number Field in w0 with defining polynomial x^2 + x + 1 with w0 = -0.50000000000000000? + 0.866025403784439?*I
In [11]:
O.discriminant()
Out[11]:
-3

Now, we can use the Hilbert class polynomial to get all the j-invariants with CM by -3

In [12]:
H = hilbert_class_polynomial(-3)
H
Out[12]:
x

Clearly, the only root is j=0, so we learn that -3 has class number 1

In [13]:
H.roots()
Out[13]:
[(0, 1)]

Hence, the only curve is defined over ℚ

In [14]:
E = EllipticCurve(j=0)
E
Out[14]:
Elliptic Curve defined by y^2 + y = x^3 over Rational Field
In [15]:
E.has_cm()
Out[15]:
True
In [16]:
E.cm_discriminant()
Out[16]:
-3

By default, Sage does not use the short Weierstrass model (y² = x³ + ax + b) for CM elliptic curves. We can get one like this

In [17]:
E.short_weierstrass_model()
Out[17]:
Elliptic Curve defined by y^2 = x^3 + 16 over Rational Field

But here is a more famous (non isomorphic) equation for j = 0

In [18]:
F = EllipticCurve([0,1])
F
Out[18]:
Elliptic Curve defined by y^2 = x^3 + 1 over Rational Field
In [19]:
F.j_invariant()
Out[19]:
0
In [20]:
E.is_isomorphic(F)
Out[20]:
False

Let's find a prime of supersingular reduction for our curve. First, we must exclude primes of singular reduction

In [21]:
F.discriminant().factor()
Out[21]:
-1 * 2^4 * 3^3

It would seem that the curve has singular reduction at 2 and 3, but actually Sage's preferred equation shows that 2 is not such a prime

In [22]:
E.discriminant().factor()
Out[22]:
-1 * 3^3

and it turns out that it is indeed the only supersingular curve over 𝔽₂

In [23]:
E.change_ring(GF(2)).is_supersingular()
Out[23]:
True

Let's try to find a prime p > 3 such that the curve has supseringular reduction. We need -3 to not be a square modulo p

In [24]:
GF(5)(-3).is_square()
Out[24]:
False
In [25]:
Ebar = E.change_ring(GF(5))
Ebar
Out[25]:
Elliptic Curve defined by y^2 + y = x^3 over Finite Field of size 5
In [26]:
Ebar.is_supersingular()
Out[26]:
True
In [27]:
Ebar.trace_of_frobenius()
Out[27]:
0

Exercise II.6

Find a prime power $q$ and an elliptic curve $E/𝔽_q$ such that the 3-isogeny volcano of $E$ is the same as the one below.

In [28]:
%%HTML
<svg   xmlns:dc="http://purl.org/dc/elements/1.1/"   xmlns:cc="http://creativecommons.org/ns#"   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"   xmlns:svg="http://www.w3.org/2000/svg"   xmlns="http://www.w3.org/2000/svg"   id="svg2564"   version="1.1"   viewBox="0 0 50.701473 50.843376"   height="50.843376mm"   width="50.701473mm">  <defs     id="defs2558" />  <metadata     id="metadata2561">    <rdf:RDF>      <cc:Work         rdf:about="">        <dc:format>image/svg+xml</dc:format>        <dc:type           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />        <dc:title></dc:title>      </cc:Work>    </rdf:RDF>  </metadata>  <g     transform="translate(13.255499,-109.04855)"     id="layer1">    <g       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"       transform="matrix(0.35277777,0,0,-0.35277777,-47.905526,134.47024)"       id="g18">      <path         d="m 192.73492,22.1615 c 0,2.75117 -2.23019,4.98138 -4.98138,4.98138 -2.75117,0 -4.98138,-2.23021 -4.98138,-4.98138 0,-2.75118 2.23021,-4.98139 4.98138,-4.98139 2.75119,0 4.98138,2.23021 4.98138,4.98139 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path20" />      <path         d="m 187.75354,22.1615 -23.97946,5.47377"         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path22" />      <path         d="m 187.75354,22.1615 26.64955,13.18463 m 2.98883,0 c 0,1.65071 -1.33813,2.98883 -2.98883,2.98883 -1.65071,0 -2.98883,-1.33812 -2.98883,-2.98883 0,-1.65071 1.33812,-2.98883 2.98883,-2.98883 1.6507,0 2.98883,1.33812 2.98883,2.98883 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path24" />      <path         d="m 214.40309,35.34613 17.05066,0.08737 m 0.99628,0 c 0,0.55025 -0.44605,0.99628 -0.99628,0.99628 -0.55025,0 -0.99628,-0.44603 -0.99628,-0.99628 0,-0.55023 0.44603,-0.99627 0.99628,-0.99627 0.55023,0 0.99628,0.44604 0.99628,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path26" />      <path         d="m 214.40309,35.34613 11.08054,8.83655 m 0.99627,0 c 0,0.55023 -0.44604,0.99628 -0.99627,0.99628 -0.55023,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55025 0.44605,-0.99628 0.99628,-0.99628 0.55023,0 0.99627,0.44603 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path28" />      <path         d="m 214.40309,35.34613 3.87879,16.60168 m 0.99627,0 c 0,0.55024 -0.44605,0.99628 -0.99627,0.99628 -0.55025,0 -0.99628,-0.44604 -0.99628,-0.99628 0,-0.55023 0.44603,-0.99627 0.99628,-0.99627 0.55022,0 0.99627,0.44604 0.99627,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path30" />      <path         d="m 187.75354,22.1615 6.92409,28.9143 m 2.98883,0 c 0,1.65072 -1.33814,2.98884 -2.98883,2.98884 -1.65071,0 -2.98883,-1.33812 -2.98883,-2.98884 0,-1.65069 1.33812,-2.98882 2.98883,-2.98882 1.65069,0 2.98883,1.33813 2.98883,2.98882 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path32" />      <path         d="m 194.67763,51.0758 15.32113,7.4747 m 0.99628,0 c 0,0.55024 -0.44603,0.99628 -0.99628,0.99628 -0.55023,0 -0.99627,-0.44604 -0.99627,-0.99628 0,-0.55023 0.44604,-0.99627 0.99627,-0.99627 0.55025,0 0.99628,0.44604 0.99628,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path34" />      <path         d="m 194.67763,51.0758 6.14917,12.76897 m 0.99627,0 c 0,0.55023 -0.44604,0.99628 -0.99627,0.99628 -0.55025,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44603,-0.99627 0.99628,-0.99627 0.55023,0 0.99627,0.44604 0.99627,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path36" />      <path         d="m 194.67763,51.0758 -3.70946,16.64019 m 0.99628,0 c 0,0.55023 -0.44605,0.99628 -0.99628,0.99628 -0.55023,0 -0.99627,-0.44605 -0.99627,-0.99628 0,-0.55023 0.44604,-0.99628 0.99627,-0.99628 0.55023,0 0.99628,0.44605 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path38" />      <path         d="m 168.75546,27.63527 c 0,2.75117 -2.23021,4.98138 -4.98138,4.98138 -2.75118,0 -4.98138,-2.23021 -4.98138,-4.98138 0,-2.75117 2.2302,-4.98139 4.98138,-4.98139 2.75117,0 4.98138,2.23022 4.98138,4.98139 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path40" />      <path         d="M 163.77408,27.63527 144.54301,12.29832"         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path42" />      <path         d="m 163.77408,27.63527 6.30684,29.05749 m 2.98883,0 c 0,1.6507 -1.33814,2.98884 -2.98883,2.98884 -1.65072,0 -2.98883,-1.33814 -2.98883,-2.98884 0,-1.65071 1.33811,-2.98883 2.98883,-2.98883 1.65069,0 2.98883,1.33812 2.98883,2.98883 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path44" />      <path         d="m 170.08092,56.69276 10.56039,13.37839 m 0.99628,0 c 0,0.55023 -0.44603,0.99628 -0.99628,0.99628 -0.55023,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99628 0.99628,-0.99628 0.55025,0 0.99628,0.44605 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path46" />      <path         d="m 170.08092,56.69276 v 14.17319 m 0.99628,0 c 0,0.55023 -0.44605,0.99628 -0.99628,0.99628 -0.55025,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55025 0.44603,-0.99628 0.99628,-0.99628 0.55023,0 0.99628,0.44603 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path48" />      <path         d="m 170.08092,56.69276 -10.56151,13.37839 m 0.99628,0 c 0,0.55023 -0.44603,0.99628 -0.99628,0.99628 -0.55023,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99628 0.99628,-0.99628 0.55025,0 0.99628,0.44605 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path50" />      <path         d="M 163.77408,27.63527 145.4842,51.07668 m 2.98884,0 c 0,1.65071 -1.33814,2.98882 -2.98884,2.98882 -1.6507,0 -2.98882,-1.33811 -2.98882,-2.98882 0,-1.65072 1.33812,-2.98884 2.98882,-2.98884 1.6507,0 2.98884,1.33812 2.98884,2.98884 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path52" />      <path         d="m 145.4842,51.07668 3.70945,16.63931 m 0.99628,0 c 0,0.55023 -0.44605,0.99628 -0.99628,0.99628 -0.55023,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99628 0.99628,-0.99628 0.55023,0 0.99628,0.44605 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path54" />      <path         d="m 145.4842,51.07668 -6.14916,12.76918 m 0.99627,0 c 0,0.55023 -0.44604,0.99627 -0.99627,0.99627 -0.55025,0 -0.99628,-0.44604 -0.99628,-0.99627 0,-0.55024 0.44603,-0.99628 0.99628,-0.99628 0.55023,0 0.99627,0.44604 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path56" />      <path         d="m 145.4842,51.07668 -15.32114,7.47382 m 0.99627,0 c 0,0.55024 -0.44604,0.99628 -0.99627,0.99628 -0.55024,0 -0.99628,-0.44604 -0.99628,-0.99628 0,-0.55023 0.44604,-0.99627 0.99628,-0.99627 0.55023,0 0.99627,0.44604 0.99627,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path58" />      <path         d="m 149.5244,12.29832 c 0,2.75119 -2.23021,4.98139 -4.98139,4.98139 -2.75117,0 -4.98138,-2.2302 -4.98138,-4.98139 0,-2.75117 2.23021,-4.98138 4.98138,-4.98138 2.75118,0 4.98139,2.23021 4.98139,4.98138 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path60" />      <path         d="m 144.54301,12.29832 -4.4e-4,-24.59664"         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path62" />      <path         d="m 144.54301,12.29832 -18.78427,23.04696 m 2.98883,0 c 0,1.65071 -1.33813,2.98882 -2.98883,2.98882 -1.65071,0 -2.98883,-1.33811 -2.98883,-2.98882 0,-1.65072 1.33812,-2.98883 2.98883,-2.98883 1.6507,0 2.98883,1.33811 2.98883,2.98883 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path64" />      <path         d="m 125.75874,35.34528 -3.87771,16.60145 m 0.99627,0 c 0,0.55023 -0.44603,0.99628 -0.99627,0.99628 -0.55023,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99628 0.99628,-0.99628 0.55024,0 0.99627,0.44605 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path66" />      <path         d="m 125.75874,35.34528 -11.08055,8.83632 m 0.99628,0 c 0,0.55023 -0.44603,0.99627 -0.99628,0.99627 -0.55023,0 -0.99627,-0.44604 -0.99627,-0.99627 0,-0.55024 0.44604,-0.99628 0.99627,-0.99628 0.55025,0 0.99628,0.44604 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path68" />      <path         d="m 125.75874,35.34528 -17.04957,0.08822 m 0.99627,0 c 0,0.55025 -0.44603,0.99628 -0.99627,0.99628 -0.55023,0 -0.99628,-0.44603 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99627 0.99628,-0.99627 0.55024,0 0.99627,0.44604 0.99627,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path70" />      <path         d="m 144.54301,12.29832 -29.73181,0.31534 m 2.98883,0 c 0,1.65071 -1.33812,2.98884 -2.98883,2.98884 -1.65071,0 -2.98883,-1.33813 -2.98883,-2.98884 0,-1.65069 1.33812,-2.98883 2.98883,-2.98883 1.65071,0 2.98883,1.33814 2.98883,2.98883 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path72" />      <path         d="m 114.8112,12.61366 -10.69452,13.27481 m 0.99628,0 c 0,0.55023 -0.44604,0.99628 -0.99628,0.99628 -0.55023,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99627 0.99628,-0.99627 0.55024,0 0.99628,0.44604 0.99628,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path74" />      <path         d="m 114.8112,12.61366 -13.81743,3.15341 m 0.99628,0 c 0,0.55023 -0.44605,0.99628 -0.99628,0.99628 -0.55023,0 -0.99627,-0.44605 -0.99627,-0.99628 0,-0.55023 0.44604,-0.99627 0.99627,-0.99627 0.55023,0 0.99628,0.44604 0.99628,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path76" />      <path         d="M 114.8112,12.61366 99.41608,5.29533 m 0.99627,0 c 0,0.55024 -0.44603,0.99628 -0.99627,0.99628 -0.55024,0 -0.99628,-0.44604 -0.99628,-0.99628 0,-0.55024 0.44604,-0.99627 0.99628,-0.99627 0.55024,0 0.99627,0.44603 0.99627,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path78" />      <path         d="m 149.52396,-12.29832 c 0,2.75117 -2.2302,4.98138 -4.98139,4.98138 -2.75117,0 -4.98138,-2.23021 -4.98138,-4.98138 0,-2.75119 2.23021,-4.98139 4.98138,-4.98139 2.75119,0 4.98139,2.2302 4.98139,4.98139 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path80" />      <path         d="m 144.54257,-12.29832 19.23151,-15.33651"         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path82" />      <path         d="m 144.54257,-12.29832 -29.73224,-0.31621 m 2.98883,0 c 0,1.65071 -1.33812,2.98883 -2.98883,2.98883 -1.65071,0 -2.98883,-1.33812 -2.98883,-2.98883 0,-1.65071 1.33812,-2.98883 2.98883,-2.98883 1.65071,0 2.98883,1.33812 2.98883,2.98883 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path84" />      <path         d="m 114.81033,-12.61453 -15.39425,7.32028 m 0.99627,0 c 0,0.55023 -0.44603,0.99628 -0.99627,0.99628 -0.55024,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44604,-0.99628 0.99628,-0.99628 0.55024,0 0.99627,0.44605 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path86" />      <path         d="m 114.81033,-12.61453 -13.81765,-3.15364 m 0.99627,0 c 0,0.55024 -0.44604,0.99627 -0.99627,0.99627 -0.55024,0 -0.99628,-0.44603 -0.99628,-0.99627 0,-0.55023 0.44604,-0.99628 0.99628,-0.99628 0.55023,0 0.99627,0.44605 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path88" />      <path         d="M 114.81033,-12.61453 104.1156,-25.88847 m 0.99628,0 c 0,0.55023 -0.44603,0.99627 -0.99628,0.99627 -0.55023,0 -0.99628,-0.44604 -0.99628,-0.99627 0,-0.55023 0.44605,-0.99628 0.99628,-0.99628 0.55025,0 0.99628,0.44605 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path90" />      <path         d="m 144.54257,-12.29832 -18.78383,-23.04696 m 2.98883,0 c 0,1.65072 -1.33813,2.98883 -2.98883,2.98883 -1.65071,0 -2.98883,-1.33811 -2.98883,-2.98883 0,-1.65071 1.33812,-2.98882 2.98883,-2.98882 1.6507,0 2.98883,1.33811 2.98883,2.98882 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path92" />      <path         d="m 125.75874,-35.34528 -17.04957,-0.08715 m 0.99627,0 c 0,0.55024 -0.44603,0.99627 -0.99627,0.99627 -0.55023,0 -0.99628,-0.44603 -0.99628,-0.99627 0,-0.55024 0.44605,-0.99628 0.99628,-0.99628 0.55024,0 0.99627,0.44604 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path94" />      <path         d="m 125.75874,-35.34528 -11.08055,-8.83632 m 0.99628,0 c 0,0.55024 -0.44603,0.99628 -0.99628,0.99628 -0.55023,0 -0.99627,-0.44604 -0.99627,-0.99628 0,-0.55023 0.44604,-0.99627 0.99627,-0.99627 0.55025,0 0.99628,0.44604 0.99628,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path96" />      <path         d="m 125.75874,-35.34528 -3.87771,-16.60145 m 0.99627,0 c 0,0.55023 -0.44603,0.99628 -0.99627,0.99628 -0.55023,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99628 0.99628,-0.99628 0.55024,0 0.99627,0.44605 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path98" />      <path         d="m 168.75546,-27.63483 c 0,2.75118 -2.23021,4.98139 -4.98138,4.98139 -2.75118,0 -4.98138,-2.23021 -4.98138,-4.98139 0,-2.75119 2.2302,-4.98138 4.98138,-4.98138 2.75117,0 4.98138,2.23019 4.98138,4.98138 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path100" />      <path         d="m 163.77408,-27.63483 23.97989,5.47376"         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path102" />      <path         d="M 163.77408,-27.63483 145.4842,-51.07668 m 2.98884,0 c 0,1.65072 -1.33814,2.98884 -2.98884,2.98884 -1.6507,0 -2.98882,-1.33812 -2.98882,-2.98884 0,-1.65071 1.33812,-2.98882 2.98882,-2.98882 1.6507,0 2.98884,1.33811 2.98884,2.98882 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path104" />      <path         d="m 145.4842,-51.07668 -15.32114,-7.47382 m 0.99627,0 c 0,0.55023 -0.44604,0.99627 -0.99627,0.99627 -0.55024,0 -0.99628,-0.44604 -0.99628,-0.99627 0,-0.55024 0.44604,-0.99628 0.99628,-0.99628 0.55023,0 0.99627,0.44604 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path106" />      <path         d="m 145.4842,-51.07668 -6.14916,-12.76918 m 0.99627,0 c 0,0.55024 -0.44604,0.99628 -0.99627,0.99628 -0.55025,0 -0.99628,-0.44604 -0.99628,-0.99628 0,-0.55023 0.44603,-0.99627 0.99628,-0.99627 0.55023,0 0.99627,0.44604 0.99627,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path108" />      <path         d="m 145.4842,-51.07668 3.70945,-16.63931 m 0.99628,0 c 0,0.55023 -0.44605,0.99628 -0.99628,0.99628 -0.55023,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99628 0.99628,-0.99628 0.55023,0 0.99628,0.44605 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path110" />      <path         d="m 163.77408,-27.63483 6.30684,-29.05793 m 2.98883,0 c 0,1.65071 -1.33814,2.98883 -2.98883,2.98883 -1.65072,0 -2.98883,-1.33812 -2.98883,-2.98883 0,-1.6507 1.33811,-2.98884 2.98883,-2.98884 1.65069,0 2.98883,1.33814 2.98883,2.98884 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path112" />      <path         d="m 170.08092,-56.69276 -10.56151,-13.37839 m 0.99628,0 c 0,0.55023 -0.44603,0.99628 -0.99628,0.99628 -0.55023,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99628 0.99628,-0.99628 0.55025,0 0.99628,0.44605 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path114" />      <path         d="m 170.08092,-56.69276 v -14.17319 m 0.99628,0 c 0,0.55025 -0.44605,0.99628 -0.99628,0.99628 -0.55025,0 -0.99628,-0.44603 -0.99628,-0.99628 0,-0.55023 0.44603,-0.99628 0.99628,-0.99628 0.55023,0 0.99628,0.44605 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path116" />      <path         d="m 170.08092,-56.69276 10.56039,-13.37839 m 0.99628,0 c 0,0.55023 -0.44603,0.99628 -0.99628,0.99628 -0.55023,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99628 0.99628,-0.99628 0.55025,0 0.99628,0.44605 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path118" />      <path         d="m 192.73535,-22.16107 c 0,2.75117 -2.23019,4.98138 -4.98138,4.98138 -2.75118,0 -4.98139,-2.23021 -4.98139,-4.98138 0,-2.75118 2.23021,-4.98139 4.98139,-4.98139 2.75119,0 4.98138,2.23021 4.98138,4.98139 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path120" />      <path         d="M 187.75397,-22.16107 198.42728,0"         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path122" />      <path         d="m 187.75397,-22.16107 6.92366,-28.91561 m 2.98883,0 c 0,1.65072 -1.33814,2.98884 -2.98883,2.98884 -1.65071,0 -2.98883,-1.33812 -2.98883,-2.98884 0,-1.65071 1.33812,-2.98882 2.98883,-2.98882 1.65069,0 2.98883,1.33811 2.98883,2.98882 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path124" />      <path         d="m 194.67763,-51.07668 -3.71054,-16.63931 m 0.99627,0 c 0,0.55023 -0.44603,0.99628 -0.99627,0.99628 -0.55024,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44604,-0.99628 0.99628,-0.99628 0.55024,0 0.99627,0.44605 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path126" />      <path         d="m 194.67763,-51.07668 6.14917,-12.76918 m 0.99627,0 c 0,0.55024 -0.44604,0.99628 -0.99627,0.99628 -0.55025,0 -0.99628,-0.44604 -0.99628,-0.99628 0,-0.55023 0.44603,-0.99627 0.99628,-0.99627 0.55023,0 0.99627,0.44604 0.99627,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path128" />      <path         d="m 194.67763,-51.07668 15.32113,-7.47382 m 0.99628,0 c 0,0.55023 -0.44603,0.99627 -0.99628,0.99627 -0.55023,0 -0.99627,-0.44604 -0.99627,-0.99627 0,-0.55024 0.44604,-0.99628 0.99627,-0.99628 0.55025,0 0.99628,0.44604 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path130" />      <path         d="m 187.75397,-22.16107 26.64912,-13.18506 m 2.98883,0 c 0,1.65071 -1.33813,2.98883 -2.98883,2.98883 -1.65071,0 -2.98883,-1.33812 -2.98883,-2.98883 0,-1.65071 1.33812,-2.98883 2.98883,-2.98883 1.6507,0 2.98883,1.33812 2.98883,2.98883 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path132" />      <path         d="m 214.40309,-35.34613 3.8777,-16.6006 m 0.99628,0 c 0,0.55023 -0.44605,0.99628 -0.99628,0.99628 -0.55023,0 -0.99627,-0.44605 -0.99627,-0.99628 0,-0.55023 0.44604,-0.99628 0.99627,-0.99628 0.55023,0 0.99628,0.44605 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path134" />      <path         d="m 214.40309,-35.34613 11.08054,-8.83655 m 0.99627,0 c 0,0.55025 -0.44604,0.99628 -0.99627,0.99628 -0.55023,0 -0.99628,-0.44603 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99628 0.99628,-0.99628 0.55023,0 0.99627,0.44605 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path136" />      <path         d="m 214.40309,-35.34613 17.04956,-0.08737 m 0.99628,0 c 0,0.55023 -0.44605,0.99627 -0.99628,0.99627 -0.55023,0 -0.99627,-0.44604 -0.99627,-0.99627 0,-0.55025 0.44604,-0.99628 0.99627,-0.99628 0.55023,0 0.99628,0.44603 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path138" />      <path         d="m 203.40866,0 c 0,2.75117 -2.23019,4.98138 -4.98138,4.98138 -2.75118,0 -4.98139,-2.23021 -4.98139,-4.98138 0,-2.75117 2.23021,-4.98138 4.98139,-4.98138 2.75119,0 4.98138,2.23021 4.98138,4.98138 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path140" />      <path         d="M 198.42728,0 187.75354,22.16107"         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path142" />      <path         d="m 198.42728,0 26.92334,-12.61453 m 2.98883,0 c 0,1.65071 -1.33812,2.98883 -2.98883,2.98883 -1.6507,0 -2.98883,-1.33812 -2.98883,-2.98883 0,-1.65071 1.33813,-2.98883 2.98883,-2.98883 1.65071,0 2.98883,1.33812 2.98883,2.98883 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path144" />      <path         d="m 225.35062,-12.61453 10.69452,-13.27394 m 0.99627,0 c 0,0.55023 -0.44604,0.99627 -0.99627,0.99627 -0.55024,0 -0.99628,-0.44604 -0.99628,-0.99627 0,-0.55023 0.44604,-0.99628 0.99628,-0.99628 0.55023,0 0.99627,0.44605 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path146" />      <path         d="m 225.35062,-12.61453 13.81743,-3.15364 m 0.99627,0 c 0,0.55024 -0.44603,0.99627 -0.99627,0.99627 -0.55024,0 -0.99628,-0.44603 -0.99628,-0.99627 0,-0.55023 0.44604,-0.99628 0.99628,-0.99628 0.55024,0 0.99627,0.44605 0.99627,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path148" />      <path         d="m 225.35062,-12.61453 15.39512,7.3192 m 0.99628,0 c 0,0.55024 -0.44605,0.99627 -0.99628,0.99627 -0.55023,0 -0.99627,-0.44603 -0.99627,-0.99627 0,-0.55024 0.44604,-0.99628 0.99627,-0.99628 0.55023,0 0.99628,0.44604 0.99628,0.99628 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path150" />      <path         d="m 198.42728,0 26.92421,12.61366 m 2.98883,0 c 0,1.65071 -1.33812,2.98884 -2.98883,2.98884 -1.6507,0 -2.98883,-1.33813 -2.98883,-2.98884 0,-1.65069 1.33813,-2.98883 2.98883,-2.98883 1.65071,0 2.98883,1.33814 2.98883,2.98883 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path152" />      <path         d="m 225.35149,12.61366 15.39425,-7.31833 m 0.99628,0 c 0,0.55024 -0.44605,0.99628 -0.99628,0.99628 -0.55023,0 -0.99627,-0.44604 -0.99627,-0.99628 0,-0.55024 0.44604,-0.99627 0.99627,-0.99627 0.55023,0 0.99628,0.44603 0.99628,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path154" />      <path         d="m 225.35149,12.61366 13.81765,3.15341 m 0.99628,0 c 0,0.55023 -0.44604,0.99628 -0.99628,0.99628 -0.55023,0 -0.99627,-0.44605 -0.99627,-0.99628 0,-0.55023 0.44604,-0.99627 0.99627,-0.99627 0.55024,0 0.99628,0.44604 0.99628,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path156" />      <path         d="m 225.35149,12.61366 10.69473,13.27481 m 0.99628,0 c 0,0.55023 -0.44605,0.99628 -0.99628,0.99628 -0.55023,0 -0.99628,-0.44605 -0.99628,-0.99628 0,-0.55023 0.44605,-0.99627 0.99628,-0.99627 0.55023,0 0.99628,0.44604 0.99628,0.99627 z"         style="vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"         id="path158" />    </g>  </g></svg>
image/svg+xml

We start from the crater: we look for some discriminants of class number 7, and we check whether (3) splits in the ring of integers

In [29]:
for i in range(1,1000):
    D = fundamental_discriminant(-i)
    if hilbert_class_polynomial(D).degree() == 7:
        print(D, GF(3)(D).is_square())
(-71, True)
(-151, False)
(-223, False)
(-251, True)
(-71, True)
(-463, False)
(-467, True)
(-487, False)
(-587, True)
(-151, False)
(-71, True)
(-811, False)
(-827, True)
(-859, False)
(-223, False)

We may thus choose D = -71

In [30]:
D = -71
H = hilbert_class_polynomial(-71)
H
Out[30]:
x^7 + 313645809715*x^6 - 3091990138604570*x^5 + 98394038810047812049302*x^4 - 823534263439730779968091389*x^3 + 5138800366453976780323726329446*x^2 - 425319473946139603274605151187659*x + 737707086760731113357714241006081263

We now need to find a prime of ordinary reduction, and for the fun we also ask that the Hilbert class polynomial splits in $𝔽_p$, so that the curves are defined over it.

In [31]:
for p in primes(3, 1000):
    if GF(p)(D).is_square():
        Hp = H.change_ring(GF(p))
        if Hp.splitting_field('x').degree() == 1:
            print(p, Hp.is_squarefree())
(71, False)
(107, True)
(293, True)
(509, True)
(643, True)
(647, True)
(739, True)
(971, True)

71 is obviously an outlier, we may thus take 107. We get all the j-invariants by factoring the Hilbert class polynomial

In [32]:
p = 107
k = GF(p)
Hp = H.change_ring(k)
Hp.roots()
Out[32]:
[(77, 1), (64, 1), (63, 1), (57, 1), (46, 1), (30, 1), (19, 1)]
In [33]:
E = EllipticCurve(j=GF(p)(77))
E
Out[33]:
Elliptic Curve defined by y^2 = x^3 + 33*x + 58 over Finite Field of size 107
In [34]:
E.isogenies_prime_degree(3)
Out[34]:
[Isogeny of degree 3 from Elliptic Curve defined by y^2 = x^3 + 33*x + 58 over Finite Field of size 107 to Elliptic Curve defined by y^2 = x^3 + 5*x + 76 over Finite Field of size 107,
 Isogeny of degree 3 from Elliptic Curve defined by y^2 = x^3 + 33*x + 58 over Finite Field of size 107 to Elliptic Curve defined by y^2 = x^3 + 15*x + 65 over Finite Field of size 107]

By looking at the list of rational isogenies, we see that only the crater is defined over $𝔽_p$. Let's investigate more. The factorization of the division polynomials gives us the generators of the kernels of the isogenies

In [35]:
E.division_polynomial(3).factor()
Out[35]:
(3) * (x + 15) * (x + 49) * (x^2 + 43*x + 3)

However, by looking at the rational 3-torsion points, we see that only x = -15 defines a rational point, whereas x = -49 defines a point over a quadratic extension

In [36]:
E(0).division_points(3)
Out[36]:
[(0 : 1 : 0), (92 : 19 : 1), (92 : 88 : 1)]
In [37]:
E.lift_x(-15)
Out[37]:
(92 : 19 : 1)
In [38]:
E.change_ring(GF(p^2)).lift_x(-49)
Out[38]:
(58 : 67*z2 + 80 : 1)

Said otherwise, the Frobenius π has two distinct eigenvalues ±1 modulo 3: x = -15 is associated to +1, while x = -49 is associated to -1. We can follow the crater along the direction +1 by taking at every step the isogeny defined by the unique $𝔽_p$-rational group of order $3$

In [39]:
EE = E
print(EE.j_invariant())
while True:
    P = EE(0).division_points(3)[1]
    EE = EE.isogeny(P).codomain()
    print(EE.j_invariant())
    if EE.j_invariant() == E.j_invariant():
        break
77
30
57
63
19
46
64
77

Let's draw the graph via a depth first search, for confirmation

In [40]:
def explore(G, E):
    jE = E.j_invariant()
    G.add_vertex(jE)
    for i in E.isogenies_prime_degree(3):
        F = i.codomain()
        jF = F.j_invariant()
        if jF not in G:
            explore(G, F)
        G.add_edge(jE, jF)
    return G

explore(Graph(), E)
Out[40]:

To get some vertical isogenies, we need to move to an algebraic extension. The factorization pattern of the division polynomial (or the matrix of π) suggests that an extension of degree 2 is enough.

In [41]:
EE = E.change_ring(GF(p^2))
G = explore(Graph(), EE)
G
Out[41]:
Graph on 21 vertices (use the .plot() method to plot)
In [42]:
G.plot()
Out[42]:

To get the last level, we need to take a new extension. By the general theory, we now know that the Frobenius endomorphism of any curve $E/𝔽_{p^2}$ on the bottom level must have matrix $\left(\begin{smallmatrix}1&1\\0&1\end{smallmatrix}\right) \mod 3$, and thus that $π^3=1\mod 3$. Thus, an extension of degree 3 will give the missing level.

In [43]:
EE = E.change_ring(GF(p^6))
G = explore(Graph(), EE)
G
Out[43]:
Graph on 63 vertices (use the .plot() method to plot)
In [44]:
G.plot()
Out[44]:

What if we want the full volcano to be defined over $𝔽_p$? Instead of focusing on the fundamental discriminant (associated to the crater), we may shoot directly for the class group of the lower level. Because the conductor of the lower level is 9, we look at $D = -71·9^2$

In [45]:
D*3^4
Out[45]:
-5751
In [46]:
H = hilbert_class_polynomial(D*3^4)
H
Out[46]:
x^42 + 29373489319796294798995014230863504612817776539125678959130838513526546481104742462853277256213605581879*x^41 + 3058163468249674092134318314328457246566814848408098728420245732555182858494620890703520701107979054721617574989443341575936803548*x^40 + 862801874820186997307744690295950815899955592192766483022322337489934033418247048543498367312835008700737203383817261194769269602230733833174736710791346557123201438140325015124198637367867827868952535259144*x^39 + 89828931972822997234783473721638128774939742632034046565142362257114451149444650357941828776836222174071656390202503505274795042601878424606027004029745557343254331738223159925930936298621912463663611600161409289866234348461847307582*x^38 + 4676181899438673517047819265572469899106637272954568829797411350349988373422139243276003586159595581284687101184634145740898369656746996789302546673022107231715164651026069374868315010945124178735607853310644164763344874516736964294061667306338209220582632251*x^37 + 1427246459834825662622647921290934956544539732266864888793428638697482338720421384867350585851595354043954598206381093916042202322749344490068321012676937260580783906156043533582402579261806009374543383302191633411809330346581009206070960804313753546424658343293733217845278397937*x^36 + 1140436378857423483885732880744917285222785097053343666193321640327634101570136490336378015561148366740756397463194996218793476552187805391262753336204242950617713688113182792725078193896198242622284764374082631281622015797611190068568249380671873612335439201899735809985710270706039383206633008005499*x^35 - 7846894647855753013858705589015388246915766780910230255219829808572155617950482835490338371515959505494801991028690004003851417659495676551706607818376821853732995656268949644484120733387786904994456386180918725752929328179273433870747045657501836343279081965282853528465728347034068026862604592716249972854852810*x^34 + 86419122059579839419836812148240577229346641773012961444369211459087836485984253640914380832171746930898329298003028476273549987196855212775371273957755045642954636755727355807753893571246102847828012626254752438139480744434795498693872039356752393168823622220726061255470755476430306823683677518509040723675068171343883080786*x^33 - 27072550691652175086343132068039484585090832909695344001081487644874453688837996672487351066418400525429006459933776110188309847526753618124483692673427818108887633787689301896955266843641930632040469864334920972564504395084212260100602905644859649178848711249697923940507021857590480682230757731592142553318528566677544052493491136938902*x^32 + 8285742045111428888214029068538622323450579303952373715537403301901396327430399760608412982578568338965216517236783131821528872621035567994611923163812123363970749802931486212875546965962639586163039797479952843682634318225915582095222095478196777460723234261338229822040364699530997713983811017485662136931300728945229929375998827478091138751774453*x^31 - 8308937243065304216223490245651071129801915778628355702503408815950617797849176160812852073385735862111277039381632161217677833369008463249682306720520124878628918515148259845434951494778142789417233822079623560695854787898992937223928774280638429208962543002658338668146592513194050854739914332427781230359638196823842436404169298724366935289266262831319352*x^30 + 2541944492532655145232264184709735596005938713185831644372714920894314455280862948945468309041521046268013198359323323540178962193632089754294924208026387915554924745507166150480308417611606076451262197673713370881076721156591989832391347609026305741027169490169031891092284948501823290557230232242601108602228626051241066495092791135521098270049500784209742691174572300*x^29 - 6615646771914952560739620693213850395597466415338269549660923979309430464126769672663483288239210967523835083686347249310131225729673436177691044631368830715879618864164464307509984856103137974444159880719320879516380024894323763418241797095717314198884520646626131580599865569468146718897647496833870360792947482721471501993675398800711642922317256941208334001570118205591339918*x^28 + 2014322059007627069367061183687290141323422274392530348930528360728653633300709872042234933426264701143973496000850198268864509518632481271505880721492825167759937148748875845340911072021992435110780429849151164620933260324403488639008551382335776620528076732442483979454393594717414016049234857058891798724541433038563160819284777566880823864383143511425699572235604281760771662822935632774*x^27 - 10932601163627386430507088348191633067186389434797246416238204681050069084597198738472368877051710519005593207909078574724460360189813647141307124342467395534065363740060014409160733796990211691597417572656701244788952001257302767677254239764191264868938600724114312177997138532396109799103048393930328587215559238288678698190972318645863069818922645606332351337436248644728993369086789756959620450*x^26 + 22427394443633637286459284298841663332870403973620593647930119266381159126925680725981549578588147727606504438786190911497485549730696947240213047769572123801148645320551550722479990105163217259666547047396769294631615703584162454373295805198582634227399484787853188704410231593827637647888656151097239972001768704753332160690058486695240730722603718063308065531616937741063240940254498694594772830584405*x^25 - 7783943074492749018874857576651916651237868043786345577872881363997382310974928704324828609880937578252878371875686113957416492058465893148925685478213332062665199304719703171663337643726704838780266002064173780924799541793045148759021862718364650693377367707073039854853090411653268031002480543655486593626900858733653185229432053197430857916691718486943674682320468324381179901097971348221015763735743888191*x^24 - 4030850624276605643161977653235915427569821555905856435939760118144756580510889720885351383841269644349751381577622895463135792437365023008812347230297289936239063835691371131847019879708622704651018378164042046590018843349786297696293745239263126564344796530202691102370770262962121395272852746391300307213409819472225533514231215377349849207579376307204169867510482449138669797103332604462142285138039580601374943*x^23 + 2002877373771599503651511144763912288359821143151935405926644297624689459909383470186168024181351065496464808497634476531355328083564748979154028155578067202632370781177403332344104675788198543536843215606312435064229163935168656245614880286576279133641831813646325903746328985293258479152429259352397085601396986713054429294860936278444562794138001470256600742765880451943212959652619117386999332190105010736419614967360*x^22 + 1389229333893002908185414730642820809375959639797687849410726742113348937331611057213596407139412417167736613574686076557938243828984221494354943730339559886081497839366095738203745888091711513393539948801383441630663530910070073913224414702977831926401333390145966899108484150035194057242593765067326105083807888037754208458490690190532544292344382177688018632770295563328717853922008121647211205160548947464815572860878742163*x^21 - 973064968609160984915533056465327732745250521494010384296928220572041273932059069904356958547509766470968743693518294576764984941154609048033245178375300215430145473949428286076584480454036112985108933171712139394462534174454851287336982874181847712691791738490111102925947230237785449814614083375556937283466752595624934715242864692122170152357147131291151882349658123050284980632226224954106587881683806507492785338013172756289291*x^20 + 274348343091039965384281017149809019176089093356533849749488204591922254610078204123544274753947775232198667889432875794328729242003303493172126119823261853696316973752851331479810143244660039118132462846253230259616379634147972095184645761707380894613343998192591957495458220329622545478620926868955647094732875686911201729067871807262955481994971298448563045288134632929160527026329013609121526349611012343009248861084056097416703458126*x^19 - 38255358079377263721130886296247019120843639179970641270003901166489373224636580032205114867405112109125841103710216877032544395620690054749194459059707356346467629773923262740603931877321098688969770077241898134310914175888378023845684054319213274359349840106599914019190570885103533474824942575348283903914240100987663864904801770934984434835829444688274013662056419716546944220800885985464131646082041371975684523255231132725610355639673973*x^18 + 5381798418789620731977619209770449244698369613309330558066070724326534959499783522567357977912638829960511400109684771679583804570474851447491015267857626363931005523973289326453222221055377737178164792343808073008384924250688257823568270252175097474572298845254142089988361316796683735840196365150777421179356293311260940002632710308425579725707666558622135755520769990828206031672349382154157882332890944541412403842411198459437621642706143440632*x^17 - 927918541408217586780929560704311742673506125878898764625198762908941889343787752922031850134962645363081713457711045164648690059567449002861975404185303693870616009295264957116773637689312813026326317283603176220740343250955496061743595898585785581412488622116759061167787086207005624124961556033880357818344622767810283932118740991110573966165705344537306923597363300166671788599444111164760466430202419755302792000913144466948211858143588735226534986*x^16 + 98520201469099237484897789262154548119115230609197662409917341479169466683167047547878366348653830920092184425969067639913187426147971313462004033883573648108054712874932532027895076751708690256368894595607786137899225149530137766022324234426063081412434514300018137006224261597802213316555792703741441252504002163638412372030608846142464119060110521568594470459482323594092710416990665976919453014964031492865023204969881378261097072055607981609291119299706*x^15 - 3197965499442211657686826740505041927334201126607427071680083109056006534142604197237209716692182520994385426983961947118250692828362466067072357392042951550379783970938598505048286463375792760159783277540316330796691546249764712394859113254356486878387291954512253131610263413794530996809955911607684410117077723625228434559881972851408066040508269152726335374211402011686605670480615938738388315140976025429889526607696285972454626977594229517782420302040839046*x^14 + 57669316534112012160015098749980875341286069388715395941900892574643671068511899959430829281294399857624936119665437134161529003728738256393790178804829011850069216461628777607581783048925955374757012099325836993807693070034168194818975469631509826238330611837322974524979744302939774880165931896355366458637366294472713917509082348525010411651922719579263091173975948140699222393792901028425894697359347332030118951161839690092068980178422307351178811179940367440157*x^13 - 616873087914977963195625150149992404083805548675931669765895544507592751447067480339178457526119723919694633313335873324846151241282305506800430311239071078848719780556874389732061807715258399455313056204070563504498949559258903114842295012737938976457828624758625955798717395032150661278746719862466725834911893488994243986247661831327114286442772186794487537772419379719645300536635658982335485242713993144640886945384539348119410384322803376463213857472981276566044416*x^12 + 4218908649716485445520099577967208312908847283943538168244719148307833432185852864355152517728783070807192370099085887942233510499609706117478898257437074236058163651505705605780144183634976549684568135126799496676163433941343244486548494249657742966627810865281381135739863977454538850893397773866702918044334587217832999682138468962799226400731789323858242641185516966064538055747893968480899400995202690842706118204887142858840263730539047298413276000380576133866656414217*x^11 - 19402955028065563578287237733279132288371732816427524690211787746120538562052781815250587653880418696389432504033931011749270418255183031932031568116326143847525249870904419211720412928142231478995537815683923232903528291533396307239429554173060150872663833919779034381319796831180587423947728588263745443602554740587612179771144946561892413782457396219003281379389204607825176492191441020574355924053965908128477740710883838874644288983968953794452087695666127054036683682285321*x^10 + 61794562079778201923697516599144234170465325916407114282301663431611304062091636790809844698067179116544288793747291317304124176894462952085136096779127746611897363659463030206954705031240028801690666416224529662832876675400656987521189322274462532588362554631192873177221981961368824683301893531266733470958271489818455967573039272647642733540340932586615744080302266251646463762934835840046053145975944569540776777276988826648968712247082705185949441833471734389738686071297133931*x^9 - 138331146448216723156361682523420069768980074348261528916614629435500401964483058928370002369065784535922841211612970996277680813247890276350257244962654755438052447230068411754879126518068159165831509191618830431698285809000724340869800894181941611977829681994109461573560821745051680747036797942434467492456922171612094608039771649873923564997306748960083825720222839241229729174787318111262313675809763262667642022394505428689286803628579506078177303744155479687117319615993212544565*x^8 + 218480890681456981877140173866098483346340548113014322855719974874397030048485348215892139316274500211831761299317335394432161010130138247340346929025041749754863198023961165170644353248247200108996784439959904118509118190279105559991694550841494601113142840710534924858590205102024734526361826048707218576913532078122213465060777808599111625632926382908739237895639662149745113664724885700711607280724099961125196561256243523872428378250536135913952206514604854041728944137625779888272440*x^7 - 241808993628121871110640327316018706159700725511956489056123405468558251569157497859828907714700612650181240618973608943828481033668565837799086644912518036037491330676379842604029224582676270215953717132151467975282083862665614062707893977438549600683491124026269237818205605978932287260792934097972201278377947579852885915161288301111640174555091786060913712653292981312779417257966725768821671163814400844469337393707692555608505952927388772750391511487190745296365621437832065310404010851*x^6 + 183896244404488182704708408966979573883662857377936699391418309336425388044827623609700804912675498461646072160983889744795451086449390914345395760188335061708040567911804521608828852189317589485206508366905097996394590351027777077028233131064394281760707201702887636915653287625691469658041827361988348327295699280033304233738297567387482604771666630596338666433387589102867391417851728120385263409191894557768347525576550187106902635783844545737282698100678399305697961940794203377680216721138*x^5 - 92307456871157814950049275263663417579506464110026746557158776134822014415327835308003211463190188914231550742229926167505460681502676551302155179659390627400470781331713847815458371226200034565408914116142626062784986001010021913319240267645386540709039520141737938825733515533893686444299795984462296629307921549257739523370841814474402033996209548745952923308464973878555086818346178871744478790067757325270951239280270666520133405908386674642344586071638245847974248703497869489524592326747299*x^4 + 28070241959754879926649219922596319945801478849603290007755347145423183481075080600255961801806661169199648180239289342175801843691123865880748326000571687724632059917673186524857411318128507133597241272514749304668316812794659978491036267231504032805725994075579289574847254729727708080249810995566712585339955915568922495009061054228984844310645143504431113409730130583867048887124920264476773198262635805277096201378735761363405248320920921317044596463738566836721212002018627443644544978851248864*x^3 - 4138900059957431706768887027177415698089598093568313454663308009493068684594624551127972175408941799884804427082003299786122669331994570264352964043375422396830060618576904366066628939030457644739485355032886575786331809934597600777366578634531738383162315602826375919249147372894739044005641652212737566227331358562360978121173775641767361402302591445090164603175244301287742095816154471039455222090232278579901651047682580768818155098142546255299130696330801985811460209104568583868863953218957439421*x^2 + 150462696912378180395154378497266509528588026197753883618986543690912747796410884025758805733089809710149812973756922202067767228088739303598596979738154232706132373247804421267196139148630266031258233674283206057961768790862934604076630197233848556724997154094925347317312156195891741572983969750546039892602865332729347730396024951395327288886867367716539738616203513062733596016693655355522630082504966936182335639359269955156234604277237490784103665740979506999435226740851868180806172716102148351586*x - 65130997790079175632040424286946542184847314429328563631539965474105895953650035819660467912688405084931395936368946742899122304386482787730563837730049206912027706045061562361026224583443631285806373342914016999635784591396332288138542563247522161425906142097127590638538595154985967539502242326241560298107760202862887980316012391064109336452626431486314431921052090003148508902868570465567090196345064216237751010542677298617446396575445601220001301525917675458127398720523887067505457811141828772204191

As expected, the lower level has class number 42. We proceed like before.

In [47]:
for p in primes(3, 10000):
    if GF(p)(D*3^4).is_square():
        Hp = H.change_ring(GF(p))
        if Hp.splitting_field('x').degree() == 1:
            print(p, Hp.is_squarefree())
(71, False)
(5851, True)
(6007, True)
(6151, True)
(6427, True)
(6907, True)
(7351, True)
(7687, True)
(7867, True)
(8887, True)
In [48]:
hilbert_class_polynomial(D*3^4).change_ring(GF(5851)).factor()
Out[48]:
(x + 106) * (x + 148) * (x + 248) * (x + 282) * (x + 642) * (x + 1032) * (x + 1062) * (x + 1140) * (x + 1392) * (x + 1441) * (x + 1618) * (x + 1879) * (x + 1941) * (x + 2223) * (x + 2595) * (x + 2596) * (x + 2741) * (x + 2745) * (x + 2773) * (x + 2788) * (x + 2835) * (x + 2899) * (x + 3064) * (x + 3525) * (x + 3593) * (x + 3655) * (x + 3679) * (x + 3710) * (x + 3712) * (x + 3789) * (x + 3846) * (x + 3862) * (x + 3915) * (x + 4009) * (x + 4155) * (x + 4210) * (x + 4262) * (x + 4543) * (x + 4592) * (x + 5527) * (x + 5591) * (x + 5657)
In [49]:
E = EllipticCurve(j=GF(5851)(-106))
G = explore(Graph(), E)
G
Out[49]:
Graph on 63 vertices (use the .plot() method to plot)
In [50]:
G.plot()
Out[50]: