A: (-1, 0)
B: (1, 0)
a = LineBisector(A, B)
b = Segment(A, B)
C = Intersect(a, b)
P = Point(a)
c = Circle(P, Segment[C, B])
F = Intersect(c, b, 1)
G = Intersect(c, b, 2)
d = Ellipse(F, G, P)
D = Intersect(d, a, 2)
e = Segment(P, D)
Q = Point(d)
Q' = Mirror(Q, C)
f = Segment(Q, Q')
g = Tangent(Q, d)
h, n_1 = Tangent(Q', d)
i = Line(C, h)
E = Intersect(d, i, 1)
H = Intersect(d, i, 2)
j = Tangent(E, d)
k = Tangent(H, d)
I = Intersect(h, j)
K = Intersect(g, k)
L = Intersect(h, k)
J = Intersect(g, j)
l = Line(J, e)
m = Line(K, e)
n = Line(L, e)
p = Line(I, e)
q = Segment(E, H)
r = Segment(J, K)
s = Segment(K, L)
t = Segment(L, I)
a_1 = Segment(I, J)
c_1 = Circle(I, Segment[F, G])
d_1 = Circle(J, Segment[F, G])
e_1 = Circle(K, Segment[F, G])
f_1 = Circle(L, Segment[F, G])
M = Intersect(c_1, p, 1)
O = Intersect(e_1, m, 1)
R = Intersect(f_1, n, 1)
b_1 = Segment(I, M)
i_1 = Segment(O, K)
N = Intersect(d_1, l, 1)
g_1 = Segment(M, N)
h_1 = Segment(N, O)
j_1 = Segment(O, R)
k_1 = Segment(R, M)
l_1 = Segment(R, L)
m_1 = Segment(N, J)