1<!-- path visualizer -->
2<html>
3<head>
4<div style="height:0">
5
6<div id="testSimplifyQuadratic1">
7    SkPath path, out;
8    path.moveTo(0, 0);
9    path.quadTo(1, 0, 1, 1);
10    path.close();
11    path.moveTo(1, 0);
12    path.quadTo(0, 0, 0, 1);
13    path.close();
14    testSimplify(path, true, out, bitmap);
15}
16</div>
17
18<div id="testSimplifyQuadratic2">
19    SkPath path, out;
20    path.moveTo(0, 0);
21    path.quadTo(20, 0, 20, 20);
22    path.close();
23    path.moveTo(20, 0);
24    path.quadTo(0, 0, 0, 20);
25    path.close();
26    testSimplify(path, true, out, bitmap);
27}
28</div>
29
30<div id="testSimplifyQuadratic3">
31    SkPath path, out;
32    path.moveTo(0, 0);
33    path.quadTo(20, 0, 20, 20);
34    path.close();
35    path.moveTo(0, 20);
36    path.quadTo(0, 0, 20, 0);
37    path.close();
38    testSimplify(path, true, out, bitmap);
39}
40</div>
41
42<div id="testSimplifyQuadratic4">
43    SkPath path, out;
44    path.moveTo(0, 20);
45    path.quadTo(20, 0, 40, 20);
46    path.close();
47    path.moveTo(40, 10);
48    path.quadTo(20, 30, 0, 10);
49    path.close();
50    testSimplify(path, true, out, bitmap);
51    drawAsciiPaths(path, out, true);
52}
53</div>
54
55<div id="testSimplifyQuadratic5">
56    SkPath path, out;
57    path.moveTo(0, 0);
58    path.quadTo(0, 0, 0, 0);
59    path.lineTo(0, 0);
60    path.close();
61    path.moveTo(0, 0);
62    path.lineTo(0, 0);
63    path.quadTo(0, 0, 0, 1);
64    path.close();
65    testSimplify(path, true, out, bitmap);
66    drawAsciiPaths(path, out, true);
67}
68</div>
69
70<div id="testSimplifyQuadratic6">
71    SkPath path, out;
72    path.moveTo(0, 0);
73    path.quadTo(0, 0, 0, 0);
74    path.lineTo(1, 0);
75    path.close();
76    path.moveTo(0, 0);
77    path.lineTo(0, 0);
78    path.quadTo(1, 0, 0, 1);
79    path.close();
80    testSimplify(path, true, out, bitmap);
81    drawAsciiPaths(path, out, true);
82}
83</div>
84
85<div id="testSimplifyQuadratic7">
86    SkPath path, out;
87    path.moveTo(0, 0);
88    path.quadTo(0, 0, 0, 0);
89    path.lineTo(0, 1);
90    path.close();
91    path.moveTo(0, 0);
92    path.lineTo(0, 0);
93    path.quadTo(1, 0, 0, 2);
94    path.close();
95    testSimplify(path, true, out, bitmap);
96    drawAsciiPaths(path, out, true);
97}
98</div>
99
100<div id="testSimplifyQuadratic8">
101    SkPath path, out;
102    path.moveTo(0, 0);
103    path.quadTo(0, 0, 0, 0);
104    path.lineTo(0, 0);
105    path.close();
106    path.moveTo(0, 0);
107    path.lineTo(0, 0);
108    path.quadTo(1, 0, 0, 2);
109    path.close();
110    testSimplify(path, true, out, bitmap);
111    drawAsciiPaths(path, out, true);
112}
113</div>
114
115<div id="testSimplifyQuadratic9">
116    SkPath path, out;
117    path.moveTo(0, 0);
118    path.quadTo(0, 0, 0, 0);
119    path.lineTo(1, 1);
120    path.close();
121    path.moveTo(0, 0);
122    path.lineTo(0, 0);
123    path.quadTo(1, 0, 2, 2);
124    path.close();
125    testSimplify(path, true, out, bitmap);
126    drawAsciiPaths(path, out, true);
127}
128</div>
129
130<div id="testSimplifyQuadratic10">
131    SkPath path, out;
132    path.moveTo(0, 0);
133    path.quadTo(0, 0, 0, 0);
134    path.lineTo(0, 0);
135    path.close();
136    path.moveTo(0, 0);
137    path.lineTo(0, 1);
138    path.quadTo(1, 1, 1, 2);
139    path.close();
140    testSimplify(path, true, out, bitmap);
141    drawAsciiPaths(path, out, true);
142}
143</div>
144
145<div id="testSimplifyQuadratic11">
146    SkPath path, out;
147    path.moveTo(0, 0);
148    path.quadTo(0, 0, 0, 0);
149    path.lineTo(0, 2);
150    path.close();
151    path.moveTo(0, 0);
152    path.lineTo(2, 1);
153    path.quadTo(2, 2, 3, 3);
154    path.close();
155    testSimplify(path, true, out, bitmap);
156    drawAsciiPaths(path, out, true);
157}
158</div>
159
160<div id="testSimplifyQuadratic12">
161    SkPath path, out;
162    path.moveTo(0, 0);
163    path.lineTo(0, 2);
164    path.lineTo(0, 0);
165    path.close();
166    path.moveTo(3, 0);
167    path.quadTo(1, 1, 0, 2);
168    path.lineTo(3, 0);
169    path.close();
170    testSimplify(path, true, out, bitmap);
171    drawAsciiPaths(path, out, true);
172}
173</div>
174
175<div id="testSimplifyQuadratic13">
176    SkPath path, out;
177path.moveTo(0, 0);
178path.quadTo(0, 0, 1, 0);
179path.lineTo(1, 1);
180path.lineTo(0, 0);
181path.close();
182path.moveTo(0, 0);
183path.quadTo(3, 0, 1, 1);
184path.lineTo(0, 0);
185path.close();
186    testSimplify(path, true, out, bitmap);
187    drawAsciiPaths(path, out, true);
188}
189</div>
190
191<div id="testSimplifyQuadratic14">
192    SkPath path, out;
193    path.moveTo(0, 0);
194    path.quadTo(0, 0, 0, 0);
195    path.lineTo(1, 1);
196    path.close();
197    path.moveTo(0, 0);
198    path.lineTo(0, 0);
199    path.quadTo(0, 1, 2, 1);
200    path.close();
201    testSimplify(path, true, out, bitmap);
202    drawAsciiPaths(path, out, true);
203}
204</div>
205
206<div id="testSimplifyQuadratic15">
207    SkPath path, out;
208    path.moveTo(0, 0);
209    path.quadTo(0, 0, 1, 3);
210    path.lineTo(3, 3);
211    path.close();
212    path.moveTo(0, 1);
213    path.lineTo(1, 1);
214    path.quadTo(0, 3, 3, 3);
215    path.close();
216    testSimplify(path, true, out, bitmap);
217    drawAsciiPaths(path, out, true);
218}
219</div>
220
221<div id="testSimplifyQuadratic16">
222    SkPath path, out;
223    path.moveTo(0, 0);
224    path.quadTo(0, 0, 0, 0);
225    path.lineTo(0, 1);
226    path.close();
227    path.moveTo(0, 0);
228    path.lineTo(0, 0);
229    path.quadTo(1, 0, 0, 1);
230    path.close();
231    testSimplify(path, true, out, bitmap);
232    drawAsciiPaths(path, out, true);
233}
234</div>
235
236<div id="testSimplifyQuadratic17">
237    SkPath path, out;
238    path.moveTo(8, 8);
239    path.quadTo(10, 10, 8, -10);
240    path.close();
241    path.moveTo(8, 8);
242    path.quadTo(12, 12, 14, 4);
243    path.close();
244    path.moveTo(8, 8);
245    path.quadTo(9, 9, 10, 8);
246    path.close();
247    testSimplify(path, true, out, bitmap);
248    drawAsciiPaths(path, out, true);
249}
250</div>
251
252<div id="testSimplifyQuadratic18">
253    SkPath path, out;
254    path.moveTo(8.0000000000000071, 8.0000000000000071);
255    path.quadTo(8.7289570079366854, 8.7289570079366889, 9.3914917259458743, 9.0593802763083691);
256    path.close();
257    path.moveTo(8.0000000000000142, 8.0000000000000142);
258    path.quadTo(8.1250000000000107, 8.1250000000000071, 8.2500000000000071, 8.2187500000000053);
259    path.close();
260    testSimplify(path, true, out, bitmap);
261    drawAsciiPaths(path, out, true);
262</div>
263
264<div id="testSimplifyQuadratic19">
265    SkPath path, simple;
266    path.moveTo(0,4);
267    path.lineTo(6,4);
268    path.lineTo(3,1);
269    path.close();
270    path.moveTo(2,3);
271    path.lineTo(3,2);
272    path.lineTo(4,3);
273    path.close();
274    testSimplifyx(path);
275</div>
276
277<div id="testSimplifyQuadratic20">
278    SkPath path, simple;
279    path.moveTo(0,4);
280    path.lineTo(6,4);
281    path.lineTo(3,1);
282    path.close();
283    path.moveTo(2,3);
284    path.lineTo(4,3);
285    path.lineTo(3,2);
286    path.close();
287    testSimplifyx(path);
288</div>
289
290<div id="testSimplifyQuadratic21">
291    SkPath path, simple;
292    path.moveTo(0,4);
293    path.lineTo(8,4);
294    path.lineTo(4,0);
295    path.close();
296    path.moveTo(2,2);
297    path.lineTo(3,3);
298    path.lineTo(4,2);
299    path.close();
300    testSimplifyx(path);
301</div>
302
303<div id="testLine5">
304    path.moveTo(3,0);
305    path.lineTo(6,2);
306    path.lineTo(0,2);
307    path.close();
308    path.moveTo(3,0);
309    path.lineTo(6,2);
310    path.lineTo(0,2);
311    path.close();
312</div>
313
314<div id="testLine6">
315    SkPath path, simple;
316    path.moveTo(0,0);
317    path.lineTo(4,0);
318    path.lineTo(2,2);
319    path.close();
320    path.moveTo(2,0);
321    path.lineTo(6,0);
322    path.lineTo(4,2);
323    path.close();
324    testSimplifyx(path);
325</div>
326
327<div id="testLine7">
328    SkPath path, simple;
329    path.moveTo(0,0);
330    path.lineTo(4,0);
331    path.lineTo(2,2);
332    path.close();
333    path.moveTo(6,0);
334    path.lineTo(2,0);
335    path.lineTo(4,2);
336    path.close();
337    testSimplifyx(path);
338</div>
339
340<div id="testLine7b">
341    path.moveTo(0,0);
342    path.lineTo(4,0);
343    path.close();
344    path.moveTo(6,0);
345    path.lineTo(2,0);
346    path.lineTo(4,2);
347    path.close();
348</div>
349
350<div id="testLine9">
351    SkPath path, simple;
352    path.moveTo(0,4);
353    path.lineTo(4,4);
354    path.lineTo(2,2);
355    path.close();
356    path.moveTo(6,4);
357    path.lineTo(2,4);
358    path.lineTo(4,2);
359    path.close();
360    testSimplifyx(path);
361</div>
362
363<div id="testLine12">
364    path.moveTo(0,4);
365    path.lineTo(6,4);
366    path.lineTo(3,1);
367    path.close();
368    path.moveTo(2,3);
369    path.lineTo(3,2);
370    path.lineTo(4,3);
371    path.close();
372</div>
373
374<div id="testLine13">
375    path.moveTo(6,4);
376    path.lineTo(0,4);
377    path.lineTo(3,1);
378    path.close();
379    path.moveTo(3,2);
380    path.lineTo(2,3);
381    path.lineTo(4,3);
382    path.close();
383</div>
384
385<div id="testLine16">
386    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
387    path.addRect(0, 4, 9, 9, SkPath::kCW_Direction);
388</div>
389
390<div id="testLine17">
391    SkPath path, simple;
392    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
393    path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
394    testSimplifyx(path);
395</div>
396
397<div id="testLine19">
398    SkPath path, simple;
399    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
400    path.addRect(12, 16, 21, 21, SkPath::kCW_Direction);    
401    testSimplifyx(path);
402</div>
403
404<div id="testLine22">
405    path.addRect(0, 12, 12, 12, SkPath::kCW_Direction);
406    path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
407</div>
408
409<div id="testLine24">
410    path.addRect(0, 18, 12, 12, SkPath::kCW_Direction);
411    path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
412</div>
413
414<div id="testLine28">
415    SkPath path, simple;
416    path.addRect(0, 6, 12, 12, SkPath::kCW_Direction);
417    path.addRect(0, 0, 9, 9, SkPath::kCW_Direction);
418    testSimplifyx(path);
419</div>
420
421<div id="testLine29">
422    SkPath path, simple;
423    path.addRect(0, 18, 12, 12, SkPath::kCW_Direction);
424    path.addRect(12, 12, 21, 21, SkPath::kCW_Direction);
425    testSimplifyx(path);
426</div>
427
428<div id="testLine30">
429    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
430    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
431    path.addRect(4, 4, 13, 13, SkPath::kCW_Direction);
432</div>
433
434<div id="testLine31">
435    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
436    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
437    path.addRect(0, 4, 9, 9, SkPath::kCW_Direction);
438</div>
439
440<div id="testLine32">
441    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
442    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
443    path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
444</div>
445
446<div id="testLine33">
447    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
448    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
449    path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
450</div>
451
452<div id="testLine34">
453    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
454    path.addRect(0, 6, 12, 12, SkPath::kCW_Direction);
455    path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
456</div>
457
458<div id="testLine35">
459    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
460    path.addRect(6, 0, 18, 18, SkPath::kCW_Direction);
461    path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
462</div>
463
464<div id="testLine36">
465    path.addRect(0, 10, 20, 20, SkPath::kCW_Direction);
466    path.addRect(6, 12, 18, 18, SkPath::kCW_Direction);
467    path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
468</div>
469
470<div id="testLine37">
471    path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
472    path.addRect(18, 24, 30, 30, SkPath::kCW_Direction);
473    path.addRect(0, 0, 9, 9, SkPath::kCW_Direction);
474</div>
475
476<div id="testLine38">
477    path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
478    path.addRect(6, 12, 18, 18, SkPath::kCW_Direction);
479    path.addRect(12, 12, 21, 21, SkPath::kCW_Direction);
480</div>
481
482<div id="testLine39">
483    path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
484    path.addRect(12, 6, 24, 24, SkPath::kCW_Direction);
485    path.addRect(12, 4, 21, 21, SkPath::kCW_Direction);
486</div>
487
488<div id="testLine40">
489    path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
490    path.addRect(12, 18, 24, 24, SkPath::kCW_Direction);
491    path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
492</div>
493
494<div id="testLine41">
495    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
496    path.addRect(18, 24, 30, 30, SkPath::kCW_Direction);
497    path.addRect(12, 0, 21, 21, SkPath::kCW_Direction);
498</div>
499
500<div id="testLine42">
501    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
502    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
503    path.addRect(8, 16, 17, 17, SkPath::kCW_Direction);
504</div>
505
506<div id="testLine43">
507    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
508    path.addRect(6, 24, 18, 18, SkPath::kCW_Direction);
509    path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
510</div>
511
512<div id="testLine44">
513    path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
514    path.addRect(18, 0, 30, 30, SkPath::kCW_Direction);
515    path.addRect(18, 32, 27, 36, SkPath::kCCW_Direction);
516</div>
517
518<div id="testLine45">
519    path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
520    path.addRect(18, 0, 30, 30, SkPath::kCW_Direction);
521    path.addRect(24, 32, 33, 36, SkPath::kCW_Direction);
522</div>
523
524<div id="testLine46">
525    path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
526    path.addRect(24, 0, 36, 36, SkPath::kCW_Direction);
527    path.addRect(24, 32, 33, 36, SkPath::kCW_Direction);
528</div>
529
530<div id="testLine47">
531    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
532    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
533    path.addRect(0, 0, 9, 9, SkPath::kCCW_Direction);
534</div>
535
536<div id="testLine48">
537    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
538    path.addRect(0, 6, 12, 12, SkPath::kCW_Direction);
539    path.addRect(0, 0, 9, 9, SkPath::kCCW_Direction);
540</div>
541
542<div id="testLine49">
543    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
544    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
545    path.addRect(0, 0, 9, 9, SkPath::kCW_Direction);
546</div>
547
548<div id="testLine50">
549    path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
550    path.addRect(24, 20, 36, 30, SkPath::kCW_Direction);
551</div>
552
553<div id="testLine51">
554    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
555    path.addRect(0, 12, 12, 12, SkPath::kCW_Direction);
556    path.addRect(4, 12, 13, 13, SkPath::kCCW_Direction);
557</div>
558
559<div id="testLine52">
560    path.addRect(0, 30, 20, 20, SkPath::kCW_Direction);
561    path.addRect(6, 20, 18, 30, SkPath::kCW_Direction);
562    path.addRect(32, 0, 36, 41, SkPath::kCW_Direction);
563</div>
564
565<div id="testLine53">
566    path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
567    path.addRect(12, 20, 24, 30, SkPath::kCW_Direction);
568    path.addRect(12, 32, 21, 36, SkPath::kCCW_Direction);
569</div>
570
571<div id="testLine54">
572    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
573    path.addRect(6, 0, 18, 18, SkPath::kCW_Direction);
574    path.addRect(8, 4, 17, 17, SkPath::kCCW_Direction);
575</div>
576
577<div id="testLine55">
578    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
579    path.addRect(6, 6, 18, 18, SkPath::kCW_Direction);
580    path.addRect(4, 4, 13, 13, SkPath::kCCW_Direction);
581</div>
582
583<div id="testLine56">
584    path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
585    path.addRect(18, 20, 30, 30, SkPath::kCW_Direction);
586    path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
587</div>
588
589<div id="testLine57">
590    path.addRect(20, 0, 40, 40, SkPath::kCW_Direction);
591    path.addRect(20, 0, 30, 40, SkPath::kCW_Direction);
592    path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
593</div>
594
595<div id="testLine58">
596    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
597    path.addRect(0, 0, 12, 12, SkPath::kCCW_Direction);
598    path.addRect(0, 12, 9, 9, SkPath::kCCW_Direction);
599</div>
600
601<div id="testLine59">
602    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
603    path.addRect(6, 6, 18, 18, SkPath::kCCW_Direction);
604    path.addRect(4, 4, 13, 13, SkPath::kCCW_Direction);
605</div>
606
607<div id="testLine60">
608    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
609    path.addRect(6, 12, 18, 18, SkPath::kCCW_Direction);
610    path.addRect(4, 12, 13, 13, SkPath::kCCW_Direction);
611</div>
612
613<div id="testLine61">
614    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
615    path.addRect(12, 0, 24, 24, SkPath::kCCW_Direction);
616    path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
617</div>
618
619<div id="testLine62">
620    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
621    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
622    path.addRect(0, 12, 12, 12, SkPath::kCW_Direction);
623    path.addRect(4, 12, 13, 13, SkPath::kCCW_Direction);
624</div>
625
626<div id="testLine63">
627    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
628    path.addRect(0, 10, 20, 20, SkPath::kCW_Direction);
629    path.addRect(0, 6, 12, 12, SkPath::kCCW_Direction);
630    path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
631</div>
632
633<div id="testLine64">
634    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
635    path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
636    path.addRect(18, 6, 30, 30, SkPath::kCW_Direction);
637</div>
638
639<div id="testLine65">
640    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
641    path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
642    path.addRect(24, 0, 36, 36, SkPath::kCW_Direction);
643    path.addRect(32, 6, 36, 41, SkPath::kCCW_Direction);
644</div>
645
646<div id="testLine66">
647    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
648    path.addRect(0, 30, 20, 20, SkPath::kCW_Direction);
649    path.addRect(12, 20, 24, 30, SkPath::kCW_Direction);
650</div>
651
652<div id="testLine67">
653    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
654    path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
655    path.addRect(24, 20, 36, 30, SkPath::kCW_Direction);
656    path.addRect(32, 0, 36, 41, SkPath::kCW_Direction);
657</div>
658
659<div id="testLine68a">
660    path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
661    path.addRect(2, 2, 6, 6, SkPath::kCW_Direction);
662    path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
663</div>
664
665<div id="testLine68b">
666    path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
667    path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
668    path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
669</div>
670
671<div id="testLine68c">
672    path.addRect(0, 0, 8, 8, SkPath::kCCW_Direction);
673    path.addRect(2, 2, 6, 6, SkPath::kCW_Direction);
674    path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
675</div>
676
677<div id="testLine68d">
678    path.addRect(0, 0, 8, 8, SkPath::kCCW_Direction);
679    path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
680    path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
681</div>
682
683<div id="testLine68e">
684    path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
685    path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
686    path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
687    path.addRect(1, 2, 2, 2, SkPath::kCW_Direction);
688</div>
689
690<div id="testLine68f">
691    path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
692    path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
693    path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
694    path.addRect(1, 2, 2, 2, SkPath::kCW_Direction);
695</div>
696
697<div id="testLine69">
698    path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
699    path.addRect(0, 20, 12, 30, SkPath::kCW_Direction);
700    path.addRect(12, 32, 21, 36, SkPath::kCW_Direction);
701</div>
702
703<div id="testLine70">
704    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
705    path.addRect(0, 24, 12, 12, SkPath::kCW_Direction);
706    path.addRect(12, 32, 21, 36, SkPath::kCCW_Direction);
707</div>
708
709<div id="testLine71">
710    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
711    path.addRect(12, 0, 24, 24, SkPath::kCW_Direction);
712    path.addRect(12, 32, 21, 36, SkPath::kCW_Direction);
713</div>
714
715<div id="testLine72">
716    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
717    path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
718    path.addRect(6, 20, 18, 30, SkPath::kCW_Direction);
719</div>
720
721<div id="testLine73">
722    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
723    path.addRect(0, 40, 20, 20, SkPath::kCW_Direction);
724    path.addRect(0, 20, 12, 30, SkPath::kCW_Direction);
725    path.addRect(0, 0, 9, 9, SkPath::kCCW_Direction);
726</div>
727
728<div id="testLine74">
729    path.addRect(20, 30, 40, 40, SkPath::kCW_Direction);
730    path.addRect(24, 20, 36, 30, SkPath::kCCW_Direction);
731    path.addRect(32, 24, 36, 41, SkPath::kCCW_Direction);
732</div>
733
734<div id="testLine75">
735    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
736    path.addRect(10, 0, 30, 30, SkPath::kCCW_Direction);
737    path.addRect(18, 0, 30, 30, SkPath::kCCW_Direction);
738    path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
739</div>
740
741<div id="testLine76">
742    path.addRect(36, 0, 66, 60, SkPath::kCW_Direction);
743    path.addRect(10, 20, 40, 30, SkPath::kCW_Direction);
744    path.addRect(24, 20, 36, 30, SkPath::kCCW_Direction);
745    path.addRect(32, 6, 36, 41, SkPath::kCCW_Direction);
746</div>
747
748<div id="testLine77">
749    path.addRect(20, 0, 40, 40, SkPath::kCW_Direction);
750    path.addRect(24, 6, 36, 36, SkPath::kCCW_Direction);
751    path.addRect(24, 32, 33, 36, SkPath::kCCW_Direction);
752</div>
753
754<div id="testLine78">
755    path.addRect(0, 0, 30, 60, SkPath::kCW_Direction);
756    path.addRect(10, 20, 30, 30, SkPath::kCCW_Direction);
757    path.addRect(18, 20, 30, 30, SkPath::kCCW_Direction);
758    path.addRect(32, 0, 36, 41, SkPath::kCCW_Direction);
759</div>
760
761<div id="testLine79">
762    path.addRect(0, 36, 60, 30, SkPath::kCW_Direction);
763    path.addRect(10, 30, 40, 30, SkPath::kCW_Direction);
764    path.addRect(0, 20, 12, 30, SkPath::kCCW_Direction);
765    path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
766</div>
767
768<div id="testLine81">
769    path.addRect(-1, -1, 3, 3, SkPath::kCW_Direction);
770    path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
771    path.addRect(1, 1, 2, 2, SkPath::kCCW_Direction);
772</div>
773
774<div id="testDegenerate1">
775    path.moveTo(0, 0);
776    path.lineTo(0, 0);
777    path.lineTo(2, 0);
778    path.close();
779    path.moveTo(0, 0);
780    path.lineTo(1, 0);
781    path.lineTo(2, 0);
782    path.close();
783</div>
784
785<div id="testDegenerate2">
786    path.moveTo(0, 0);
787    path.lineTo(0, 0);
788    path.lineTo(0, 0);
789    path.close();
790    path.moveTo(0, 0);
791    path.lineTo(1, 0);
792    path.lineTo(0, 1);
793    path.close();
794</div>
795
796<div id="testDegenerate3">
797    path.moveTo(0, 0);
798    path.lineTo(2, 0);
799    path.lineTo(1, 0);
800    path.close();
801    path.moveTo(0, 0);
802    path.lineTo(0, 0);
803    path.lineTo(3, 0);
804    path.close();
805</div>
806
807<div id="testDegenerate4">
808    path.moveTo(0, 0);
809    path.lineTo(1, 0);
810    path.lineTo(1, 3);
811    path.close();
812    path.moveTo(1, 0);
813    path.lineTo(1, 1);
814    path.lineTo(1, 2);
815    path.close();
816</div>
817
818<div id="testNondegenerate1">
819    path.moveTo(0, 0);
820    path.lineTo(3, 0);
821    path.lineTo(1, 3);
822    path.close();
823    path.moveTo(1, 1);
824    path.lineTo(2, 1);
825    path.lineTo(1, 2);
826    path.close();
827</div>
828
829<div id="testNondegenerate2">
830    path.moveTo(1, 0);
831    path.lineTo(0, 1);
832    path.lineTo(1, 1);
833    path.close();
834    path.moveTo(0, 2);
835    path.lineTo(0, 3);
836    path.lineTo(1, 2);
837    path.close();
838</div>
839
840<div id="testNondegenerate3">
841    path.moveTo(0, 0);
842    path.lineTo(1, 0);
843    path.lineTo(2, 1);
844    path.close();
845    path.moveTo(0, 1);
846    path.lineTo(1, 1);
847    path.lineTo(0, 2);
848    path.close();
849</div>
850
851<div id="testNondegenerate4">
852    path.moveTo(1, 0);
853    path.lineTo(0, 1);
854    path.lineTo(1, 2);
855    path.close();
856    path.moveTo(0, 2);
857    path.lineTo(0, 3);
858    path.lineTo(1, 3);
859    path.close();
860</div>
861
862<div id="testQuadralateral5">
863    path.moveTo(0, 0);
864    path.lineTo(0, 0);
865    path.lineTo(1, 0);
866    path.lineTo(1, 1);
867    path.close();
868    path.moveTo(0, 0);
869    path.lineTo(2, 2);
870    path.lineTo(3, 2);
871    path.lineTo(3, 3);
872    path.close();
873</div>
874
875<div id="testQuadralateral6">
876    path.moveTo(0, 0);
877    path.lineTo(0, 0);
878    path.lineTo(1, 0);
879    path.lineTo(1, 1);
880    path.close();
881    path.moveTo(1, 0);
882    path.lineTo(2, 0);
883    path.lineTo(0, 2);
884    path.lineTo(2, 2);
885    path.close();
886</div>
887
888<div id="testFauxQuadralateral6">
889    path.moveTo(0, 0);
890    path.lineTo(1, 0);
891    path.lineTo(1, 1);
892    path.close();
893    path.moveTo(1, 0);
894    path.lineTo(2, 0);
895    path.lineTo(1.333, 0.667);
896    path.close();
897    path.moveTo(1.333, 0.667);
898    path.lineTo(0, 2);
899    path.lineTo(2, 2);
900    path.close();
901</div>
902
903<div id="testFauxQuadralateral6a">
904    path.moveTo(0, 0);
905    path.lineTo(3, 0);
906    path.lineTo(3, 3);
907    path.close();
908    path.moveTo(3, 0);
909    path.lineTo(6, 0);
910    path.lineTo(4, 2);
911    path.close();
912    path.moveTo(4, 2);
913    path.lineTo(0, 6);
914    path.lineTo(6, 6);
915    path.close();
916</div>
917
918<div id="testFauxQuadralateral6b">
919    path.moveTo(0, 0);
920    path.lineTo(3, 0);
921    path.lineTo(3, 3);
922    path.close();
923    path.moveTo(3, 0);
924    path.lineTo(6, 0);
925    path.lineTo(4, 2);
926    path.close();
927    path.moveTo(4, 2);
928    path.lineTo(6, 6);
929    path.lineTo(0, 6);
930    path.close();
931</div>
932
933<div id="testFauxQuadralateral6c">
934    path.moveTo(0, 0);
935    path.lineTo(3, 3);
936    path.lineTo(3, 0);
937    path.close();
938    path.moveTo(3, 0);
939    path.lineTo(6, 0);
940    path.lineTo(4, 2);
941    path.close();
942    path.moveTo(4, 2);
943    path.lineTo(0, 6);
944    path.lineTo(6, 6);
945    path.close();
946</div>
947
948<div id="testFauxQuadralateral6d">
949    path.moveTo(0, 0);
950    path.lineTo(3, 3);
951    path.lineTo(3, 0);
952    path.close();
953    path.moveTo(3, 0);
954    path.lineTo(6, 0);
955    path.lineTo(4, 2);
956    path.close();
957    path.moveTo(4, 2);
958    path.lineTo(6, 6);
959    path.lineTo(0, 6);
960</div>
961
962<div id="testQuadralateral6a">
963    path.moveTo(0, 0);
964    path.lineTo(0, 0);
965    path.lineTo(3, 0);
966    path.lineTo(3, 3);
967    path.close();
968    path.moveTo(3, 0);
969    path.lineTo(6, 0);
970    path.lineTo(0, 6);
971    path.lineTo(6, 6);
972</div>
973
974<div id="testQuadralateral7">
975    path.moveTo(0, 0);
976    path.lineTo(0, 0);
977    path.lineTo(1, 0);
978    path.lineTo(2, 1);
979    path.close();
980    path.moveTo(1, 0);
981    path.lineTo(1, 1);
982    path.lineTo(2, 2);
983    path.lineTo(1, 3);
984    path.close();
985</div>
986
987<div id="testQuadralateral8">
988    path.moveTo(0, 0);
989    path.lineTo(3, 1);
990    path.lineTo(1, 3);
991    path.lineTo(3, 3);
992    path.close();
993    path.moveTo(2, 1);
994    path.lineTo(0, 2);
995    path.lineTo(3, 2);
996    path.lineTo(2, 3);
997    path.close();
998</div>
999
1000<div id="testQuadralateral9">
1001    path.moveTo(0, 0);
1002    path.lineTo(1, 0);
1003    path.lineTo(1, 2);
1004    path.lineTo(2, 2);
1005    path.close();
1006    path.moveTo(1, 1);
1007    path.lineTo(2, 1);
1008    path.lineTo(1, 3);
1009    path.lineTo(2, 3);
1010    path.close();
1011</div>
1012
1013<div id="testLine1x">
1014    path.setFillType(SkPath::kEvenOdd_FillType);
1015    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
1016    path.addRect(4, 0, 13, 13, SkPath::kCW_Direction);
1017</div>
1018
1019<div id="testLine2x">
1020    path.setFillType(SkPath::kEvenOdd_FillType);
1021    path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
1022    path.addRect(0, 20, 12, 30, SkPath::kCW_Direction);
1023    path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
1024</div>
1025
1026<div id="testLine3x">
1027    path.setFillType(SkPath::kEvenOdd_FillType);
1028    path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
1029    path.addRect(18, 20, 30, 30, SkPath::kCCW_Direction);
1030    path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
1031</div>
1032
1033<div id="testLine4x">
1034    path.setFillType(SkPath::kEvenOdd_FillType);
1035    path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
1036    path.addRect(24, 20, 36, 30, SkPath::kCCW_Direction);
1037    path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
1038</div>
1039
1040<div id="testQuadratic1">
1041    path.moveTo(0, 0);
1042    path.quadTo(0, 0, 0, 0);
1043    path.lineTo(1, 0);
1044    path.close();
1045    path.moveTo(0, 0);
1046    path.lineTo(0, 0);
1047    path.quadTo(0, 0, 0, 0);
1048    path.close();
1049</div>
1050
1051<div id="testQuadratic2">
1052    path.moveTo(0, 0);
1053    path.quadTo(0, 0, 0, 0);
1054    path.lineTo(3, 0);
1055    path.close();
1056    path.moveTo(0, 0);
1057    path.lineTo(0, 0);
1058    path.quadTo(1, 0, 0, 1);
1059    path.close();
1060</div>
1061
1062<div id="testQuadratic3">
1063    path.moveTo(0, 0);
1064    path.quadTo(0, 0, 1, 0);
1065    path.lineTo(0, 2);
1066    path.close();
1067    path.moveTo(0, 0);
1068    path.lineTo(0, 0);
1069    path.quadTo(1, 0, 0, 1);
1070    path.close();
1071</div>
1072
1073<div id="testQuadratic4x">
1074    path.setFillType(SkPath::kEvenOdd_FillType);
1075    path.moveTo(0, 0);
1076    path.quadTo(0, 0, 1, 0);
1077    path.lineTo(0, 2);
1078    path.close();
1079    path.moveTo(0, 0);
1080    path.lineTo(0, 0);
1081    path.quadTo(1, 0, 0, 2);
1082    path.close();
1083</div>
1084
1085<div id="testQuadratic5">
1086    path.moveTo(0, 0);
1087    path.quadTo(0, 0, 0, 0);
1088    path.lineTo(0, 1);
1089    path.close();
1090    path.moveTo(0, 0);
1091    path.lineTo(1, 0);
1092    path.quadTo(0, 1, 0, 2);
1093    path.close();
1094</div>
1095
1096<div id="testQuadratic6">
1097    path.moveTo(0, 0);
1098    path.quadTo(0, 0, 1, 0);
1099    path.lineTo(2, 1);
1100    path.close();
1101    path.moveTo(0, 0);
1102    path.lineTo(0, 0);
1103    path.quadTo(2, 0, 0, 1);
1104    path.close();
1105</div>
1106
1107<div id="testQuadratic7">
1108    path.moveTo(0, 0);
1109    path.quadTo(0, 0, 1, 0);
1110    path.lineTo(3, 1);
1111    path.close();
1112    path.moveTo(0, 0);
1113    path.lineTo(0, 0);
1114    path.quadTo(3, 0, 1, 2);
1115    path.close();
1116</div>
1117
1118<div id="testQuadratic8">
1119    path.moveTo(0, 0);
1120    path.quadTo(0, 0, 1, 0);
1121    path.lineTo(0, 2);
1122    path.close();
1123    path.moveTo(0, 0);
1124    path.lineTo(1, 0);
1125    path.quadTo(0, 1, 1, 2);
1126    path.close();
1127</div>
1128
1129<div id="testQuadratic9">
1130    path.moveTo(0, 0);
1131    path.quadTo(0, 0, 1, 0);
1132    path.lineTo(3, 1);
1133    path.close();
1134    path.moveTo(0, 0);
1135    path.lineTo(1, 0);
1136    path.quadTo(1, 2, 3, 2);
1137    path.close();
1138</div>
1139
1140<div id="testQuadratic9a">
1141    path.moveTo(1.08000004, 0.720000029);
1142    path.lineTo(0, 0);
1143    path.lineTo(1, 0);
1144    path.lineTo(3, 1);
1145    path.lineTo(1.01568651, 0.338562161);
1146    path.quadTo(1.03542483, 0.541699469, 1.08000004, 0.720000029);
1147    path.close();
1148    path.moveTo(1.08000004, 0.720000029);
1149    path.lineTo(3, 2);
1150    path.quadTo(1.39999998, 2, 1.08000004, 0.720000029);
1151    path.close();
1152
1153</div>
1154
1155<div id="testQuadratic10a">
1156path.moveTo(15.5, 15.5);
1157path.lineTo(46.5, 15.5);
1158path.quadTo(0, 31, 0, 46.5);
1159path.lineTo(15.5, 15.5);
1160path.close();
1161</div>
1162
1163<div id="testQuadratic10b">
1164path.moveTo(5.16666698, 36.1666641);
1165path.lineTo(15.5, 15.5);
1166path.lineTo(46.5, 15.5);
1167path.quadTo(15.5, 25.8333321, 5.16666698, 36.1666641);
1168path.close();
1169path.moveTo(5.16666698, 36.1666641);
1170path.lineTo(0, 46.5);
1171path.quadTo(0, 41.3333359, 5.16666698, 36.1666641);
1172path.close();
1173</div>
1174
1175<div id="testQuadratic11a">
1176path.moveTo(0, 0);
1177path.lineTo(15.5, 31);
1178path.lineTo(0, 0);
1179path.close();
1180path.moveTo(0, 15.5);
1181path.lineTo(15.5, 15.5);
1182path.quadTo(15.5, 15.5, 46.5, 31);
1183path.lineTo(0, 15.5);
1184path.close();
1185</div>
1186
1187<div id="testQuadratic11b">
1188path.moveTo(9.30000019, 18.6000004);
1189path.lineTo(0, 15.5);
1190path.lineTo(7.75, 15.5);
1191path.lineTo(15.5, 15.5);
1192path.lineTo(46.5, 31);
1193path.lineTo(9.30000019, 18.6000004);
1194path.close();
1195</div>
1196
1197<div id="testQuadratic12">
1198    path.moveTo(0, 0);
1199    path.quadTo(0, 0, 0, 0);
1200    path.lineTo(1, 3);
1201    path.close();
1202    path.moveTo(1, 0);
1203    path.lineTo(0, 1);
1204    path.quadTo(1, 1, 0, 3);
1205    path.close();
1206</div>
1207
1208<div id="testQuadratic13a">
1209path.moveTo(0, 0);
1210path.quadTo(0, 0, 15.5, 0);
1211path.lineTo(15.5, 31);
1212path.lineTo(0, 0);
1213path.close();
1214path.moveTo(0, 0);
1215path.quadTo(15.5, 46.5, 46.5, 46.5);
1216path.lineTo(0, 0);
1217path.close();
1218</div>
1219
1220<div id="testQuadratic13b">
1221path.moveTo(14.8800001, 29.7600002);
1222path.quadTo(6.20000029, 18.6000004, 0, 0);
1223path.lineTo(14.8800001, 29.7600002);
1224path.close();
1225path.moveTo(15.5, 30.5437222);
1226path.lineTo(15.5, 31);
1227path.lineTo(14.8800001, 29.7600002);
1228path.quadTo(15.1884346, 30.156559, 15.5, 30.5437222);
1229path.close();
1230path.moveTo(15.5, 15.5);
1231path.lineTo(0, 0);
1232path.lineTo(15.5, 0);
1233path.lineTo(15.5, 15.5);
1234path.close();
1235path.moveTo(15.5, 30.5437222);
1236path.lineTo(15.5, 15.5);
1237path.lineTo(46.5, 46.5);
1238path.quadTo(28.34062, 46.5, 15.5, 30.5437222);
1239path.close();
1240</div>
1241
1242<div id="testQuadratic14">
1243    path.moveTo(0, 0);
1244    path.quadTo(0, 0, 1, 0);
1245    path.lineTo(3, 2);
1246    path.close();
1247    path.moveTo(0, 0);
1248    path.lineTo(1, 0);
1249    path.quadTo(3, 2, 3, 3);
1250    path.close();
1251</div>
1252
1253<div id="testQuadratic15">
1254    path.moveTo(0, 0);
1255    path.quadTo(0, 0, 1, 0);
1256    path.lineTo(1, 3);
1257    path.close();
1258    path.moveTo(1, 0);
1259    path.lineTo(0, 1);
1260    path.quadTo(1, 1, 0, 3);
1261    path.close();
1262</div>
1263
1264<div id="testQuadratic16a">
1265path.moveTo(0, 0);
1266path.quadTo(0, 0, 31, 0);
1267path.lineTo(46.5, 31);
1268path.lineTo(0, 0);
1269path.close();
1270path.moveTo(46.5, 15.5);
1271path.lineTo(0, 31);
1272path.quadTo(0, 31, 15.5, 31);
1273path.lineTo(46.5, 15.5);
1274path.close();
1275</div>
1276
1277<div id="testQuadratic16b">
1278path.moveTo(31, 20.6666679);
1279path.lineTo(0, 0);
1280path.lineTo(31, 0);
1281path.lineTo(39.8571434, 17.7142868);
1282path.lineTo(31, 20.6666679);
1283path.close();
1284path.moveTo(33.214283, 22.1428585);
1285path.lineTo(15.5, 31);
1286path.lineTo(0, 31);
1287path.lineTo(31, 20.6666679);
1288path.lineTo(33.214283, 22.1428585);
1289path.close();
1290path.moveTo(40.2999992, 18.6000004);
1291path.lineTo(46.5, 31);
1292path.lineTo(33.214283, 22.1428585);
1293path.lineTo(40.2999992, 18.6000004);
1294path.close();
1295path.moveTo(39.8571434, 17.7142868);
1296path.lineTo(46.5, 15.5);
1297path.lineTo(40.2999992, 18.6000004);
1298path.lineTo(39.8571434, 17.7142868);
1299path.close();
1300</div>
1301
1302<div id="testQuadratic17x">
1303    path.setFillType(SkPath::kEvenOdd_FillType);
1304    path.moveTo(0, 0);
1305    path.quadTo(0, 0, 3, 1);
1306    path.lineTo(0, 2);
1307    path.close();
1308    path.moveTo(0, 0);
1309    path.lineTo(1, 0);
1310    path.quadTo(3, 1, 0, 2);
1311    path.close();
1312</div>
1313
1314<div id="testQuadratic18">
1315    path.moveTo(0, 0);
1316    path.quadTo(1, 0, 0, 1);
1317    path.lineTo(0, 1);
1318    path.close();
1319    path.moveTo(0, 0);
1320    path.lineTo(0, 0);
1321    path.quadTo(1, 0, 1, 1);
1322    path.close();
1323</div>
1324
1325<div id="testQuadratic19">
1326    path.moveTo(0, 0);
1327    path.quadTo(1, 0, 0, 1);
1328    path.lineTo(0, 1);
1329    path.close();
1330    path.moveTo(0, 0);
1331    path.lineTo(0, 0);
1332    path.quadTo(2, 0, 0, 1);
1333    path.close();
1334</div>
1335
1336<div id="testQuadratic20">
1337    path.moveTo(0, 0);
1338    path.quadTo(1, 0, 0, 1);
1339    path.lineTo(0, 1);
1340    path.close();
1341    path.moveTo(0, 0);
1342    path.lineTo(0, 0);
1343    path.quadTo(1, 0, 0, 1);
1344    path.close();
1345</div>
1346
1347<div id="testQuadratic21">
1348    path.moveTo(0, 0);
1349    path.quadTo(1, 0, 0, 1);
1350    path.lineTo(0, 1);
1351    path.close();
1352    path.moveTo(0, 0);
1353    path.lineTo(0, 0);
1354    path.quadTo(1, 0, 0, 2);
1355    path.close();
1356</div>
1357
1358<div id="testQuadratic22">
1359    path.moveTo(0, 0);
1360    path.quadTo(1, 0, 0, 1);
1361    path.lineTo(0, 1);
1362    path.close();
1363    path.moveTo(0, 0);
1364    path.lineTo(0, 0);
1365    path.quadTo(0, 1, 2, 1);
1366    path.close();
1367</div>
1368
1369<div id="testQuadratic23">
1370    path.moveTo(0, 0);
1371    path.quadTo(1, 0, 0, 1);
1372    path.lineTo(0, 1);
1373    path.close();
1374    path.moveTo(0, 0);
1375    path.lineTo(0, 0);
1376    path.quadTo(0, 2, 1, 2);
1377    path.close();
1378</div>
1379
1380<div id="testQuadratic24">
1381    path.moveTo(0, 0);
1382    path.quadTo(1, 0, 0, 1);
1383    path.lineTo(0, 1);
1384    path.close();
1385    path.moveTo(0, 0);
1386    path.lineTo(1, 0);
1387    path.quadTo(2, 0, 0, 1);
1388    path.close();
1389</div>
1390
1391<div id="testQuadratic25">
1392    path.moveTo(0, 0);
1393    path.quadTo(1, 0, 1, 1);
1394    path.lineTo(1, 1);
1395    path.close();
1396    path.moveTo(0, 0);
1397    path.lineTo(0, 0);
1398    path.quadTo(2, 1, 0, 2);
1399    path.close();
1400</div>
1401
1402<div id="testQuadratic26">
1403    path.moveTo(0, 0);
1404    path.quadTo(1, 0, 1, 1);
1405    path.lineTo(0, 2);
1406    path.close();
1407    path.moveTo(0, 0);
1408    path.lineTo(0, 0);
1409    path.quadTo(1, 0, 0, 1);
1410    path.close();
1411</div>
1412
1413<div id="testQuadratic27">
1414    path.moveTo(0, 0);
1415    path.quadTo(1, 0, 1, 1);
1416    path.lineTo(2, 1);
1417    path.close();
1418    path.moveTo(0, 0);
1419    path.lineTo(0, 0);
1420    path.quadTo(2, 1, 0, 2);
1421    path.close();
1422</div>
1423
1424<div id="testQuadratic28">
1425    path.moveTo(0, 0);
1426    path.quadTo(1, 0, 0, 1);
1427    path.lineTo(0, 1);
1428    path.close();
1429    path.moveTo(0, 0);
1430    path.lineTo(0, 2);
1431    path.quadTo(1, 2, 0, 3);
1432    path.close();
1433</div>
1434
1435<div id="testQuadratic29">
1436    path.moveTo(0, 0);
1437    path.quadTo(1, 0, 2, 1);
1438    path.lineTo(0, 2);
1439    path.close();
1440    path.moveTo(0, 0);
1441    path.lineTo(0, 0);
1442    path.quadTo(1, 0, 0, 1);
1443    path.close();
1444</div>
1445
1446<div id="testQuadratic30">
1447    path.moveTo(0, 0);
1448    path.quadTo(1, 0, 1, 2);
1449    path.lineTo(1, 2);
1450    path.close();
1451    path.moveTo(0, 0);
1452    path.lineTo(1, 0);
1453    path.quadTo(0, 1, 1, 2);
1454    path.close();
1455</div>
1456
1457<div id="testQuadratic31">
1458    path.moveTo(0, 0);
1459    path.quadTo(1, 0, 1, 2);
1460    path.lineTo(1, 2);
1461    path.close();
1462    path.moveTo(0, 0);
1463    path.lineTo(1, 0);
1464    path.quadTo(0, 1, 1, 3);
1465    path.close();
1466</div>
1467
1468<div id="testQuadratic32">
1469    path.moveTo(0, 0);
1470    path.quadTo(1, 0, 2, 3);
1471    path.lineTo(2, 3);
1472    path.close();
1473    path.moveTo(0, 0);
1474    path.lineTo(0, 0);
1475    path.quadTo(3, 1, 0, 2);
1476    path.close();
1477</div>
1478
1479<div id="testQuadratic33">
1480    path.moveTo(0, 0);
1481    path.quadTo(2, 0, 0, 1);
1482    path.lineTo(0, 1);
1483    path.close();
1484    path.moveTo(0, 0);
1485    path.lineTo(1, 1);
1486    path.quadTo(2, 1, 2, 2);
1487    path.close();
1488</div>
1489
1490<div id="testQuadratic34">
1491    path.moveTo(0, 0);
1492    path.quadTo(2, 0, 0, 1);
1493    path.lineTo(0, 1);
1494    path.close();
1495    path.moveTo(1, 0);
1496    path.lineTo(1, 1);
1497    path.quadTo(2, 1, 1, 2);
1498    path.close();
1499</div>
1500
1501<div id="testQuadratic35">
1502    path.moveTo(0, 0);
1503    path.quadTo(0, 1, 1, 1);
1504    path.lineTo(1, 3);
1505    path.close();
1506    path.moveTo(2, 0);
1507    path.lineTo(3, 0);
1508    path.quadTo(0, 1, 1, 1);
1509    path.close();
1510</div>
1511
1512<div id="testQuadratic36">
1513    path.moveTo(0, 0);
1514    path.quadTo(2, 1, 2, 3);
1515    path.lineTo(2, 3);
1516    path.close();
1517    path.moveTo(3, 1);
1518    path.lineTo(1, 2);
1519    path.quadTo(3, 2, 1, 3);
1520    path.close();
1521</div>
1522
1523<div id="testQuadratic37">
1524    path.moveTo(0, 0);
1525    path.quadTo(0, 2, 1, 2);
1526    path.lineTo(1, 2);
1527    path.close();
1528    path.moveTo(0, 0);
1529    path.lineTo(3, 1);
1530    path.quadTo(0, 2, 1, 2);
1531    path.close();
1532</div>
1533
1534<div id="testQuadratic38">
1535    path.moveTo(1, 0);
1536    path.quadTo(0, 1, 1, 1);
1537    path.lineTo(1, 1);
1538    path.close();
1539    path.moveTo(1, 0);
1540    path.lineTo(1, 2);
1541    path.quadTo(2, 2, 1, 3);
1542    path.close();
1543</div>
1544
1545<div id="testQuadratic39">
1546path.moveTo(15.5, 0);
1547path.quadTo(46.5, 15.5, 46.5, 31);
1548path.lineTo(15.5, 0);
1549path.close();
1550path.moveTo(46.5, 15.5);
1551path.lineTo(0, 31);
1552path.quadTo(0, 31, 15.5, 31);
1553path.lineTo(46.5, 15.5);
1554    path.close();
1555</div>
1556
1557<div id="testQuadratic39a">
1558path.moveTo(34.875, 19.375);
1559path.lineTo(15.5, 0);
1560path.quadTo(32.9687576, 8.73437881, 40.5937271, 17.4687576);
1561path.lineTo(34.875, 19.375);
1562path.close();
1563path.moveTo(36.1666641, 20.6666679);
1564path.lineTo(15.5, 31);
1565path.lineTo(0, 31);
1566path.lineTo(34.875, 19.375);
1567path.lineTo(36.1666641, 20.6666679);
1568path.close();
1569path.moveTo(41.1812401, 18.15938);
1570path.quadTo(46.5, 24.5796909, 46.5, 31);
1571path.lineTo(36.1666641, 20.6666679);
1572path.lineTo(41.1812401, 18.15938);
1573path.close();
1574path.moveTo(40.5937271, 17.4687576);
1575path.lineTo(46.5, 15.5);
1576path.lineTo(41.1812401, 18.15938);
1577path.quadTo(40.8951759, 17.8140678, 40.5937271, 17.4687576);
1578    path.close();
1579</div>
1580
1581<div id="testQuadratic40x">
1582    path.setFillType(SkPath::kEvenOdd_FillType);
1583    path.moveTo(2, 0);
1584    path.quadTo(3, 0, 2, 2);
1585    path.lineTo(3, 2);
1586    path.close();
1587    path.moveTo(3, 1);
1588    path.lineTo(0, 2);
1589    path.quadTo(0, 2, 1, 2);
1590    path.close();
1591</div>
1592
1593<div id="testQuadratic40xa">
1594path.moveTo(31, 0);
1595path.quadTo(41.3333359, 0, 37.8888893, 13.7777777);
1596path.lineTo(31, 0);
1597path.close();
1598path.moveTo(37.8888893, 13.7777777);
1599path.quadTo(37.2993202, 16.1360455, 36.3061028, 18.8979664);
1600path.lineTo(0, 31);
1601path.lineTo(15.5, 31);
1602path.lineTo(35.5182915, 20.9908543);
1603path.quadTo(33.7454262, 25.5091457, 31, 31);
1604path.lineTo(46.5, 31);
1605path.lineTo(40.2999992, 18.6000004);
1606path.lineTo(46.5, 15.5);
1607path.lineTo(39.8571434, 17.7142868);
1608path.lineTo(37.8888893, 13.7777777);
1609path.close();
1610path.moveTo(36.3061028, 18.8979664);
1611path.quadTo(35.9396667, 19.9169388, 35.5182915, 20.9908543);
1612path.lineTo(40.2999992, 18.6000004);
1613path.lineTo(39.8571434, 17.7142868);
1614path.lineTo(36.3061028, 18.8979664);
1615</div>
1616
1617<div id="testQuadratic40xb">
1618path.moveTo(31, 0);
1619path.quadTo(46.5, 0, 31, 31);
1620path.lineTo(46.5, 31);
1621path.lineTo(31, 0);
1622path.close();
1623path.moveTo(46.5, 15.5);
1624path.lineTo(0, 31);
1625path.quadTo(0, 31, 15.5, 31);
1626path.lineTo(46.5, 15.5);
1627path.close();
1628</div>
1629
1630<div id="testQuadratic41o">
1631path.moveTo(419.33905, 236.377808);
1632path.quadTo(398.847778, 242.58728, 384.255524, 242.58728);
1633path.quadTo(359.417633, 242.58728, 343.738708, 226.080429);
1634path.quadTo(328.059784, 209.573578, 328.059784, 183.286819);
1635path.quadTo(328.059784, 157.724487, 341.875854, 141.372879);
1636path.quadTo(355.691956, 125.021263, 377.218109, 125.021263);
1637path.quadTo(397.605896, 125.021263, 408.731201, 139.51004);
1638path.quadTo(419.856506, 153.99881, 419.856506, 180.699539);
1639path.lineTo(419.752991, 187.012497);
1640path.lineTo(348.861511, 187.012497);
1641path.quadTo(353.311646, 227.063599, 388.084686, 227.063599);
1642path.quadTo(400.814117, 227.063599, 419.33905, 220.233185);
1643path.lineTo(419.33905, 236.377808);
1644path.close();
1645path.moveTo(349.792938, 171.695801);
1646path.lineTo(399.365234, 171.695801);
1647path.quadTo(399.365234, 140.337967, 375.976227, 140.337967);
1648path.quadTo(352.483704, 140.337967, 349.792938, 171.695801);
1649path.close();
1650path.moveTo(378.682587, 277.360321);
1651path.lineTo(381.062897, 259.66333);
1652path.quadTo(398.759888, 268.046112, 415.939423, 268.046112);
1653path.quadTo(450.402008, 268.046112, 450.402008, 231.513718);
1654path.lineTo(450.402008, 213.816727);
1655path.quadTo(439.12146, 237.41272, 413.352142, 237.41272);
1656path.quadTo(393.171356, 237.41272, 381.269867, 222.716965);
1657path.quadTo(369.368378, 208.02121, 369.368378, 183.079834);
1658path.quadTo(369.368378, 157.414017, 382.92572, 141.269379);
1659path.quadTo(396.483093, 125.124756, 418.009247, 125.124756);
1660path.quadTo(436.844666, 125.124756, 450.402008, 140.441467);
1661path.lineTo(450.402008, 127.608543);
1662path.lineTo(470.89325, 127.608543);
1663path.lineTo(470.89325, 209.366608);
1664path.quadTo(470.89325, 235.756866, 468.150757, 248.43454);
1665path.quadTo(465.408234, 261.112213, 457.853363, 269.184509);
1666path.quadTo(444.502991, 283.362823, 416.353394, 283.362823);
1667path.quadTo(396.690063, 283.362823, 378.682587, 277.360321);
1668path.close();
1669path.moveTo(450.402008, 201.087311);
1670path.lineTo(450.402008, 154.412781);
1671path.quadTo(436.948151, 140.441467, 421.113983, 140.441467);
1672path.quadTo(407.039185, 140.441467, 399.070374, 151.722);
1673path.quadTo(391.101532, 163.002533, 391.101532, 182.665863);
1674path.quadTo(391.101532, 219.612228, 417.07782, 219.612228);
1675path.quadTo(434.774841, 219.612228, 450.402008, 201.087311);
1676path.close();
1677path.moveTo(482.9328, 236.377808);
1678path.quadTo(462.441528, 242.58728, 447.849274, 242.58728);
1679path.quadTo(423.011383, 242.58728, 407.332458, 226.080429);
1680path.quadTo(391.653534, 209.573578, 391.653534, 183.286819);
1681path.quadTo(391.653534, 157.724487, 405.469604, 141.372879);
1682path.quadTo(419.285706, 125.021263, 440.811859, 125.021263);
1683path.quadTo(461.199646, 125.021263, 472.324951, 139.51004);
1684path.quadTo(483.450256, 153.99881, 483.450256, 180.699539);
1685path.lineTo(483.346741, 187.012497);
1686path.lineTo(412.455261, 187.012497);
1687path.quadTo(416.905396, 227.063599, 451.678436, 227.063599);
1688path.quadTo(464.407867, 227.063599, 482.9328, 220.233185);
1689path.lineTo(482.9328, 236.377808);
1690path.close();
1691path.moveTo(413.386688, 171.695801);
1692path.lineTo(462.958984, 171.695801);
1693path.quadTo(462.958984, 140.337967, 439.569977, 140.337967);
1694path.quadTo(416.077454, 140.337967, 413.386688, 171.695801);
1695path.close();
1696</div>
1697
1698<div id="testQuadratic41s">
1699path.moveTo(341.875854, 141.372879);
1700path.quadTo(355.691956,125.021263, 377.218109,125.021263);
1701path.quadTo(388.787811,125.021263, 397.374664,129.687164);
1702path.quadTo(406.565979,125.124756, 418.009247,125.124756);
1703path.quadTo(423.583374,125.124756, 428.695251,126.466187);
1704path.quadTo(434.412903,125.021263, 440.811859,125.021263);
1705path.quadTo(449.427277,125.021263, 456.388672,127.608543);
1706path.lineTo(470.89325,127.608543);
1707path.lineTo(470.89325,137.749908);
1708path.quadTo(471.627319,138.601486, 472.324951,139.51004);
1709path.quadTo(483.450256,153.99881, 483.450256,180.699539);
1710path.lineTo(483.346741,187.012497);
1711path.lineTo(470.89325,187.012497);
1712path.lineTo(470.89325,209.366608);
1713path.quadTo(470.89325,217.414856, 470.638184,224.187729);
1714path.quadTo(476.428223,222.631516, 482.9328,220.233185);
1715path.lineTo(482.9328,236.377808);
1716path.quadTo(475.87207,238.517426, 469.511749,239.919785);
1717path.quadTo(468.946777,244.754791, 468.150757,248.43454);
1718path.quadTo(465.408234,261.112213, 457.853363,269.184509);
1719path.quadTo(444.502991,283.362823, 416.353394,283.362823);
1720path.quadTo(396.690063,283.362823, 378.682587,277.360321);
1721path.lineTo(381.062897,259.66333);
1722path.quadTo(398.759888,268.046112, 415.939423,268.046112);
1723path.quadTo(444.719147,268.046112, 449.464905,242.568665);
1724path.quadTo(448.648254,242.58728, 447.849274,242.58728);
1725path.quadTo(433.084625,242.58728, 421.556366,236.754425);
1726path.quadTo(418.89566,237.203537, 416.046783,237.346252);
1727path.quadTo(397.661652,242.58728, 384.255524,242.58728);
1728path.quadTo(359.417633,242.58728, 343.738708,226.080429);
1729path.quadTo(328.059784,209.573578, 328.059784,183.286819);
1730path.quadTo(328.059784,157.724487, 341.875854,141.372879);
1731path.close();
1732path.moveTo(442.014923, 226.179474);
1733path.quadTo(445.951935,226.953491, 450.402008,227.049881);
1734path.lineTo(450.402008,213.816727);
1735path.quadTo(446.904755,221.132065, 442.014923,226.179474);
1736path.close();
1737path.moveTo(395.347717, 206.501785);
1738path.quadTo(392.200165,197.593536, 391.734406,187.012497);
1739path.lineTo(391.197113,187.012497);
1740path.quadTo(391.738647,198.938644, 395.347717,206.501785);
1741path.close();
1742path.moveTo(391.808533, 171.695801);
1743path.lineTo(392.428436,171.695801);
1744path.quadTo(393.693451,162.656265, 397.02359,154.9935);
1745path.quadTo(397.023804,154.992996, 397.024048,154.992493);
1746path.quadTo(393.175995,143.845093, 383.003235,141.177292);
1747path.quadTo(382.964447,141.223267, 382.92572,141.269379);
1748</div>
1749
1750<div id="testQuadratic42o">
1751path.moveTo(421.962158, 236.285355);
1752path.quadTo(400.947845, 242.65332, 385.983124, 242.65332);
1753path.quadTo(360.511261, 242.65332, 344.432129, 225.725143);
1754path.quadTo(328.352997, 208.796951, 328.352997, 181.839218);
1755path.quadTo(328.352997, 155.62442, 342.521729, 138.855438);
1756path.quadTo(356.69046, 122.086449, 378.766083, 122.086449);
1757path.quadTo(399.674255, 122.086449, 411.083527, 136.945038);
1758path.quadTo(422.492798, 151.803635, 422.492798, 179.185898);
1759path.lineTo(422.386688, 185.660004);
1760path.lineTo(349.685699, 185.660004);
1761path.quadTo(354.24942, 226.733398, 389.910034, 226.733398);
1762path.quadTo(402.964386, 226.733398, 421.962158, 219.728638);
1763path.lineTo(421.962158, 236.285355);
1764path.close();
1765path.moveTo(350.6409, 169.952347);
1766path.lineTo(401.478516, 169.952347);
1767path.quadTo(401.478516, 137.794098, 377.492493, 137.794098);
1768path.quadTo(353.40036, 137.794098, 350.6409, 169.952347);
1769path.close();
1770path.moveTo(379.213562, 278.313934);
1771path.lineTo(381.654602, 260.165222);
1772path.quadTo(399.803314, 268.761993, 417.421356, 268.761993);
1773path.quadTo(452.763611, 268.761993, 452.763611, 231.297104);
1774path.lineTo(452.763611, 213.148392);
1775path.quadTo(441.195129, 237.34668, 414.768036, 237.34668);
1776path.quadTo(394.072144, 237.34668, 381.866882, 222.275818);
1777path.quadTo(369.661591, 207.204956, 369.661591, 181.626953);
1778path.quadTo(369.661591, 155.306015, 383.565002, 138.749298);
1779path.quadTo(397.468384, 122.192581, 419.544037, 122.192581);
1780path.quadTo(438.860199, 122.192581, 452.763611, 137.900238);
1781path.lineTo(452.763611, 124.739769);
1782path.lineTo(473.777893, 124.739769);
1783path.lineTo(473.777893, 208.584686);
1784path.quadTo(473.777893, 235.64856, 470.965363, 248.649826);
1785path.quadTo(468.152863, 261.651093, 460.405151, 269.929443);
1786path.quadTo(446.71402, 284.469666, 417.845886, 284.469666);
1787path.quadTo(397.680664, 284.469666, 379.213562, 278.313934);
1788path.close();
1789path.moveTo(452.763611, 200.094055);
1790path.lineTo(452.763611, 152.228165);
1791path.quadTo(438.966339, 137.900238, 422.727997, 137.900238);
1792path.quadTo(408.293945, 137.900238, 400.121704, 149.468719);
1793path.quadTo(391.949493, 161.037186, 391.949493, 181.202423);
1794path.quadTo(391.949493, 219.091827, 418.588837, 219.091827);
1795path.quadTo(436.737549, 219.091827, 452.763611, 200.094055);
1796path.close();
1797path.moveTo(485.555908, 236.285355);
1798path.quadTo(464.541595, 242.65332, 449.576874, 242.65332);
1799path.quadTo(424.105011, 242.65332, 408.025879, 225.725143);
1800path.quadTo(391.946747, 208.796951, 391.946747, 181.839218);
1801path.quadTo(391.946747, 155.62442, 406.115479, 138.855438);
1802path.quadTo(420.28421, 122.086449, 442.359833, 122.086449);
1803path.quadTo(463.268005, 122.086449, 474.677277, 136.945038);
1804path.quadTo(486.086548, 151.803635, 486.086548, 179.185898);
1805path.lineTo(485.980438, 185.660004);
1806path.lineTo(413.279449, 185.660004);
1807path.quadTo(417.84317, 226.733398, 453.503784, 226.733398);
1808path.quadTo(466.558136, 226.733398, 485.555908, 219.728638);
1809path.lineTo(485.555908, 236.285355);
1810path.close();
1811path.moveTo(414.23465, 169.952347);
1812path.lineTo(465.072266, 169.952347);
1813path.quadTo(465.072266, 137.794098, 441.086243, 137.794098);
1814path.quadTo(416.99411, 137.794098, 414.23465, 169.952347);
1815path.close();
1816</div>
1817
1818<div id="testQuadratic42s">
1819path.moveTo(342.521729, 138.855438);
1820path.quadTo(356.69046,122.086449, 378.766083,122.086449);
1821path.quadTo(390.293488,122.086449, 398.933502,126.603004);
1822path.quadTo(408.150299,122.192581, 419.544037,122.192581);
1823path.quadTo(425.108429,122.192581, 430.223633,123.496056);
1824path.quadTo(435.959412,122.086449, 442.359833,122.086449);
1825path.quadTo(451.19516,122.086449, 458.334229,124.739769);
1826path.lineTo(473.777893,124.739769);
1827path.lineTo(473.777893,135.814713);
1828path.quadTo(474.234741,136.368698, 474.677277,136.945038);
1829path.quadTo(486.086548,151.803635, 486.086548,179.185898);
1830path.lineTo(485.980438,185.660004);
1831path.lineTo(473.777893,185.660004);
1832path.lineTo(473.777893,208.584686);
1833path.quadTo(473.777893,216.745773, 473.522156,223.628113);
1834path.quadTo(479.207153,222.069519, 485.555908,219.728638);
1835path.lineTo(485.555908,236.285355);
1836path.quadTo(478.638306,238.381592, 472.376221,239.787796);
1837path.quadTo(471.792389,244.826782, 470.965363,248.649826);
1838path.quadTo(468.152863,261.651093, 460.405151,269.929443);
1839path.quadTo(446.71402,284.469666, 417.845886,284.469666);
1840path.quadTo(397.680664,284.469666, 379.213562,278.313934);
1841path.lineTo(381.654602,260.165222);
1842path.quadTo(399.803314,268.761993, 417.421356,268.761993);
1843path.quadTo(446.944275,268.761993, 451.80542,242.619034);
1844path.quadTo(450.674866,242.65332, 449.576874,242.65332);
1845path.quadTo(434.524628,242.65332, 422.75238,236.741913);
1846path.quadTo(420.864227,237.041901, 418.884674,237.193085);
1847path.quadTo(399.840271,242.65332, 385.983124,242.65332);
1848path.quadTo(360.511261,242.65332, 344.432129,225.725143);
1849path.quadTo(328.352997,208.796951, 328.352997,181.839218);
1850path.quadTo(328.352997,155.62442, 342.521729,138.855438);
1851path.close();
1852path.moveTo(383.823944, 138.443222);
1853path.quadTo(380.900299,137.794098, 377.492493,137.794098);
1854path.quadTo(353.40036,137.794098, 350.6409,169.952347);
1855path.lineTo(370.408203,169.952347);
1856path.quadTo(372.883484,151.469254, 383.565002,138.749298);
1857path.quadTo(383.694122,138.595551, 383.823944,138.443222);
1858path.close();
1859path.moveTo(369.740021, 185.660004);
1860path.lineTo(349.685699,185.660004);
1861path.quadTo(353.983734,224.342361, 385.863525,226.594208);
1862path.quadTo(383.762756,224.616837, 381.866882,222.275818);
1863path.quadTo(370.639954,208.41301, 369.740021,185.660004);
1864path.close();
1865path.moveTo(413.279449, 185.660004);
1866path.quadTo(415.737305,207.780716, 427.214905,217.987976);
1867path.quadTo(440.600586,214.512451, 452.763611,200.094055);
1868path.lineTo(452.763611,185.660004);
1869</div>
1870
1871<div id="testQuadratic43o">
1872path.moveTo(288.755981, 240);
1873path.lineTo(288.755981, 102.232819);
1874path.lineTo(315.843994, 102.232819);
1875path.lineTo(354.009216, 208.816208);
1876path.lineTo(393.291473, 102.232819);
1877path.lineTo(417.493835, 102.232819);
1878path.lineTo(417.493835, 240);
1879path.lineTo(399.248962, 240);
1880path.lineTo(399.248962, 127.92453);
1881path.lineTo(361.269928, 230.784485);
1882path.lineTo(342.373474, 230.784485);
1883path.lineTo(305.511444, 127.645271);
1884path.lineTo(305.511444, 240);
1885path.lineTo(288.755981, 240);
1886path.close();
1887path.moveTo(397.864014, 236.741989);
1888path.quadTo(379.433014, 242.327148, 366.307892, 242.327148);
1889path.quadTo(343.967255, 242.327148, 329.864746, 227.479935);
1890path.quadTo(315.762238, 212.632736, 315.762238, 188.988907);
1891path.quadTo(315.762238, 165.996674, 328.189209, 151.289093);
1892path.quadTo(340.61618, 136.581512, 359.978058, 136.581512);
1893path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
1894path.quadTo(398.329468, 162.645584, 398.329468, 186.661758);
1895path.lineTo(398.236359, 192.339996);
1896path.lineTo(334.472504, 192.339996);
1897path.quadTo(338.475189, 228.364258, 369.752075, 228.364258);
1898path.quadTo(381.20163, 228.364258, 397.864014, 222.220581);
1899path.lineTo(397.864014, 236.741989);
1900path.close();
1901path.moveTo(335.310272, 178.563278);
1902path.lineTo(379.898438, 178.563278);
1903path.quadTo(379.898438, 150.358246, 358.861023, 150.358246);
1904path.quadTo(337.730499, 150.358246, 335.310272, 178.563278);
1905path.close();
1906path.moveTo(346.052765, 240);
1907path.lineTo(346.052765, 138.908661);
1908path.lineTo(364.390686, 138.908661);
1909path.lineTo(364.390686, 157.898193);
1910path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
1911path.quadTo(398.832489, 136.674606, 401.904327, 137.140045);
1912path.lineTo(401.904327, 154.267853);
1913path.quadTo(397.156952, 152.685394, 393.526611, 152.685394);
1914path.quadTo(376.119537, 152.685394, 364.390686, 173.350464);
1915path.lineTo(364.390686, 240);
1916path.lineTo(346.052765, 240);
1917path.close();
1918path.moveTo(362.792297, 273.604034);
1919path.lineTo(364.933289, 257.68634);
1920path.quadTo(380.850983, 265.226288, 396.303253, 265.226288);
1921path.quadTo(427.300842, 265.226288, 427.300842, 232.366959);
1922path.lineTo(427.300842, 216.449265);
1923path.quadTo(417.15448, 237.672852, 393.976105, 237.672852);
1924path.quadTo(375.824341, 237.672852, 365.119446, 224.454651);
1925path.quadTo(354.414581, 211.23645, 354.414581, 188.802734);
1926path.quadTo(354.414581, 165.717422, 366.608826, 151.196014);
1927path.quadTo(378.803101, 136.674606, 398.164948, 136.674606);
1928path.quadTo(415.106598, 136.674606, 427.300842, 150.451324);
1929path.lineTo(427.300842, 138.908661);
1930path.lineTo(445.731873, 138.908661);
1931path.lineTo(445.731873, 212.446564);
1932path.quadTo(445.731873, 236.183472, 443.265106, 247.586502);
1933path.quadTo(440.798309, 258.989532, 434.003052, 266.250244);
1934path.quadTo(421.994965, 279.002991, 396.675598, 279.002991);
1935path.quadTo(378.989258, 279.002991, 362.792297, 273.604034);
1936path.close();
1937path.moveTo(427.300842, 204.999695);
1938path.lineTo(427.300842, 163.017929);
1939path.quadTo(415.199677, 150.451324, 400.95755, 150.451324);
1940path.quadTo(388.297852, 150.451324, 381.130249, 160.597687);
1941path.quadTo(373.962616, 170.744064, 373.962616, 188.430389);
1942path.quadTo(373.962616, 221.662079, 397.327179, 221.662079);
1943path.quadTo(413.244873, 221.662079, 427.300842, 204.999695);
1944path.close();
1945path.moveTo(461.457764, 236.741989);
1946path.quadTo(443.026764, 242.327148, 429.901642, 242.327148);
1947path.quadTo(407.561005, 242.327148, 393.458496, 227.479935);
1948path.quadTo(379.355988, 212.632736, 379.355988, 188.988907);
1949path.quadTo(379.355988, 165.996674, 391.782959, 151.289093);
1950path.quadTo(404.20993, 136.581512, 423.571808, 136.581512);
1951path.quadTo(441.909729, 136.581512, 451.916473, 149.613556);
1952path.quadTo(461.923218, 162.645584, 461.923218, 186.661758);
1953path.lineTo(461.830109, 192.339996);
1954path.lineTo(398.066254, 192.339996);
1955path.quadTo(402.068939, 228.364258, 433.345825, 228.364258);
1956path.quadTo(444.79538, 228.364258, 461.457764, 222.220581);
1957path.lineTo(461.457764, 236.741989);
1958path.close();
1959path.moveTo(398.904022, 178.563278);
1960path.lineTo(443.492188, 178.563278);
1961path.quadTo(443.492188, 150.358246, 422.454773, 150.358246);
1962path.quadTo(401.324249, 150.358246, 398.904022, 178.563278);
1963path.close();
1964</div>
1965
1966<div id="testQuadratic43s">
1967path.moveTo(288.755981, 240);
1968path.lineTo(288.755981,102.232819);
1969path.lineTo(315.843994,102.232819);
1970path.lineTo(331.979736,147.294876);
1971path.quadTo(343.453125,136.581512, 359.978058,136.581512);
1972path.quadTo(370.869446,136.581512, 378.822021,141.178574);
1973path.quadTo(378.893585,141.140915, 378.965302,141.103577);
1974path.lineTo(393.291473,102.232819);
1975path.lineTo(417.493835,102.232819);
1976path.lineTo(417.493835,136.965759);
1977path.quadTo(420.44223,136.581512, 423.571808,136.581512);
1978path.quadTo(431.320984,136.581512, 437.582458,138.908661);
1979path.lineTo(445.731873,138.908661);
1980path.lineTo(445.731873,143.392502);
1981path.quadTo(449.143951,146.002823, 451.916473,149.613556);
1982path.quadTo(461.923218,162.645584, 461.923218,186.661758);
1983path.lineTo(461.830109,192.339996);
1984path.lineTo(445.731873,192.339996);
1985path.lineTo(445.731873,212.446564);
1986path.quadTo(445.731873,220.39856, 445.455017,226.966339);
1987path.quadTo(452.7435,225.43367, 461.457764,222.220581);
1988path.lineTo(461.457764,236.741989);
1989path.quadTo(452.250824,239.531982, 444.367889,240.928268);
1990path.quadTo(443.897583,244.662796, 443.265106,247.586502);
1991path.quadTo(440.798309,258.989532, 434.003052,266.250244);
1992path.quadTo(421.994965,279.002991, 396.675598,279.002991);
1993path.quadTo(378.989258,279.002991, 362.792297,273.604034);
1994path.lineTo(364.933289,257.68634);
1995path.quadTo(380.850983,265.226288, 396.303253,265.226288);
1996path.quadTo(422.230743,265.226288, 426.471558,242.237076);
1997path.quadTo(419.570892,241.869324, 413.503387,240);
1998path.lineTo(399.248962,240);
1999path.lineTo(399.248962,237.37915);
2000path.quadTo(397.047638,237.633072, 394.711517,237.667465);
2001path.quadTo(378.296356,242.327148, 366.307892,242.327148);
2002path.quadTo(357.463165,242.327148, 349.909637,240);
2003path.lineTo(346.052765,240);
2004path.lineTo(346.052765,238.625916);
2005path.quadTo(336.926056,234.914124, 329.864746,227.479935);
2006path.quadTo(315.762238,212.632736, 315.762238,188.988907);
2007path.quadTo(315.762238,176.540054, 319.405273,166.519882);
2008path.lineTo(305.511444,127.645271);
2009path.lineTo(305.511444,240);
2010path.lineTo(288.755981,240);
2011path.close();
2012path.moveTo(375.464813, 192.339996);
2013path.lineTo(374.267029,195.583939);
2014path.quadTo(375.987579,214.575378, 387.432068,219.736267);
2015path.quadTo(380.122528,208.101486, 379.428741,192.339996);
2016path.lineTo(375.464813,192.339996);
2017path.close();
2018path.moveTo(427.300842, 178.563278);
2019path.lineTo(427.300842,163.017929);
2020path.quadTo(422.561523,158.096329, 417.493835,155.102234);
2021path.lineTo(417.493835,178.563278);
2022path.lineTo(427.300842,178.563278);
2023path.close();
2024path.moveTo(427.300842, 192.339996);
2025path.lineTo(417.493835,192.339996);
2026path.lineTo(417.493835,214.429169);
2027path.quadTo(422.505676,210.684036, 427.300842,204.999695);
2028path.lineTo(427.300842,192.339996);
2029path.close();
2030path.moveTo(420.700134, 226.556015);
2031path.quadTo(423.794342,227.54834, 427.300842,227.996094);
2032path.lineTo(427.300842,216.449265);
2033path.quadTo(424.497772,222.312531, 420.700134,226.556015);
2034path.close();
2035path.moveTo(368.744965, 228.354782);
2036path.quadTo(366.836426,226.574738, 365.119446,224.454651);
2037path.quadTo(364.748657,223.996796, 364.390686,223.527878);
2038path.lineTo(364.390686,228.077774);
2039path.quadTo(366.495239,228.312164, 368.744965,228.354782);
2040path.close();
2041path.moveTo(399.248962, 199.701065);
2042path.lineTo(399.248962,192.339996);
2043path.lineTo(398.236359,192.339996);
2044path.lineTo(398.066254,192.339996);
2045path.quadTo(398.498535,196.230621, 399.248962,199.701065);
2046path.close();
2047path.moveTo(399.248962, 178.563278);
2048path.lineTo(399.248962,175.376892);
2049path.quadTo(399.04483,176.922348, 398.904022,178.563278);
2050path.lineTo(399.248962,178.563278);
2051path.close();
2052path.moveTo(399.248962, 136.688828);
2053path.lineTo(399.248962,127.92453);
2054path.lineTo(396.018158,136.674606);
2055path.quadTo(396.029053,136.674606, 396.039917,136.674606);
2056path.quadTo(396.513672,136.674606, 396.995453,136.688004);
2057path.quadTo(397.576904,136.674606, 398.164948,136.674606);
2058path.quadTo(398.709412,136.674606, 399.248962,136.688828);
2059path.close();
2060path.moveTo(346.052765, 178.563278);
2061path.lineTo(346.052765,154.02713);
2062path.quadTo(340.97113,157.621338, 338.22525,164.736588);
2063path.lineTo(343.1763,178.563278);
2064path.lineTo(346.052765,178.563278);
2065path.close();
2066path.moveTo(364.390686, 150.922379);
2067path.lineTo(364.390686,154.048065);
2068path.quadTo(365.340851,152.726639, 366.38147,151.468765);
2069path.quadTo(365.420258,151.14975, 364.390686,150.922379);
2070path.close();
2071path.moveTo(367.863586, 152.032623);
2072path.quadTo(367.144043,151.721848, 366.38147,151.468765);
2073</div>
2074
2075<div id="testQuadratic44o">
2076path.moveTo(354.009216, 208.816208);
2077path.lineTo(393.291473, 102.232819);
2078path.lineTo(399.248962, 127.92453);
2079path.lineTo(361.269928, 230.784485);
2080path.lineTo(354.009216, 208.816208);
2081path.close();
2082path.moveTo(328.189209, 151.289093);
2083path.quadTo(340.61618, 136.581512, 359.978058, 136.581512);
2084path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
2085path.lineTo(328.189209, 151.289093);
2086path.close();
2087path.moveTo(346.052765, 138.908661);
2088path.lineTo(364.390686, 138.908661);
2089path.lineTo(364.390686, 157.898193);
2090path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
2091path.lineTo(346.052765, 138.908661);
2092path.close();
2093</div>
2094
2095<div id="testQuadratic44s">
2096path.moveTo(380.33902, 137.376312);
2097path.lineTo(393.291473,102.232819);
2098path.lineTo(399.248962,127.92453);
2099path.lineTo(396.018158,136.674606);
2100path.quadTo(396.029053,136.674606, 396.039917,136.674606);
2101path.lineTo(396.017792,136.675598);
2102path.lineTo(361.269928,230.784485);
2103path.lineTo(354.009216,208.816208);
2104path.lineTo(375.699249,149.965286);
2105path.lineTo(369.22699,150.14563);
2106path.quadTo(373.524384,144.511566, 378.917297,141.233871);
2107path.lineTo(380.33902,137.376312);
2108path.close();
2109path.moveTo(380.33902, 137.376312);
2110path.lineTo(378.917297,141.233856);
2111path.quadTo(375.048248,138.978912, 370.480499,137.816925);
2112path.lineTo(380.33902,137.376312);
2113path.close();
2114path.moveTo(392.55661, 136.830276);
2115path.lineTo(380.33902,137.376312);
2116</div>
2117
2118<div id="testQuadratic45o">
2119path.moveTo(315.843994, 102.232819);
2120path.lineTo(354.009216, 208.816208);
2121path.lineTo(393.291473, 102.232819);
2122path.lineTo(399.248962, 127.92453);
2123path.lineTo(361.269928, 230.784485);
2124path.lineTo(342.373474, 230.784485);
2125path.lineTo(305.511444, 127.645271);
2126path.lineTo(315.843994, 102.232819);
2127path.close();
2128path.moveTo(366.307892, 242.327148);
2129path.quadTo(343.967255, 242.327148, 329.864746, 227.479935);
2130path.quadTo(315.762238, 212.632736, 315.762238, 188.988907);
2131path.quadTo(315.762238, 165.996674, 328.189209, 151.289093);
2132path.quadTo(340.61618, 136.581512, 359.978058, 136.581512);
2133path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
2134path.quadTo(398.329468, 162.645584, 398.329468, 186.661758);
2135path.lineTo(398.236359, 192.339996);
2136path.lineTo(334.472504, 192.339996);
2137path.quadTo(338.475189, 228.364258, 369.752075, 228.364258);
2138path.quadTo(381.20163, 228.364258, 397.864014, 222.220581);
2139path.lineTo(366.307892, 242.327148);
2140path.close();
2141path.moveTo(335.310272, 178.563278);
2142path.lineTo(379.898438, 178.563278);
2143path.quadTo(379.898438, 150.358246, 358.861023, 150.358246);
2144path.quadTo(337.730499, 150.358246, 335.310272, 178.563278);
2145path.close();
2146path.moveTo(346.052765, 240);
2147path.lineTo(346.052765, 138.908661);
2148path.lineTo(364.390686, 138.908661);
2149path.lineTo(364.390686, 157.898193);
2150path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
2151path.lineTo(401.904327, 154.267853);
2152path.quadTo(397.156952, 152.685394, 393.526611, 152.685394);
2153path.quadTo(376.119537, 152.685394, 364.390686, 173.350464);
2154path.lineTo(364.390686, 240);
2155path.lineTo(346.052765, 240);
2156path.close();
2157path.moveTo(396.303253, 265.226288);
2158path.quadTo(427.300842, 265.226288, 427.300842, 232.366959);
2159path.lineTo(427.300842, 216.449265);
2160path.quadTo(417.15448, 237.672852, 393.976105, 237.672852);
2161path.quadTo(375.824341, 237.672852, 365.119446, 224.454651);
2162path.quadTo(354.414581, 211.23645, 354.414581, 188.802734);
2163path.quadTo(354.414581, 165.717422, 366.608826, 151.196014);
2164path.quadTo(378.803101, 136.674606, 398.164948, 136.674606);
2165path.lineTo(396.303253, 265.226288);
2166path.close();
2167path.moveTo(400.95755, 150.451324);
2168path.quadTo(388.297852, 150.451324, 381.130249, 160.597687);
2169path.quadTo(373.962616, 170.744064, 373.962616, 188.430389);
2170path.quadTo(373.962616, 221.662079, 397.327179, 221.662079);
2171path.lineTo(400.95755, 150.451324);
2172path.close();
2173path.moveTo(429.901642, 242.327148);
2174path.quadTo(407.561005, 242.327148, 393.458496, 227.479935);
2175path.quadTo(379.355988, 212.632736, 379.355988, 188.988907);
2176path.quadTo(379.355988, 165.996674, 391.782959, 151.289093);
2177path.quadTo(404.20993, 136.581512, 423.571808, 136.581512);
2178path.lineTo(429.901642, 242.327148);
2179path.close();
2180</div>
2181
2182<div id="testQuadratic45s">
2183path.moveTo(305.511444, 127.645271);
2184path.lineTo(315.843994,102.232819);
2185path.lineTo(331.979736,147.294876);
2186path.quadTo(343.453125,136.581512, 359.978058,136.581512);
2187path.quadTo(370.869446,136.581512, 378.822021,141.178574);
2188path.quadTo(378.893585,141.140915, 378.965302,141.103577);
2189path.lineTo(393.291473,102.232819);
2190path.lineTo(399.248962,127.92453);
2191path.lineTo(396.018158,136.674606);
2192path.quadTo(396.029053,136.674606, 396.039917,136.674606);
2193path.lineTo(396.054596,136.718628);
2194path.quadTo(397.098907,136.674606, 398.164948,136.674606);
2195path.lineTo(398.076477,142.784256);
2196path.lineTo(398.697632,144.647751);
2197path.quadTo(409.233032,136.581512, 423.571808,136.581512);
2198path.lineTo(429.901642,242.327148);
2199path.quadTo(428.161621,242.327148, 426.471558,242.237076);
2200path.quadTo(427.300842,237.741562, 427.300842,232.366959);
2201path.lineTo(427.300842,216.449265);
2202path.quadTo(419.710114,232.327133, 404.8255,236.326401);
2203path.quadTo(400.557983,233.971252, 396.803375,230.691772);
2204path.lineTo(396.7034,237.596863);
2205path.quadTo(395.363068,237.672852, 393.976105,237.672852);
2206path.quadTo(385.309937,237.672852, 378.341187,234.659912);
2207path.lineTo(366.307892,242.327148);
2208path.quadTo(357.463165,242.327148, 349.909637,240);
2209path.lineTo(346.052765,240);
2210path.lineTo(346.052765,238.625916);
2211path.quadTo(336.926056,234.914124, 329.864746,227.479935);
2212path.quadTo(315.762238,212.632736, 315.762238,188.988907);
2213path.quadTo(315.762238,176.540054, 319.405273,166.519882);
2214path.lineTo(305.511444,127.645271);
2215path.close();
2216path.moveTo(375.464813, 192.339996);
2217path.lineTo(374.267029,195.583939);
2218path.quadTo(375.987579,214.575378, 387.432068,219.736267);
2219path.quadTo(380.122528,208.101486, 379.428741,192.339996);
2220path.lineTo(375.464813,192.339996);
2221path.close();
2222path.moveTo(397.925934, 153.178131);
2223path.lineTo(397.615479,174.615356);
2224path.quadTo(398.329468,180.246704, 398.329468,186.661758);
2225path.lineTo(398.236359,192.339996);
2226path.lineTo(397.358795,192.339996);
2227path.lineTo(396.934174,221.659714);
2228path.quadTo(397.129852,221.662079, 397.327179,221.662079);
2229path.lineTo(400.781189,153.910889);
2230path.quadTo(399.295654,153.462463, 397.925934,153.178131);
2231path.close();
2232path.moveTo(400.914398, 151.298019);
2233path.lineTo(400.632721,150.453003);
2234path.quadTo(400.794678,150.451324, 400.95755,150.451324);
2235path.lineTo(400.914398,151.298019);
2236path.close();
2237path.moveTo(368.744965, 228.354782);
2238path.quadTo(366.836426,226.574738, 365.119446,224.454651);
2239path.quadTo(364.748657,223.996796, 364.390686,223.527878);
2240path.lineTo(364.390686,228.077774);
2241path.quadTo(366.495239,228.312164, 368.744965,228.354782);
2242path.close();
2243path.moveTo(346.052765, 178.563278);
2244path.lineTo(346.052765,154.02713);
2245path.quadTo(340.97113,157.621338, 338.22525,164.736588);
2246path.lineTo(343.1763,178.563278);
2247path.lineTo(346.052765,178.563278);
2248path.close();
2249path.moveTo(364.390686, 150.922379);
2250path.lineTo(364.390686,154.048065);
2251path.quadTo(365.340851,152.726639, 366.38147,151.468765);
2252path.quadTo(365.420258,151.14975, 364.390686,150.922379);
2253path.close();
2254path.moveTo(367.863586, 152.032623);
2255path.quadTo(367.144043,151.721848, 366.38147,151.468765);
2256</div>
2257
2258<div id="testQuadratic46o">
2259path.moveTo(366.608826, 151.196014);
2260path.quadTo(378.803101, 136.674606, 398.164948, 136.674606);
2261path.lineTo(354.009216, 208.816208);
2262path.lineTo(393.291473, 102.232819);
2263path.lineTo(359.978058, 136.581512);
2264path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
2265path.lineTo(364.390686, 157.898193);
2266path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
2267path.lineTo(350, 120);
2268path.lineTo(366.608826, 151.196014);
2269path.close();
2270</div>
2271
2272<div id="testQuadratic46s">
2273path.moveTo(369.285553, 126.984779);
2274path.lineTo(393.291473,102.232819);
2275path.lineTo(382.416199,131.740402);
2276path.lineTo(396.039917,136.674606);
2277path.quadTo(387.290802,136.674606, 380.294495,140.44487);
2278path.quadTo(379.623352,140.760971, 378.965302,141.103577);
2279path.lineTo(378.917297,141.233856);
2280path.quadTo(378.86972,141.206131, 378.822021,141.178574);
2281path.quadTo(372.011871,144.761871, 366.608826,151.196014);
2282path.lineTo(350,120);
2283path.lineTo(369.285553,126.984779);
2284path.close();
2285path.moveTo(374.00174, 154.571106);
2286path.lineTo(378.917297,141.233871);
2287path.quadTo(378.917297,141.233871, 378.917297,141.233856);
2288path.quadTo(384.294891,144.368011, 388.322723,149.613556);
2289path.lineTo(374.00174,154.571106);
2290path.close();
2291path.moveTo(378.917297, 141.233871);
2292path.quadTo(370.233887,146.511475, 364.390686,157.898193);
2293path.lineTo(374.00174,154.571106);
2294path.lineTo(354.009216,208.816208);
2295path.lineTo(398.164948,136.674606);
2296path.quadTo(388.299255,136.674606, 380.294495,140.44487);
2297</div>
2298
2299<div id="testQuadratic47o">
2300path.moveTo(343.939362, 212.598053);
2301path.lineTo(378.457642, 118.940636);
2302path.lineTo(383.692657, 141.516571);
2303path.lineTo(350.319519, 231.902115);
2304path.lineTo(343.939362, 212.598053);
2305path.close();
2306path.moveTo(325.429016, 162.047577);
2307path.quadTo(336.348907, 149.123688, 353.36264, 149.123688);
2308path.quadTo(369.476624, 149.123688, 378.269806, 160.575241);
2309path.lineTo(325.429016, 162.047577);
2310path.close();
2311path.moveTo(370.867188, 186.014069);
2312path.quadTo(370.867188, 161.229614, 352.381104, 161.229614);
2313path.quadTo(333.813202, 161.229614, 331.686493, 186.014069);
2314path.lineTo(370.867188, 186.014069);
2315path.close();
2316path.moveTo(353.161499, 195.011719);
2317path.quadTo(353.161499, 174.726105, 363.876862, 161.96579);
2318path.lineTo(353.161499, 195.011719);
2319path.close();
2320</div>
2321
2322<div id="testQuadratic47s">
2323path.moveTo(366.466309, 151.476364);
2324path.lineTo(378.457642,118.940636);
2325path.lineTo(383.692657,141.516571);
2326path.lineTo(377.159943,159.209305);
2327path.quadTo(377.728729,159.87059, 378.269806,160.575241);
2328path.lineTo(376.638824,160.620682);
2329path.lineTo(370.26593,177.8806);
2330path.quadTo(368.708496,168.390671, 363.116943,164.309357);
2331path.lineTo(356.079041,186.014069);
2332path.lineTo(367.262817,186.014069);
2333path.lineTo(350.319519,231.902115);
2334path.lineTo(343.939362,212.598053);
2335path.lineTo(353.736816,186.014923);
2336path.lineTo(353.737122,186.014069);
2337path.lineTo(353.736938,186.014069);
2338path.quadTo(353.736877,186.014496, 353.736816,186.014923);
2339path.quadTo(353.161499,190.31131, 353.161499,195.011719);
2340</div>
2341
2342<div id="testQuadratic48o">
2343path.moveTo(366.608826, 151.196014);
2344path.quadTo(378.803101, 136.674606, 398.164948, 136.674606);
2345path.lineTo(354.009216, 208.816208);
2346path.lineTo(393.291473, 102.232819);
2347path.lineTo(359.978058, 136.581512);
2348path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
2349path.lineTo(364.390686, 157.898193);
2350path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
2351path.lineTo(350, 120);
2352path.lineTo(366.608826, 151.196014);
2353path.close();
2354</div>
2355
2356<div id="testQuadratic48s">
2357path.moveTo(369.285553, 126.984779);
2358path.lineTo(393.291473,102.232819);
2359path.lineTo(382.416199,131.740402);
2360path.lineTo(396.039917,136.674606);
2361path.quadTo(387.290802,136.674606, 380.294495,140.44487);
2362path.quadTo(379.623352,140.760971, 378.965302,141.103577);
2363path.lineTo(378.917297,141.233856);
2364path.quadTo(378.86972,141.206131, 378.822021,141.178574);
2365path.quadTo(372.011871,144.761871, 366.608826,151.196014);
2366path.lineTo(350,120);
2367path.lineTo(369.285553,126.984779);
2368path.close();
2369</div>
2370
2371<div id="testQuadratic49s">
2372path.moveTo(366.400513, 204.162521);
2373path.lineTo(411.545044, 81.6732483);
2374path.lineTo(366.400513, 204.162521);
2375path.close();
2376path.moveTo(331.585693, 138.050415);
2377path.quadTo(345.867188, 121.147957, 368.11853, 121.147957);
2378path.quadTo(389.193115, 121.147957, 400.693176, 136.124817);
2379path.lineTo(331.585693, 138.050415);
2380path.close();
2381path.moveTo(369.863983, 145.645813);
2382path.quadTo(382.380371, 121.254936, 406.236359, 121.254936);
2383path.lineTo(369.863983, 145.645813);
2384path.close();
2385path.moveTo(369.970581, 137.94342);
2386path.quadTo(383.98465, 121.254936, 406.235992, 121.254936);
2387path.lineTo(369.970581, 137.94342);
2388path.close();
2389</div>
2390
2391<div id="testQuadratic50o">
2392path.moveTo(366.400513, 204.162521);
2393path.lineTo(411.545044, 81.6732483);
2394path.lineTo(366.400513, 204.162521);
2395path.close();
2396path.moveTo(331.585693, 138.050415);
2397path.quadTo(345.867188, 121.147957, 368.11853, 121.147957);
2398path.quadTo(389.193115, 121.147957, 400.693176, 136.124817);
2399path.lineTo(331.585693, 138.050415);
2400path.close();
2401path.moveTo(369.863983, 145.645813);
2402path.quadTo(382.380371, 121.254936, 406.236359, 121.254936);
2403path.lineTo(369.863983, 145.645813);
2404path.close();
2405path.moveTo(369.970581, 137.94342);
2406path.quadTo(383.98465, 121.254936, 406.235992, 121.254936);
2407path.lineTo(369.970581, 137.94342);
2408path.close();
2409</div>
2410
2411<div id="testQuadratic50s">
2412path.moveTo(331.585693, 138.050415);
2413path.quadTo(345.867188,121.147957, 368.11853,121.147957);
2414path.quadTo(378.797424,121.147957, 387.017914,124.993469);
2415path.quadTo(391.577667,123.030998, 396.645874,122.098694);
2416path.quadTo(401.232697,121.254936, 406.235992,121.254936);
2417path.lineTo(395.061676,126.397095);
2418path.lineTo(391.979187,127.81559);
2419path.quadTo(393.010406,128.517273, 393.994415,129.292801);
2420path.quadTo(394.053131,129.339066, 394.111664,129.385605);
2421path.lineTo(393.910492,129.520508);
2422path.lineTo(383.340973,136.608322);
2423path.lineTo(375.350006,136.830978);
2424path.quadTo(376.20224,135.708145, 377.092102,134.66626);
2425path.lineTo(372.197113,136.918823);
2426</div>
2427
2428<div id="testQuadratic51">
2429path.moveTo(369.863983, 145.645813);
2430path.quadTo(382.380371, 121.254936, 406.236359, 121.254936);
2431path.lineTo(369.863983, 145.645813);
2432path.close();
2433path.moveTo(369.970581, 137.94342);
2434path.quadTo(383.98465, 121.254936, 406.235992, 121.254936);
2435path.lineTo(369.970581, 137.94342);
2436path.close();
2437</div>
2438
2439<div id="testQuadratic52o">
2440path.moveTo(366.400513, 204.162521);
2441path.lineTo(411.545044, 81.6732483);
2442path.lineTo(366.400513, 204.162521);
2443path.close();
2444path.moveTo(331.585693, 138.050415);
2445path.quadTo(345.867188, 121.147957, 368.11853, 121.147957);
2446path.quadTo(389.193115, 121.147957, 400.693176, 136.124817);
2447path.lineTo(331.585693, 138.050415);
2448path.close();
2449path.moveTo(369.863983, 145.645813);
2450path.quadTo(382.380371, 121.254936, 406.236359, 121.254936);
2451path.lineTo(369.863983, 145.645813);
2452path.close();
2453path.moveTo(369.970581, 137.94342);
2454path.quadTo(383.98465, 121.254936, 406.235992, 121.254936);
2455path.lineTo(369.970581, 137.94342);
2456path.close();
2457</div>
2458
2459<div id="testQuadratic52s">
2460path.moveTo(331.585693, 138.050415);
2461path.quadTo(345.867188,121.147957, 368.11853,121.147957);
2462path.quadTo(378.797424,121.147957, 387.017914,124.993469);
2463path.quadTo(391.577667,123.030998, 396.645874,122.098694);
2464path.quadTo(401.232697,121.254936, 406.235992,121.254936);
2465path.close();
2466path.moveTo(383.340973, 136.608322);
2467path.lineTo(369.863983,145.645813);
2468path.quadTo(372.378204,140.746292, 375.350006,136.830978);
2469path.lineTo(372.197113,136.918823);
2470path.lineTo(369.970581,137.94342);
2471path.quadTo(370.390961,137.442825, 370.818756,136.95723);
2472path.lineTo(331.585693,138.050415);
2473path.quadTo(345.867188,121.147957, 368.11853,121.147957);
2474path.quadTo(378.797424,121.147957, 387.017914,124.993469);
2475path.quadTo(391.577667,123.030998, 396.645874,122.098694);
2476path.quadTo(401.232697,121.254936, 406.235992,121.254936);
2477path.close();
2478path.moveTo(383.340973, 136.608322);
2479path.lineTo(391.380798,136.384293);
2480path.lineTo(400.693176,136.124817);
2481path.quadTo(397.721985,132.255341, 394.111664,129.385605);
2482path.lineTo(406.236359,121.254936);
2483path.quadTo(406.236176,121.254936, 406.235992,121.254936);
2484path.lineTo(406.235992,121.254936);
2485path.quadTo(401.232697,121.254936, 396.645874,122.098694);
2486path.quadTo(391.577667,123.030998, 387.017914,124.993469);
2487path.quadTo(378.797424,121.147957, 368.11853,121.147957);
2488path.quadTo(345.867188,121.147957, 331.585693,138.050415);
2489path.lineTo(370.818756,136.95723);
2490path.quadTo(370.390961,137.442825, 369.970581,137.94342);
2491path.lineTo(372.197113,136.918823);
2492path.lineTo(375.350006,136.830978);
2493path.quadTo(372.378204,140.746292, 369.863983,145.645813);
2494path.lineTo(383.340973,136.608322);
2495path.close();
2496</div>
2497
2498<div id="testQuadratic52sa">
2499path.moveTo(331.585693, 138.050415);
2500path.quadTo(345.867188,121.147957, 368.11853,121.147957);
2501path.quadTo(378.797424,121.147957, 387.017914,124.993469);
2502path.quadTo(391.577667,123.030998, 396.645874,122.098694);
2503path.quadTo(401.232697,121.254936, 406.235992,121.254936);
2504path.close();
2505</div>
2506
2507<div id="testQuadratic52sb">
2508path.moveTo(383.340973, 136.608322);
2509path.lineTo(369.863983,145.645813);
2510path.quadTo(372.378204,140.746292, 375.350006,136.830978);
2511path.lineTo(372.197113,136.918823);
2512path.lineTo(369.970581,137.94342);
2513path.quadTo(370.390961,137.442825, 370.818756,136.95723);
2514path.lineTo(331.585693,138.050415);
2515path.quadTo(345.867188,121.147957, 368.11853,121.147957);
2516path.quadTo(378.797424,121.147957, 387.017914,124.993469);
2517path.quadTo(391.577667,123.030998, 396.645874,122.098694);
2518path.quadTo(401.232697,121.254936, 406.235992,121.254936);
2519path.close();
2520</div>
2521
2522<div id="testQuadratic52sc">
2523path.moveTo(383.340973, 136.608322);
2524path.lineTo(391.380798,136.384293);
2525path.lineTo(400.693176,136.124817);
2526path.quadTo(397.721985,132.255341, 394.111664,129.385605);
2527path.lineTo(406.236359,121.254936);
2528path.quadTo(406.236176,121.254936, 406.235992,121.254936);
2529path.lineTo(406.235992,121.254936);
2530path.quadTo(401.232697,121.254936, 396.645874,122.098694);
2531path.quadTo(391.577667,123.030998, 387.017914,124.993469);
2532path.quadTo(378.797424,121.147957, 368.11853,121.147957);
2533path.quadTo(345.867188,121.147957, 331.585693,138.050415);
2534path.lineTo(370.818756,136.95723);
2535path.quadTo(370.390961,137.442825, 369.970581,137.94342);
2536path.lineTo(372.197113,136.918823);
2537path.lineTo(375.350006,136.830978);
2538path.quadTo(372.378204,140.746292, 369.863983,145.645813);
2539path.lineTo(383.340973,136.608322);
2540path.close();
2541</div>
2542
2543<div id="testQuadratic53o">
2544path.moveTo(303.12088, 141.299606);
2545path.lineTo(330.463562, 217.659027);
2546path.lineTo(303.12088, 141.299606);
2547path.close();
2548path.moveTo(371.919067, 205.854996);
2549path.lineTo(326.236786, 205.854996);
2550path.quadTo(329.104431, 231.663818, 351.512085, 231.663818);
2551path.lineTo(371.919067, 205.854996);
2552path.close();
2553</div>
2554
2555<div id="testQuadratic53s">
2556path.moveTo(326.236786,205.854996);
2557path.lineTo(326.236786,205.854996);
2558path.close();
2559path.moveTo(371.919067,205.854996);
2560path.lineTo(326.236786,205.854996);
2561</div>
2562
2563<div id="testQuadratic54">
2564path.moveTo(303.12088, 141.299606);
2565path.lineTo(330.463562, 217.659027);
2566path.lineTo(358.606506, 141.299606);
2567path.lineTo(303.12088, 141.299606);
2568path.close();
2569path.moveTo(371.919067, 205.854996);
2570path.lineTo(326.236786, 205.854996);
2571path.quadTo(329.104431, 231.663818, 351.512085, 231.663818);
2572path.lineTo(371.919067, 205.854996);
2573path.close();
2574</div>
2575
2576<div id="testQuadratic55o">
2577path.moveTo(303.12088, 141.299606);
2578path.lineTo(330.463562, 217.659027);
2579path.lineTo(358.606506, 141.299606);
2580path.lineTo(303.12088, 141.299606);
2581path.close();
2582path.moveTo(326.236786, 205.854996);
2583path.quadTo(329.104431, 231.663818, 351.512085, 231.663818);
2584path.lineTo(326.236786, 205.854996);
2585path.close();
2586</div>
2587
2588<div id="testQuadratic55s">
2589path.moveTo(326.236786,205.854996);
2590path.lineTo(303.12088,141.299606);
2591path.lineTo(358.606506,141.299606);
2592path.lineTo(332.468719,212.218475);
2593path.lineTo(351.512085,231.663818);
2594path.quadTo(329.104431,231.663818, 326.236786,205.854996);
2595path.close();
2596</div>
2597
2598<div id="testQuadratic56o">
2599path.moveTo(366.608826, 151.196014);
2600path.quadTo(378.803101, 136.674606, 398.164948, 136.674606);
2601path.lineTo(354.009216, 208.816208);
2602path.lineTo(393.291473, 102.232819);
2603path.lineTo(359.978058, 136.581512);
2604path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
2605path.lineTo(364.390686, 157.898193);
2606path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
2607path.lineTo(350, 120);
2608path.lineTo(366.608826, 151.196014);
2609path.close();
2610</div>
2611
2612<div id="testQuadratic56s">
2613path.moveTo(369.285553,126.984779);
2614path.lineTo(393.291473,102.232819);
2615path.lineTo(382.416199,131.740402);
2616path.lineTo(396.039917,136.674606);
2617path.quadTo(387.290802,136.674606, 380.294495,140.44487);
2618path.quadTo(379.623352,140.760971, 378.965302,141.103577);
2619path.lineTo(378.917297,141.233856);
2620path.quadTo(378.86972,141.206131, 378.822021,141.178574);
2621path.quadTo(372.011871,144.761871, 366.608826,151.196014);
2622path.lineTo(350,120);
2623path.lineTo(369.285553,126.984779);
2624path.close();
2625path.moveTo(378.917297,141.233871);
2626path.lineTo(378.917297,141.233856);
2627path.quadTo(378.86972,141.206131, 378.822021,141.178574);
2628path.quadTo(372.011871,144.761871, 366.608826,151.196014);
2629</div>
2630
2631<div id="testQuadratic57o">
2632path.moveTo(303.12088, 141.299606);
2633path.lineTo(330.463562, 217.659027);
2634path.lineTo(358.606506, 141.299606);
2635path.lineTo(362.874634, 159.705902);
2636path.lineTo(335.665344, 233.397751);
2637path.lineTo(322.12738, 233.397751);
2638path.lineTo(295.718353, 159.505829);
2639path.lineTo(295.718353, 240);
2640path.lineTo(303.12088, 141.299606);
2641path.close();
2642path.moveTo(322.935669, 231.030273);
2643path.quadTo(312.832214, 220.393295, 312.832214, 203.454178);
2644path.quadTo(312.832214, 186.981888, 321.73526, 176.444946);
2645path.quadTo(330.638306, 165.90802, 344.509705, 165.90802);
2646path.lineTo(371.919067, 205.854996);
2647path.lineTo(326.236786, 205.854996);
2648path.quadTo(329.104431, 231.663818, 351.512085, 231.663818);
2649path.lineTo(322.935669, 231.030273);
2650path.close();
2651path.moveTo(326.837006, 195.984955);
2652path.lineTo(358.78125, 195.984955);
2653path.lineTo(343.709442, 175.778046);
2654path.quadTo(328.570923, 175.778046, 326.837006, 195.984955);
2655path.close();
2656</div>
2657
2658<div id="testQuadratic57s">
2659path.moveTo(300.708282,173.46756);
2660path.lineTo(303.12088,141.299606);
2661path.lineTo(317.770294,182.210785);
2662path.quadTo(319.462738,179.134506, 321.73526,176.444946);
2663path.quadTo(330.638306,165.90802, 344.509705,165.90802);
2664path.lineTo(347.780151,170.674438);
2665path.lineTo(358.606506,141.299606);
2666path.lineTo(362.874634,159.705902);
2667path.lineTo(354.960693,181.139511);
2668path.lineTo(371.919067,205.854996);
2669path.lineTo(345.834961,205.854996);
2670path.lineTo(337.609253,228.13298);
2671path.quadTo(342.649323,231.302383, 349.843323,231.626816);
2672path.lineTo(336.429047,231.329422);
2673path.lineTo(335.665344,233.397751);
2674path.lineTo(322.12738,233.397751);
2675path.lineTo(320.050781,227.587433);
2676path.quadTo(313.982483,219.336182, 313.015503,207.902908);
2677path.lineTo(300.708282,173.46756);
2678path.close();
2679path.moveTo(300.708282,173.46756);
2680path.lineTo(295.718353,240);
2681path.lineTo(295.718353,159.505829);
2682path.lineTo(300.708282,173.46756);
2683path.close();
2684path.moveTo(349.843323,231.626816);
2685path.lineTo(351.512085,231.663818);
2686path.quadTo(350.663696,231.663818, 349.843323,231.626816);
2687path.close();
2688path.moveTo(326.236786,205.854996);
2689path.lineTo(330.463562,217.659027);
2690path.lineTo(334.814056,205.854996);
2691path.lineTo(326.236786,205.854996);
2692path.close();
2693path.moveTo(334.814056,205.854996);
2694path.lineTo(338.451721,195.984955);
2695path.lineTo(349.479309,195.984955);
2696path.lineTo(352.559326,187.643173);
2697path.lineTo(358.78125,195.984955);
2698</div>
2699
2700<div id="testQuadratic58o">
2701path.moveTo(283.714233, 240);
2702path.lineTo(283.714233, 141.299606);
2703path.lineTo(303.12088, 141.299606);
2704path.lineTo(330.463562, 217.659027);
2705path.lineTo(358.606506, 141.299606);
2706path.lineTo(362.874634, 159.705902);
2707path.lineTo(335.665344, 233.397751);
2708path.lineTo(322.12738, 233.397751);
2709path.lineTo(295.718353, 159.505829);
2710path.lineTo(295.718353, 240);
2711path.lineTo(283.714233, 240);
2712path.close();
2713path.moveTo(322.935669, 231.030273);
2714path.quadTo(312.832214, 220.393295, 312.832214, 203.454178);
2715path.quadTo(312.832214, 186.981888, 321.73526, 176.444946);
2716path.quadTo(330.638306, 165.90802, 344.509705, 165.90802);
2717path.quadTo(357.647522, 165.90802, 364.81665, 175.244537);
2718path.lineTo(371.919067, 205.854996);
2719path.lineTo(326.236786, 205.854996);
2720path.quadTo(329.104431, 231.663818, 351.512085, 231.663818);
2721path.lineTo(322.935669, 231.030273);
2722path.close();
2723path.moveTo(326.837006, 195.984955);
2724path.lineTo(358.78125, 195.984955);
2725path.quadTo(358.78125, 175.778046, 343.709442, 175.778046);
2726path.quadTo(328.570923, 175.778046, 326.837006, 195.984955);
2727path.close();
2728</div>
2729
2730<div id="testQuadratic58s">
2731path.moveTo(283.714233,240);
2732path.lineTo(283.714233,141.299606);
2733path.lineTo(303.12088,141.299606);
2734path.lineTo(317.770294,182.210785);
2735path.quadTo(319.462738,179.134506, 321.73526,176.444946);
2736path.quadTo(330.638306,165.90802, 344.509705,165.90802);
2737path.quadTo(347.07132,165.90802, 349.406036,166.26297);
2738path.lineTo(358.606506,141.299606);
2739path.lineTo(362.874634,159.705902);
2740path.lineTo(359.116211,169.884979);
2741path.quadTo(362.326477,172.001541, 364.81665,175.244537);
2742path.lineTo(371.919067,205.854996);
2743path.lineTo(345.834961,205.854996);
2744path.lineTo(337.609253,228.13298);
2745path.quadTo(342.649323,231.302383, 349.843323,231.626816);
2746path.lineTo(336.429047,231.329422);
2747path.lineTo(335.665344,233.397751);
2748path.lineTo(322.12738,233.397751);
2749path.lineTo(320.050781,227.587433);
2750path.quadTo(313.982483,219.336182, 313.015503,207.902908);
2751path.lineTo(295.718353,159.505829);
2752path.lineTo(295.718353,240);
2753path.lineTo(283.714233,240);
2754path.close();
2755path.moveTo(349.843323,231.626816);
2756path.lineTo(351.512085,231.663818);
2757path.quadTo(350.663696,231.663818, 349.843323,231.626816);
2758path.close();
2759path.moveTo(326.236786,205.854996);
2760path.lineTo(330.463562,217.659027);
2761path.lineTo(334.814056,205.854996);
2762path.lineTo(326.236786,205.854996);
2763path.close();
2764path.moveTo(334.814056,205.854996);
2765path.lineTo(338.451721,195.984955);
2766path.lineTo(349.479309,195.984955);
2767path.lineTo(355.054535,180.885361);
2768path.quadTo(358.78125,185.936935, 358.78125,195.984955);
2769</div>
2770
2771<div id="testQuadratic58a">
2772path.moveTo(283.714233,240);
2773path.lineTo(283.714233,141.299606);
2774path.lineTo(303.12088,141.299606);
2775path.lineTo(317.770294,182.210785);
2776path.quadTo(319.462738,179.134506, 321.73526,176.444946);
2777path.quadTo(330.638306,165.90802, 344.509705,165.90802);
2778path.quadTo(347.07132,165.90802, 349.406036,166.26297);
2779path.lineTo(358.606506,141.299606);
2780path.lineTo(362.874634,159.705902);
2781path.lineTo(359.116211,169.884979);
2782path.quadTo(362.326477,172.001541, 364.81665,175.244537);
2783path.lineTo(371.919067,205.854996);
2784path.lineTo(345.834961,205.854996);
2785path.lineTo(337.609253,228.13298);
2786path.quadTo(342.649323,231.302383, 349.843323,231.626816);
2787path.lineTo(336.429047,231.329422);
2788path.lineTo(335.665344,233.397751);
2789path.lineTo(322.12738,233.397751);
2790path.lineTo(320.050781,227.587433);
2791path.quadTo(313.982483,219.336182, 313.015503,207.902908);
2792path.lineTo(295.718353,159.505829);
2793path.lineTo(295.718353,240);
2794path.lineTo(283.714233,240);
2795path.close();
2796path.moveTo(349.843323,231.626816);
2797path.lineTo(351.512085,231.663818);
2798path.quadTo(350.663696,231.663818, 349.843323,231.626816);
2799path.close();
2800path.moveTo(349.479309,195.984955);
2801path.lineTo(358.78125,195.984955);
2802path.quadTo(358.78125,185.936935, 355.054535,180.885361);
2803path.lineTo(349.479309,195.984955);
2804path.close();
2805path.moveTo(345.858368,175.888794);
2806path.lineTo(338.451721,195.984955);
2807path.lineTo(326.837006,195.984955);
2808path.quadTo(328.570923,175.778046, 343.709442,175.778046);
2809path.quadTo(344.825195,175.778046, 345.858368,175.888794);
2810path.close();
2811</div>
2812
2813<div id="testQuadratic59">
2814    path.moveTo(0, 0);
2815    path.quadTo(0, 0, 0, 0);
2816    path.lineTo(2, 2);
2817    path.close();
2818    path.moveTo(0, 0);
2819    path.lineTo(2, 0);
2820    path.quadTo(3, 1, 1, 2);
2821</div>
2822
2823<div id="testQuadratic59o">
2824path.moveTo(369.863983, 145.645813);
2825path.quadTo(382.380371, 121.254936, 406.236359, 121.254936);
2826path.quadTo(409.445679, 121.254936, 412.975952, 121.789818);
2827path.lineTo(369.863983, 145.645813);
2828path.close();
2829path.moveTo(369.970581, 137.94342);
2830path.quadTo(383.98465, 121.254936, 406.235992, 121.254936);
2831path.quadTo(425.705902, 121.254936, 439.71994, 137.087616);
2832path.lineTo(369.970581, 137.94342);
2833path.close();
2834</div>
2835
2836<div id="testQuadratic59s">
2837path.moveTo(369.970581,137.94342);
2838path.quadTo(383.98465,121.254936, 406.235992,121.254936);
2839path.quadTo(406.237854,121.254936, 406.239746,121.254936);
2840path.lineTo(406.239532,121.254936);
2841path.quadTo(409.447418,121.255203, 412.975952,121.789818);
2842</div>
2843
2844<div id="testQuadratic60">
2845path.moveTo(360.416077, 166.795715);
2846path.quadTo(370.126831, 147.872162, 388.635406, 147.872162);
2847path.lineTo(360.416077, 166.795715);
2848path.close();
2849path.moveTo(353.2948, 194.351074);
2850path.quadTo(353.2948, 173.767563, 364.167572, 160.819855);
2851path.quadTo(375.040314, 147.872162, 392.303894, 147.872162);
2852path.lineTo(353.2948, 194.351074);
2853path.close();
2854</div>
2855
2856<div id="testQuadratic61">
2857path.moveTo(348.781738, 123.864815);
2858path.lineTo(369.848602, 123.864815);
2859path.lineTo(369.848602, 145.680267);
2860path.quadTo(382.360413, 121.298294, 406.207703, 121.298294);
2861path.lineTo(348.781738, 123.864815);
2862path.close();
2863path.moveTo(369.961151, 137.980698);
2864path.quadTo(383.970093, 121.298294, 406.213287, 121.298294);
2865path.lineTo(369.961151, 137.980698);
2866path.close();
2867</div>
2868
2869<div id="testQuadratic62x">
2870    path.setFillType(SkPath::kEvenOdd_FillType);
2871    path.moveTo(0, 0);
2872    path.quadTo(0, 0, 0, 0);
2873    path.lineTo(2, 2);
2874    path.close();
2875    path.moveTo(0, 0);
2876    path.lineTo(2, 0);
2877    path.quadTo(3, 1, 1, 2);
2878    path.close();
2879</div>
2880
2881<div id="testLine1a">
2882    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
2883    path.addRect(4, 0, 13, 13, SkPath::kCCW_Direction);
2884    path.close();
2885</div>
2886
2887<div id="testQuadratic63">
2888    path.moveTo(0, 0);
2889    path.quadTo(0, 0, 0, 0);
2890    path.lineTo(3, 2);
2891    path.close();
2892    path.moveTo(1, 0);
2893    path.lineTo(2, 1);
2894    path.quadTo(2, 1, 2, 2);
2895    path.close();
2896</div>
2897
2898<div id="testQuadratic64">
2899    path.moveTo(0, 0);
2900    path.quadTo(0, 0, 0, 0);
2901    path.lineTo(2, 3);
2902    path.close();
2903    path.moveTo(1, 2);
2904    path.lineTo(2, 2);
2905    path.quadTo(0, 3, 3, 3);
2906    path.close();
2907</div>
2908
2909<div id="testQuadratic65">
2910    path.moveTo(0, 0);
2911    path.quadTo(0, 0, 0, 0);
2912    path.lineTo(3, 2);
2913    path.close();
2914    path.moveTo(2, 1);
2915    path.lineTo(2, 2);
2916    path.quadTo(0, 3, 1, 3);
2917    path.close();
2918</div>
2919
2920<div id="testQuadratic66">
2921    path.moveTo(0, 0);
2922    path.quadTo(0, 0, 0, 1);
2923    path.lineTo(3, 2);
2924    path.close();
2925    path.moveTo(2, 0);
2926    path.lineTo(1, 1);
2927    path.quadTo(3, 2, 2, 3);
2928    path.close();
2929</div>
2930
2931<div id="testQuadratic67x">
2932    path.setFillType(SkPath::kEvenOdd_FillType);
2933    path.moveTo(0, 0);
2934    path.quadTo(0, 0, 2, 1);
2935    path.lineTo(2, 2);
2936    path.close();
2937    path.moveTo(0, 0);
2938    path.lineTo(2, 0);
2939    path.quadTo(1, 1, 3, 2);
2940    path.close();
2941</div>
2942
2943<div id="testQuadratic68">
2944    path.moveTo(0, 0);
2945    path.quadTo(1, 0, 0, 1);
2946    path.lineTo(1, 2);
2947    path.close();
2948    path.moveTo(0, 0);
2949    path.lineTo(0, 0);
2950    path.quadTo(0, 1, 2, 1);
2951    path.close();
2952</div>
2953
2954<div id="testQuadratic69">
2955    path.moveTo(0, 0);
2956    path.quadTo(0, 0, 0, 1);
2957    path.lineTo(3, 2);
2958    path.close();
2959    path.moveTo(2, 0);
2960    path.lineTo(1, 1);
2961    path.quadTo(3, 2, 2, 3);
2962    path.close();
2963</div>
2964
2965<div id="testQuadratic70x">
2966    path.setFillType(SkPath::kEvenOdd_FillType);
2967    path.moveTo(0, 0);
2968    path.quadTo(1, 0, 0, 1);
2969    path.lineTo(1, 2);
2970    path.close();
2971    path.moveTo(0, 0);
2972    path.lineTo(0, 0);
2973    path.quadTo(0, 1, 2, 1);
2974    path.close();
2975</div>
2976
2977<div id="testQuadratic71">
2978    path.moveTo(0, 0);
2979    path.quadTo(1, 0, 1, 1);
2980    path.lineTo(3, 2);
2981    path.close();
2982    path.moveTo(0, 0);
2983    path.lineTo(0, 0);
2984    path.quadTo(1, 1, 3, 1);
2985    path.close();
2986</div>
2987
2988<div id="testQuadratic72">
2989    path.moveTo(0, 0);
2990    path.quadTo(1, 0, 1, 2);
2991    path.lineTo(1, 2);
2992    path.close();
2993    path.moveTo(0, 0);
2994    path.lineTo(1, 0);
2995    path.quadTo(0, 1, 3, 2);
2996    path.close();
2997</div>
2998
2999<div id="testQuadratic73">
3000    path.moveTo(0, 0);
3001    path.quadTo(1, 0, 0, 3);
3002    path.lineTo(0, 3);
3003    path.close();
3004    path.moveTo(0, 0);
3005    path.lineTo(1, 0);
3006    path.quadTo(0, 1, 1, 1);
3007    path.close();
3008</div>
3009
3010<div id="testQuadratic74">
3011    path.moveTo(0, 0);
3012    path.quadTo(1, 0, 1, 3);
3013    path.lineTo(1, 3);
3014    path.close();
3015    path.moveTo(0, 0);
3016    path.lineTo(0, 1);
3017    path.quadTo(3, 2, 2, 3);
3018    path.close();
3019</div>
3020
3021<div id="testQuadratic75">
3022    path.moveTo(0, 0);
3023    path.quadTo(1, 0, 1, 3);
3024    path.lineTo(2, 3);
3025    path.close();
3026    path.moveTo(0, 0);
3027    path.lineTo(0, 1);
3028    path.quadTo(3, 2, 2, 3);
3029    path.close();
3030</div>
3031
3032<div id="testQuadratic76">
3033    path.moveTo(0, 0);
3034    path.quadTo(0, 0, 0, 0);
3035    path.lineTo(2, 3);
3036    path.close();
3037    path.moveTo(1, 0);
3038    path.lineTo(1, 2);
3039    path.quadTo(1, 2, 2, 2);
3040    path.close();
3041</div>
3042
3043<div id="testQuadratic77">
3044    path.moveTo(0, 0);
3045    path.quadTo(1, 0, 1, 1);
3046    path.lineTo(3, 1);
3047    path.close();
3048    path.moveTo(0, 0);
3049    path.lineTo(1, 0);
3050    path.quadTo(0, 1, 3, 2);
3051    path.close();
3052</div>
3053
3054<div id="testQuadratic78">
3055    path.moveTo(0, 0);
3056    path.quadTo(1, 0, 1, 2);
3057    path.lineTo(3, 2);
3058    path.close();
3059    path.moveTo(0, 0);
3060    path.lineTo(0, 0);
3061    path.quadTo(2, 1, 0, 2);
3062    path.close();
3063</div>
3064
3065<div id="testQuadratic79">
3066    path.moveTo(0, 0);
3067    path.quadTo(1, 0, 1, 2);
3068    path.lineTo(3, 2);
3069    path.close();
3070    path.moveTo(0, 0);
3071    path.lineTo(1, 0);
3072    path.quadTo(0, 1, 3, 2);
3073    path.close();
3074</div>
3075
3076<div id="testQuadratic80">
3077    path.moveTo(0, 0);
3078    path.quadTo(1, 0, 2, 3);
3079    path.lineTo(2, 3);
3080    path.close();
3081    path.moveTo(1, 0);
3082    path.lineTo(3, 0);
3083    path.quadTo(0, 1, 1, 1);
3084    path.close();
3085</div>
3086
3087<div id="testQuadratic81">
3088    path.moveTo(0, 0);
3089    path.quadTo(2, 0, 1, 1);
3090    path.lineTo(1, 1);
3091    path.close();
3092    path.moveTo(0, 0);
3093    path.lineTo(0, 0);
3094    path.quadTo(2, 1, 0, 2);
3095    path.close();
3096</div>
3097
3098<div id="testQuadratic82">
3099    path.moveTo(0, 0);
3100    path.quadTo(2, 0, 1, 1);
3101    path.lineTo(0, 3);
3102    path.close();
3103    path.moveTo(0, 0);
3104    path.lineTo(0, 0);
3105    path.quadTo(2, 1, 0, 2);
3106    path.close();
3107</div>
3108
3109<div id="testQuadratic83">
3110    path.moveTo(0, 0);
3111    path.quadTo(0, 0, 2, 0);
3112    path.lineTo(2, 2);
3113    path.close();
3114    path.moveTo(0, 1);
3115    path.lineTo(0, 2);
3116    path.quadTo(2, 2, 1, 3);
3117    path.close();
3118</div>
3119
3120<div id="testQuadratic84">
3121    path.moveTo(0, 0);
3122    path.quadTo(2, 0, 1, 1);
3123    path.lineTo(2, 1);
3124    path.close();
3125    path.moveTo(1, 0);
3126    path.lineTo(2, 0);
3127    path.quadTo(0, 1, 2, 2);
3128    path.close();
3129</div>
3130
3131<div id="testQuadratic85">
3132    path.moveTo(0, 0);
3133    path.quadTo(3, 0, 1, 1);
3134    path.lineTo(1, 1);
3135    path.close();
3136    path.moveTo(1, 0);
3137    path.lineTo(3, 0);
3138    path.quadTo(0, 1, 1, 2);
3139    path.close();
3140</div>
3141
3142<div id="testQuadratic86">
3143    path.moveTo(0, 0);
3144    path.quadTo(0, 1, 1, 1);
3145    path.lineTo(2, 3);
3146    path.close();
3147    path.moveTo(0, 0);
3148    path.lineTo(0, 0);
3149    path.quadTo(1, 1, 1, 3);
3150    path.close();
3151</div>
3152
3153<div id="testQuadratic87">
3154    path.moveTo(0, 0);
3155    path.quadTo(2, 1, 0, 2);
3156    path.lineTo(2, 3);
3157    path.close();
3158    path.moveTo(0, 0);
3159    path.lineTo(1, 1);
3160    path.quadTo(0, 2, 3, 2);
3161    path.close();
3162</div>
3163
3164<div id="testQuadratic88">
3165    path.moveTo(0, 0);
3166    path.quadTo(2, 1, 0, 2);
3167    path.lineTo(2, 2);
3168    path.close();
3169    path.moveTo(1, 0);
3170    path.lineTo(1, 1);
3171    path.quadTo(0, 2, 2, 2);
3172    path.close();
3173</div>
3174
3175<div id="testQuadratic89x">
3176    path.setFillType(SkPath::kEvenOdd_FillType);
3177    path.moveTo(0, 0);
3178    path.quadTo(3, 1, 2, 2);
3179    path.lineTo(0, 3);
3180    path.close();
3181    path.moveTo(0, 0);
3182    path.lineTo(2, 1);
3183    path.quadTo(3, 1, 3, 3);
3184    path.close();
3185</div>
3186
3187<div id="testQuadratic90x">
3188    path.setFillType(SkPath::kEvenOdd_FillType);
3189    path.moveTo(0, 0);
3190    path.quadTo(3, 0, 2, 2);
3191    path.lineTo(1, 3);
3192    path.close();
3193    path.moveTo(0, 0);
3194    path.lineTo(0, 1);
3195    path.quadTo(3, 2, 2, 3);
3196    path.close();
3197</div>
3198
3199<div id="testQuadratic91">
3200    path.moveTo(0, 0);
3201    path.quadTo(3, 2, 2, 3);
3202    path.lineTo(2, 3);
3203    path.close();
3204    path.moveTo(0, 0);
3205    path.lineTo(1, 1);
3206    path.quadTo(2, 1, 2, 3);
3207    path.close();
3208</div>
3209
3210<div id="testQuadratic92x">
3211    path.setFillType(SkPath::kEvenOdd_FillType);
3212    path.moveTo(1, 0);
3213    path.quadTo(3, 0, 2, 2);
3214    path.lineTo(2, 2);
3215    path.close();
3216    path.moveTo(2, 0);
3217    path.lineTo(0, 1);
3218    path.quadTo(3, 2, 2, 3);
3219    path.close();
3220</div>
3221
3222<div id="testLine82">
3223    path.addRect(20, 0, 40, 40, SkPath::kCCWDirection);
3224    path.addRect(24, 20, 36, 30, SkPath::kCCWDirection);
3225    path.addRect(24, 32, 33, 36, SkPath::kCCWDirection);
3226</div>
3227
3228<div id="testLine82a">
3229    SkPath path;
3230    path.addRect(0, 0, 6, 10, SkPath::kCW_Direction);
3231    path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
3232    path.addRect(2, 6, 4, 8, SkPath::kCW_Direction);
3233    testSimplifyx(path);
3234</div>
3235
3236<div id="testLine82b">
3237    SkPath path;
3238    path.addRect(0, 0, 6, 10, SkPath::kCW_Direction);
3239    path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
3240    path.addRect(2, 6, 4, 8, SkPath::kCCW_Direction);
3241    testSimplifyx(path);
3242</div>
3243
3244<div id="testLine82c">
3245    SkPath path;
3246    path.addRect(0, 0, 6, 10, SkPath::kCW_Direction);
3247    path.addRect(2, 2, 4, 4, SkPath::kCCW_Direction);
3248    path.addRect(2, 6, 4, 8, SkPath::kCW_Direction);
3249    testSimplifyx(path);
3250</div>
3251
3252
3253<div id="testLine82d">
3254    SkPath path;
3255    path.addRect(0, 0, 6, 10, SkPath::kCW_Direction);
3256    path.addRect(2, 2, 4, 4, SkPath::kCCW_Direction);
3257    path.addRect(2, 6, 4, 8, SkPath::kCCW_Direction);
3258    testSimplifyx(path);
3259</div>
3260
3261<div id="testLine82e">
3262    SkPath path;
3263    path.addRect(0, 0, 6, 10, SkPath::kCCW_Direction);
3264    path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
3265    path.addRect(2, 6, 4, 8, SkPath::kCW_Direction);
3266    testSimplifyx(path);
3267</div>
3268
3269<div id="testLine82f">
3270    SkPath path;
3271    path.addRect(0, 0, 6, 10, SkPath::kCCW_Direction);
3272    path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
3273    path.addRect(2, 6, 4, 8, SkPath::kCCW_Direction);
3274    testSimplifyx(path);
3275</div>
3276
3277<div id="testLine82g">
3278    SkPath path;
3279    path.addRect(0, 0, 6, 10, SkPath::kCCW_Direction);
3280    path.addRect(2, 2, 4, 4, SkPath::kCCW_Direction);
3281    path.addRect(2, 6, 4, 8, SkPath::kCW_Direction);
3282    testSimplifyx(path);
3283</div>
3284
3285<div id="testLine82h">
3286    SkPath path;
3287    path.addRect(0, 0, 6, 10, SkPath::kCCW_Direction);
3288    path.addRect(2, 2, 4, 4, SkPath::kCCW_Direction);
3289    path.addRect(2, 6, 4, 8, SkPath::kCCW_Direction);
3290    testSimplifyx(path);
3291</div>
3292
3293<div id="testLine83">
3294path.addRect(10, 30, 30, 40, SkPath::kCCW_Direction);
3295path.addRect(0, 12, 12, 18, SkPath::kCCW_Direction);
3296path.addRect(4, 13, 13, 16, SkPath::kCCW_Direction);
3297</div>
3298
3299<div id="testLine84x">
3300    path.setFillType(SkPath::kEvenOdd_FillType);
3301    path.addRect(0, 12, 60, 30, SkPath::kCCW_Direction);
3302    path.addRect(10, 20, 40, 30, SkPath::kCCW_Direction);
3303    path.addRect(0, 12, 12, 12, SkPath::kCCW_Direction);
3304    path.addRect(4, 12, 13, 13, SkPath::kCCW_Direction);
3305</div>
3306
3307<div id="testLine85">
3308    path.addRect(36, 0, 66, 60, SkPath::kCCW_Direction);
3309    path.addRect(20, 0, 40, 40, SkPath::kCCW_Direction);
3310    path.addRect(12, 0, 24, 24, SkPath::kCCW_Direction);
3311    path.addRect(32, 0, 36, 41, SkPath::kCCW_Direction);
3312</div>
3313
3314<div id="testQuadralateral1">
3315    path.moveTo(0, 0);
3316    path.lineTo(0, 0);
3317    path.lineTo(0, 0);
3318    path.lineTo(3, 2);
3319    path.close();
3320    path.moveTo(0, 0);
3321    path.lineTo(2, 1);
3322    path.lineTo(2, 2);
3323    path.lineTo(2, 3);
3324    path.close();
3325</div>
3326
3327<div id="testCubic1">
3328    path.moveTo(0, 0);
3329    path.cubicTo(0, 1, 1, 1, 1, 0);
3330    path.close();
3331    path.moveTo(1, 0);
3332    path.cubicTo(0, 0, 0, 1, 1, 1);
3333    path.close();
3334</div>
3335
3336<div id="testQuadratic93">
3337    path.moveTo(3, 0);
3338    path.quadTo(0, 1, 3, 2);
3339    path.lineTo(0, 3);
3340    path.close();
3341    path.moveTo(1, 0);
3342    path.lineTo(2, 0);
3343    path.quadTo(1, 1, 2, 2);
3344    path.close();
3345</div>
3346
3347<div id="cubicOp1d">
3348    path.setFillType(SkPath::kWinding_FillType);
3349    path.moveTo(0,1);
3350    path.cubicTo(0,2, 1,0, 1,0);
3351    path.close();
3352    pathB.setFillType(SkPath::kWinding_FillType);
3353    pathB.moveTo(0,1);
3354    pathB.cubicTo(0,1, 1,0, 2,0);
3355    pathB.close();
3356</div>
3357
3358<div id="cubicOp2d">
3359    path.setFillType(SkPath::kWinding_FillType);
3360    path.moveTo(0,2);
3361    path.cubicTo(0,1, 1,0, 1,0);
3362    path.close();
3363    pathB.setFillType(SkPath::kWinding_FillType);
3364    pathB.moveTo(0,1);
3365    pathB.cubicTo(0,1, 2,0, 1,0);
3366    pathB.close();
3367</div>
3368
3369<div id="cubicOp3d">
3370    path.setFillType(SkPath::kWinding_FillType);
3371    path.moveTo(0,1);
3372    path.cubicTo(2,3, 1,0, 1,0);
3373    path.close();
3374    pathB.setFillType(SkPath::kWinding_FillType);
3375    pathB.moveTo(0,1);
3376    pathB.cubicTo(0,1, 1,0, 3,2);
3377    pathB.close();
3378</div>
3379
3380<div id="cubicOp4d">
3381    path.setFillType(SkPath::kWinding_FillType);
3382    path.moveTo(0,1);
3383    path.cubicTo(0,2, 1,0, 2,0);
3384    path.close();
3385    pathB.setFillType(SkPath::kWinding_FillType);
3386    pathB.moveTo(0,1);
3387    pathB.cubicTo(0,2, 1,0, 2,0);
3388    pathB.close();
3389</div>
3390
3391<div id="cubicOp5d">
3392    path.setFillType(SkPath::kWinding_FillType);
3393    path.moveTo(0,1);
3394    path.cubicTo(0,2, 1,0, 2,0);
3395    path.close();
3396    pathB.setFillType(SkPath::kWinding_FillType);
3397    pathB.moveTo(0,1);
3398    pathB.cubicTo(0,2, 1,0, 2,0);
3399    pathB.close();
3400</div>
3401
3402<div id="cubicOp6d">
3403    path.setFillType(SkPath::kWinding_FillType);
3404    path.moveTo(0,1);
3405    path.cubicTo(0,6, 1,0, 3,0);
3406    path.close();
3407    pathB.setFillType(SkPath::kWinding_FillType);
3408    pathB.moveTo(0,1);
3409    pathB.cubicTo(0,3, 1,0, 6,0);
3410    pathB.close();
3411</div>
3412
3413<div id="cubicOp7d">
3414    path.setFillType(SkPath::kWinding_FillType);
3415    path.moveTo(0,1);
3416    path.cubicTo(3,4, 1,0, 3,0);
3417    path.close();
3418    pathB.setFillType(SkPath::kWinding_FillType);
3419    pathB.moveTo(0,1);
3420    pathB.cubicTo(0,3, 1,0, 4,3);
3421    pathB.close();
3422</div>
3423
3424<div id="cubicOp8d">
3425    path.setFillType(SkPath::kWinding_FillType);
3426    path.moveTo(0,1);
3427    path.cubicTo(0,5, 1,0, 4,0);
3428    path.close();
3429    pathB.setFillType(SkPath::kWinding_FillType);
3430    pathB.moveTo(0,1);
3431    pathB.cubicTo(0,4, 1,0, 5,0);
3432    pathB.close();
3433</div>
3434
3435<div id="cubicOp9d">
3436    path.setFillType(SkPath::kWinding_FillType);
3437    path.moveTo(0,1);
3438    path.cubicTo(1,6, 1,0, 2,1);
3439    path.close();
3440    pathB.setFillType(SkPath::kWinding_FillType);
3441    pathB.moveTo(0,1);
3442    pathB.cubicTo(1,2, 1,0, 6,1);
3443    pathB.close();
3444</div>
3445
3446<div id="quadOp9d">
3447    path.setFillType(SkPath::kWinding_FillType);
3448    path.moveTo(0,1);
3449    path.quadTo(1,6, 1.5f,1);
3450    path.quadTo(1.5f,0.8f, 2,1);
3451    path.close();
3452    pathB.setFillType(SkPath::kWinding_FillType);
3453    pathB.moveTo(0,1);
3454    pathB.quadTo(1,2, 1.4f,1);
3455    pathB.quadTo(3,0.4f, 6,1);
3456    pathB.close();
3457</div>
3458
3459<div id="lineOp9d">
3460    path.setFillType(SkPath::kWinding_FillType);
3461    path.moveTo(0,1);
3462    path.lineTo(1,6);
3463    path.lineTo(1.5f,1);
3464    path.lineTo(1.8f,0.8f);
3465    path.lineTo(2,1);
3466    path.close();
3467    pathB.setFillType(SkPath::kWinding_FillType);
3468    pathB.moveTo(0,1);
3469    pathB.lineTo(1,2);
3470    pathB.lineTo(1.4f,1);
3471    pathB.lineTo(3,0.4f);
3472    pathB.lineTo(6,1);
3473    pathB.close();
3474</div>
3475
3476<div id="cubicOp1i">
3477    path.setFillType(SkPath::kWinding_FillType);
3478    path.moveTo(0,1);
3479    path.cubicTo(1,2, 1,0, 2,1);
3480    path.close();
3481    pathB.setFillType(SkPath::kWinding_FillType);
3482    pathB.moveTo(0,1);
3483    pathB.cubicTo(1,2, 1,0, 2,1);
3484    pathB.close();
3485</div>
3486
3487<div id="cubicOp10d">
3488    path.setFillType(SkPath::kWinding_FillType);
3489    path.moveTo(0,1);
3490    path.cubicTo(1,3, 1,0, 4,1);
3491    path.close();
3492    pathB.setFillType(SkPath::kWinding_FillType);
3493    pathB.moveTo(0,1);
3494    pathB.cubicTo(1,4, 1,0, 3,1);
3495    pathB.close();
3496</div>
3497
3498<div id="cubicOp11d">
3499    path.setFillType(SkPath::kWinding_FillType);
3500    path.moveTo(0,1);
3501    path.cubicTo(3,4, 1,0, 5,1);
3502    path.close();
3503    pathB.setFillType(SkPath::kWinding_FillType);
3504    pathB.moveTo(0,1);
3505    pathB.cubicTo(1,5, 1,0, 4,3);
3506    pathB.close();
3507</div>
3508
3509<div id="cubicOp12d">
3510    path.setFillType(SkPath::kWinding_FillType);
3511    path.moveTo(0,1);
3512    path.cubicTo(1,6, 1,0, 1,0);
3513    path.close();
3514    pathB.setFillType(SkPath::kWinding_FillType);
3515    pathB.moveTo(0,1);
3516    pathB.cubicTo(0,1, 1,0, 6,1);
3517    pathB.close();
3518</div>
3519
3520<div id="cubicOp13d">
3521    path.setFillType(SkPath::kWinding_FillType);
3522    path.moveTo(0,1);
3523    path.cubicTo(4,5, 1,0, 5,3);
3524    path.close();
3525    pathB.setFillType(SkPath::kWinding_FillType);
3526    pathB.moveTo(0,1);
3527    pathB.cubicTo(3,5, 1,0, 5,4);
3528    pathB.close();
3529</div>
3530
3531<div id="cubicOp14d">
3532    path.setFillType(SkPath::kWinding_FillType);
3533    path.moveTo(0,1);
3534    path.cubicTo(0,2, 2,0, 2,1);
3535    path.close();
3536    pathB.setFillType(SkPath::kWinding_FillType);
3537    pathB.moveTo(0,2);
3538    pathB.cubicTo(1,2, 1,0, 2,0);
3539    pathB.close();
3540</div>
3541
3542<div id="cubicOp15d">
3543    path.setFillType(SkPath::kWinding_FillType);
3544    path.moveTo(0,1);
3545    path.cubicTo(3,6, 2,0, 2,1);
3546    path.close();
3547    pathB.setFillType(SkPath::kWinding_FillType);
3548    pathB.moveTo(0,2);
3549    pathB.cubicTo(1,2, 1,0, 6,3);
3550    pathB.close();
3551</div>
3552
3553<div id="cubicOp16d">
3554    path.setFillType(SkPath::kWinding_FillType);
3555    path.moveTo(0,2);
3556    path.cubicTo(0,1, 3,0, 1,0);
3557    path.close();
3558    pathB.setFillType(SkPath::kWinding_FillType);
3559    pathB.moveTo(0,3);
3560    pathB.cubicTo(0,1, 2,0, 1,0);
3561    pathB.close();
3562</div>
3563
3564<div id="cubicOp17d">
3565    path.setFillType(SkPath::kWinding_FillType);
3566    path.moveTo(0,2);
3567    path.cubicTo(0,2, 4,0, 2,1);
3568    path.close();
3569    pathB.setFillType(SkPath::kWinding_FillType);
3570    pathB.moveTo(0,4);
3571    pathB.cubicTo(1,2, 2,0, 2,0);
3572    pathB.close();
3573</div>
3574
3575<div id="cubicOp18d">
3576    path.setFillType(SkPath::kWinding_FillType);
3577    path.moveTo(0,1);
3578    path.cubicTo(3,5, 2,0, 2,1);
3579    path.close();
3580    pathB.setFillType(SkPath::kWinding_FillType);
3581    pathB.moveTo(0,2);
3582    pathB.cubicTo(1,2, 1,0, 5,3);
3583    pathB.close();
3584</div>
3585
3586<div id="cubicOp19i">
3587    path.setFillType(SkPath::kWinding_FillType);
3588    path.moveTo(0,2);
3589    path.cubicTo(0,1, 2,1, 6,2);
3590    path.close();
3591    pathB.setFillType(SkPath::kWinding_FillType);
3592    pathB.moveTo(1,2);
3593    pathB.cubicTo(2,6, 2,0, 1,0);
3594    pathB.close();
3595</div>
3596
3597<div id="cubicOp20d">
3598    path.setFillType(SkPath::kWinding_FillType);
3599    path.moveTo(0,1);
3600    path.cubicTo(0,1, 6,0, 2,1);
3601    path.close();
3602    pathB.setFillType(SkPath::kWinding_FillType);
3603    pathB.moveTo(0,6);
3604    pathB.cubicTo(1,2, 1,0, 1,0);
3605    pathB.close();
3606</div>
3607
3608<div id="cubicOp21d">
3609    path.setFillType(SkPath::kWinding_FillType);
3610    path.moveTo(0,1);
3611    path.cubicTo(0,1, 2,1, 6,5);
3612    path.close();
3613    pathB.setFillType(SkPath::kWinding_FillType);
3614    pathB.moveTo(1,2);
3615    pathB.cubicTo(5,6, 1,0, 1,0);
3616    pathB.close();
3617</div>
3618
3619<div id="cubicOp22d">
3620    path.setFillType(SkPath::kWinding_FillType);
3621    path.moveTo(0,1);
3622    path.cubicTo(2,3, 3,0, 2,1);
3623    path.close();
3624    pathB.setFillType(SkPath::kWinding_FillType);
3625    pathB.moveTo(0,3);
3626    pathB.cubicTo(1,2, 1,0, 3,2);
3627    pathB.close();
3628</div>
3629
3630<div id="cubicOp23d">
3631    path.setFillType(SkPath::kWinding_FillType);
3632    path.moveTo(0,1);
3633    path.cubicTo(1,2, 4,0, 2,1);
3634    path.close();
3635    pathB.setFillType(SkPath::kWinding_FillType);
3636    pathB.moveTo(0,4);
3637    pathB.cubicTo(1,2, 1,0, 2,1);
3638    pathB.close();
3639</div>
3640
3641<div id="cubicOp24d">
3642    path.setFillType(SkPath::kWinding_FillType);
3643    path.moveTo(0,1);
3644    path.cubicTo(1,2, 2,0, 3,2);
3645    path.close();
3646    pathB.setFillType(SkPath::kWinding_FillType);
3647    pathB.moveTo(0,2);
3648    pathB.cubicTo(2,3, 1,0, 2,1);
3649    pathB.close();
3650</div>
3651
3652<div id="cubicOp25i">
3653    path.setFillType(SkPath::kWinding_FillType);
3654    path.moveTo(0,1);
3655    path.cubicTo(2,4, 5,0, 3,2);
3656    path.close();
3657    pathB.setFillType(SkPath::kWinding_FillType);
3658    pathB.moveTo(0,5);
3659    pathB.cubicTo(2,3, 1,0, 4,2);
3660    pathB.close();
3661</div>
3662
3663<div id="cubicOp26d">
3664    path.setFillType(SkPath::kWinding_FillType);
3665    path.moveTo(0,1);
3666    path.cubicTo(3,4, 4,0, 3,2);
3667    path.close();
3668    pathB.setFillType(SkPath::kWinding_FillType);
3669    pathB.moveTo(0,4);
3670    pathB.cubicTo(2,3, 1,0, 4,3);
3671    pathB.close();
3672</div>
3673
3674<div id="cubicOp27d">
3675    path.setFillType(SkPath::kWinding_FillType);
3676    path.moveTo(0,1);
3677    path.cubicTo(3,6, 1,0, 5,2);
3678    path.close();
3679    pathB.setFillType(SkPath::kWinding_FillType);
3680    pathB.moveTo(0,1);
3681    pathB.cubicTo(2,5, 1,0, 6,3);
3682    pathB.close();
3683</div>
3684
3685<div id="cubicOp28u">
3686    path.setFillType(SkPath::kWinding_FillType);
3687    path.moveTo(0,1);
3688    path.cubicTo(1,4, 6,0, 3,2);
3689    path.close();
3690    pathB.setFillType(SkPath::kWinding_FillType);
3691    pathB.moveTo(0,6);
3692    pathB.cubicTo(2,3, 1,0, 4,1);
3693    pathB.close();
3694</div>
3695
3696<div id="cubicOp29d">
3697    path.setFillType(SkPath::kWinding_FillType);
3698    path.moveTo(0,1);
3699    path.cubicTo(2,5, 6,0, 4,2);
3700    path.close();
3701    pathB.setFillType(SkPath::kWinding_FillType);
3702    pathB.moveTo(0,6);
3703    pathB.cubicTo(2,4, 1,0, 5,2);
3704    pathB.close();
3705</div>
3706
3707<div id="cubicOp30d">
3708    path.setFillType(SkPath::kWinding_FillType);
3709    path.moveTo(0,1);
3710    path.cubicTo(2,5, 6,0, 5,3);
3711    path.close();
3712    pathB.setFillType(SkPath::kWinding_FillType);
3713    pathB.moveTo(0,6);
3714    pathB.cubicTo(3,5, 1,0, 5,2);
3715    pathB.close();
3716</div>
3717
3718<div id="cubicOp31d">
3719    path.setFillType(SkPath::kWinding_FillType);
3720    path.moveTo(0,2);
3721    path.cubicTo(0,3, 2,1, 4,0);
3722    path.close();
3723    pathB.setFillType(SkPath::kWinding_FillType);
3724    pathB.moveTo(1,2);
3725    pathB.cubicTo(0,4, 2,0, 3,0);
3726    pathB.close();
3727</div>
3728
3729<div id="cubicOp32d">
3730    path.setFillType(SkPath::kWinding_FillType);
3731    path.moveTo(0,1);
3732    path.cubicTo(1,2, 6,0, 3,1);
3733    path.close();
3734    pathB.setFillType(SkPath::kWinding_FillType);
3735    pathB.moveTo(0,6);
3736    pathB.cubicTo(1,3, 1,0, 2,1);
3737    pathB.close();
3738</div>
3739
3740<div id="cubicOp33i">
3741    path.setFillType(SkPath::kWinding_FillType);
3742    path.moveTo(0,1);
3743    path.cubicTo(1,2, 6,0, 3,1);
3744    path.close();
3745    pathB.setFillType(SkPath::kWinding_FillType);
3746    pathB.moveTo(0,6);
3747    pathB.cubicTo(1,3, 1,0, 2,1);
3748    pathB.close();
3749</div>
3750
3751<div id="cubicOp34d">
3752    path.setFillType(SkPath::kWinding_FillType);
3753    path.moveTo(0,1);
3754    path.cubicTo(3,5, 2,1, 3,1);
3755    path.close();
3756    pathB.setFillType(SkPath::kWinding_FillType);
3757    pathB.moveTo(1,2);
3758    pathB.cubicTo(1,3, 1,0, 5,3);
3759    pathB.close();
3760</div>
3761
3762<div id="cubicOp35d">
3763    path.setFillType(SkPath::kWinding_FillType);
3764    path.moveTo(0,1);
3765    path.cubicTo(1,5, 2,1, 4,0);
3766    path.close();
3767    pathB.setFillType(SkPath::kWinding_FillType);
3768    pathB.moveTo(1,2);
3769    pathB.cubicTo(0,4, 1,0, 5,1);
3770    pathB.close();
3771</div>
3772
3773<div id="cubicOp36u">
3774    path.setFillType(SkPath::kWinding_FillType);
3775    path.moveTo(0,1);
3776    path.cubicTo(1,6, 2,0, 5,1);
3777    path.close();
3778    pathB.setFillType(SkPath::kWinding_FillType);
3779    pathB.moveTo(0,2);
3780    pathB.cubicTo(1,5, 1,0, 6,1);
3781    pathB.close();
3782</div>
3783
3784<div id="cubicOp37d">
3785    path.setFillType(SkPath::kWinding_FillType);
3786    path.moveTo(0,1);
3787    path.cubicTo(2,6, 6,1, 4,3);
3788    path.close();
3789    pathB.setFillType(SkPath::kWinding_FillType);
3790    pathB.moveTo(1,6);
3791    pathB.cubicTo(3,4, 1,0, 6,2);
3792    pathB.close();
3793</div>
3794
3795<div id="cubicOp38d">
3796    path.setFillType(SkPath::kWinding_FillType);
3797    path.moveTo(0,1);
3798    path.cubicTo(0,6, 3,2, 4,1);
3799    path.close();
3800    pathB.setFillType(SkPath::kWinding_FillType);
3801    pathB.moveTo(2,3);
3802    pathB.cubicTo(1,4, 1,0, 6,0);
3803    pathB.close();
3804</div>
3805
3806<div id="cubicOp39d">
3807    path.setFillType(SkPath::kWinding_FillType);
3808    path.moveTo(0,1);
3809    path.cubicTo(2,3, 5,1, 4,3);
3810    path.close();
3811    pathB.setFillType(SkPath::kWinding_FillType);
3812    pathB.moveTo(1,5);
3813    pathB.cubicTo(3,4, 1,0, 3,2);
3814    pathB.close();
3815</div>
3816
3817<div id="cubicOp40d">
3818    path.setFillType(SkPath::kWinding_FillType);
3819    path.moveTo(0,1);
3820    path.cubicTo(1,5, 3,2, 4,2);
3821    path.close();
3822    pathB.setFillType(SkPath::kWinding_FillType);
3823    pathB.moveTo(2,3);
3824    pathB.cubicTo(2,4, 1,0, 5,1);
3825    pathB.close();
3826</div>
3827
3828<div id="cubicOp41i">
3829    path.setFillType(SkPath::kWinding_FillType);
3830    path.moveTo(0,1);
3831    path.cubicTo(2,6, 4,3, 6,4);
3832    path.close();
3833    pathB.setFillType(SkPath::kWinding_FillType);
3834    pathB.moveTo(3,4);
3835    pathB.cubicTo(4,6, 1,0, 6,2);
3836    pathB.close();
3837</div>
3838
3839<div id="cubicOp42d">
3840    path.setFillType(SkPath::kWinding_FillType);
3841    path.moveTo(0,1);
3842    path.cubicTo(1,2, 6,5, 5,4);
3843    path.close();
3844    pathB.setFillType(SkPath::kWinding_FillType);
3845    pathB.moveTo(5,6);
3846    pathB.cubicTo(4,5, 1,0, 2,1);
3847    pathB.close();
3848</div>
3849
3850<div id="cubicOp43d">
3851    path.setFillType(SkPath::kWinding_FillType);
3852    path.moveTo(0,2);
3853    path.cubicTo(1,2, 4,0, 3,1);
3854    path.close();
3855    pathB.setFillType(SkPath::kWinding_FillType);
3856    pathB.moveTo(0,4);
3857    pathB.cubicTo(1,3, 2,0, 2,1);
3858    pathB.close();
3859</div>
3860
3861<div id="cubicOp44d">
3862    path.setFillType(SkPath::kWinding_FillType);
3863    path.moveTo(0,2);
3864    path.cubicTo(3,6, 4,0, 3,2);
3865    path.close();
3866    pathB.setFillType(SkPath::kWinding_FillType);
3867    pathB.moveTo(0,4);
3868    pathB.cubicTo(2,3, 2,0, 6,3);
3869    pathB.close();
3870</div>
3871
3872<div id="cubicOp45d">
3873    path.setFillType(SkPath::kWinding_FillType);
3874    path.moveTo(0,2);
3875    path.cubicTo(2,4, 4,0, 3,2);
3876    path.close();
3877    pathB.setFillType(SkPath::kWinding_FillType);
3878    pathB.moveTo(0,4);
3879    pathB.cubicTo(2,3, 2,0, 4,2);
3880    pathB.close();
3881</div>
3882
3883<div id="cubicOp46d">
3884    path.setFillType(SkPath::kWinding_FillType);
3885    path.moveTo(0,2);
3886    path.cubicTo(3,5, 5,0, 4,2);
3887    path.close();
3888    pathB.setFillType(SkPath::kWinding_FillType);
3889    pathB.moveTo(0,5);
3890    pathB.cubicTo(2,4, 2,0, 5,3);
3891    pathB.close();
3892</div>
3893
3894<div id="cubicOp47d">
3895    path.setFillType(SkPath::kWinding_FillType);
3896    path.moveTo(0,1);
3897    path.cubicTo(1,6, 6,2, 5,4);
3898    path.close();
3899    pathB.setFillType(SkPath::kWinding_FillType);
3900    pathB.moveTo(2,6);
3901    pathB.cubicTo(4,5, 1,0, 6,1);
3902    pathB.close();
3903</div>
3904
3905<div id="cubicOp48d">
3906    path.setFillType(SkPath::kWinding_FillType);
3907    path.moveTo(0,2);
3908    path.cubicTo(2,3, 5,1, 3,2);
3909    path.close();
3910    pathB.setFillType(SkPath::kWinding_FillType);
3911    pathB.moveTo(1,5);
3912    pathB.cubicTo(2,3, 2,0, 3,2);
3913    pathB.close();
3914</div>
3915
3916<div id="cubicOp49d">
3917    path.setFillType(SkPath::kWinding_FillType);
3918    path.moveTo(0,2);
3919    path.cubicTo(1,5, 3,2, 4,1);
3920    path.close();
3921    pathB.setFillType(SkPath::kWinding_FillType);
3922    pathB.moveTo(2,3);
3923    pathB.cubicTo(1,4, 2,0, 5,1);
3924    pathB.close();
3925</div>
3926
3927<div id="cubicOp50d">
3928    path.setFillType(SkPath::kWinding_FillType);
3929    path.moveTo(0,3);
3930    path.cubicTo(1,6, 5,0, 5,1);
3931    path.close();
3932    pathB.setFillType(SkPath::kWinding_FillType);
3933    pathB.moveTo(0,5);
3934    pathB.cubicTo(1,5, 3,0, 6,1);
3935    pathB.close();
3936</div>
3937
3938<div id="cubicOp51d">
3939    path.setFillType(SkPath::kWinding_FillType);
3940    path.moveTo(0,3);
3941    path.cubicTo(1,2, 4,1, 6,0);
3942    path.close();
3943    pathB.setFillType(SkPath::kWinding_FillType);
3944    pathB.moveTo(1,4);
3945    pathB.cubicTo(0,6, 3,0, 2,1);
3946    pathB.close();
3947</div>
3948
3949<div id="cubicOp52d">
3950    path.setFillType(SkPath::kWinding_FillType);
3951    path.moveTo(0,2);
3952    path.cubicTo(1,2, 5,4, 4,3);
3953    path.close();
3954    pathB.setFillType(SkPath::kWinding_FillType);
3955    pathB.moveTo(4,5);
3956    pathB.cubicTo(3,4, 2,0, 2,1);
3957    pathB.close();
3958</div>
3959
3960<div id="cubicOp53d">
3961    path.setFillType(SkPath::kWinding_FillType);
3962    path.moveTo(0,3);
3963    path.cubicTo(1,2, 5,3, 2,1);
3964    path.close();
3965    pathB.setFillType(SkPath::kWinding_FillType);
3966    pathB.moveTo(3,5);
3967    pathB.cubicTo(1,2, 3,0, 2,1);
3968    pathB.close();
3969</div>
3970
3971<div id="cubicOp54d">
3972    path.setFillType(SkPath::kWinding_FillType);
3973    path.moveTo(0,4);
3974    path.cubicTo(1,3, 5,4, 4,2);
3975    path.close();
3976    pathB.setFillType(SkPath::kWinding_FillType);
3977    pathB.moveTo(4,5);
3978    pathB.cubicTo(2,4, 4,0, 3,1);
3979    pathB.close();
3980</div>
3981
3982<div id="cubicOp55d">
3983    path.setFillType(SkPath::kWinding_FillType);
3984    path.moveTo(0,5);
3985    path.cubicTo(1,3, 3,2, 5,0);
3986    path.close();
3987    pathB.setFillType(SkPath::kWinding_FillType);
3988    pathB.moveTo(2,3);
3989    pathB.cubicTo(0,5, 5,0, 3,1);
3990    pathB.close();
3991</div>
3992
3993<div id="cubicOp56d">
3994    path.setFillType(SkPath::kWinding_FillType);
3995    path.moveTo(0,1);
3996    path.cubicTo(2,6, 5,0, 2,1);
3997    path.close();
3998    pathB.setFillType(SkPath::kWinding_FillType);
3999    pathB.moveTo(0,5);
4000    pathB.cubicTo(1,2, 1,0, 6,2);
4001    pathB.close();
4002</div>
4003
4004<div id="cubicOp57d">
4005    path.setFillType(SkPath::kWinding_FillType);
4006    path.moveTo(0,5);
4007    path.cubicTo(0,5, 5,4, 6,4);
4008    path.close();
4009    pathB.setFillType(SkPath::kWinding_FillType);
4010    pathB.moveTo(4,5);
4011    pathB.cubicTo(4,6, 5,0, 5,0);
4012    pathB.close();
4013</div>
4014
4015<div id="cubicOp58d">
4016    path.setFillType(SkPath::kWinding_FillType);
4017    path.moveTo(0,5);
4018    path.cubicTo(3,4, 6,5, 5,3);
4019    path.close();
4020    pathB.setFillType(SkPath::kWinding_FillType);
4021    pathB.moveTo(5,6);
4022    pathB.cubicTo(3,5, 5,0, 4,3);
4023    pathB.close();
4024</div>
4025
4026<div id="cubicOp59d">
4027    path.setFillType(SkPath::kWinding_FillType);
4028    path.moveTo(0,1);
4029    path.cubicTo(5,6, 4,0, 4,1);
4030    path.close();
4031    pathB.setFillType(SkPath::kWinding_FillType);
4032    pathB.moveTo(0,4);
4033    pathB.cubicTo(1,4, 1,0, 6,5);
4034    pathB.close();
4035</div>
4036
4037<div id="cubicOp60d">
4038    path.setFillType(SkPath::kWinding_FillType);
4039    path.moveTo(0,2);
4040    path.cubicTo(4,6, 6,0, 5,2);
4041    path.close();
4042    pathB.setFillType(SkPath::kWinding_FillType);
4043    pathB.moveTo(0,6);
4044    pathB.cubicTo(2,5, 2,0, 6,4);
4045    pathB.close();
4046</div>
4047
4048<div id="cubicOp61d">
4049    path.setFillType(SkPath::kWinding_FillType);
4050    path.moveTo(1,2);
4051    path.cubicTo(0,5, 3,2, 6,1);
4052    path.close();
4053    pathB.setFillType(SkPath::kWinding_FillType);
4054    pathB.moveTo(2,3);
4055    pathB.cubicTo(1,6, 2,1, 5,0);
4056    pathB.close();
4057</div>
4058
4059<div id="cubicOp62d">
4060    path.setFillType(SkPath::kWinding_FillType);
4061    path.moveTo(1,3);
4062    path.cubicTo(5,6, 5,3, 5,4);
4063    path.close();
4064    pathB.setFillType(SkPath::kWinding_FillType);
4065    pathB.moveTo(3,5);
4066    pathB.cubicTo(4,5, 3,1, 6,5);
4067    pathB.close();
4068</div>
4069
4070<div id="cubicOp63d">
4071    path.setFillType(SkPath::kWinding_FillType);
4072    path.moveTo(2,3);
4073    path.cubicTo(0,4, 3,2, 5,3);
4074    path.close();
4075    pathB.setFillType(SkPath::kWinding_FillType);
4076    pathB.moveTo(2,3);
4077    pathB.cubicTo(3,5, 3,2, 4,0);
4078    pathB.close();
4079</div>
4080
4081<div id="testQuadratic94">
4082    SkPath path;
4083    path.moveTo(0, 0);
4084    path.lineTo(8, 8);
4085    path.quadTo(8, 4, 4, 4);
4086    path.quadTo(4, 0, 0, 0);
4087    path.close();
4088    testSimplify(reporter, path);
4089</div>
4090
4091<div id="testQuadratic95">
4092    SkPath path;
4093    path.moveTo(8, 8);
4094    path.lineTo(0, 0);
4095    path.quadTo(4, 0, 4, 4);
4096    path.quadTo(8, 4, 8, 8);
4097    path.close();
4098    testSimplify(reporter, path);
4099</div>
4100
4101<div id="testQuadratic96">
4102    SkPath path;
4103    path.moveTo(8, 0);
4104    path.lineTo(0, 8);
4105    path.quadTo(0, 4, 4, 4);
4106    path.quadTo(4, 0, 8, 0);
4107    path.close();
4108    testSimplify(reporter, path);
4109</div>
4110
4111<div id="testQuadratic97">
4112    SkPath path;
4113    path.moveTo(0, 8);
4114    path.lineTo(8, 0);
4115    path.quadTo(4, 0, 4, 4);
4116    path.quadTo(0, 4, 0, 8);
4117    path.close();
4118    testSimplify(reporter, path);
4119</div>
4120
4121<div id="testTriangle2">
4122    path.moveTo(0, 0);
4123    path.lineTo(1, 0);
4124    path.lineTo(3, 3);
4125    path.close();
4126    path.moveTo(1, 1);
4127    path.lineTo(2, 3);
4128    path.lineTo(1, 2);
4129    path.close();
4130</div>
4131
4132</div>
4133
4134<script type="text/javascript">
4135
4136var testDivs = [
4137    testTriangle2,
4138    testQuadratic97,
4139    testQuadratic96,
4140    testQuadratic95,
4141    testQuadratic94,
4142    testLine16,
4143    cubicOp63d,
4144    cubicOp62d,
4145    cubicOp61d,
4146    cubicOp60d,
4147    cubicOp59d,
4148    cubicOp58d,
4149    cubicOp57d,
4150    cubicOp56d,
4151    cubicOp55d,
4152    cubicOp54d,
4153    cubicOp53d,
4154    cubicOp52d,
4155    cubicOp51d,
4156    cubicOp50d,
4157    cubicOp49d,
4158    cubicOp48d,
4159    cubicOp47d,
4160    cubicOp46d,
4161    cubicOp45d,
4162    cubicOp44d,
4163    cubicOp43d,
4164    cubicOp42d,
4165    cubicOp41i,
4166    cubicOp40d,
4167    cubicOp39d,
4168    cubicOp38d,
4169    cubicOp37d,
4170    cubicOp36u,
4171    cubicOp35d,
4172    cubicOp34d,
4173    cubicOp33i,
4174    cubicOp32d,
4175    cubicOp31d,
4176    cubicOp30d,
4177    cubicOp29d,
4178    cubicOp28u,
4179    cubicOp27d,
4180    cubicOp26d,
4181    cubicOp25i,
4182    cubicOp24d,
4183    cubicOp23d,
4184    cubicOp18d,
4185    cubicOp15d,
4186    cubicOp14d,
4187    cubicOp13d,
4188    cubicOp11d,
4189    cubicOp9d,
4190    cubicOp8d,
4191    cubicOp7d,
4192    cubicOp6d,
4193    cubicOp5d,
4194    cubicOp10d,
4195    cubicOp22d,
4196    cubicOp21d,
4197    cubicOp20d,
4198    cubicOp19i,
4199    cubicOp17d,
4200    cubicOp16d,
4201    cubicOp12d,
4202    cubicOp1i,
4203    lineOp9d,
4204    quadOp9d,
4205    cubicOp4d,
4206    cubicOp3d,
4207    cubicOp2d,
4208    cubicOp1d,
4209    testQuadratic93,
4210    testCubic1,
4211    testQuadralateral1,
4212    testLine85,
4213    testLine84x,
4214    testLine83,
4215    testLine82h,
4216    testLine82g,
4217    testLine82f,
4218    testLine82e,
4219    testLine82d,
4220    testLine82c,
4221    testLine82b,
4222    testLine82a,
4223    testLine82,
4224    testQuadratic92x,
4225    testQuadratic91,
4226    testQuadratic90x,
4227    testQuadratic89x,
4228    testQuadratic88,
4229    testQuadratic87,
4230    testQuadratic86,
4231    testQuadratic85,
4232    testQuadratic84,
4233    testQuadratic83,
4234    testQuadratic82,
4235    testQuadratic81,
4236    testQuadratic80,
4237    testQuadratic79,
4238    testQuadratic78,
4239    testQuadratic77,
4240    testQuadratic76,
4241    testQuadratic75,
4242    testQuadratic74,
4243    testQuadratic73,
4244    testQuadratic72,
4245    testQuadratic71,
4246    testQuadratic70x,
4247    testQuadratic69,
4248    testQuadratic68,
4249    testQuadratic67x,
4250    testQuadratic66,
4251    testQuadratic65,
4252    testQuadratic64,
4253    testQuadratic63,
4254    testLine1a,
4255    testQuadratic62x,
4256    testLine81,
4257    testQuadratic61,
4258    testQuadratic60,
4259    testQuadratic59,
4260    testQuadratic59o,
4261    testQuadratic59s,
4262    testQuadratic58o,
4263    testQuadratic58a,
4264    testQuadratic58s,
4265    testQuadratic57o,
4266    testQuadratic57s,
4267    testQuadratic56o,
4268    testQuadratic56s,
4269    testQuadratic55o,
4270    testQuadratic55s,
4271    testQuadratic54,
4272    testQuadratic53o,
4273    testQuadratic53s,
4274    testQuadratic52sa,
4275    testQuadratic52sb,
4276    testQuadratic52sc,
4277    testQuadratic52o,
4278    testQuadratic52s,
4279    testQuadratic51,
4280    testQuadratic50o,
4281    testQuadratic50s,
4282    testQuadratic49s,
4283    testQuadratic48o,
4284    testQuadratic48s,
4285    testQuadratic47o,
4286    testQuadratic47s,
4287    testQuadratic46o,
4288    testQuadratic46s,
4289    testQuadratic45o,
4290    testQuadratic45s,
4291    testQuadratic44o,
4292    testQuadratic44s,
4293    testQuadratic43o,
4294    testQuadratic43s,
4295    testQuadratic42o,
4296    testQuadratic42s,
4297    testQuadratic41o,
4298    testQuadratic41s,
4299    testQuadratic40xb,
4300    testQuadratic40xa,
4301    testQuadratic40x,
4302    testQuadratic39,
4303    testQuadratic39a,
4304    testQuadratic38,
4305    testQuadratic37,
4306    testQuadratic36,
4307    testQuadratic35,
4308    testQuadratic34,
4309    testQuadratic33,
4310    testQuadratic32,
4311    testQuadratic31,
4312    testQuadratic30,
4313    testQuadratic29,
4314    testQuadratic28,
4315    testQuadratic27,
4316    testQuadratic26,
4317    testQuadratic25,
4318    testQuadratic24,
4319    testQuadratic23,
4320    testQuadratic22,
4321    testQuadratic21,
4322    testQuadratic20,
4323    testQuadratic19,
4324    testQuadratic18,
4325    testQuadratic17x,
4326    testQuadratic16b,
4327    testQuadratic16a,
4328    testQuadratic15,
4329    testQuadratic14,
4330    testQuadratic13b,
4331    testQuadratic13a,
4332    testQuadratic12,
4333    testQuadratic11b,
4334    testQuadratic11a,
4335    testQuadratic10b,
4336    testQuadratic10a,
4337    testQuadratic9a,
4338    testQuadratic9,
4339    testQuadratic8,
4340    testQuadratic7,
4341    testQuadratic6,
4342    testQuadratic5,
4343    testQuadratic4x,
4344    testQuadratic3,
4345    testQuadratic2,
4346    testQuadratic1,
4347    testLine4x,
4348    testLine3x,
4349    testLine2x,
4350    testLine1x,
4351    testQuadralateral9,
4352    testQuadralateral8,
4353    testQuadralateral7,
4354    testFauxQuadralateral6d,
4355    testFauxQuadralateral6c,
4356    testFauxQuadralateral6b,
4357    testFauxQuadralateral6a,
4358    testFauxQuadralateral6,
4359    testQuadralateral6a,
4360    testQuadralateral6,
4361    testQuadralateral5,
4362    testNondegenerate4,
4363    testNondegenerate3,
4364    testNondegenerate2,
4365    testNondegenerate1,
4366    testDegenerate4,
4367    testDegenerate3,
4368    testDegenerate2,
4369    testDegenerate1,
4370    testLine79,
4371    testLine78,
4372    testLine77,
4373    testLine76,
4374    testLine75,
4375    testLine74,
4376    testLine73,
4377    testLine72,
4378    testLine71,
4379    testLine70,
4380    testLine69,
4381    testLine68f,
4382    testLine68e,
4383    testLine68d,
4384    testLine68c,
4385    testLine68b,
4386    testLine68a,
4387    testLine67,
4388    testLine66,
4389    testLine65,
4390    testLine64,
4391    testLine63,
4392    testLine62,
4393    testLine61,
4394    testLine60,
4395    testLine59,
4396    testLine58,
4397    testLine57,
4398    testLine56,
4399    testLine55,
4400    testLine54,
4401    testLine53,
4402    testLine52,
4403    testLine51,
4404    testLine50,
4405    testLine49,
4406    testLine48,
4407    testLine47,
4408    testLine46,
4409    testLine45,
4410    testLine44,
4411    testLine43,
4412    testLine42,
4413    testLine41,
4414    testLine40,
4415    testLine39,
4416    testLine38,
4417    testLine37,
4418    testLine36,
4419    testLine35,
4420    testLine34,
4421    testLine33,
4422    testLine32,
4423    testLine31,
4424    testLine30,
4425    testLine29,
4426    testLine28,
4427    testLine24,
4428    testLine22,
4429    testLine19,
4430    testLine17,
4431    testLine16,
4432    testLine13,
4433    testLine12,
4434    testLine9,
4435    testLine7b,
4436    testLine7,
4437    testLine6,
4438    testLine5,
4439    testSimplifyQuadratic21,
4440    testSimplifyQuadratic20,
4441    testSimplifyQuadratic19,
4442    testSimplifyQuadratic18,
4443    testSimplifyQuadratic17,
4444    testSimplifyQuadratic16,
4445    testSimplifyQuadratic15,
4446    testSimplifyQuadratic14,
4447    testSimplifyQuadratic13,
4448    testSimplifyQuadratic12,
4449    testSimplifyQuadratic11,
4450    testSimplifyQuadratic10,
4451    testSimplifyQuadratic9,
4452    testSimplifyQuadratic8,
4453    testSimplifyQuadratic7,
4454    testSimplifyQuadratic6,
4455    testSimplifyQuadratic5,
4456    testSimplifyQuadratic4,
4457    testSimplifyQuadratic3,
4458    testSimplifyQuadratic2,
4459    testSimplifyQuadratic1,
4460];
4461
4462var scale, columns, rows, xStart, yStart;
4463
4464var ticks = 0.1;
4465var at_x = 13 + 0.5;
4466var at_y = 13 + 0.5;
4467var decimal_places = 0; // make this 3 to show more precision
4468
4469var tests = [];
4470var testTitles = [];
4471var testIndex = 0;
4472var hasXor = false;
4473var draw_labels = true;
4474
4475var ctx;
4476
4477function parse(test, title) {
4478    var contours = [];
4479    var contourStrs = test.split("path.close();");
4480    var pattern = /-?\d+\.*\d*/g;
4481    hasXor = test.split("kEvenOdd_FillType").length > 1;
4482    for (var c in contourStrs) {
4483        var contour = contourStrs[c];
4484        var verbStrs = contour.split("path");
4485        var verbs = [];
4486        for (var v in verbStrs) {
4487            var verbStr = verbStrs[v];
4488            var points = verbStr.match(pattern);
4489            var pts = [];
4490            for (var wd in points) {
4491                var num = parseFloat(points[wd]);
4492                if (isNaN(num)) continue;
4493                pts.push(num);
4494            }
4495            if (pts.length > 0)
4496                verbs.push(pts);
4497        }
4498        if (verbs.length > 0) {
4499            var lastIndex = verbs.length - 1;
4500            var lastVerb = verbs[lastIndex];
4501            var lastLen = lastVerb.length;
4502            if (verbs[0][0] != lastVerb[lastLen - 2] && verbs[0][1] != lastVerb[lastLen - 1]) {
4503                var lastPts = [];
4504                lastPts.push(verbs[0][0]);
4505                lastPts.push(verbs[0][1]);
4506                verbs.push(lastPts);
4507            }
4508            contours.push(verbs);
4509        }
4510    }
4511    if (contours.length > 0) {
4512        tests.push(contours);
4513        testTitles.push(title);
4514    }
4515}
4516
4517function parseRect(test, title) {
4518    var contours = [];
4519    var rectStrs = test.split("path.addRect");
4520    var pattern = /-?\d+\.*\d*/g;
4521    hasXor = test.split("kEvenOdd_FillType").length > 1;
4522    for (var r in rectStrs) {
4523        var rect = rectStrs[r];
4524        var sideStrs = rect.match(pattern);
4525        var ccw = rect.split("kCCW_Direction").length > 1;
4526        var sides = [];
4527        for (var wd in sideStrs) {
4528            var num = parseFloat(sideStrs[wd]);
4529            if (isNaN(num)) continue;
4530            sides.push(num);
4531        }
4532        if (sides.length == 0)
4533            continue;
4534        var verbs = [];
4535        var topLeft = [];
4536        topLeft.push(sides[0]); topLeft.push(sides[1]);
4537        var topRight = [];
4538        topRight.push(sides[2]); topRight.push(sides[1]);
4539        var botLeft = [];
4540        botLeft.push(sides[0]); botLeft.push(sides[3]);
4541        var botRight = [];
4542        botRight.push(sides[2]); botRight.push(sides[3]);
4543        verbs.push(topLeft);
4544        if (!ccw) {
4545            verbs.push(topRight);
4546            verbs.push(botRight);
4547            verbs.push(botLeft);
4548        } else {
4549            verbs.push(botLeft);
4550            verbs.push(botRight);
4551            verbs.push(topRight);
4552        }
4553        verbs.push(topLeft);
4554        contours.push(verbs);
4555    }
4556    if (contours.length > 0) {
4557        tests.push(contours);
4558        testTitles.push(title);
4559    }
4560}
4561
4562function init(test) {
4563    var canvas = document.getElementById('canvas');
4564    if (!canvas.getContext) return;
4565    canvas.width = window.innerWidth - at_x;
4566    canvas.height = window.innerHeight - at_y;
4567    ctx = canvas.getContext('2d');
4568    var xmin = Infinity;
4569    var xmax = -Infinity;
4570    var ymin = Infinity;
4571    var ymax = -Infinity;
4572    for (var contours in test) {
4573        var contour = test[contours];
4574        for (var verbs in contour) {
4575            var verb = contour[verbs];
4576            var last = verb.length;
4577            for (var idx = 0; idx < last; idx += 2) {
4578                xmin = Math.min(xmin, verb[idx]);
4579                xmax = Math.max(xmax, verb[idx]);
4580                ymin = Math.min(ymin, verb[idx + 1]);
4581                ymax = Math.max(ymax, verb[idx + 1]);
4582            }
4583        }
4584    }
4585    var subscale = 1;
4586    while ((xmax - xmin) * subscale < 0.1 && (ymax - ymin) * subscale < 0.1) {
4587        subscale *= 10;
4588    }
4589    columns = Math.ceil(xmax) - Math.floor(xmin) + 1;
4590    rows = Math.ceil(ymax) - Math.floor(ymin) + 1;
4591    xStart = Math.floor(xmin);
4592    yStart = Math.floor(ymin);
4593    var hscale = ctx.canvas.width / columns / ticks;
4594    var vscale = ctx.canvas.height / rows / ticks;
4595    scale = Math.floor(Math.min(hscale, vscale)) * subscale;
4596}
4597
4598function drawPoint(px, py, xoffset, yoffset, unit) {
4599    var label = px.toFixed(decimal_places) + ", " + py.toFixed(decimal_places);
4600    var _px = px * unit + xoffset;
4601    var _py = py * unit + yoffset;
4602    ctx.beginPath();
4603    ctx.arc(_px, _py, 3, 0, Math.PI*2, true);
4604    ctx.closePath();
4605    ctx.fill();
4606    ctx.fillText(label, _px + 5, _py);
4607}
4608
4609function draw(test, title, _at_x, _at_y, scale) {
4610    ctx.fillStyle = "rgba(0,0,0, 0.1)";
4611    ctx.font = "normal 50px Arial";
4612    ctx.fillText(title, 50, 50);
4613    ctx.font = "normal 10px Arial";
4614    
4615    var unit = scale * ticks;
4616    ctx.lineWidth = 1;
4617    var i;
4618    for (i = 0; i <= rows * ticks; ++i) {
4619        ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
4620        ctx.beginPath();
4621        ctx.moveTo(_at_x + 0, _at_y + i * scale);
4622        ctx.lineTo(_at_x + unit * columns, _at_y + i * scale);
4623        ctx.stroke();
4624    }
4625    for (i = 0; i <= columns * ticks; ++i) {
4626        ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
4627        ctx.beginPath();
4628        ctx.moveTo(_at_x + i * scale, _at_y + 0);
4629        ctx.lineTo(_at_x + i * scale, _at_y + unit * rows);
4630        ctx.stroke();
4631    }
4632 
4633    var xoffset = xStart * -unit + _at_x;
4634    var yoffset = yStart * -unit + _at_y;
4635
4636    ctx.fillStyle = "rgb(40,80,60)"
4637    for (i = 0; i <= columns; i += (1 / ticks))
4638    {
4639        num = (xoffset - _at_x) / -unit + i; 
4640        ctx.fillText(num.toFixed(0), i * unit + _at_y - 5, 10);
4641    }
4642    for (i = 0; i <= rows; i += (1 / ticks))
4643    {
4644        num = (yoffset - _at_x) / -unit + i; 
4645        ctx.fillText(num.toFixed(0), 0, i * unit + _at_y + 0);
4646    }
4647
4648    ctx.strokeStyle = "red";
4649    var contours, verbs, pts;
4650    ctx.beginPath();
4651    for (contours in test) {
4652        var contour = test[contours];
4653        if (contours == 2) ctx.strokeStyle = "blue";
4654        var first = true;
4655        for (verbs in contour) {
4656            var verb = contour[verbs];
4657            switch (verb.length) {
4658                case 2:
4659                    if (first) {
4660                        ctx.moveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
4661                        first = false;
4662                    } else
4663                        ctx.lineTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
4664                    break;
4665                case 4:
4666                    ctx.quadraticCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
4667                        xoffset + verb[2] * unit, yoffset + verb[3] * unit);
4668                    break;
4669                case 6:
4670                    ctx.bezierCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
4671                        xoffset + verb[2] * unit, yoffset + verb[3] * unit,
4672                        xoffset + verb[4] * unit, yoffset + verb[5] * unit);
4673                    break;
4674            }
4675        }
4676        ctx.closePath();
4677    }
4678  // uncomment if ever part of the standard
4679  //  ctx.fillRule=hasXor ? evenodd : nonzero;
4680    ctx.stroke();
4681    ctx.fillStyle="rgba(192,192,255, 0.3)";
4682    ctx.fill();
4683    
4684    if (!draw_labels) {
4685        return;
4686    }
4687    ctx.fillStyle="blue";
4688    for (contours in test) {
4689        var contour = test[contours];
4690        for (verbs in contour) {
4691            var verb = contour[verbs];
4692            for (i = 0; i < verb.length; i += 2) {
4693                x = verb[i];
4694                y = verb[i + 1];
4695                drawPoint(x, y, xoffset, yoffset, unit);
4696            }
4697        }
4698    }
4699}
4700
4701var mouseX = Infinity, mouseY;
4702
4703function calcXY() {
4704    var e = window.event;
4705	var tgt = e.target || e.srcElement;
4706    var left = tgt.offsetLeft;
4707    var top = tgt.offsetTop;
4708    var unit = scale * ticks;
4709    mouseX = (e.clientX - left - Math.ceil(at_x) + 1) / unit + xStart;
4710    mouseY = (e.clientY - top - Math.ceil(at_y)) / unit + yStart;
4711}
4712
4713function handleMouseOver() {
4714    calcXY();
4715    var num = mouseX.toFixed(3) + ", " + mouseY.toFixed(3);
4716    ctx.beginPath();
4717    ctx.rect(300,0,72,9);
4718    ctx.fillStyle="white";
4719    ctx.fill();
4720    ctx.fillStyle="black";
4721    ctx.fillText(num, 300, 7);
4722}
4723
4724function handleMouseClick() {
4725    calcXY();
4726//    drawInset();
4727}
4728
4729function drawTop() {
4730    init(tests[testIndex]);
4731    redraw();
4732}
4733
4734function redraw() {
4735    ctx.beginPath();
4736    ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);
4737    ctx.fillStyle="white";
4738    ctx.fill();
4739    draw(tests[testIndex], testTitles[testIndex], at_x, at_y, scale);
4740//    if (insetScale != scale && mouseX != Infinity)
4741//        drawInset();
4742}
4743
4744function doKeyPress(evt) {
4745    var char = String.fromCharCode(evt.charCode);
4746    switch (char) {
4747    case 'N':
4748        testIndex += 9;
4749    case 'n':
4750        if (++testIndex >= tests.length)
4751            testIndex = 0;
4752        mouseX = Infinity;
4753        drawTop();
4754        break;
4755    case 'P':
4756        testIndex -= 9;
4757    case 'p':
4758        if (--testIndex < 0)
4759            testIndex = tests.length - 1;
4760        mouseX = Infinity;
4761        drawTop();
4762        break;
4763    case 'T':
4764    case 't':
4765        break;
4766    case '-':
4767        drawTop();
4768        break;
4769    case '=':
4770    case '+':
4771        drawTop();
4772        break;
4773    case 'x':
4774        draw_labels ^= true;
4775        drawTop();
4776        break;
4777    }
4778}
4779
4780function start() {
4781    for (i = 0; i < testDivs.length; ++i) {
4782        var title = testDivs[i].id.toString();
4783        var str = testDivs[i].firstChild.data;
4784        if (str.split("addRect").length > 1) {
4785            parseRect(str, title);
4786        } else {
4787            parse(str, title);
4788        }
4789    }
4790    drawTop();
4791    window.addEventListener('keypress', doKeyPress, true);
4792    window.onresize = function() {
4793        drawTop();
4794    }
4795}
4796
4797</script>
4798</head>
4799
4800<body onLoad="start();">
4801<canvas id="canvas" width="750" height="500"
4802    onmousemove="handleMouseOver()"
4803    onclick="handleMouseClick()"
4804    ></canvas >
4805</body>
4806</html>
4807