summaryrefslogtreecommitdiff
path: root/texmf-dist/scripts/ketpic/data/js/Cindy.js
blob: 0fe1c2a5e2508998a4f96b5cc9a487e98fed639b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
/* CindyJS - (C) 2014-2016  The CindyJS Project
 * Mostly licensed under the Apache License 2.0, but subprojects may use different licensing.
 * See https://github.com/CindyJS/CindyJS/tree/a578a6389991b86a1b9f4e54197acf99bc1adec0
 * for corresponding sources and their respective licensing conditions.
 */
(function(){function q(b,d,e){h.biginteger_used=1;null!=b&&("number"==typeof b&&"undefined"==typeof d?this.fromInt(b):"number"==typeof b?this.fromNumber(b,d,e):null==d&&"string"!=typeof b?this.fromString(b,256):this.fromString(b,d))}function H(){return new q(null)}function oa(b,d,e,l,h,r){for(;0<=--r;){var k=d*this[b++]+e[l]+h;h=Math.floor(k/67108864);e[l++]=k&67108863}return h}function ib(b,d,e,l,h,r){var k=d&32767;for(d>>=15;0<=--r;){var E=this[b]&32767,B=this[b++]>>15,q=d*E+B*k,E=k*E+((q&32767)<<
15)+e[l]+(h&1073741823);h=(E>>>30)+(q>>>15)+d*B+(h>>>30);e[l++]=E&1073741823}return h}function Ia(b,d,e,l,h,r){var k=d&16383;for(d>>=14;0<=--r;){var E=this[b]&16383,B=this[b++]>>14,q=d*E+B*k,E=k*E+((q&16383)<<14)+e[l]+h;h=(E>>28)+(q>>14)+d*B;e[l++]=E&268435455}return h}function Ja(b,d){var e=Ya[b.charCodeAt(d)];return null==e?-1:e}function Ba(b){var d=H();d.fromInt(b);return d}function k(b){var d=1,e;0!=(e=b>>>16)&&(b=e,d+=16);0!=(e=b>>8)&&(b=e,d+=8);0!=(e=b>>4)&&(b=e,d+=4);0!=(e=b>>2)&&(b=e,d+=2);
0!=b>>1&&(d+=1);return d}function Ra(b){this.m=b}function L(b){this.m=b;this.mp=b.invDigit();this.mpl=this.mp&32767;this.mph=this.mp>>15;this.um=(1<<b.DB-15)-1;this.mt2=2*b.t}function fa(b,d){return b&d}function Y(b,d){return b|d}function Q(b,d){return b^d}function X(b,d){return b&~d}function xb(){}function Fc(b){return b}function ka(b){this.r2=H();this.q3=H();q.ONE.dlShiftTo(2*b.t,this.r2);this.mu=this.r2.divide(b);this.m=b}var h={},Ib=!1;"undefined"!==typeof module&&module.exports?(module.exports=
h,Ib=!0):"undefined"!==typeof document?window.ClipperLib=h:self.ClipperLib=h;var da;if(Ib)S="chrome",da="Netscape";else{var S=navigator.userAgent.toString().toLowerCase();da=navigator.appName}var Za,Wb,La,$a,jb,pb;Za=-1!=S.indexOf("chrome")&&-1==S.indexOf("chromium")?1:0;Ib=-1!=S.indexOf("chromium")?1:0;Wb=-1!=S.indexOf("safari")&&-1==S.indexOf("chrome")&&-1==S.indexOf("chromium")?1:0;La=-1!=S.indexOf("firefox")?1:0;S.indexOf("firefox/17");S.indexOf("firefox/15");S.indexOf("firefox/3");$a=-1!=S.indexOf("opera")?
1:0;S.indexOf("msie 10");S.indexOf("msie 9");jb=-1!=S.indexOf("msie 8")?1:0;pb=-1!=S.indexOf("msie 7")?1:0;S=-1!=S.indexOf("msie ")?1:0;h.biginteger_used=null;"Microsoft Internet Explorer"==da?(q.prototype.am=ib,da=30):"Netscape"!=da?(q.prototype.am=oa,da=26):(q.prototype.am=Ia,da=28);q.prototype.DB=da;q.prototype.DM=(1<<da)-1;q.prototype.DV=1<<da;q.prototype.FV=Math.pow(2,52);q.prototype.F1=52-da;q.prototype.F2=2*da-52;var Ya=[],K;da=48;for(K=0;9>=K;++K)Ya[da++]=K;da=97;for(K=10;36>K;++K)Ya[da++]=
K;da=65;for(K=10;36>K;++K)Ya[da++]=K;Ra.prototype.convert=function(b){return 0>b.s||0<=b.compareTo(this.m)?b.mod(this.m):b};Ra.prototype.revert=function(b){return b};Ra.prototype.reduce=function(b){b.divRemTo(this.m,null,b)};Ra.prototype.mulTo=function(b,d,e){b.multiplyTo(d,e);this.reduce(e)};Ra.prototype.sqrTo=function(b,d){b.squareTo(d);this.reduce(d)};L.prototype.convert=function(b){var d=H();b.abs().dlShiftTo(this.m.t,d);d.divRemTo(this.m,null,d);0>b.s&&0<d.compareTo(q.ZERO)&&this.m.subTo(d,d);
return d};L.prototype.revert=function(b){var d=H();b.copyTo(d);this.reduce(d);return d};L.prototype.reduce=function(b){for(;b.t<=this.mt2;)b[b.t++]=0;for(var d=0;d<this.m.t;++d){var e=b[d]&32767,l=e*this.mpl+((e*this.mph+(b[d]>>15)*this.mpl&this.um)<<15)&b.DM,e=d+this.m.t;for(b[e]+=this.m.am(0,l,b,d,0,this.m.t);b[e]>=b.DV;)b[e]-=b.DV,b[++e]++}b.clamp();b.drShiftTo(this.m.t,b);0<=b.compareTo(this.m)&&b.subTo(this.m,b)};L.prototype.mulTo=function(b,d,e){b.multiplyTo(d,e);this.reduce(e)};L.prototype.sqrTo=
function(b,d){b.squareTo(d);this.reduce(d)};q.prototype.copyTo=function(b){for(var d=this.t-1;0<=d;--d)b[d]=this[d];b.t=this.t;b.s=this.s};q.prototype.fromInt=function(b){this.t=1;this.s=0>b?-1:0;0<b?this[0]=b:-1>b?this[0]=b+this.DV:this.t=0};q.prototype.fromString=function(b,d){var e;if(16==d)e=4;else if(8==d)e=3;else if(256==d)e=8;else if(2==d)e=1;else if(32==d)e=5;else if(4==d)e=2;else{this.fromRadix(b,d);return}this.s=this.t=0;for(var l=b.length,h=!1,r=0;0<=--l;){var k=8==e?b[l]&255:Ja(b,l);0>
k?"-"==b.charAt(l)&&(h=!0):(h=!1,0==r?this[this.t++]=k:r+e>this.DB?(this[this.t-1]|=(k&(1<<this.DB-r)-1)<<r,this[this.t++]=k>>this.DB-r):this[this.t-1]|=k<<r,r+=e,r>=this.DB&&(r-=this.DB))}8==e&&0!=(b[0]&128)&&(this.s=-1,0<r&&(this[this.t-1]|=(1<<this.DB-r)-1<<r));this.clamp();h&&q.ZERO.subTo(this,this)};q.prototype.clamp=function(){for(var b=this.s&this.DM;0<this.t&&this[this.t-1]==b;)--this.t};q.prototype.dlShiftTo=function(b,d){var e;for(e=this.t-1;0<=e;--e)d[e+b]=this[e];for(e=b-1;0<=e;--e)d[e]=
0;d.t=this.t+b;d.s=this.s};q.prototype.drShiftTo=function(b,d){for(var e=b;e<this.t;++e)d[e-b]=this[e];d.t=Math.max(this.t-b,0);d.s=this.s};q.prototype.lShiftTo=function(b,d){var e=b%this.DB,l=this.DB-e,h=(1<<l)-1,r=Math.floor(b/this.DB),k=this.s<<e&this.DM,E;for(E=this.t-1;0<=E;--E)d[E+r+1]=this[E]>>l|k,k=(this[E]&h)<<e;for(E=r-1;0<=E;--E)d[E]=0;d[r]=k;d.t=this.t+r+1;d.s=this.s;d.clamp()};q.prototype.rShiftTo=function(b,d){d.s=this.s;var e=Math.floor(b/this.DB);if(e>=this.t)d.t=0;else{var l=b%this.DB,
h=this.DB-l,r=(1<<l)-1;d[0]=this[e]>>l;for(var k=e+1;k<this.t;++k)d[k-e-1]|=(this[k]&r)<<h,d[k-e]=this[k]>>l;0<l&&(d[this.t-e-1]|=(this.s&r)<<h);d.t=this.t-e;d.clamp()}};q.prototype.subTo=function(b,d){for(var e=0,l=0,h=Math.min(b.t,this.t);e<h;)l+=this[e]-b[e],d[e++]=l&this.DM,l>>=this.DB;if(b.t<this.t){for(l-=b.s;e<this.t;)l+=this[e],d[e++]=l&this.DM,l>>=this.DB;l+=this.s}else{for(l+=this.s;e<b.t;)l-=b[e],d[e++]=l&this.DM,l>>=this.DB;l-=b.s}d.s=0>l?-1:0;-1>l?d[e++]=this.DV+l:0<l&&(d[e++]=l);d.t=
e;d.clamp()};q.prototype.multiplyTo=function(b,d){var e=this.abs(),l=b.abs(),h=e.t;for(d.t=h+l.t;0<=--h;)d[h]=0;for(h=0;h<l.t;++h)d[h+e.t]=e.am(0,l[h],d,h,0,e.t);d.s=0;d.clamp();this.s!=b.s&&q.ZERO.subTo(d,d)};q.prototype.squareTo=function(b){for(var d=this.abs(),e=b.t=2*d.t;0<=--e;)b[e]=0;for(e=0;e<d.t-1;++e){var l=d.am(e,d[e],b,2*e,0,1);(b[e+d.t]+=d.am(e+1,2*d[e],b,2*e+1,l,d.t-e-1))>=d.DV&&(b[e+d.t]-=d.DV,b[e+d.t+1]=1)}0<b.t&&(b[b.t-1]+=d.am(e,d[e],b,2*e,0,1));b.s=0;b.clamp()};q.prototype.divRemTo=
function(b,d,e){var l=b.abs();if(!(0>=l.t)){var h=this.abs();if(h.t<l.t)null!=d&&d.fromInt(0),null!=e&&this.copyTo(e);else{null==e&&(e=H());var r=H(),w=this.s;b=b.s;var E=this.DB-k(l[l.t-1]);0<E?(l.lShiftTo(E,r),h.lShiftTo(E,e)):(l.copyTo(r),h.copyTo(e));l=r.t;h=r[l-1];if(0!=h){var B=h*(1<<this.F1)+(1<l?r[l-2]>>this.F2:0),L=this.FV/B,B=(1<<this.F1)/B,pa=1<<this.F2,na=e.t,K=na-l,fa=null==d?H():d;r.dlShiftTo(K,fa);0<=e.compareTo(fa)&&(e[e.t++]=1,e.subTo(fa,e));q.ONE.dlShiftTo(l,fa);for(fa.subTo(r,r);r.t<
l;)r[r.t++]=0;for(;0<=--K;){var Q=e[--na]==h?this.DM:Math.floor(e[na]*L+(e[na-1]+pa)*B);if((e[na]+=r.am(0,Q,e,K,0,l))<Q)for(r.dlShiftTo(K,fa),e.subTo(fa,e);e[na]<--Q;)e.subTo(fa,e)}null!=d&&(e.drShiftTo(l,d),w!=b&&q.ZERO.subTo(d,d));e.t=l;e.clamp();0<E&&e.rShiftTo(E,e);0>w&&q.ZERO.subTo(e,e)}}}};q.prototype.invDigit=function(){if(1>this.t)return 0;var b=this[0];if(0==(b&1))return 0;var d=b&3,d=d*(2-(b&15)*d)&15,d=d*(2-(b&255)*d)&255,d=d*(2-((b&65535)*d&65535))&65535,d=d*(2-b*d%this.DV)%this.DV;return 0<
d?this.DV-d:-d};q.prototype.isEven=function(){return 0==(0<this.t?this[0]&1:this.s)};q.prototype.exp=function(b,d){if(4294967295<b||1>b)return q.ONE;var e=H(),l=H(),h=d.convert(this),r=k(b)-1;for(h.copyTo(e);0<=--r;)if(d.sqrTo(e,l),0<(b&1<<r))d.mulTo(l,h,e);else var w=e,e=l,l=w;return d.revert(e)};q.prototype.toString=function(b){if(0>this.s)return"-"+this.negate().toString(b);if(16==b)b=4;else if(8==b)b=3;else if(2==b)b=1;else if(32==b)b=5;else if(4==b)b=2;else return this.toRadix(b);var d=(1<<b)-
1,e,l=!1,h="",r=this.t,k=this.DB-r*this.DB%b;if(0<r--)for(k<this.DB&&0<(e=this[r]>>k)&&(l=!0,h="0123456789abcdefghijklmnopqrstuvwxyz".charAt(e));0<=r;)k<b?(e=(this[r]&(1<<k)-1)<<b-k,e|=this[--r]>>(k+=this.DB-b)):(e=this[r]>>(k-=b)&d,0>=k&&(k+=this.DB,--r)),0<e&&(l=!0),l&&(h+="0123456789abcdefghijklmnopqrstuvwxyz".charAt(e));return l?h:"0"};q.prototype.negate=function(){var b=H();q.ZERO.subTo(this,b);return b};q.prototype.abs=function(){return 0>this.s?this.negate():this};q.prototype.compareTo=function(b){var d=
this.s-b.s;if(0!=d)return d;var e=this.t,d=e-b.t;if(0!=d)return 0>this.s?-d:d;for(;0<=--e;)if(0!=(d=this[e]-b[e]))return d;return 0};q.prototype.bitLength=function(){return 0>=this.t?0:this.DB*(this.t-1)+k(this[this.t-1]^this.s&this.DM)};q.prototype.mod=function(b){var d=H();this.abs().divRemTo(b,null,d);0>this.s&&0<d.compareTo(q.ZERO)&&b.subTo(d,d);return d};q.prototype.modPowInt=function(b,d){var e;e=256>b||d.isEven()?new Ra(d):new L(d);return this.exp(b,e)};q.ZERO=Ba(0);q.ONE=Ba(1);xb.prototype.convert=
Fc;xb.prototype.revert=Fc;xb.prototype.mulTo=function(b,d,e){b.multiplyTo(d,e)};xb.prototype.sqrTo=function(b,d){b.squareTo(d)};ka.prototype.convert=function(b){if(0>b.s||b.t>2*this.m.t)return b.mod(this.m);if(0>b.compareTo(this.m))return b;var d=H();b.copyTo(d);this.reduce(d);return d};ka.prototype.revert=function(b){return b};ka.prototype.reduce=function(b){b.drShiftTo(this.m.t-1,this.r2);b.t>this.m.t+1&&(b.t=this.m.t+1,b.clamp());this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);for(this.m.multiplyLowerTo(this.q3,
this.m.t+1,this.r2);0>b.compareTo(this.r2);)b.dAddOffset(1,this.m.t+1);for(b.subTo(this.r2,b);0<=b.compareTo(this.m);)b.subTo(this.m,b)};ka.prototype.mulTo=function(b,d,e){b.multiplyTo(d,e);this.reduce(e)};ka.prototype.sqrTo=function(b,d){b.squareTo(d);this.reduce(d)};var la=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,
313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],qb=67108864/la[la.length-1];q.prototype.chunkSize=function(b){return Math.floor(Math.LN2*
this.DB/Math.log(b))};q.prototype.toRadix=function(b){null==b&&(b=10);if(0==this.signum()||2>b||36<b)return"0";var d=this.chunkSize(b),d=Math.pow(b,d),e=Ba(d),l=H(),h=H(),r="";for(this.divRemTo(e,l,h);0<l.signum();)r=(d+h.intValue()).toString(b).substr(1)+r,l.divRemTo(e,l,h);return h.intValue().toString(b)+r};q.prototype.fromRadix=function(b,d){this.fromInt(0);null==d&&(d=10);for(var e=this.chunkSize(d),l=Math.pow(d,e),h=!1,r=0,k=0,E=0;E<b.length;++E){var B=Ja(b,E);0>B?"-"==b.charAt(E)&&0==this.signum()&&
(h=!0):(k=d*k+B,++r>=e&&(this.dMultiply(l),this.dAddOffset(k,0),k=r=0))}0<r&&(this.dMultiply(Math.pow(d,r)),this.dAddOffset(k,0));h&&q.ZERO.subTo(this,this)};q.prototype.fromNumber=function(b,d,e){if("number"==typeof d)if(2>b)this.fromInt(1);else for(this.fromNumber(b,e),this.testBit(b-1)||this.bitwiseTo(q.ONE.shiftLeft(b-1),Y,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(d);)this.dAddOffset(2,0),this.bitLength()>b&&this.subTo(q.ONE.shiftLeft(b-1),this);else{e=[];var l=b&7;e.length=
(b>>3)+1;d.nextBytes(e);e[0]=0<l?e[0]&(1<<l)-1:0;this.fromString(e,256)}};q.prototype.bitwiseTo=function(b,d,e){var l,h,r=Math.min(b.t,this.t);for(l=0;l<r;++l)e[l]=d(this[l],b[l]);if(b.t<this.t){h=b.s&this.DM;for(l=r;l<this.t;++l)e[l]=d(this[l],h);e.t=this.t}else{h=this.s&this.DM;for(l=r;l<b.t;++l)e[l]=d(h,b[l]);e.t=b.t}e.s=d(this.s,b.s);e.clamp()};q.prototype.changeBit=function(b,d){var e=q.ONE.shiftLeft(b);this.bitwiseTo(e,d,e);return e};q.prototype.addTo=function(b,d){for(var e=0,l=0,h=Math.min(b.t,
this.t);e<h;)l+=this[e]+b[e],d[e++]=l&this.DM,l>>=this.DB;if(b.t<this.t){for(l+=b.s;e<this.t;)l+=this[e],d[e++]=l&this.DM,l>>=this.DB;l+=this.s}else{for(l+=this.s;e<b.t;)l+=b[e],d[e++]=l&this.DM,l>>=this.DB;l+=b.s}d.s=0>l?-1:0;0<l?d[e++]=l:-1>l&&(d[e++]=this.DV+l);d.t=e;d.clamp()};q.prototype.dMultiply=function(b){this[this.t]=this.am(0,b-1,this,0,0,this.t);++this.t;this.clamp()};q.prototype.dAddOffset=function(b,d){if(0!=b){for(;this.t<=d;)this[this.t++]=0;for(this[d]+=b;this[d]>=this.DV;)this[d]-=
this.DV,++d>=this.t&&(this[this.t++]=0),++this[d]}};q.prototype.multiplyLowerTo=function(b,d,e){var l=Math.min(this.t+b.t,d);e.s=0;for(e.t=l;0<l;)e[--l]=0;var h;for(h=e.t-this.t;l<h;++l)e[l+this.t]=this.am(0,b[l],e,l,0,this.t);for(h=Math.min(b.t,d);l<h;++l)this.am(0,b[l],e,l,0,d-l);e.clamp()};q.prototype.multiplyUpperTo=function(b,d,e){--d;var l=e.t=this.t+b.t-d;for(e.s=0;0<=--l;)e[l]=0;for(l=Math.max(d-this.t,0);l<b.t;++l)e[this.t+l-d]=this.am(d-l,b[l],e,0,0,this.t+l-d);e.clamp();e.drShiftTo(1,e)};
q.prototype.modInt=function(b){if(0>=b)return 0;var d=this.DV%b,e=0>this.s?b-1:0;if(0<this.t)if(0==d)e=this[0]%b;else for(var l=this.t-1;0<=l;--l)e=(d*e+this[l])%b;return e};q.prototype.millerRabin=function(b){var d=this.subtract(q.ONE),e=d.getLowestSetBit();if(0>=e)return!1;var l=d.shiftRight(e);b=b+1>>1;b>la.length&&(b=la.length);for(var h=H(),r=0;r<b;++r){h.fromInt(la[Math.floor(Math.random()*la.length)]);var k=h.modPow(l,this);if(0!=k.compareTo(q.ONE)&&0!=k.compareTo(d)){for(var E=1;E++<e&&0!=
k.compareTo(d);)if(k=k.modPowInt(2,this),0==k.compareTo(q.ONE))return!1;if(0!=k.compareTo(d))return!1}}return!0};q.prototype.clone=function(){var b=H();this.copyTo(b);return b};q.prototype.intValue=function(){if(0>this.s){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]};q.prototype.byteValue=function(){return 0==this.t?this.s:this[0]<<24>>24};q.prototype.shortValue=function(){return 0==
this.t?this.s:this[0]<<16>>16};q.prototype.signum=function(){return 0>this.s?-1:0>=this.t||1==this.t&&0>=this[0]?0:1};q.prototype.toByteArray=function(){var b=this.t,d=[];d[0]=this.s;var e=this.DB-b*this.DB%8,l,h=0;if(0<b--)for(e<this.DB&&(l=this[b]>>e)!=(this.s&this.DM)>>e&&(d[h++]=l|this.s<<this.DB-e);0<=b;)if(8>e?(l=(this[b]&(1<<e)-1)<<8-e,l|=this[--b]>>(e+=this.DB-8)):(l=this[b]>>(e-=8)&255,0>=e&&(e+=this.DB,--b)),0!=(l&128)&&(l|=-256),0==h&&(this.s&128)!=(l&128)&&++h,0<h||l!=this.s)d[h++]=l;
return d};q.prototype.equals=function(b){return 0==this.compareTo(b)};q.prototype.min=function(b){return 0>this.compareTo(b)?this:b};q.prototype.max=function(b){return 0<this.compareTo(b)?this:b};q.prototype.and=function(b){var d=H();this.bitwiseTo(b,fa,d);return d};q.prototype.or=function(b){var d=H();this.bitwiseTo(b,Y,d);return d};q.prototype.xor=function(b){var d=H();this.bitwiseTo(b,Q,d);return d};q.prototype.andNot=function(b){var d=H();this.bitwiseTo(b,X,d);return d};q.prototype.not=function(){for(var b=
H(),d=0;d<this.t;++d)b[d]=this.DM&~this[d];b.t=this.t;b.s=~this.s;return b};q.prototype.shiftLeft=function(b){var d=H();0>b?this.rShiftTo(-b,d):this.lShiftTo(b,d);return d};q.prototype.shiftRight=function(b){var d=H();0>b?this.lShiftTo(-b,d):this.rShiftTo(b,d);return d};q.prototype.getLowestSetBit=function(){for(var b=0;b<this.t;++b)if(0!=this[b]){var d=b*this.DB,b=this[b];if(0==b)b=-1;else{var e=0;0==(b&65535)&&(b>>=16,e+=16);0==(b&255)&&(b>>=8,e+=8);0==(b&15)&&(b>>=4,e+=4);0==(b&3)&&(b>>=2,e+=2);
0==(b&1)&&++e;b=e}return d+b}return 0>this.s?this.t*this.DB:-1};q.prototype.bitCount=function(){for(var b=0,d=this.s&this.DM,e=0;e<this.t;++e){for(var l=this[e]^d,h=0;0!=l;)l&=l-1,++h;b+=h}return b};q.prototype.testBit=function(b){var d=Math.floor(b/this.DB);return d>=this.t?0!=this.s:0!=(this[d]&1<<b%this.DB)};q.prototype.setBit=function(b){return this.changeBit(b,Y)};q.prototype.clearBit=function(b){return this.changeBit(b,X)};q.prototype.flipBit=function(b){return this.changeBit(b,Q)};q.prototype.add=
function(b){var d=H();this.addTo(b,d);return d};q.prototype.subtract=function(b){var d=H();this.subTo(b,d);return d};q.prototype.multiply=function(b){var d=H();this.multiplyTo(b,d);return d};q.prototype.divide=function(b){var d=H();this.divRemTo(b,d,null);return d};q.prototype.remainder=function(b){var d=H();this.divRemTo(b,null,d);return d};q.prototype.divideAndRemainder=function(b){var d=H(),e=H();this.divRemTo(b,d,e);return[d,e]};q.prototype.modPow=function(b,d){var e=b.bitLength(),l,h=Ba(1),r;
if(0>=e)return h;l=18>e?1:48>e?3:144>e?4:768>e?5:6;r=8>e?new Ra(d):d.isEven()?new ka(d):new L(d);var w=[],E=3,B=l-1,q=(1<<l)-1;w[1]=r.convert(this);if(1<l)for(e=H(),r.sqrTo(w[1],e);E<=q;)w[E]=H(),r.mulTo(e,w[E-2],w[E]),E+=2;for(var pa=b.t-1,na,fa=!0,K=H(),e=k(b[pa])-1;0<=pa;){e>=B?na=b[pa]>>e-B&q:(na=(b[pa]&(1<<e+1)-1)<<B-e,0<pa&&(na|=b[pa-1]>>this.DB+e-B));for(E=l;0==(na&1);)na>>=1,--E;0>(e-=E)&&(e+=this.DB,--pa);if(fa)w[na].copyTo(h),fa=!1;else{for(;1<E;)r.sqrTo(h,K),r.sqrTo(K,h),E-=2;0<E?r.sqrTo(h,
K):(E=h,h=K,K=E);r.mulTo(K,w[na],h)}for(;0<=pa&&0==(b[pa]&1<<e);)r.sqrTo(h,K),E=h,h=K,K=E,0>--e&&(e=this.DB-1,--pa)}return r.revert(h)};q.prototype.modInverse=function(b){var d=b.isEven();if(this.isEven()&&d||0==b.signum())return q.ZERO;for(var e=b.clone(),l=this.clone(),h=Ba(1),r=Ba(0),k=Ba(0),E=Ba(1);0!=e.signum();){for(;e.isEven();)e.rShiftTo(1,e),d?(h.isEven()&&r.isEven()||(h.addTo(this,h),r.subTo(b,r)),h.rShiftTo(1,h)):r.isEven()||r.subTo(b,r),r.rShiftTo(1,r);for(;l.isEven();)l.rShiftTo(1,l),
d?(k.isEven()&&E.isEven()||(k.addTo(this,k),E.subTo(b,E)),k.rShiftTo(1,k)):E.isEven()||E.subTo(b,E),E.rShiftTo(1,E);0<=e.compareTo(l)?(e.subTo(l,e),d&&h.subTo(k,h),r.subTo(E,r)):(l.subTo(e,l),d&&k.subTo(h,k),E.subTo(r,E))}if(0!=l.compareTo(q.ONE))return q.ZERO;if(0<=E.compareTo(b))return E.subtract(b);if(0>E.signum())E.addTo(b,E);else return E;return 0>E.signum()?E.add(b):E};q.prototype.pow=function(b){return this.exp(b,new xb)};q.prototype.gcd=function(b){var d=0>this.s?this.negate():this.clone();
b=0>b.s?b.negate():b.clone();if(0>d.compareTo(b)){var e=d,d=b;b=e}var e=d.getLowestSetBit(),l=b.getLowestSetBit();if(0>l)return d;e<l&&(l=e);for(0<l&&(d.rShiftTo(l,d),b.rShiftTo(l,b));0<d.signum();)0<(e=d.getLowestSetBit())&&d.rShiftTo(e,d),0<(e=b.getLowestSetBit())&&b.rShiftTo(e,b),0<=d.compareTo(b)?(d.subTo(b,d),d.rShiftTo(1,d)):(b.subTo(d,b),b.rShiftTo(1,b));0<l&&b.lShiftTo(l,b);return b};q.prototype.isProbablePrime=function(b){var d,e=this.abs();if(1==e.t&&e[0]<=la[la.length-1]){for(d=0;d<la.length;++d)if(e[0]==
la[d])return!0;return!1}if(e.isEven())return!1;for(d=1;d<la.length;){for(var l=la[d],h=d+1;h<la.length&&l<qb;)l*=la[h++];for(l=e.modInt(l);d<h;)if(0==l%la[d++])return!1}return e.millerRabin(b)};q.prototype.square=function(){var b=H();this.squareTo(b);return b};q.prototype.IsNegative=function(){return-1==this.compareTo(q.ZERO)?!0:!1};q.op_Equality=function(b,d){return 0==b.compareTo(d)?!0:!1};q.op_Inequality=function(b,d){return 0!=b.compareTo(d)?!0:!1};q.op_GreaterThan=function(b,d){return 0<b.compareTo(d)?
!0:!1};q.op_LessThan=function(b,d){return 0>b.compareTo(d)?!0:!1};q.op_Addition=function(b,d){return(new q(b)).add(new q(d))};q.op_Subtraction=function(b,d){return(new q(b)).subtract(new q(d))};q.Int128Mul=function(b,d){return(new q(b)).multiply(new q(d))};q.op_Division=function(b,d){return b.divide(d)};q.prototype.ToDouble=function(){return parseFloat(this.toString())};if("undefined"==typeof Yb)var Yb=function(b,d){var e;if("undefined"==typeof Object.getOwnPropertyNames)for(e in d.prototype){if("undefined"==
typeof b.prototype[e]||b.prototype[e]==Object.prototype[e])b.prototype[e]=d.prototype[e]}else for(var l=Object.getOwnPropertyNames(d.prototype),h=0;h<l.length;h++)"undefined"==typeof Object.getOwnPropertyDescriptor(b.prototype,l[h])&&Object.defineProperty(b.prototype,l[h],Object.getOwnPropertyDescriptor(d.prototype,l[h]));for(e in d)"undefined"==typeof b[e]&&(b[e]=d[e]);b.$baseCtor=d};h.Path=function(){return[]};h.Paths=function(){return[]};h.DoublePoint=function(){var b=arguments;this.Y=this.X=0;
1==b.length?(this.X=b[0].X,this.Y=b[0].Y):2==b.length&&(this.X=b[0],this.Y=b[1])};h.DoublePoint0=function(){this.Y=this.X=0};h.DoublePoint1=function(b){this.X=b.X;this.Y=b.Y};h.DoublePoint2=function(b,d){this.X=b;this.Y=d};h.PolyNode=function(){this.m_Parent=null;this.m_polygon=new h.Path;this.m_endtype=this.m_jointype=this.m_Index=0;this.m_Childs=[];this.IsOpen=!1};h.PolyNode.prototype.IsHoleNode=function(){for(var b=!0,d=this.m_Parent;null!==d;)b=!b,d=d.m_Parent;return b};h.PolyNode.prototype.ChildCount=
function(){return this.m_Childs.length};h.PolyNode.prototype.Contour=function(){return this.m_polygon};h.PolyNode.prototype.AddChild=function(b){var d=this.m_Childs.length;this.m_Childs.push(b);b.m_Parent=this;b.m_Index=d};h.PolyNode.prototype.GetNext=function(){return 0<this.m_Childs.length?this.m_Childs[0]:this.GetNextSiblingUp()};h.PolyNode.prototype.GetNextSiblingUp=function(){return null===this.m_Parent?null:this.m_Index==this.m_Parent.m_Childs.length-1?this.m_Parent.GetNextSiblingUp():this.m_Parent.m_Childs[this.m_Index+
1]};h.PolyNode.prototype.Childs=function(){return this.m_Childs};h.PolyNode.prototype.Parent=function(){return this.m_Parent};h.PolyNode.prototype.IsHole=function(){return this.IsHoleNode()};h.PolyTree=function(){this.m_AllPolys=[];h.PolyNode.call(this)};h.PolyTree.prototype.Clear=function(){for(var b=0,d=this.m_AllPolys.length;b<d;b++)this.m_AllPolys[b]=null;this.m_AllPolys.length=0;this.m_Childs.length=0};h.PolyTree.prototype.GetFirst=function(){return 0<this.m_Childs.length?this.m_Childs[0]:null};
h.PolyTree.prototype.Total=function(){return this.m_AllPolys.length};Yb(h.PolyTree,h.PolyNode);h.Math_Abs_Int64=h.Math_Abs_Int32=h.Math_Abs_Double=function(b){return Math.abs(b)};h.Math_Max_Int32_Int32=function(b,d){return Math.max(b,d)};h.Cast_Int32=S||$a||Wb?function(b){return b|0}:function(b){return~~b};h.Cast_Int64=Za?function(b){return-2147483648>b||2147483647<b?0>b?Math.ceil(b):Math.floor(b):~~b}:La&&"function"==typeof Number.toInteger?function(b){return Number.toInteger(b)}:pb||jb?function(b){return parseInt(b,
10)}:S?function(b){return-2147483648>b||2147483647<b?0>b?Math.ceil(b):Math.floor(b):b|0}:function(b){return 0>b?Math.ceil(b):Math.floor(b)};h.Clear=function(b){b.length=0};h.PI=3.141592653589793;h.PI2=6.283185307179586;h.IntPoint=function(){var b;b=arguments;var d=b.length;this.Y=this.X=0;2==d?(this.X=b[0],this.Y=b[1]):1==d?b[0]instanceof h.DoublePoint?(b=b[0],this.X=h.Clipper.Round(b.X),this.Y=h.Clipper.Round(b.Y)):(b=b[0],this.X=b.X,this.Y=b.Y):this.Y=this.X=0};h.IntPoint.op_Equality=function(b,
d){return b.X==d.X&&b.Y==d.Y};h.IntPoint.op_Inequality=function(b,d){return b.X!=d.X||b.Y!=d.Y};h.IntPoint0=function(){this.Y=this.X=0};h.IntPoint1=function(b){this.X=b.X;this.Y=b.Y};h.IntPoint1dp=function(b){this.X=h.Clipper.Round(b.X);this.Y=h.Clipper.Round(b.Y)};h.IntPoint2=function(b,d){this.X=b;this.Y=d};h.IntRect=function(){var b=arguments,d=b.length;4==d?(this.left=b[0],this.top=b[1],this.right=b[2],this.bottom=b[3]):1==d?(this.left=b[0].left,this.top=b[0].top,this.right=b[0].right,this.bottom=
b[0].bottom):this.bottom=this.right=this.top=this.left=0};h.IntRect0=function(){this.bottom=this.right=this.top=this.left=0};h.IntRect1=function(b){this.left=b.left;this.top=b.top;this.right=b.right;this.bottom=b.bottom};h.IntRect4=function(b,d,e,l){this.left=b;this.top=d;this.right=e;this.bottom=l};h.ClipType={ctIntersection:0,ctUnion:1,ctDifference:2,ctXor:3};h.PolyType={ptSubject:0,ptClip:1};h.PolyFillType={pftEvenOdd:0,pftNonZero:1,pftPositive:2,pftNegative:3};h.JoinType={jtSquare:0,jtRound:1,
jtMiter:2};h.EndType={etOpenSquare:0,etOpenRound:1,etOpenButt:2,etClosedLine:3,etClosedPolygon:4};h.EdgeSide={esLeft:0,esRight:1};h.Direction={dRightToLeft:0,dLeftToRight:1};h.TEdge=function(){this.Bot=new h.IntPoint;this.Curr=new h.IntPoint;this.Top=new h.IntPoint;this.Delta=new h.IntPoint;this.Dx=0;this.PolyTyp=h.PolyType.ptSubject;this.Side=h.EdgeSide.esLeft;this.OutIdx=this.WindCnt2=this.WindCnt=this.WindDelta=0;this.PrevInSEL=this.NextInSEL=this.PrevInAEL=this.NextInAEL=this.NextInLML=this.Prev=
this.Next=null};h.IntersectNode=function(){this.Edge2=this.Edge1=null;this.Pt=new h.IntPoint};h.MyIntersectNodeSort=function(){};h.MyIntersectNodeSort.Compare=function(b,d){return d.Pt.Y-b.Pt.Y};h.LocalMinima=function(){this.Y=0;this.Next=this.RightBound=this.LeftBound=null};h.Scanbeam=function(){this.Y=0;this.Next=null};h.OutRec=function(){this.Idx=0;this.IsOpen=this.IsHole=!1;this.PolyNode=this.BottomPt=this.Pts=this.FirstLeft=null};h.OutPt=function(){this.Idx=0;this.Pt=new h.IntPoint;this.Prev=
this.Next=null};h.Join=function(){this.OutPt2=this.OutPt1=null;this.OffPt=new h.IntPoint};h.ClipperBase=function(){this.m_CurrentLM=this.m_MinimaList=null;this.m_edges=[];this.PreserveCollinear=this.m_HasOpenPaths=this.m_UseFullRange=!1;this.m_CurrentLM=this.m_MinimaList=null;this.m_HasOpenPaths=this.m_UseFullRange=!1};h.ClipperBase.horizontal=-9007199254740992;h.ClipperBase.Skip=-2;h.ClipperBase.Unassigned=-1;h.ClipperBase.tolerance=1E-20;h.ClipperBase.loRange=47453132;h.ClipperBase.hiRange=0xfffffffffffff;
h.ClipperBase.near_zero=function(b){return b>-h.ClipperBase.tolerance&&b<h.ClipperBase.tolerance};h.ClipperBase.IsHorizontal=function(b){return 0===b.Delta.Y};h.ClipperBase.prototype.PointIsVertex=function(b,d){var e=d;do{if(h.IntPoint.op_Equality(e.Pt,b))return!0;e=e.Next}while(e!=d);return!1};h.ClipperBase.prototype.PointOnLineSegment=function(b,d,e,l){return l?b.X==d.X&&b.Y==d.Y||b.X==e.X&&b.Y==e.Y||b.X>d.X==b.X<e.X&&b.Y>d.Y==b.Y<e.Y&&q.op_Equality(q.Int128Mul(b.X-d.X,e.Y-d.Y),q.Int128Mul(e.X-
d.X,b.Y-d.Y)):b.X==d.X&&b.Y==d.Y||b.X==e.X&&b.Y==e.Y||b.X>d.X==b.X<e.X&&b.Y>d.Y==b.Y<e.Y&&(b.X-d.X)*(e.Y-d.Y)==(e.X-d.X)*(b.Y-d.Y)};h.ClipperBase.prototype.PointOnPolygon=function(b,d,e){for(var l=d;;){if(this.PointOnLineSegment(b,l.Pt,l.Next.Pt,e))return!0;l=l.Next;if(l==d)break}return!1};h.ClipperBase.prototype.SlopesEqual=h.ClipperBase.SlopesEqual=function(){var b=arguments,d=b.length,e,l,G;if(3==d)return d=b[0],e=b[1],b[2]?q.op_Equality(q.Int128Mul(d.Delta.Y,e.Delta.X),q.Int128Mul(d.Delta.X,e.Delta.Y)):
h.Cast_Int64(d.Delta.Y*e.Delta.X)==h.Cast_Int64(d.Delta.X*e.Delta.Y);if(4==d)return d=b[0],e=b[1],l=b[2],b[3]?q.op_Equality(q.Int128Mul(d.Y-e.Y,e.X-l.X),q.Int128Mul(d.X-e.X,e.Y-l.Y)):0===h.Cast_Int64((d.Y-e.Y)*(e.X-l.X))-h.Cast_Int64((d.X-e.X)*(e.Y-l.Y));d=b[0];e=b[1];l=b[2];G=b[3];return b[4]?q.op_Equality(q.Int128Mul(d.Y-e.Y,l.X-G.X),q.Int128Mul(d.X-e.X,l.Y-G.Y)):0===h.Cast_Int64((d.Y-e.Y)*(l.X-G.X))-h.Cast_Int64((d.X-e.X)*(l.Y-G.Y))};h.ClipperBase.SlopesEqual3=function(b,d,e){return e?q.op_Equality(q.Int128Mul(b.Delta.Y,
d.Delta.X),q.Int128Mul(b.Delta.X,d.Delta.Y)):h.Cast_Int64(b.Delta.Y*d.Delta.X)==h.Cast_Int64(b.Delta.X*d.Delta.Y)};h.ClipperBase.SlopesEqual4=function(b,d,e,l){return l?q.op_Equality(q.Int128Mul(b.Y-d.Y,d.X-e.X),q.Int128Mul(b.X-d.X,d.Y-e.Y)):0===h.Cast_Int64((b.Y-d.Y)*(d.X-e.X))-h.Cast_Int64((b.X-d.X)*(d.Y-e.Y))};h.ClipperBase.SlopesEqual5=function(b,d,e,l,G){return G?q.op_Equality(q.Int128Mul(b.Y-d.Y,e.X-l.X),q.Int128Mul(b.X-d.X,e.Y-l.Y)):0===h.Cast_Int64((b.Y-d.Y)*(e.X-l.X))-h.Cast_Int64((b.X-d.X)*
(e.Y-l.Y))};h.ClipperBase.prototype.Clear=function(){this.DisposeLocalMinimaList();for(var b=0,d=this.m_edges.length;b<d;++b){for(var e=0,l=this.m_edges[b].length;e<l;++e)this.m_edges[b][e]=null;h.Clear(this.m_edges[b])}h.Clear(this.m_edges);this.m_HasOpenPaths=this.m_UseFullRange=!1};h.ClipperBase.prototype.DisposeLocalMinimaList=function(){for(;null!==this.m_MinimaList;){var b=this.m_MinimaList.Next;this.m_MinimaList=null;this.m_MinimaList=b}this.m_CurrentLM=null};h.ClipperBase.prototype.RangeTest=
function(b,d){if(d.Value)(b.X>h.ClipperBase.hiRange||b.Y>h.ClipperBase.hiRange||-b.X>h.ClipperBase.hiRange||-b.Y>h.ClipperBase.hiRange)&&h.Error("Coordinate outside allowed range in RangeTest().");else if(b.X>h.ClipperBase.loRange||b.Y>h.ClipperBase.loRange||-b.X>h.ClipperBase.loRange||-b.Y>h.ClipperBase.loRange)d.Value=!0,this.RangeTest(b,d)};h.ClipperBase.prototype.InitEdge=function(b,d,e,l){b.Next=d;b.Prev=e;b.Curr.X=l.X;b.Curr.Y=l.Y;b.OutIdx=-1};h.ClipperBase.prototype.InitEdge2=function(b,d){b.Curr.Y>=
b.Next.Curr.Y?(b.Bot.X=b.Curr.X,b.Bot.Y=b.Curr.Y,b.Top.X=b.Next.Curr.X,b.Top.Y=b.Next.Curr.Y):(b.Top.X=b.Curr.X,b.Top.Y=b.Curr.Y,b.Bot.X=b.Next.Curr.X,b.Bot.Y=b.Next.Curr.Y);this.SetDx(b);b.PolyTyp=d};h.ClipperBase.prototype.FindNextLocMin=function(b){for(var d;;){for(;h.IntPoint.op_Inequality(b.Bot,b.Prev.Bot)||h.IntPoint.op_Equality(b.Curr,b.Top);)b=b.Next;if(b.Dx!=h.ClipperBase.horizontal&&b.Prev.Dx!=h.ClipperBase.horizontal)break;for(;b.Prev.Dx==h.ClipperBase.horizontal;)b=b.Prev;for(d=b;b.Dx==
h.ClipperBase.horizontal;)b=b.Next;if(b.Top.Y!=b.Prev.Bot.Y){d.Prev.Bot.X<b.Bot.X&&(b=d);break}}return b};h.ClipperBase.prototype.ProcessBound=function(b,d){var e=b,l=b,G;b.Dx==h.ClipperBase.horizontal&&(G=d?b.Prev.Bot.X:b.Next.Bot.X,b.Bot.X!=G&&this.ReverseHorizontal(b));if(l.OutIdx!=h.ClipperBase.Skip)if(d){for(;l.Top.Y==l.Next.Bot.Y&&l.Next.OutIdx!=h.ClipperBase.Skip;)l=l.Next;if(l.Dx==h.ClipperBase.horizontal&&l.Next.OutIdx!=h.ClipperBase.Skip){for(G=l;G.Prev.Dx==h.ClipperBase.horizontal;)G=G.Prev;
G.Prev.Top.X==l.Next.Top.X?d||(l=G.Prev):G.Prev.Top.X>l.Next.Top.X&&(l=G.Prev)}for(;b!=l;)b.NextInLML=b.Next,b.Dx==h.ClipperBase.horizontal&&b!=e&&b.Bot.X!=b.Prev.Top.X&&this.ReverseHorizontal(b),b=b.Next;b.Dx==h.ClipperBase.horizontal&&b!=e&&b.Bot.X!=b.Prev.Top.X&&this.ReverseHorizontal(b);l=l.Next}else{for(;l.Top.Y==l.Prev.Bot.Y&&l.Prev.OutIdx!=h.ClipperBase.Skip;)l=l.Prev;if(l.Dx==h.ClipperBase.horizontal&&l.Prev.OutIdx!=h.ClipperBase.Skip){for(G=l;G.Next.Dx==h.ClipperBase.horizontal;)G=G.Next;
G.Next.Top.X==l.Prev.Top.X?d||(l=G.Next):G.Next.Top.X>l.Prev.Top.X&&(l=G.Next)}for(;b!=l;)b.NextInLML=b.Prev,b.Dx==h.ClipperBase.horizontal&&b!=e&&b.Bot.X!=b.Next.Top.X&&this.ReverseHorizontal(b),b=b.Prev;b.Dx==h.ClipperBase.horizontal&&b!=e&&b.Bot.X!=b.Next.Top.X&&this.ReverseHorizontal(b);l=l.Prev}if(l.OutIdx==h.ClipperBase.Skip){b=l;if(d){for(;b.Top.Y==b.Next.Bot.Y;)b=b.Next;for(;b!=l&&b.Dx==h.ClipperBase.horizontal;)b=b.Prev}else{for(;b.Top.Y==b.Prev.Bot.Y;)b=b.Prev;for(;b!=l&&b.Dx==h.ClipperBase.horizontal;)b=
b.Next}b==l?l=d?b.Next:b.Prev:(b=d?l.Next:l.Prev,e=new h.LocalMinima,e.Next=null,e.Y=b.Bot.Y,e.LeftBound=null,e.RightBound=b,e.RightBound.WindDelta=0,l=this.ProcessBound(e.RightBound,d),this.InsertLocalMinima(e))}return l};h.ClipperBase.prototype.AddPath=function(b,d,e){e||d!=h.PolyType.ptClip||h.Error("AddPath: Open paths must be subject.");var l=b.length-1;if(e)for(;0<l&&h.IntPoint.op_Equality(b[l],b[0]);)--l;for(;0<l&&h.IntPoint.op_Equality(b[l],b[l-1]);)--l;if(e&&2>l||!e&&1>l)return!1;for(var G=
[],r=0;r<=l;r++)G.push(new h.TEdge);var k=!0;try{for(G[1].Curr.X=b[1].X,G[1].Curr.Y=b[1].Y,function(){var d={Value:this.m_UseFullRange},e=this.RangeTest(b[0],d);this.m_UseFullRange=d.Value;return e}.call(this),function(){var d={Value:this.m_UseFullRange},e=this.RangeTest(b[l],d);this.m_UseFullRange=d.Value;return e}.call(this),this.InitEdge(G[0],G[1],G[l],b[0]),this.InitEdge(G[l],G[0],G[l-1],b[l]),r=l-1;1<=r;--r)(function(){var d={Value:this.m_UseFullRange},e=this.RangeTest(b[r],d);this.m_UseFullRange=
d.Value;return e}).call(this),this.InitEdge(G[r],G[r+1],G[r-1],b[r])}catch(q){return!1}var E=G[0];e||(E.Prev.OutIdx=h.ClipperBase.Skip);for(var B=E,L=E;;)if(h.IntPoint.op_Equality(B.Curr,B.Next.Curr)){if(B==B.Next)break;B==E&&(E=B.Next);L=B=this.RemoveEdge(B)}else{if(B.Prev==B.Next)break;else if(e&&h.ClipperBase.SlopesEqual(B.Prev.Curr,B.Curr,B.Next.Curr,this.m_UseFullRange)&&(!this.PreserveCollinear||!this.Pt2IsBetweenPt1AndPt3(B.Prev.Curr,B.Curr,B.Next.Curr))){B==E&&(E=B.Next);B=this.RemoveEdge(B);
L=B=B.Prev;continue}B=B.Next;if(B==L)break}if(!e&&B==B.Next||e&&B.Prev==B.Next)return!1;e||(this.m_HasOpenPaths=!0);B=E;do this.InitEdge2(B,d),B=B.Next,k&&B.Curr.Y!=E.Curr.Y&&(k=!1);while(B!=E);if(k){if(e)return!1;B.Prev.OutIdx=h.ClipperBase.Skip;B.Prev.Bot.X<B.Prev.Top.X&&this.ReverseHorizontal(B.Prev);d=new h.LocalMinima;d.Next=null;d.Y=B.Bot.Y;d.LeftBound=null;d.RightBound=B;d.RightBound.Side=h.EdgeSide.esRight;for(d.RightBound.WindDelta=0;B.Next.OutIdx!=h.ClipperBase.Skip;)B.NextInLML=B.Next,
B.Bot.X!=B.Prev.Top.X&&this.ReverseHorizontal(B),B=B.Next;this.InsertLocalMinima(d);this.m_edges.push(G);return!0}this.m_edges.push(G);for(k=null;;){B=this.FindNextLocMin(B);if(B==k)break;else null==k&&(k=B);d=new h.LocalMinima;d.Next=null;d.Y=B.Bot.Y;B.Dx<B.Prev.Dx?(d.LeftBound=B.Prev,d.RightBound=B,G=!1):(d.LeftBound=B,d.RightBound=B.Prev,G=!0);d.LeftBound.Side=h.EdgeSide.esLeft;d.RightBound.Side=h.EdgeSide.esRight;d.LeftBound.WindDelta=e?d.LeftBound.Next==d.RightBound?-1:1:0;d.RightBound.WindDelta=
-d.LeftBound.WindDelta;B=this.ProcessBound(d.LeftBound,G);E=this.ProcessBound(d.RightBound,!G);d.LeftBound.OutIdx==h.ClipperBase.Skip?d.LeftBound=null:d.RightBound.OutIdx==h.ClipperBase.Skip&&(d.RightBound=null);this.InsertLocalMinima(d);G||(B=E)}return!0};h.ClipperBase.prototype.AddPaths=function(b,d,e){for(var l=!1,h=0,k=b.length;h<k;++h)this.AddPath(b[h],d,e)&&(l=!0);return l};h.ClipperBase.prototype.Pt2IsBetweenPt1AndPt3=function(b,d,e){return h.IntPoint.op_Equality(b,e)||h.IntPoint.op_Equality(b,
d)||h.IntPoint.op_Equality(e,d)?!1:b.X!=e.X?d.X>b.X==d.X<e.X:d.Y>b.Y==d.Y<e.Y};h.ClipperBase.prototype.RemoveEdge=function(b){b.Prev.Next=b.Next;b.Next.Prev=b.Prev;var d=b.Next;b.Prev=null;return d};h.ClipperBase.prototype.SetDx=function(b){b.Delta.X=b.Top.X-b.Bot.X;b.Delta.Y=b.Top.Y-b.Bot.Y;b.Dx=0===b.Delta.Y?h.ClipperBase.horizontal:b.Delta.X/b.Delta.Y};h.ClipperBase.prototype.InsertLocalMinima=function(b){if(null===this.m_MinimaList)this.m_MinimaList=b;else if(b.Y>=this.m_MinimaList.Y)b.Next=this.m_MinimaList,
this.m_MinimaList=b;else{for(var d=this.m_MinimaList;null!==d.Next&&b.Y<d.Next.Y;)d=d.Next;b.Next=d.Next;d.Next=b}};h.ClipperBase.prototype.PopLocalMinima=function(){null!==this.m_CurrentLM&&(this.m_CurrentLM=this.m_CurrentLM.Next)};h.ClipperBase.prototype.ReverseHorizontal=function(b){var d=b.Top.X;b.Top.X=b.Bot.X;b.Bot.X=d};h.ClipperBase.prototype.Reset=function(){this.m_CurrentLM=this.m_MinimaList;if(null!=this.m_CurrentLM)for(var b=this.m_MinimaList;null!=b;){var d=b.LeftBound;null!=d&&(d.Curr.X=
d.Bot.X,d.Curr.Y=d.Bot.Y,d.Side=h.EdgeSide.esLeft,d.OutIdx=h.ClipperBase.Unassigned);d=b.RightBound;null!=d&&(d.Curr.X=d.Bot.X,d.Curr.Y=d.Bot.Y,d.Side=h.EdgeSide.esRight,d.OutIdx=h.ClipperBase.Unassigned);b=b.Next}};h.Clipper=function(b){"undefined"==typeof b&&(b=0);this.m_PolyOuts=null;this.m_ClipType=h.ClipType.ctIntersection;this.m_IntersectNodeComparer=this.m_IntersectList=this.m_SortedEdges=this.m_ActiveEdges=this.m_Scanbeam=null;this.m_ExecuteLocked=!1;this.m_SubjFillType=this.m_ClipFillType=
h.PolyFillType.pftEvenOdd;this.m_GhostJoins=this.m_Joins=null;this.StrictlySimple=this.ReverseSolution=this.m_UsingPolyTree=!1;h.ClipperBase.call(this);this.m_SortedEdges=this.m_ActiveEdges=this.m_Scanbeam=null;this.m_IntersectList=[];this.m_IntersectNodeComparer=h.MyIntersectNodeSort.Compare;this.m_UsingPolyTree=this.m_ExecuteLocked=!1;this.m_PolyOuts=[];this.m_Joins=[];this.m_GhostJoins=[];this.ReverseSolution=0!==(1&b);this.StrictlySimple=0!==(2&b);this.PreserveCollinear=0!==(4&b)};h.Clipper.ioReverseSolution=
1;h.Clipper.ioStrictlySimple=2;h.Clipper.ioPreserveCollinear=4;h.Clipper.prototype.Clear=function(){0!==this.m_edges.length&&(this.DisposeAllPolyPts(),h.ClipperBase.prototype.Clear.call(this))};h.Clipper.prototype.DisposeScanbeamList=function(){for(;null!==this.m_Scanbeam;){var b=this.m_Scanbeam.Next;this.m_Scanbeam=null;this.m_Scanbeam=b}};h.Clipper.prototype.Reset=function(){h.ClipperBase.prototype.Reset.call(this);this.m_SortedEdges=this.m_ActiveEdges=this.m_Scanbeam=null;this.DisposeAllPolyPts();
for(var b=this.m_MinimaList;null!==b;)this.InsertScanbeam(b.Y),b=b.Next};h.Clipper.prototype.InsertScanbeam=function(b){if(null===this.m_Scanbeam)this.m_Scanbeam=new h.Scanbeam,this.m_Scanbeam.Next=null,this.m_Scanbeam.Y=b;else if(b>this.m_Scanbeam.Y){var d=new h.Scanbeam;d.Y=b;d.Next=this.m_Scanbeam;this.m_Scanbeam=d}else{for(var e=this.m_Scanbeam;null!==e.Next&&b<=e.Next.Y;)e=e.Next;b!=e.Y&&(d=new h.Scanbeam,d.Y=b,d.Next=e.Next,e.Next=d)}};h.Clipper.prototype.Execute=function(){var b=arguments,
d=b.length,e=b[1]instanceof h.PolyTree;if(4!=d||e){if(4==d&&e){e=b[0];d=b[1];l=b[2];b=b[3];if(this.m_ExecuteLocked)return!1;this.m_ExecuteLocked=!0;this.m_SubjFillType=l;this.m_ClipFillType=b;this.m_ClipType=e;this.m_UsingPolyTree=!0;(b=this.ExecuteInternal())&&this.BuildResult2(d);this.m_ExecuteLocked=!1;return b}if(2==d&&!e||2==d&&e)return e=b[0],d=b[1],this.Execute(e,d,h.PolyFillType.pftEvenOdd,h.PolyFillType.pftEvenOdd)}else{var e=b[0],d=b[1],l=b[2],b=b[3];if(this.m_ExecuteLocked)return!1;this.m_HasOpenPaths&&
h.Error("Error: PolyTree struct is need for open path clipping.");this.m_ExecuteLocked=!0;h.Clear(d);this.m_SubjFillType=l;this.m_ClipFillType=b;this.m_ClipType=e;this.m_UsingPolyTree=!1;(b=this.ExecuteInternal())&&this.BuildResult(d);this.m_ExecuteLocked=!1;return b}};h.Clipper.prototype.FixHoleLinkage=function(b){if(null!==b.FirstLeft&&(b.IsHole==b.FirstLeft.IsHole||null===b.FirstLeft.Pts)){for(var d=b.FirstLeft;null!==d&&(d.IsHole==b.IsHole||null===d.Pts);)d=d.FirstLeft;b.FirstLeft=d}};h.Clipper.prototype.ExecuteInternal=
function(){try{this.Reset();if(null===this.m_CurrentLM)return!1;var b=this.PopScanbeam();do{this.InsertLocalMinimaIntoAEL(b);h.Clear(this.m_GhostJoins);this.ProcessHorizontals(!1);if(null===this.m_Scanbeam)break;var d=this.PopScanbeam();if(!this.ProcessIntersections(b,d))return!1;this.ProcessEdgesAtTopOfScanbeam(d);b=d}while(null!==this.m_Scanbeam||null!==this.m_CurrentLM);for(var b=0,e=this.m_PolyOuts.length;b<e;b++){var l=this.m_PolyOuts[b];null===l.Pts||l.IsOpen||(l.IsHole^this.ReverseSolution)==
0<this.Area(l)&&this.ReversePolyPtLinks(l.Pts)}this.JoinCommonEdges();b=0;for(e=this.m_PolyOuts.length;b<e;b++)l=this.m_PolyOuts[b],null===l.Pts||l.IsOpen||this.FixupOutPolygon(l);this.StrictlySimple&&this.DoSimplePolygons();return!0}finally{h.Clear(this.m_Joins),h.Clear(this.m_GhostJoins)}};h.Clipper.prototype.PopScanbeam=function(){var b=this.m_Scanbeam.Y;this.m_Scanbeam=this.m_Scanbeam.Next;return b};h.Clipper.prototype.DisposeAllPolyPts=function(){for(var b=0,d=this.m_PolyOuts.length;b<d;++b)this.DisposeOutRec(b);
h.Clear(this.m_PolyOuts)};h.Clipper.prototype.DisposeOutRec=function(b){var d=this.m_PolyOuts[b];null!==d.Pts&&this.DisposeOutPts(d.Pts);this.m_PolyOuts[b]=null};h.Clipper.prototype.DisposeOutPts=function(b){if(null!==b)for(b.Prev.Next=null;null!==b;)b=b.Next};h.Clipper.prototype.AddJoin=function(b,d,e){var l=new h.Join;l.OutPt1=b;l.OutPt2=d;l.OffPt.X=e.X;l.OffPt.Y=e.Y;this.m_Joins.push(l)};h.Clipper.prototype.AddGhostJoin=function(b,d){var e=new h.Join;e.OutPt1=b;e.OffPt.X=d.X;e.OffPt.Y=d.Y;this.m_GhostJoins.push(e)};
h.Clipper.prototype.InsertLocalMinimaIntoAEL=function(b){for(;null!==this.m_CurrentLM&&this.m_CurrentLM.Y==b;){var d=this.m_CurrentLM.LeftBound,e=this.m_CurrentLM.RightBound;this.PopLocalMinima();var l=null;null===d?(this.InsertEdgeIntoAEL(e,null),this.SetWindingCount(e),this.IsContributing(e)&&(l=this.AddOutPt(e,e.Bot))):(null==e?(this.InsertEdgeIntoAEL(d,null),this.SetWindingCount(d),this.IsContributing(d)&&(l=this.AddOutPt(d,d.Bot))):(this.InsertEdgeIntoAEL(d,null),this.InsertEdgeIntoAEL(e,d),
this.SetWindingCount(d),e.WindCnt=d.WindCnt,e.WindCnt2=d.WindCnt2,this.IsContributing(d)&&(l=this.AddLocalMinPoly(d,e,d.Bot))),this.InsertScanbeam(d.Top.Y));null!=e&&(h.ClipperBase.IsHorizontal(e)?this.AddEdgeToSEL(e):this.InsertScanbeam(e.Top.Y));if(null!=d&&null!=e){if(null!==l&&h.ClipperBase.IsHorizontal(e)&&0<this.m_GhostJoins.length&&0!==e.WindDelta)for(var G=0,k=this.m_GhostJoins.length;G<k;G++){var w=this.m_GhostJoins[G];this.HorzSegmentsOverlap(w.OutPt1.Pt,w.OffPt,e.Bot,e.Top)&&this.AddJoin(w.OutPt1,
l,w.OffPt)}0<=d.OutIdx&&null!==d.PrevInAEL&&d.PrevInAEL.Curr.X==d.Bot.X&&0<=d.PrevInAEL.OutIdx&&h.ClipperBase.SlopesEqual(d.PrevInAEL,d,this.m_UseFullRange)&&0!==d.WindDelta&&0!==d.PrevInAEL.WindDelta&&(G=this.AddOutPt(d.PrevInAEL,d.Bot),this.AddJoin(l,G,d.Top));if(d.NextInAEL!=e&&(0<=e.OutIdx&&0<=e.PrevInAEL.OutIdx&&h.ClipperBase.SlopesEqual(e.PrevInAEL,e,this.m_UseFullRange)&&0!==e.WindDelta&&0!==e.PrevInAEL.WindDelta&&(G=this.AddOutPt(e.PrevInAEL,e.Bot),this.AddJoin(l,G,e.Top)),l=d.NextInAEL,null!==
l))for(;l!=e;)this.IntersectEdges(e,l,d.Curr,!1),l=l.NextInAEL}}};h.Clipper.prototype.InsertEdgeIntoAEL=function(b,d){if(null===this.m_ActiveEdges)b.PrevInAEL=null,b.NextInAEL=null,this.m_ActiveEdges=b;else if(null===d&&this.E2InsertsBeforeE1(this.m_ActiveEdges,b))b.PrevInAEL=null,b.NextInAEL=this.m_ActiveEdges,this.m_ActiveEdges=this.m_ActiveEdges.PrevInAEL=b;else{for(null===d&&(d=this.m_ActiveEdges);null!==d.NextInAEL&&!this.E2InsertsBeforeE1(d.NextInAEL,b);)d=d.NextInAEL;b.NextInAEL=d.NextInAEL;
null!==d.NextInAEL&&(d.NextInAEL.PrevInAEL=b);b.PrevInAEL=d;d.NextInAEL=b}};h.Clipper.prototype.E2InsertsBeforeE1=function(b,d){return d.Curr.X==b.Curr.X?d.Top.Y>b.Top.Y?d.Top.X<h.Clipper.TopX(b,d.Top.Y):b.Top.X>h.Clipper.TopX(d,b.Top.Y):d.Curr.X<b.Curr.X};h.Clipper.prototype.IsEvenOddFillType=function(b){return b.PolyTyp==h.PolyType.ptSubject?this.m_SubjFillType==h.PolyFillType.pftEvenOdd:this.m_ClipFillType==h.PolyFillType.pftEvenOdd};h.Clipper.prototype.IsEvenOddAltFillType=function(b){return b.PolyTyp==
h.PolyType.ptSubject?this.m_ClipFillType==h.PolyFillType.pftEvenOdd:this.m_SubjFillType==h.PolyFillType.pftEvenOdd};h.Clipper.prototype.IsContributing=function(b){var d,e;b.PolyTyp==h.PolyType.ptSubject?(d=this.m_SubjFillType,e=this.m_ClipFillType):(d=this.m_ClipFillType,e=this.m_SubjFillType);switch(d){case h.PolyFillType.pftEvenOdd:if(0===b.WindDelta&&1!=b.WindCnt)return!1;break;case h.PolyFillType.pftNonZero:if(1!=Math.abs(b.WindCnt))return!1;break;case h.PolyFillType.pftPositive:if(1!=b.WindCnt)return!1;
break;default:if(-1!=b.WindCnt)return!1}switch(this.m_ClipType){case h.ClipType.ctIntersection:switch(e){case h.PolyFillType.pftEvenOdd:case h.PolyFillType.pftNonZero:return 0!==b.WindCnt2;case h.PolyFillType.pftPositive:return 0<b.WindCnt2;default:return 0>b.WindCnt2}case h.ClipType.ctUnion:switch(e){case h.PolyFillType.pftEvenOdd:case h.PolyFillType.pftNonZero:return 0===b.WindCnt2;case h.PolyFillType.pftPositive:return 0>=b.WindCnt2;default:return 0<=b.WindCnt2}case h.ClipType.ctDifference:if(b.PolyTyp==
h.PolyType.ptSubject)switch(e){case h.PolyFillType.pftEvenOdd:case h.PolyFillType.pftNonZero:return 0===b.WindCnt2;case h.PolyFillType.pftPositive:return 0>=b.WindCnt2;default:return 0<=b.WindCnt2}else switch(e){case h.PolyFillType.pftEvenOdd:case h.PolyFillType.pftNonZero:return 0!==b.WindCnt2;case h.PolyFillType.pftPositive:return 0<b.WindCnt2;default:return 0>b.WindCnt2}case h.ClipType.ctXor:if(0===b.WindDelta)switch(e){case h.PolyFillType.pftEvenOdd:case h.PolyFillType.pftNonZero:return 0===b.WindCnt2;
case h.PolyFillType.pftPositive:return 0>=b.WindCnt2;default:return 0<=b.WindCnt2}}return!0};h.Clipper.prototype.SetWindingCount=function(b){for(var d=b.PrevInAEL;null!==d&&(d.PolyTyp!=b.PolyTyp||0===d.WindDelta);)d=d.PrevInAEL;if(null===d)b.WindCnt=0===b.WindDelta?1:b.WindDelta,b.WindCnt2=0,d=this.m_ActiveEdges;else{if(0===b.WindDelta&&this.m_ClipType!=h.ClipType.ctUnion)b.WindCnt=1;else if(this.IsEvenOddFillType(b))if(0===b.WindDelta){for(var e=!0,l=d.PrevInAEL;null!==l;)l.PolyTyp==d.PolyTyp&&0!==
l.WindDelta&&(e=!e),l=l.PrevInAEL;b.WindCnt=e?0:1}else b.WindCnt=b.WindDelta;else 0>d.WindCnt*d.WindDelta?1<Math.abs(d.WindCnt)?b.WindCnt=0>d.WindDelta*b.WindDelta?d.WindCnt:d.WindCnt+b.WindDelta:b.WindCnt=0===b.WindDelta?1:b.WindDelta:b.WindCnt=0===b.WindDelta?0>d.WindCnt?d.WindCnt-1:d.WindCnt+1:0>d.WindDelta*b.WindDelta?d.WindCnt:d.WindCnt+b.WindDelta;b.WindCnt2=d.WindCnt2;d=d.NextInAEL}if(this.IsEvenOddAltFillType(b))for(;d!=b;)0!==d.WindDelta&&(b.WindCnt2=0===b.WindCnt2?1:0),d=d.NextInAEL;else for(;d!=
b;)b.WindCnt2+=d.WindDelta,d=d.NextInAEL};h.Clipper.prototype.AddEdgeToSEL=function(b){null===this.m_SortedEdges?(this.m_SortedEdges=b,b.PrevInSEL=null,b.NextInSEL=null):(b.NextInSEL=this.m_SortedEdges,b.PrevInSEL=null,this.m_SortedEdges=this.m_SortedEdges.PrevInSEL=b)};h.Clipper.prototype.CopyAELToSEL=function(){var b=this.m_ActiveEdges;for(this.m_SortedEdges=b;null!==b;)b.PrevInSEL=b.PrevInAEL,b=b.NextInSEL=b.NextInAEL};h.Clipper.prototype.SwapPositionsInAEL=function(b,d){if(b.NextInAEL!=b.PrevInAEL&&
d.NextInAEL!=d.PrevInAEL){if(b.NextInAEL==d){var e=d.NextInAEL;null!==e&&(e.PrevInAEL=b);var l=b.PrevInAEL;null!==l&&(l.NextInAEL=d);d.PrevInAEL=l;d.NextInAEL=b;b.PrevInAEL=d;b.NextInAEL=e}else d.NextInAEL==b?(e=b.NextInAEL,null!==e&&(e.PrevInAEL=d),l=d.PrevInAEL,null!==l&&(l.NextInAEL=b),b.PrevInAEL=l,b.NextInAEL=d,d.PrevInAEL=b,d.NextInAEL=e):(e=b.NextInAEL,l=b.PrevInAEL,b.NextInAEL=d.NextInAEL,null!==b.NextInAEL&&(b.NextInAEL.PrevInAEL=b),b.PrevInAEL=d.PrevInAEL,null!==b.PrevInAEL&&(b.PrevInAEL.NextInAEL=
b),d.NextInAEL=e,null!==d.NextInAEL&&(d.NextInAEL.PrevInAEL=d),d.PrevInAEL=l,null!==d.PrevInAEL&&(d.PrevInAEL.NextInAEL=d));null===b.PrevInAEL?this.m_ActiveEdges=b:null===d.PrevInAEL&&(this.m_ActiveEdges=d)}};h.Clipper.prototype.SwapPositionsInSEL=function(b,d){if(null!==b.NextInSEL||null!==b.PrevInSEL)if(null!==d.NextInSEL||null!==d.PrevInSEL){if(b.NextInSEL==d){var e=d.NextInSEL;null!==e&&(e.PrevInSEL=b);var l=b.PrevInSEL;null!==l&&(l.NextInSEL=d);d.PrevInSEL=l;d.NextInSEL=b;b.PrevInSEL=d;b.NextInSEL=
e}else d.NextInSEL==b?(e=b.NextInSEL,null!==e&&(e.PrevInSEL=d),l=d.PrevInSEL,null!==l&&(l.NextInSEL=b),b.PrevInSEL=l,b.NextInSEL=d,d.PrevInSEL=b,d.NextInSEL=e):(e=b.NextInSEL,l=b.PrevInSEL,b.NextInSEL=d.NextInSEL,null!==b.NextInSEL&&(b.NextInSEL.PrevInSEL=b),b.PrevInSEL=d.PrevInSEL,null!==b.PrevInSEL&&(b.PrevInSEL.NextInSEL=b),d.NextInSEL=e,null!==d.NextInSEL&&(d.NextInSEL.PrevInSEL=d),d.PrevInSEL=l,null!==d.PrevInSEL&&(d.PrevInSEL.NextInSEL=d));null===b.PrevInSEL?this.m_SortedEdges=b:null===d.PrevInSEL&&
(this.m_SortedEdges=d)}};h.Clipper.prototype.AddLocalMaxPoly=function(b,d,e){this.AddOutPt(b,e);0==d.WindDelta&&this.AddOutPt(d,e);b.OutIdx==d.OutIdx?(b.OutIdx=-1,d.OutIdx=-1):b.OutIdx<d.OutIdx?this.AppendPolygon(b,d):this.AppendPolygon(d,b)};h.Clipper.prototype.AddLocalMinPoly=function(b,d,e){var l,G;h.ClipperBase.IsHorizontal(d)||b.Dx>d.Dx?(l=this.AddOutPt(b,e),d.OutIdx=b.OutIdx,b.Side=h.EdgeSide.esLeft,d.Side=h.EdgeSide.esRight,G=b,b=G.PrevInAEL==d?d.PrevInAEL:G.PrevInAEL):(l=this.AddOutPt(d,e),
b.OutIdx=d.OutIdx,b.Side=h.EdgeSide.esRight,d.Side=h.EdgeSide.esLeft,G=d,b=G.PrevInAEL==b?b.PrevInAEL:G.PrevInAEL);null!==b&&0<=b.OutIdx&&h.Clipper.TopX(b,e.Y)==h.Clipper.TopX(G,e.Y)&&h.ClipperBase.SlopesEqual(G,b,this.m_UseFullRange)&&0!==G.WindDelta&&0!==b.WindDelta&&(e=this.AddOutPt(b,e),this.AddJoin(l,e,G.Top));return l};h.Clipper.prototype.CreateOutRec=function(){var b=new h.OutRec;b.Idx=-1;b.IsHole=!1;b.IsOpen=!1;b.FirstLeft=null;b.Pts=null;b.BottomPt=null;b.PolyNode=null;this.m_PolyOuts.push(b);
b.Idx=this.m_PolyOuts.length-1;return b};h.Clipper.prototype.AddOutPt=function(b,d){var e=b.Side==h.EdgeSide.esLeft;if(0>b.OutIdx){var l=this.CreateOutRec();l.IsOpen=0===b.WindDelta;var G=new h.OutPt;l.Pts=G;G.Idx=l.Idx;G.Pt.X=d.X;G.Pt.Y=d.Y;G.Next=G;G.Prev=G;l.IsOpen||this.SetHoleState(b,l);b.OutIdx=l.Idx}else{var l=this.m_PolyOuts[b.OutIdx],k=l.Pts;if(e&&h.IntPoint.op_Equality(d,k.Pt))return k;if(!e&&h.IntPoint.op_Equality(d,k.Prev.Pt))return k.Prev;G=new h.OutPt;G.Idx=l.Idx;G.Pt.X=d.X;G.Pt.Y=d.Y;
G.Next=k;G.Prev=k.Prev;G.Prev.Next=G;k.Prev=G;e&&(l.Pts=G)}return G};h.Clipper.prototype.SwapPoints=function(b,d){var e=new h.IntPoint(b.Value);b.Value.X=d.Value.X;b.Value.Y=d.Value.Y;d.Value.X=e.X;d.Value.Y=e.Y};h.Clipper.prototype.HorzSegmentsOverlap=function(b,d,e,l){return b.X>e.X==b.X<l.X?!0:d.X>e.X==d.X<l.X?!0:e.X>b.X==e.X<d.X?!0:l.X>b.X==l.X<d.X?!0:b.X==e.X&&d.X==l.X?!0:b.X==l.X&&d.X==e.X?!0:!1};h.Clipper.prototype.InsertPolyPtBetween=function(b,d,e){var l=new h.OutPt;l.Pt.X=e.X;l.Pt.Y=e.Y;
d==b.Next?(b.Next=l,d.Prev=l,l.Next=d,l.Prev=b):(d.Next=l,b.Prev=l,l.Next=b,l.Prev=d);return l};h.Clipper.prototype.SetHoleState=function(b,d){for(var e=!1,l=b.PrevInAEL;null!==l;)0<=l.OutIdx&&0!=l.WindDelta&&(e=!e,null===d.FirstLeft&&(d.FirstLeft=this.m_PolyOuts[l.OutIdx])),l=l.PrevInAEL;e&&(d.IsHole=!0)};h.Clipper.prototype.GetDx=function(b,d){return b.Y==d.Y?h.ClipperBase.horizontal:(d.X-b.X)/(d.Y-b.Y)};h.Clipper.prototype.FirstIsBottomPt=function(b,d){for(var e=b.Prev;h.IntPoint.op_Equality(e.Pt,
b.Pt)&&e!=b;)e=e.Prev;for(var l=Math.abs(this.GetDx(b.Pt,e.Pt)),e=b.Next;h.IntPoint.op_Equality(e.Pt,b.Pt)&&e!=b;)e=e.Next;for(var G=Math.abs(this.GetDx(b.Pt,e.Pt)),e=d.Prev;h.IntPoint.op_Equality(e.Pt,d.Pt)&&e!=d;)e=e.Prev;for(var k=Math.abs(this.GetDx(d.Pt,e.Pt)),e=d.Next;h.IntPoint.op_Equality(e.Pt,d.Pt)&&e!=d;)e=e.Next;e=Math.abs(this.GetDx(d.Pt,e.Pt));return l>=k&&l>=e||G>=k&&G>=e};h.Clipper.prototype.GetBottomPt=function(b){for(var d=null,e=b.Next;e!=b;)e.Pt.Y>b.Pt.Y?(b=e,d=null):e.Pt.Y==b.Pt.Y&&
e.Pt.X<=b.Pt.X&&(e.Pt.X<b.Pt.X?(d=null,b=e):e.Next!=b&&e.Prev!=b&&(d=e)),e=e.Next;if(null!==d)for(;d!=e;)for(this.FirstIsBottomPt(e,d)||(b=d),d=d.Next;h.IntPoint.op_Inequality(d.Pt,b.Pt);)d=d.Next;return b};h.Clipper.prototype.GetLowermostRec=function(b,d){null===b.BottomPt&&(b.BottomPt=this.GetBottomPt(b.Pts));null===d.BottomPt&&(d.BottomPt=this.GetBottomPt(d.Pts));var e=b.BottomPt,l=d.BottomPt;return e.Pt.Y>l.Pt.Y?b:e.Pt.Y<l.Pt.Y?d:e.Pt.X<l.Pt.X?b:e.Pt.X>l.Pt.X?d:e.Next==e?d:l.Next==l?b:this.FirstIsBottomPt(e,
l)?b:d};h.Clipper.prototype.Param1RightOfParam2=function(b,d){do if(b=b.FirstLeft,b==d)return!0;while(null!==b);return!1};h.Clipper.prototype.GetOutRec=function(b){for(b=this.m_PolyOuts[b];b!=this.m_PolyOuts[b.Idx];)b=this.m_PolyOuts[b.Idx];return b};h.Clipper.prototype.AppendPolygon=function(b,d){var e=this.m_PolyOuts[b.OutIdx],l=this.m_PolyOuts[d.OutIdx],G;G=this.Param1RightOfParam2(e,l)?l:this.Param1RightOfParam2(l,e)?e:this.GetLowermostRec(e,l);var k=e.Pts,w=k.Prev,E=l.Pts,B=E.Prev;b.Side==h.EdgeSide.esLeft?
(d.Side==h.EdgeSide.esLeft?(this.ReversePolyPtLinks(E),E.Next=k,k.Prev=E,w.Next=B,B.Prev=w,e.Pts=B):(B.Next=k,k.Prev=B,E.Prev=w,w.Next=E,e.Pts=E),k=h.EdgeSide.esLeft):(d.Side==h.EdgeSide.esRight?(this.ReversePolyPtLinks(E),w.Next=B,B.Prev=w,E.Next=k,k.Prev=E):(w.Next=E,E.Prev=w,k.Prev=B,B.Next=k),k=h.EdgeSide.esRight);e.BottomPt=null;G==l&&(l.FirstLeft!=e&&(e.FirstLeft=l.FirstLeft),e.IsHole=l.IsHole);l.Pts=null;l.BottomPt=null;l.FirstLeft=e;G=b.OutIdx;w=d.OutIdx;b.OutIdx=-1;d.OutIdx=-1;for(E=this.m_ActiveEdges;null!==
E;){if(E.OutIdx==w){E.OutIdx=G;E.Side=k;break}E=E.NextInAEL}l.Idx=e.Idx};h.Clipper.prototype.ReversePolyPtLinks=function(b){if(null!==b){var d,e;d=b;do e=d.Next,d.Next=d.Prev,d=d.Prev=e;while(d!=b)}};h.Clipper.SwapSides=function(b,d){var e=b.Side;b.Side=d.Side;d.Side=e};h.Clipper.SwapPolyIndexes=function(b,d){var e=b.OutIdx;b.OutIdx=d.OutIdx;d.OutIdx=e};h.Clipper.prototype.IntersectEdges=function(b,d,e,l){var G=!l&&null===b.NextInLML&&b.Top.X==e.X&&b.Top.Y==e.Y;l=!l&&null===d.NextInLML&&d.Top.X==
e.X&&d.Top.Y==e.Y;var k=0<=b.OutIdx,w=0<=d.OutIdx;if(0===b.WindDelta||0===d.WindDelta)0===b.WindDelta&&0===d.WindDelta?(G||l)&&k&&w&&this.AddLocalMaxPoly(b,d,e):b.PolyTyp==d.PolyTyp&&b.WindDelta!=d.WindDelta&&this.m_ClipType==h.ClipType.ctUnion?0===b.WindDelta?w&&(this.AddOutPt(b,e),k&&(b.OutIdx=-1)):k&&(this.AddOutPt(d,e),w&&(d.OutIdx=-1)):b.PolyTyp!=d.PolyTyp&&(0!==b.WindDelta||1!=Math.abs(d.WindCnt)||this.m_ClipType==h.ClipType.ctUnion&&0!==d.WindCnt2?0!==d.WindDelta||1!=Math.abs(b.WindCnt)||this.m_ClipType==
h.ClipType.ctUnion&&0!==b.WindCnt2||(this.AddOutPt(d,e),w&&(d.OutIdx=-1)):(this.AddOutPt(b,e),k&&(b.OutIdx=-1))),G&&(0>b.OutIdx?this.DeleteFromAEL(b):h.Error("Error intersecting polylines")),l&&(0>d.OutIdx?this.DeleteFromAEL(d):h.Error("Error intersecting polylines"));else{if(b.PolyTyp==d.PolyTyp)if(this.IsEvenOddFillType(b)){var E=b.WindCnt;b.WindCnt=d.WindCnt;d.WindCnt=E}else b.WindCnt=0===b.WindCnt+d.WindDelta?-b.WindCnt:b.WindCnt+d.WindDelta,d.WindCnt=0===d.WindCnt-b.WindDelta?-d.WindCnt:d.WindCnt-
b.WindDelta;else this.IsEvenOddFillType(d)?b.WindCnt2=0===b.WindCnt2?1:0:b.WindCnt2+=d.WindDelta,this.IsEvenOddFillType(b)?d.WindCnt2=0===d.WindCnt2?1:0:d.WindCnt2-=b.WindDelta;var B,q,L;b.PolyTyp==h.PolyType.ptSubject?(B=this.m_SubjFillType,L=this.m_ClipFillType):(B=this.m_ClipFillType,L=this.m_SubjFillType);d.PolyTyp==h.PolyType.ptSubject?(q=this.m_SubjFillType,E=this.m_ClipFillType):(q=this.m_ClipFillType,E=this.m_SubjFillType);switch(B){case h.PolyFillType.pftPositive:B=b.WindCnt;break;case h.PolyFillType.pftNegative:B=
-b.WindCnt;break;default:B=Math.abs(b.WindCnt)}switch(q){case h.PolyFillType.pftPositive:q=d.WindCnt;break;case h.PolyFillType.pftNegative:q=-d.WindCnt;break;default:q=Math.abs(d.WindCnt)}if(k&&w)G||l||0!==B&&1!=B||0!==q&&1!=q||b.PolyTyp!=d.PolyTyp&&this.m_ClipType!=h.ClipType.ctXor?this.AddLocalMaxPoly(b,d,e):(this.AddOutPt(b,e),this.AddOutPt(d,e),h.Clipper.SwapSides(b,d),h.Clipper.SwapPolyIndexes(b,d));else if(k){if(0===q||1==q)this.AddOutPt(b,e),h.Clipper.SwapSides(b,d),h.Clipper.SwapPolyIndexes(b,
d)}else if(w){if(0===B||1==B)this.AddOutPt(d,e),h.Clipper.SwapSides(b,d),h.Clipper.SwapPolyIndexes(b,d)}else if(!(0!==B&&1!=B||0!==q&&1!=q||G||l)){switch(L){case h.PolyFillType.pftPositive:k=b.WindCnt2;break;case h.PolyFillType.pftNegative:k=-b.WindCnt2;break;default:k=Math.abs(b.WindCnt2)}switch(E){case h.PolyFillType.pftPositive:w=d.WindCnt2;break;case h.PolyFillType.pftNegative:w=-d.WindCnt2;break;default:w=Math.abs(d.WindCnt2)}if(b.PolyTyp!=d.PolyTyp)this.AddLocalMinPoly(b,d,e);else if(1==B&&
1==q)switch(this.m_ClipType){case h.ClipType.ctIntersection:0<k&&0<w&&this.AddLocalMinPoly(b,d,e);break;case h.ClipType.ctUnion:0>=k&&0>=w&&this.AddLocalMinPoly(b,d,e);break;case h.ClipType.ctDifference:(b.PolyTyp==h.PolyType.ptClip&&0<k&&0<w||b.PolyTyp==h.PolyType.ptSubject&&0>=k&&0>=w)&&this.AddLocalMinPoly(b,d,e);break;case h.ClipType.ctXor:this.AddLocalMinPoly(b,d,e)}else h.Clipper.SwapSides(b,d)}G!=l&&(G&&0<=b.OutIdx||l&&0<=d.OutIdx)&&(h.Clipper.SwapSides(b,d),h.Clipper.SwapPolyIndexes(b,d));
G&&this.DeleteFromAEL(b);l&&this.DeleteFromAEL(d)}};h.Clipper.prototype.DeleteFromAEL=function(b){var d=b.PrevInAEL,e=b.NextInAEL;if(null!==d||null!==e||b==this.m_ActiveEdges)null!==d?d.NextInAEL=e:this.m_ActiveEdges=e,null!==e&&(e.PrevInAEL=d),b.NextInAEL=null,b.PrevInAEL=null};h.Clipper.prototype.DeleteFromSEL=function(b){var d=b.PrevInSEL,e=b.NextInSEL;if(null!==d||null!==e||b==this.m_SortedEdges)null!==d?d.NextInSEL=e:this.m_SortedEdges=e,null!==e&&(e.PrevInSEL=d),b.NextInSEL=null,b.PrevInSEL=
null};h.Clipper.prototype.UpdateEdgeIntoAEL=function(b){null===b.Value.NextInLML&&h.Error("UpdateEdgeIntoAEL: invalid call");var d=b.Value.PrevInAEL,e=b.Value.NextInAEL;b.Value.NextInLML.OutIdx=b.Value.OutIdx;null!==d?d.NextInAEL=b.Value.NextInLML:this.m_ActiveEdges=b.Value.NextInLML;null!==e&&(e.PrevInAEL=b.Value.NextInLML);b.Value.NextInLML.Side=b.Value.Side;b.Value.NextInLML.WindDelta=b.Value.WindDelta;b.Value.NextInLML.WindCnt=b.Value.WindCnt;b.Value.NextInLML.WindCnt2=b.Value.WindCnt2;b.Value=
b.Value.NextInLML;b.Value.Curr.X=b.Value.Bot.X;b.Value.Curr.Y=b.Value.Bot.Y;b.Value.PrevInAEL=d;b.Value.NextInAEL=e;h.ClipperBase.IsHorizontal(b.Value)||this.InsertScanbeam(b.Value.Top.Y)};h.Clipper.prototype.ProcessHorizontals=function(b){for(var d=this.m_SortedEdges;null!==d;)this.DeleteFromSEL(d),this.ProcessHorizontal(d,b),d=this.m_SortedEdges};h.Clipper.prototype.GetHorzDirection=function(b,d,e,l){b.Bot.X<b.Top.X?(e.Value=b.Bot.X,l.Value=b.Top.X,d.Value=h.Direction.dLeftToRight):(e.Value=b.Top.X,
l.Value=b.Bot.X,d.Value=h.Direction.dRightToLeft)};h.Clipper.prototype.PrepareHorzJoins=function(b,d){var e=this.m_PolyOuts[b.OutIdx].Pts;b.Side!=h.EdgeSide.esLeft&&(e=e.Prev);for(var l=0,G=this.m_GhostJoins.length;l<G;++l){var k=this.m_GhostJoins[l];this.HorzSegmentsOverlap(k.OutPt1.Pt,k.OffPt,b.Bot,b.Top)&&this.AddJoin(k.OutPt1,e,k.OffPt)}d&&(h.IntPoint.op_Equality(e.Pt,b.Top)?this.AddGhostJoin(e,b.Bot):this.AddGhostJoin(e,b.Top))};h.Clipper.prototype.ProcessHorizontal=function(b,d){var e,l,k;(function(){e=
{Value:e};l={Value:l};k={Value:k};var d=this.GetHorzDirection(b,e,l,k);e=e.Value;l=l.Value;k=k.Value;return d}).call(this);for(var r=b,w=null;null!==r.NextInLML&&h.ClipperBase.IsHorizontal(r.NextInLML);)r=r.NextInLML;for(null===r.NextInLML&&(w=this.GetMaximaPair(r));;){for(var E=b==r,B=this.GetNextInAEL(b,e);null!==B&&!(B.Curr.X==b.Top.X&&null!==b.NextInLML&&B.Dx<b.NextInLML.Dx);){var q=this.GetNextInAEL(B,e);if(e==h.Direction.dLeftToRight&&B.Curr.X<=k||e==h.Direction.dRightToLeft&&B.Curr.X>=l){0<=
b.OutIdx&&0!=b.WindDelta&&this.PrepareHorzJoins(b,d);if(B==w&&E){e==h.Direction.dLeftToRight?this.IntersectEdges(b,B,B.Top,!1):this.IntersectEdges(B,b,B.Top,!1);0<=w.OutIdx&&h.Error("ProcessHorizontal error");return}if(e==h.Direction.dLeftToRight){var L=new h.IntPoint(B.Curr.X,b.Curr.Y);this.IntersectEdges(b,B,L,!0)}else L=new h.IntPoint(B.Curr.X,b.Curr.Y),this.IntersectEdges(B,b,L,!0);this.SwapPositionsInAEL(b,B)}else if(e==h.Direction.dLeftToRight&&B.Curr.X>=k||e==h.Direction.dRightToLeft&&B.Curr.X<=
l)break;B=q}0<=b.OutIdx&&0!==b.WindDelta&&this.PrepareHorzJoins(b,d);if(null!==b.NextInLML&&h.ClipperBase.IsHorizontal(b.NextInLML))(function(){b={Value:b};var d=this.UpdateEdgeIntoAEL(b);b=b.Value;return d}).call(this),0<=b.OutIdx&&this.AddOutPt(b,b.Bot),function(){e={Value:e};l={Value:l};k={Value:k};var d=this.GetHorzDirection(b,e,l,k);e=e.Value;l=l.Value;k=k.Value;return d}.call(this);else break}null!==b.NextInLML?0<=b.OutIdx?(r=this.AddOutPt(b,b.Top),function(){b={Value:b};var d=this.UpdateEdgeIntoAEL(b);
b=b.Value;return d}.call(this),0!==b.WindDelta&&(w=b.PrevInAEL,q=b.NextInAEL,null!==w&&w.Curr.X==b.Bot.X&&w.Curr.Y==b.Bot.Y&&0!==w.WindDelta&&0<=w.OutIdx&&w.Curr.Y>w.Top.Y&&h.ClipperBase.SlopesEqual(b,w,this.m_UseFullRange)?(q=this.AddOutPt(w,b.Bot),this.AddJoin(r,q,b.Top)):null!==q&&q.Curr.X==b.Bot.X&&q.Curr.Y==b.Bot.Y&&0!==q.WindDelta&&0<=q.OutIdx&&q.Curr.Y>q.Top.Y&&h.ClipperBase.SlopesEqual(b,q,this.m_UseFullRange)&&(q=this.AddOutPt(q,b.Bot),this.AddJoin(r,q,b.Top)))):function(){b={Value:b};var d=
this.UpdateEdgeIntoAEL(b);b=b.Value;return d}.call(this):null!==w?0<=w.OutIdx?(e==h.Direction.dLeftToRight?this.IntersectEdges(b,w,b.Top,!1):this.IntersectEdges(w,b,b.Top,!1),0<=w.OutIdx&&h.Error("ProcessHorizontal error")):(this.DeleteFromAEL(b),this.DeleteFromAEL(w)):(0<=b.OutIdx&&this.AddOutPt(b,b.Top),this.DeleteFromAEL(b))};h.Clipper.prototype.GetNextInAEL=function(b,d){return d==h.Direction.dLeftToRight?b.NextInAEL:b.PrevInAEL};h.Clipper.prototype.IsMinima=function(b){return null!==b&&b.Prev.NextInLML!=
b&&b.Next.NextInLML!=b};h.Clipper.prototype.IsMaxima=function(b,d){return null!==b&&b.Top.Y==d&&null===b.NextInLML};h.Clipper.prototype.IsIntermediate=function(b,d){return b.Top.Y==d&&null!==b.NextInLML};h.Clipper.prototype.GetMaximaPair=function(b){var d=null;h.IntPoint.op_Equality(b.Next.Top,b.Top)&&null===b.Next.NextInLML?d=b.Next:h.IntPoint.op_Equality(b.Prev.Top,b.Top)&&null===b.Prev.NextInLML&&(d=b.Prev);return null===d||-2!=d.OutIdx&&(d.NextInAEL!=d.PrevInAEL||h.ClipperBase.IsHorizontal(d))?
d:null};h.Clipper.prototype.ProcessIntersections=function(b,d){if(null==this.m_ActiveEdges)return!0;try{this.BuildIntersectList(b,d);if(0==this.m_IntersectList.length)return!0;if(1==this.m_IntersectList.length||this.FixupIntersectionOrder())this.ProcessIntersectList();else return!1}catch(e){this.m_SortedEdges=null,this.m_IntersectList.length=0,h.Error("ProcessIntersections error")}this.m_SortedEdges=null;return!0};h.Clipper.prototype.BuildIntersectList=function(b,d){if(null!==this.m_ActiveEdges){var e=
this.m_ActiveEdges;for(this.m_SortedEdges=e;null!==e;)e.PrevInSEL=e.PrevInAEL,e.NextInSEL=e.NextInAEL,e.Curr.X=h.Clipper.TopX(e,d),e=e.NextInAEL;for(var l=!0;l&&null!==this.m_SortedEdges;){l=!1;for(e=this.m_SortedEdges;null!==e.NextInSEL;){var k=e.NextInSEL,r=new h.IntPoint;e.Curr.X>k.Curr.X?(r={Value:r},l=this.IntersectPoint(e,k,r),r=r.Value,!l&&e.Curr.X>k.Curr.X+1&&h.Error("Intersection error"),r.Y>b&&(r.Y=b,Math.abs(e.Dx)>Math.abs(k.Dx)?r.X=h.Clipper.TopX(k,b):r.X=h.Clipper.TopX(e,b)),l=new h.IntersectNode,
l.Edge1=e,l.Edge2=k,l.Pt.X=r.X,l.Pt.Y=r.Y,this.m_IntersectList.push(l),this.SwapPositionsInSEL(e,k),l=!0):e=k}if(null!==e.PrevInSEL)e.PrevInSEL.NextInSEL=null;else break}this.m_SortedEdges=null}};h.Clipper.prototype.EdgesAdjacent=function(b){return b.Edge1.NextInSEL==b.Edge2||b.Edge1.PrevInSEL==b.Edge2};h.Clipper.IntersectNodeSort=function(b,d){return d.Pt.Y-b.Pt.Y};h.Clipper.prototype.FixupIntersectionOrder=function(){this.m_IntersectList.sort(this.m_IntersectNodeComparer);this.CopyAELToSEL();for(var b=
this.m_IntersectList.length,d=0;d<b;d++){if(!this.EdgesAdjacent(this.m_IntersectList[d])){for(var e=d+1;e<b&&!this.EdgesAdjacent(this.m_IntersectList[e]);)e++;if(e==b)return!1;var l=this.m_IntersectList[d];this.m_IntersectList[d]=this.m_IntersectList[e];this.m_IntersectList[e]=l}this.SwapPositionsInSEL(this.m_IntersectList[d].Edge1,this.m_IntersectList[d].Edge2)}return!0};h.Clipper.prototype.ProcessIntersectList=function(){for(var b=0,d=this.m_IntersectList.length;b<d;b++){var e=this.m_IntersectList[b];
this.IntersectEdges(e.Edge1,e.Edge2,e.Pt,!0);this.SwapPositionsInAEL(e.Edge1,e.Edge2)}this.m_IntersectList.length=0};Za=function(b){return 0>b?Math.ceil(b-.5):Math.round(b)};La=function(b){return 0>b?Math.ceil(b-.5):Math.floor(b+.5)};$a=function(b){return 0>b?-Math.round(Math.abs(b)):Math.round(b)};jb=function(b){if(0>b)return b-=.5,-2147483648>b?Math.ceil(b):b|0;b+=.5;return 2147483647<b?Math.floor(b):b|0};h.Clipper.Round=S?Za:Ib?$a:Wb?jb:La;h.Clipper.TopX=function(b,d){return d==b.Top.Y?b.Top.X:
b.Bot.X+h.Clipper.Round(b.Dx*(d-b.Bot.Y))};h.Clipper.prototype.IntersectPoint=function(b,d,e){e.Value=new h.IntPoint;var l,k;if(h.ClipperBase.SlopesEqual(b,d,this.m_UseFullRange)||b.Dx==d.Dx)return d.Bot.Y>b.Bot.Y?(e.Value.X=d.Bot.X,e.Value.Y=d.Bot.Y):(e.Value.X=b.Bot.X,e.Value.Y=b.Bot.Y),!1;if(0===b.Delta.X)e.Value.X=b.Bot.X,h.ClipperBase.IsHorizontal(d)?e.Value.Y=d.Bot.Y:(k=d.Bot.Y-d.Bot.X/d.Dx,e.Value.Y=h.Clipper.Round(e.Value.X/d.Dx+k));else if(0===d.Delta.X)e.Value.X=d.Bot.X,h.ClipperBase.IsHorizontal(b)?
e.Value.Y=b.Bot.Y:(l=b.Bot.Y-b.Bot.X/b.Dx,e.Value.Y=h.Clipper.Round(e.Value.X/b.Dx+l));else{l=b.Bot.X-b.Bot.Y*b.Dx;k=d.Bot.X-d.Bot.Y*d.Dx;var r=(k-l)/(b.Dx-d.Dx);e.Value.Y=h.Clipper.Round(r);Math.abs(b.Dx)<Math.abs(d.Dx)?e.Value.X=h.Clipper.Round(b.Dx*r+l):e.Value.X=h.Clipper.Round(d.Dx*r+k)}if(e.Value.Y<b.Top.Y||e.Value.Y<d.Top.Y){if(b.Top.Y>d.Top.Y)return e.Value.Y=b.Top.Y,e.Value.X=h.Clipper.TopX(d,b.Top.Y),e.Value.X<b.Top.X;e.Value.Y=d.Top.Y;Math.abs(b.Dx)<Math.abs(d.Dx)?e.Value.X=h.Clipper.TopX(b,
e.Value.Y):e.Value.X=h.Clipper.TopX(d,e.Value.Y)}return!0};h.Clipper.prototype.ProcessEdgesAtTopOfScanbeam=function(b){for(var d=this.m_ActiveEdges;null!==d;){var e=this.IsMaxima(d,b);e&&(e=this.GetMaximaPair(d),e=null===e||!h.ClipperBase.IsHorizontal(e));if(e){var l=d.PrevInAEL;this.DoMaxima(d);d=null===l?this.m_ActiveEdges:l.NextInAEL}else this.IsIntermediate(d,b)&&h.ClipperBase.IsHorizontal(d.NextInLML)?(function(){d={Value:d};var b=this.UpdateEdgeIntoAEL(d);d=d.Value;return b}.call(this),0<=d.OutIdx&&
this.AddOutPt(d,d.Bot),this.AddEdgeToSEL(d)):(d.Curr.X=h.Clipper.TopX(d,b),d.Curr.Y=b),this.StrictlySimple&&(l=d.PrevInAEL,0<=d.OutIdx&&0!==d.WindDelta&&null!==l&&0<=l.OutIdx&&l.Curr.X==d.Curr.X&&0!==l.WindDelta&&(e=this.AddOutPt(l,d.Curr),l=this.AddOutPt(d,d.Curr),this.AddJoin(e,l,d.Curr))),d=d.NextInAEL}this.ProcessHorizontals(!0);for(d=this.m_ActiveEdges;null!==d;){if(this.IsIntermediate(d,b)){e=null;0<=d.OutIdx&&(e=this.AddOutPt(d,d.Top));(function(){d={Value:d};var b=this.UpdateEdgeIntoAEL(d);
d=d.Value;return b}).call(this);var l=d.PrevInAEL,k=d.NextInAEL;null!==l&&l.Curr.X==d.Bot.X&&l.Curr.Y==d.Bot.Y&&null!==e&&0<=l.OutIdx&&l.Curr.Y>l.Top.Y&&h.ClipperBase.SlopesEqual(d,l,this.m_UseFullRange)&&0!==d.WindDelta&&0!==l.WindDelta?(l=this.AddOutPt(l,d.Bot),this.AddJoin(e,l,d.Top)):null!==k&&k.Curr.X==d.Bot.X&&k.Curr.Y==d.Bot.Y&&null!==e&&0<=k.OutIdx&&k.Curr.Y>k.Top.Y&&h.ClipperBase.SlopesEqual(d,k,this.m_UseFullRange)&&0!==d.WindDelta&&0!==k.WindDelta&&(l=this.AddOutPt(k,d.Bot),this.AddJoin(e,
l,d.Top))}d=d.NextInAEL}};h.Clipper.prototype.DoMaxima=function(b){var d=this.GetMaximaPair(b);if(null===d)0<=b.OutIdx&&this.AddOutPt(b,b.Top),this.DeleteFromAEL(b);else{for(var e=b.NextInAEL;null!==e&&e!=d;)this.IntersectEdges(b,e,b.Top,!0),this.SwapPositionsInAEL(b,e),e=b.NextInAEL;-1==b.OutIdx&&-1==d.OutIdx?(this.DeleteFromAEL(b),this.DeleteFromAEL(d)):0<=b.OutIdx&&0<=d.OutIdx?this.IntersectEdges(b,d,b.Top,!1):0===b.WindDelta?(0<=b.OutIdx&&(this.AddOutPt(b,b.Top),b.OutIdx=-1),this.DeleteFromAEL(b),
0<=d.OutIdx&&(this.AddOutPt(d,b.Top),d.OutIdx=-1),this.DeleteFromAEL(d)):h.Error("DoMaxima error")}};h.Clipper.ReversePaths=function(b){for(var d=0,e=b.length;d<e;d++)b[d].reverse()};h.Clipper.Orientation=function(b){return 0<=h.Clipper.Area(b)};h.Clipper.prototype.PointCount=function(b){if(null===b)return 0;var d=0,e=b;do d++,e=e.Next;while(e!=b);return d};h.Clipper.prototype.BuildResult=function(b){h.Clear(b);for(var d=0,e=this.m_PolyOuts.length;d<e;d++){var l=this.m_PolyOuts[d];if(null!==l.Pts){var l=
l.Pts.Prev,k=this.PointCount(l);if(!(2>k)){for(var r=Array(k),w=0;w<k;w++)r[w]=l.Pt,l=l.Prev;b.push(r)}}}};h.Clipper.prototype.BuildResult2=function(b){b.Clear();for(var d=0,e=this.m_PolyOuts.length;d<e;d++){var l=this.m_PolyOuts[d],k=this.PointCount(l.Pts);if(!(l.IsOpen&&2>k||!l.IsOpen&&3>k)){this.FixHoleLinkage(l);var r=new h.PolyNode;b.m_AllPolys.push(r);l.PolyNode=r;r.m_polygon.length=k;for(var l=l.Pts.Prev,w=0;w<k;w++)r.m_polygon[w]=l.Pt,l=l.Prev}}d=0;for(e=this.m_PolyOuts.length;d<e;d++)l=this.m_PolyOuts[d],
null!==l.PolyNode&&(l.IsOpen?(l.PolyNode.IsOpen=!0,b.AddChild(l.PolyNode)):null!==l.FirstLeft&&null!=l.FirstLeft.PolyNode?l.FirstLeft.PolyNode.AddChild(l.PolyNode):b.AddChild(l.PolyNode))};h.Clipper.prototype.FixupOutPolygon=function(b){var d=null;b.BottomPt=null;for(var e=b.Pts;;){if(e.Prev==e||e.Prev==e.Next){this.DisposeOutPts(e);b.Pts=null;return}if(h.IntPoint.op_Equality(e.Pt,e.Next.Pt)||h.IntPoint.op_Equality(e.Pt,e.Prev.Pt)||h.ClipperBase.SlopesEqual(e.Prev.Pt,e.Pt,e.Next.Pt,this.m_UseFullRange)&&
(!this.PreserveCollinear||!this.Pt2IsBetweenPt1AndPt3(e.Prev.Pt,e.Pt,e.Next.Pt)))d=null,e.Prev.Next=e.Next,e=e.Next.Prev=e.Prev;else if(e==d)break;else null===d&&(d=e),e=e.Next}b.Pts=e};h.Clipper.prototype.DupOutPt=function(b,d){var e=new h.OutPt;e.Pt.X=b.Pt.X;e.Pt.Y=b.Pt.Y;e.Idx=b.Idx;d?(e.Next=b.Next,e.Prev=b,b.Next.Prev=e,b.Next=e):(e.Prev=b.Prev,e.Next=b,b.Prev.Next=e,b.Prev=e);return e};h.Clipper.prototype.GetOverlap=function(b,d,e,l,h,k){b<d?e<l?(h.Value=Math.max(b,e),k.Value=Math.min(d,l)):
(h.Value=Math.max(b,l),k.Value=Math.min(d,e)):e<l?(h.Value=Math.max(d,e),k.Value=Math.min(b,l)):(h.Value=Math.max(d,l),k.Value=Math.min(b,e));return h.Value<k.Value};h.Clipper.prototype.JoinHorz=function(b,d,e,l,k,r){var w=b.Pt.X>d.Pt.X?h.Direction.dRightToLeft:h.Direction.dLeftToRight;l=e.Pt.X>l.Pt.X?h.Direction.dRightToLeft:h.Direction.dLeftToRight;if(w==l)return!1;if(w==h.Direction.dLeftToRight){for(;b.Next.Pt.X<=k.X&&b.Next.Pt.X>=b.Pt.X&&b.Next.Pt.Y==k.Y;)b=b.Next;r&&b.Pt.X!=k.X&&(b=b.Next);d=
this.DupOutPt(b,!r);h.IntPoint.op_Inequality(d.Pt,k)&&(b=d,b.Pt.X=k.X,b.Pt.Y=k.Y,d=this.DupOutPt(b,!r))}else{for(;b.Next.Pt.X>=k.X&&b.Next.Pt.X<=b.Pt.X&&b.Next.Pt.Y==k.Y;)b=b.Next;r||b.Pt.X==k.X||(b=b.Next);d=this.DupOutPt(b,r);h.IntPoint.op_Inequality(d.Pt,k)&&(b=d,b.Pt.X=k.X,b.Pt.Y=k.Y,d=this.DupOutPt(b,r))}if(l==h.Direction.dLeftToRight){for(;e.Next.Pt.X<=k.X&&e.Next.Pt.X>=e.Pt.X&&e.Next.Pt.Y==k.Y;)e=e.Next;r&&e.Pt.X!=k.X&&(e=e.Next);l=this.DupOutPt(e,!r);h.IntPoint.op_Inequality(l.Pt,k)&&(e=l,
e.Pt.X=k.X,e.Pt.Y=k.Y,l=this.DupOutPt(e,!r))}else{for(;e.Next.Pt.X>=k.X&&e.Next.Pt.X<=e.Pt.X&&e.Next.Pt.Y==k.Y;)e=e.Next;r||e.Pt.X==k.X||(e=e.Next);l=this.DupOutPt(e,r);h.IntPoint.op_Inequality(l.Pt,k)&&(e=l,e.Pt.X=k.X,e.Pt.Y=k.Y,l=this.DupOutPt(e,r))}w==h.Direction.dLeftToRight==r?(b.Prev=e,e.Next=b,d.Next=l,l.Prev=d):(b.Next=e,e.Prev=b,d.Prev=l,l.Next=d);return!0};h.Clipper.prototype.JoinPoints=function(b,d,e){var l=b.OutPt1,k;new h.OutPt;var r=b.OutPt2,w;new h.OutPt;if((w=b.OutPt1.Pt.Y==b.OffPt.Y)&&
h.IntPoint.op_Equality(b.OffPt,b.OutPt1.Pt)&&h.IntPoint.op_Equality(b.OffPt,b.OutPt2.Pt)){for(k=b.OutPt1.Next;k!=l&&h.IntPoint.op_Equality(k.Pt,b.OffPt);)k=k.Next;k=k.Pt.Y>b.OffPt.Y;for(w=b.OutPt2.Next;w!=r&&h.IntPoint.op_Equality(w.Pt,b.OffPt);)w=w.Next;if(k==w.Pt.Y>b.OffPt.Y)return!1;k?(k=this.DupOutPt(l,!1),w=this.DupOutPt(r,!0),l.Prev=r,r.Next=l,k.Next=w,w.Prev=k):(k=this.DupOutPt(l,!0),w=this.DupOutPt(r,!1),l.Next=r,r.Prev=l,k.Prev=w,w.Next=k);b.OutPt1=l;b.OutPt2=k;return!0}if(w){for(k=l;l.Prev.Pt.Y==
l.Pt.Y&&l.Prev!=k&&l.Prev!=r;)l=l.Prev;for(;k.Next.Pt.Y==k.Pt.Y&&k.Next!=l&&k.Next!=r;)k=k.Next;if(k.Next==l||k.Next==r)return!1;for(w=r;r.Prev.Pt.Y==r.Pt.Y&&r.Prev!=w&&r.Prev!=k;)r=r.Prev;for(;w.Next.Pt.Y==w.Pt.Y&&w.Next!=r&&w.Next!=l;)w=w.Next;if(w.Next==r||w.Next==l)return!1;var q,B;q={Value:q};B={Value:B};d=this.GetOverlap(l.Pt.X,k.Pt.X,r.Pt.X,w.Pt.X,q,B);q=q.Value;B=B.Value;if(!d)return!1;d=new h.IntPoint;l.Pt.X>=q&&l.Pt.X<=B?(d.X=l.Pt.X,d.Y=l.Pt.Y,e=l.Pt.X>k.Pt.X):r.Pt.X>=q&&r.Pt.X<=B?(d.X=
r.Pt.X,d.Y=r.Pt.Y,e=r.Pt.X>w.Pt.X):k.Pt.X>=q&&k.Pt.X<=B?(d.X=k.Pt.X,d.Y=k.Pt.Y,e=k.Pt.X>l.Pt.X):(d.X=w.Pt.X,d.Y=w.Pt.Y,e=w.Pt.X>r.Pt.X);b.OutPt1=l;b.OutPt2=r;return this.JoinHorz(l,k,r,w,d,e)}for(k=l.Next;h.IntPoint.op_Equality(k.Pt,l.Pt)&&k!=l;)k=k.Next;if(q=k.Pt.Y>l.Pt.Y||!h.ClipperBase.SlopesEqual(l.Pt,k.Pt,b.OffPt,this.m_UseFullRange)){for(k=l.Prev;h.IntPoint.op_Equality(k.Pt,l.Pt)&&k!=l;)k=k.Prev;if(k.Pt.Y>l.Pt.Y||!h.ClipperBase.SlopesEqual(l.Pt,k.Pt,b.OffPt,this.m_UseFullRange))return!1}for(w=
r.Next;h.IntPoint.op_Equality(w.Pt,r.Pt)&&w!=r;)w=w.Next;if(B=w.Pt.Y>r.Pt.Y||!h.ClipperBase.SlopesEqual(r.Pt,w.Pt,b.OffPt,this.m_UseFullRange)){for(w=r.Prev;h.IntPoint.op_Equality(w.Pt,r.Pt)&&w!=r;)w=w.Prev;if(w.Pt.Y>r.Pt.Y||!h.ClipperBase.SlopesEqual(r.Pt,w.Pt,b.OffPt,this.m_UseFullRange))return!1}if(k==l||w==r||k==w||d==e&&q==B)return!1;q?(k=this.DupOutPt(l,!1),w=this.DupOutPt(r,!0),l.Prev=r,r.Next=l,k.Next=w,w.Prev=k):(k=this.DupOutPt(l,!0),w=this.DupOutPt(r,!1),l.Next=r,r.Prev=l,k.Prev=w,w.Next=
k);b.OutPt1=l;b.OutPt2=k;return!0};h.Clipper.GetBounds=function(b){for(var d=0,e=b.length;d<e&&0==b[d].length;)d++;if(d==e)return new h.IntRect(0,0,0,0);var l=new h.IntRect;l.left=b[d][0].X;l.right=l.left;l.top=b[d][0].Y;for(l.bottom=l.top;d<e;d++)for(var k=0,r=b[d].length;k<r;k++)b[d][k].X<l.left?l.left=b[d][k].X:b[d][k].X>l.right&&(l.right=b[d][k].X),b[d][k].Y<l.top?l.top=b[d][k].Y:b[d][k].Y>l.bottom&&(l.bottom=b[d][k].Y);return l};h.Clipper.prototype.GetBounds2=function(b){var d=b,e=new h.IntRect;
e.left=b.Pt.X;e.right=b.Pt.X;e.top=b.Pt.Y;e.bottom=b.Pt.Y;for(b=b.Next;b!=d;)b.Pt.X<e.left&&(e.left=b.Pt.X),b.Pt.X>e.right&&(e.right=b.Pt.X),b.Pt.Y<e.top&&(e.top=b.Pt.Y),b.Pt.Y>e.bottom&&(e.bottom=b.Pt.Y),b=b.Next;return e};h.ClipperBase.prototype.PointInPolygon=h.Clipper.prototype.PointInPolygon=function(){var b=arguments,d=b.length;if(2==d){for(var d=b[0],e=b[1],b=0,l=e;;){var h=e.Pt.X,k=e.Pt.Y,w=e.Next.Pt.X,E=e.Next.Pt.Y;if(E==d.Y&&(w==d.X||k==d.Y&&w>d.X==h<d.X))return-1;if(k<d.Y!=E<d.Y)if(h>=
d.X)if(w>d.X)b=1-b;else{h=(h-d.X)*(E-d.Y)-(w-d.X)*(k-d.Y);if(0==h)return-1;0<h==E>k&&(b=1-b)}else if(w>d.X){h=(h-d.X)*(E-d.Y)-(w-d.X)*(k-d.Y);if(0==h)return-1;0<h==E>k&&(b=1-b)}e=e.Next;if(l==e)break}return b}if(3==d){d=b[0];e=b[1];l=b[2];k=e;b=!1;if(l){do k.Pt.Y>d.Y!=k.Prev.Pt.Y>d.Y&&q.op_LessThan(new q(d.X-k.Pt.X),q.op_Division(q.Int128Mul(k.Prev.Pt.X-k.Pt.X,d.Y-k.Pt.Y),new q(k.Prev.Pt.Y-k.Pt.Y)))&&(b=!b),k=k.Next;while(k!=e)}else{do k.Pt.Y>d.Y!=k.Prev.Pt.Y>d.Y&&d.X-k.Pt.X<(k.Prev.Pt.X-k.Pt.X)*
(d.Y-k.Pt.Y)/(k.Prev.Pt.Y-k.Pt.Y)&&(b=!b),k=k.Next;while(k!=e)}return b}};h.Clipper.prototype.Poly2ContainsPoly1=function(b,d){var e=b;do{var l=this.PointInPolygon(e.Pt,d);if(0<=l)return 0!=l;e=e.Next}while(e!=b);return!0};h.Clipper.prototype.FixupFirstLefts1=function(b,d){for(var e=0,l=this.m_PolyOuts.length;e<l;e++){var h=this.m_PolyOuts[e];null!==h.Pts&&h.FirstLeft==b&&this.Poly2ContainsPoly1(h.Pts,d.Pts)&&(h.FirstLeft=d)}};h.Clipper.prototype.FixupFirstLefts2=function(b,d){for(var e=0,l=this.m_PolyOuts,
h=l.length,k=l[e];e<h;e++,k=l[e])k.FirstLeft==b&&(k.FirstLeft=d)};h.Clipper.ParseFirstLeft=function(b){for(;null!=b&&null==b.Pts;)b=b.FirstLeft;return b};h.Clipper.prototype.JoinCommonEdges=function(){for(var b=0,d=this.m_Joins.length;b<d;b++){var e=this.m_Joins[b],l=this.GetOutRec(e.OutPt1.Idx),k=this.GetOutRec(e.OutPt2.Idx);if(null!=l.Pts&&null!=k.Pts){var r;r=l==k?l:this.Param1RightOfParam2(l,k)?k:this.Param1RightOfParam2(k,l)?l:this.GetLowermostRec(l,k);if(this.JoinPoints(e,l,k))if(l==k){l.Pts=
e.OutPt1;l.BottomPt=null;k=this.CreateOutRec();k.Pts=e.OutPt2;this.UpdateOutPtIdxs(k);if(this.m_UsingPolyTree){r=0;for(var w=this.m_PolyOuts.length;r<w-1;r++){var q=this.m_PolyOuts[r];null!=q.Pts&&h.Clipper.ParseFirstLeft(q.FirstLeft)==l&&q.IsHole!=l.IsHole&&this.Poly2ContainsPoly1(q.Pts,e.OutPt2)&&(q.FirstLeft=k)}}this.Poly2ContainsPoly1(k.Pts,l.Pts)?(k.IsHole=!l.IsHole,k.FirstLeft=l,this.m_UsingPolyTree&&this.FixupFirstLefts2(k,l),(k.IsHole^this.ReverseSolution)==0<this.Area(k)&&this.ReversePolyPtLinks(k.Pts)):
this.Poly2ContainsPoly1(l.Pts,k.Pts)?(k.IsHole=l.IsHole,l.IsHole=!k.IsHole,k.FirstLeft=l.FirstLeft,l.FirstLeft=k,this.m_UsingPolyTree&&this.FixupFirstLefts2(l,k),(l.IsHole^this.ReverseSolution)==0<this.Area(l)&&this.ReversePolyPtLinks(l.Pts)):(k.IsHole=l.IsHole,k.FirstLeft=l.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(l,k))}else k.Pts=null,k.BottomPt=null,k.Idx=l.Idx,l.IsHole=r.IsHole,r==k&&(l.FirstLeft=k.FirstLeft),k.FirstLeft=l,this.m_UsingPolyTree&&this.FixupFirstLefts2(k,l)}}};h.Clipper.prototype.UpdateOutPtIdxs=
function(b){var d=b.Pts;do d.Idx=b.Idx,d=d.Prev;while(d!=b.Pts)};h.Clipper.prototype.DoSimplePolygons=function(){for(var b=0;b<this.m_PolyOuts.length;){var d=this.m_PolyOuts[b++],e=d.Pts;if(null!==e){do{for(var l=e.Next;l!=d.Pts;){if(h.IntPoint.op_Equality(e.Pt,l.Pt)&&l.Next!=e&&l.Prev!=e){var k=e.Prev,r=l.Prev;e.Prev=r;r.Next=e;l.Prev=k;k.Next=l;d.Pts=e;k=this.CreateOutRec();k.Pts=l;this.UpdateOutPtIdxs(k);this.Poly2ContainsPoly1(k.Pts,d.Pts)?(k.IsHole=!d.IsHole,k.FirstLeft=d):this.Poly2ContainsPoly1(d.Pts,
k.Pts)?(k.IsHole=d.IsHole,d.IsHole=!k.IsHole,k.FirstLeft=d.FirstLeft,d.FirstLeft=k):(k.IsHole=d.IsHole,k.FirstLeft=d.FirstLeft);l=e}l=l.Next}e=e.Next}while(e!=d.Pts)}}};h.Clipper.Area=function(b){var d=b.length;if(3>d)return 0;for(var e=0,h=0,k=d-1;h<d;++h)e+=(b[k].X+b[h].X)*(b[k].Y-b[h].Y),k=h;return.5*-e};h.Clipper.prototype.Area=function(b){var d=b.Pts;if(null==d)return 0;var e=0;do e+=(d.Prev.Pt.X+d.Pt.X)*(d.Prev.Pt.Y-d.Pt.Y),d=d.Next;while(d!=b.Pts);return.5*e};h.Clipper.SimplifyPolygon=function(b,
d){var e=[],l=new h.Clipper(0);l.StrictlySimple=!0;l.AddPath(b,h.PolyType.ptSubject,!0);l.Execute(h.ClipType.ctUnion,e,d,d);return e};h.Clipper.SimplifyPolygons=function(b,d){"undefined"==typeof d&&(d=h.PolyFillType.pftEvenOdd);var e=[],l=new h.Clipper(0);l.StrictlySimple=!0;l.AddPaths(b,h.PolyType.ptSubject,!0);l.Execute(h.ClipType.ctUnion,e,d,d);return e};h.Clipper.DistanceSqrd=function(b,d){var e=b.X-d.X,h=b.Y-d.Y;return e*e+h*h};h.Clipper.DistanceFromLineSqrd=function(b,d,e){var h=d.Y-e.Y;e=e.X-
d.X;d=h*d.X+e*d.Y;d=h*b.X+e*b.Y-d;return d*d/(h*h+e*e)};h.Clipper.SlopesNearCollinear=function(b,d,e,l){return h.Clipper.DistanceFromLineSqrd(d,b,e)<l};h.Clipper.PointsAreClose=function(b,d,e){var h=b.X-d.X;b=b.Y-d.Y;return h*h+b*b<=e};h.Clipper.ExcludeOp=function(b){var d=b.Prev;d.Next=b.Next;b.Next.Prev=d;d.Idx=0;return d};h.Clipper.CleanPolygon=function(b,d){"undefined"==typeof d&&(d=1.415);var e=b.length;if(0==e)return[];for(var l=Array(e),k=0;k<e;++k)l[k]=new h.OutPt;for(k=0;k<e;++k)l[k].Pt=
b[k],l[k].Next=l[(k+1)%e],l[k].Next.Prev=l[k],l[k].Idx=0;k=d*d;for(l=l[0];0==l.Idx&&l.Next!=l.Prev;)h.Clipper.PointsAreClose(l.Pt,l.Prev.Pt,k)?(l=h.Clipper.ExcludeOp(l),e--):h.Clipper.PointsAreClose(l.Prev.Pt,l.Next.Pt,k)?(h.Clipper.ExcludeOp(l.Next),l=h.Clipper.ExcludeOp(l),e-=2):h.Clipper.SlopesNearCollinear(l.Prev.Pt,l.Pt,l.Next.Pt,k)?(l=h.Clipper.ExcludeOp(l),e--):(l.Idx=1,l=l.Next);3>e&&(e=0);for(var r=Array(e),k=0;k<e;++k)r[k]=new h.IntPoint(l.Pt),l=l.Next;return r};h.Clipper.CleanPolygons=
function(b,d){for(var e=Array(b.length),l=0,k=b.length;l<k;l++)e[l]=h.Clipper.CleanPolygon(b[l],d);return e};h.Clipper.Minkowski=function(b,d,e,l){var k=l?1:0,r=b.length,w=d.length;l=[];if(e)for(e=0;e<w;e++){for(var q=Array(r),B=0,L=b.length,H=b[B];B<L;B++,H=b[B])q[B]=new h.IntPoint(d[e].X+H.X,d[e].Y+H.Y);l.push(q)}else for(e=0;e<w;e++){q=Array(r);B=0;L=b.length;for(H=b[B];B<L;B++,H=b[B])q[B]=new h.IntPoint(d[e].X-H.X,d[e].Y-H.Y);l.push(q)}b=[];for(e=0;e<=w-2+k;e++)for(B=0;B<=r-1;B++)d=[],d.push(l[e%
w][B%r]),d.push(l[(e+1)%w][B%r]),d.push(l[(e+1)%w][(B+1)%r]),d.push(l[e%w][(B+1)%r]),h.Clipper.Orientation(d)||d.reverse(),b.push(d);k=new h.Clipper(0);k.AddPaths(b,h.PolyType.ptSubject,!0);k.Execute(h.ClipType.ctUnion,l,h.PolyFillType.pftNonZero,h.PolyFillType.pftNonZero);return l};h.Clipper.MinkowskiSum=function(b,d,e){return h.Clipper.Minkowski(b,d,!0,e)};h.Clipper.MinkowskiDiff=function(b,d,e){return h.Clipper.Minkowski(b,d,!1,e)};h.Clipper.PolyTreeToPaths=function(b){var d=[];h.Clipper.AddPolyNodeToPaths(b,
h.Clipper.NodeType.ntAny,d);return d};h.Clipper.AddPolyNodeToPaths=function(b,d,e){var l=!0;switch(d){case h.Clipper.NodeType.ntOpen:return;case h.Clipper.NodeType.ntClosed:l=!b.IsOpen}0<b.m_polygon.length&&l&&e.push(b.m_polygon);l=0;b=b.Childs();for(var k=b.length,r=b[l];l<k;l++,r=b[l])h.Clipper.AddPolyNodeToPaths(r,d,e)};h.Clipper.OpenPathsFromPolyTree=function(b){for(var d=new h.Paths,e=0,l=b.ChildCount();e<l;e++)b.Childs()[e].IsOpen&&d.push(b.Childs()[e].m_polygon);return d};h.Clipper.ClosedPathsFromPolyTree=
function(b){var d=new h.Paths;h.Clipper.AddPolyNodeToPaths(b,h.Clipper.NodeType.ntClosed,d);return d};Yb(h.Clipper,h.ClipperBase);h.Clipper.NodeType={ntAny:0,ntOpen:1,ntClosed:2};h.ClipperOffset=function(b,d){"undefined"==typeof b&&(b=2);"undefined"==typeof d&&(d=h.ClipperOffset.def_arc_tolerance);this.m_destPolys=new h.Paths;this.m_srcPoly=new h.Path;this.m_destPoly=new h.Path;this.m_normals=[];this.m_StepsPerRad=this.m_miterLim=this.m_cos=this.m_sin=this.m_sinA=this.m_delta=0;this.m_lowest=new h.IntPoint;
this.m_polyNodes=new h.PolyNode;this.MiterLimit=b;this.ArcTolerance=d;this.m_lowest.X=-1};h.ClipperOffset.two_pi=6.28318530717959;h.ClipperOffset.def_arc_tolerance=.25;h.ClipperOffset.prototype.Clear=function(){h.Clear(this.m_polyNodes.Childs());this.m_lowest.X=-1};h.ClipperOffset.Round=h.Clipper.Round;h.ClipperOffset.prototype.AddPath=function(b,d,e){var l=b.length-1;if(!(0>l)){var k=new h.PolyNode;k.m_jointype=d;k.m_endtype=e;if(e==h.EndType.etClosedLine||e==h.EndType.etClosedPolygon)for(;0<l&&
h.IntPoint.op_Equality(b[0],b[l]);)l--;k.m_polygon.push(b[0]);var r=0;d=0;for(var w=1;w<=l;w++)h.IntPoint.op_Inequality(k.m_polygon[r],b[w])&&(r++,k.m_polygon.push(b[w]),b[w].Y>k.m_polygon[d].Y||b[w].Y==k.m_polygon[d].Y&&b[w].X<k.m_polygon[d].X)&&(d=r);if(!(e==h.EndType.etClosedPolygon&&2>r||e!=h.EndType.etClosedPolygon&&0>r)&&(this.m_polyNodes.AddChild(k),e==h.EndType.etClosedPolygon))if(0>this.m_lowest.X)this.m_lowest=new h.IntPoint(0,d);else if(b=this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon[this.m_lowest.Y],
k.m_polygon[d].Y>b.Y||k.m_polygon[d].Y==b.Y&&k.m_polygon[d].X<b.X)this.m_lowest=new h.IntPoint(this.m_polyNodes.ChildCount()-1,d)}};h.ClipperOffset.prototype.AddPaths=function(b,d,e){for(var h=0,k=b.length;h<k;h++)this.AddPath(b[h],d,e)};h.ClipperOffset.prototype.FixOrientations=function(){if(0<=this.m_lowest.X&&!h.Clipper.Orientation(this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon))for(var b=0;b<this.m_polyNodes.ChildCount();b++){var d=this.m_polyNodes.Childs()[b];(d.m_endtype==h.EndType.etClosedPolygon||
d.m_endtype==h.EndType.etClosedLine&&h.Clipper.Orientation(d.m_polygon))&&d.m_polygon.reverse()}else for(b=0;b<this.m_polyNodes.ChildCount();b++)d=this.m_polyNodes.Childs()[b],d.m_endtype!=h.EndType.etClosedLine||h.Clipper.Orientation(d.m_polygon)||d.m_polygon.reverse()};h.ClipperOffset.GetUnitNormal=function(b,d){var e=d.X-b.X,l=d.Y-b.Y;if(0==e&&0==l)return new h.DoublePoint(0,0);var k=1/Math.sqrt(e*e+l*l);return new h.DoublePoint(l*k,-(e*k))};h.ClipperOffset.prototype.DoOffset=function(b){this.m_destPolys=
[];this.m_delta=b;if(h.ClipperBase.near_zero(b))for(var d=0;d<this.m_polyNodes.ChildCount();d++){var e=this.m_polyNodes.Childs()[d];e.m_endtype==h.EndType.etClosedPolygon&&this.m_destPolys.push(e.m_polygon)}else{this.m_miterLim=2<this.MiterLimit?2/(this.MiterLimit*this.MiterLimit):.5;var d=0>=this.ArcTolerance?h.ClipperOffset.def_arc_tolerance:this.ArcTolerance>Math.abs(b)*h.ClipperOffset.def_arc_tolerance?Math.abs(b)*h.ClipperOffset.def_arc_tolerance:this.ArcTolerance,l=3.14159265358979/Math.acos(1-
d/Math.abs(b));this.m_sin=Math.sin(h.ClipperOffset.two_pi/l);this.m_cos=Math.cos(h.ClipperOffset.two_pi/l);this.m_StepsPerRad=l/h.ClipperOffset.two_pi;0>b&&(this.m_sin=-this.m_sin);for(d=0;d<this.m_polyNodes.ChildCount();d++){e=this.m_polyNodes.Childs()[d];this.m_srcPoly=e.m_polygon;var k=this.m_srcPoly.length;if(!(0==k||0>=b&&(3>k||e.m_endtype!=h.EndType.etClosedPolygon))){this.m_destPoly=[];if(1==k)if(e.m_jointype==h.JoinType.jtRound)for(var e=1,k=0,r=1;r<=l;r++){this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[0].X+
e*b),h.ClipperOffset.Round(this.m_srcPoly[0].Y+k*b)));var w=e,e=e*this.m_cos-this.m_sin*k,k=w*this.m_sin+k*this.m_cos}else for(k=e=-1,r=0;4>r;++r)this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[0].X+e*b),h.ClipperOffset.Round(this.m_srcPoly[0].Y+k*b))),0>e?e=1:0>k?k=1:e=-1;else{for(r=this.m_normals.length=0;r<k-1;r++)this.m_normals.push(h.ClipperOffset.GetUnitNormal(this.m_srcPoly[r],this.m_srcPoly[r+1]));e.m_endtype==h.EndType.etClosedLine||e.m_endtype==h.EndType.etClosedPolygon?
this.m_normals.push(h.ClipperOffset.GetUnitNormal(this.m_srcPoly[k-1],this.m_srcPoly[0])):this.m_normals.push(new h.DoublePoint(this.m_normals[k-2]));if(e.m_endtype==h.EndType.etClosedPolygon)for(w=k-1,r=0;r<k;r++)w=this.OffsetPoint(r,w,e.m_jointype);else if(e.m_endtype==h.EndType.etClosedLine){w=k-1;for(r=0;r<k;r++)w=this.OffsetPoint(r,w,e.m_jointype);this.m_destPolys.push(this.m_destPoly);this.m_destPoly=[];w=this.m_normals[k-1];for(r=k-1;0<r;r--)this.m_normals[r]=new h.DoublePoint(-this.m_normals[r-
1].X,-this.m_normals[r-1].Y);this.m_normals[0]=new h.DoublePoint(-w.X,-w.Y);w=0;for(r=k-1;0<=r;r--)w=this.OffsetPoint(r,w,e.m_jointype)}else{w=0;for(r=1;r<k-1;++r)w=this.OffsetPoint(r,w,e.m_jointype);e.m_endtype==h.EndType.etOpenButt?(r=k-1,w=new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[r].X+this.m_normals[r].X*b),h.ClipperOffset.Round(this.m_srcPoly[r].Y+this.m_normals[r].Y*b)),this.m_destPoly.push(w),w=new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[r].X-this.m_normals[r].X*b),h.ClipperOffset.Round(this.m_srcPoly[r].Y-
this.m_normals[r].Y*b)),this.m_destPoly.push(w)):(r=k-1,w=k-2,this.m_sinA=0,this.m_normals[r]=new h.DoublePoint(-this.m_normals[r].X,-this.m_normals[r].Y),e.m_endtype==h.EndType.etOpenSquare?this.DoSquare(r,w):this.DoRound(r,w));for(r=k-1;0<r;r--)this.m_normals[r]=new h.DoublePoint(-this.m_normals[r-1].X,-this.m_normals[r-1].Y);this.m_normals[0]=new h.DoublePoint(-this.m_normals[1].X,-this.m_normals[1].Y);w=k-1;for(r=w-1;0<r;--r)w=this.OffsetPoint(r,w,e.m_jointype);e.m_endtype==h.EndType.etOpenButt?
(w=new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[0].X-this.m_normals[0].X*b),h.ClipperOffset.Round(this.m_srcPoly[0].Y-this.m_normals[0].Y*b)),this.m_destPoly.push(w),w=new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[0].X+this.m_normals[0].X*b),h.ClipperOffset.Round(this.m_srcPoly[0].Y+this.m_normals[0].Y*b)),this.m_destPoly.push(w)):(this.m_sinA=0,e.m_endtype==h.EndType.etOpenSquare?this.DoSquare(0,1):this.DoRound(0,1))}}this.m_destPolys.push(this.m_destPoly)}}}};h.ClipperOffset.prototype.Execute=
function(){var b=arguments;if(b[0]instanceof h.PolyTree)if(d=b[0],e=b[1],d.Clear(),this.FixOrientations(),this.DoOffset(e),b=new h.Clipper(0),b.AddPaths(this.m_destPolys,h.PolyType.ptSubject,!0),0<e)b.Execute(h.ClipType.ctUnion,d,h.PolyFillType.pftPositive,h.PolyFillType.pftPositive);else if(e=h.Clipper.GetBounds(this.m_destPolys),l=new h.Path,l.push(new h.IntPoint(e.left-10,e.bottom+10)),l.push(new h.IntPoint(e.right+10,e.bottom+10)),l.push(new h.IntPoint(e.right+10,e.top-10)),l.push(new h.IntPoint(e.left-
10,e.top-10)),b.AddPath(l,h.PolyType.ptSubject,!0),b.ReverseSolution=!0,b.Execute(h.ClipType.ctUnion,d,h.PolyFillType.pftNegative,h.PolyFillType.pftNegative),1==d.ChildCount()&&0<d.Childs()[0].ChildCount())for(b=d.Childs()[0],d.Childs()[0]=b.Childs()[0],e=1;e<b.ChildCount();e++)d.AddChild(b.Childs()[e]);else d.Clear();else{var d=b[0],e=b[1];h.Clear(d);this.FixOrientations();this.DoOffset(e);b=new h.Clipper(0);b.AddPaths(this.m_destPolys,h.PolyType.ptSubject,!0);if(0<e)b.Execute(h.ClipType.ctUnion,
d,h.PolyFillType.pftPositive,h.PolyFillType.pftPositive);else{var e=h.Clipper.GetBounds(this.m_destPolys),l=new h.Path;l.push(new h.IntPoint(e.left-10,e.bottom+10));l.push(new h.IntPoint(e.right+10,e.bottom+10));l.push(new h.IntPoint(e.right+10,e.top-10));l.push(new h.IntPoint(e.left-10,e.top-10));b.AddPath(l,h.PolyType.ptSubject,!0);b.ReverseSolution=!0;b.Execute(h.ClipType.ctUnion,d,h.PolyFillType.pftNegative,h.PolyFillType.pftNegative);0<d.length&&d.splice(0,1)}}};h.ClipperOffset.prototype.OffsetPoint=
function(b,d,e){this.m_sinA=this.m_normals[d].X*this.m_normals[b].Y-this.m_normals[b].X*this.m_normals[d].Y;if(5E-5>this.m_sinA&&-5E-5<this.m_sinA)return d;1<this.m_sinA?this.m_sinA=1:-1>this.m_sinA&&(this.m_sinA=-1);if(0>this.m_sinA*this.m_delta)this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_normals[d].X*this.m_delta),h.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_normals[d].Y*this.m_delta))),this.m_destPoly.push(new h.IntPoint(this.m_srcPoly[b])),this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+
this.m_normals[b].X*this.m_delta),h.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_normals[b].Y*this.m_delta)));else switch(e){case h.JoinType.jtMiter:e=1+(this.m_normals[b].X*this.m_normals[d].X+this.m_normals[b].Y*this.m_normals[d].Y);e>=this.m_miterLim?this.DoMiter(b,d,e):this.DoSquare(b,d);break;case h.JoinType.jtSquare:this.DoSquare(b,d);break;case h.JoinType.jtRound:this.DoRound(b,d)}return b};h.ClipperOffset.prototype.DoSquare=function(b,d){var e=Math.tan(Math.atan2(this.m_sinA,this.m_normals[d].X*
this.m_normals[b].X+this.m_normals[d].Y*this.m_normals[b].Y)/4);this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_delta*(this.m_normals[d].X-this.m_normals[d].Y*e)),h.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_delta*(this.m_normals[d].Y+this.m_normals[d].X*e))));this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_delta*(this.m_normals[b].X+this.m_normals[b].Y*e)),h.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_delta*(this.m_normals[b].Y-
this.m_normals[b].X*e))))};h.ClipperOffset.prototype.DoMiter=function(b,d,e){e=this.m_delta/e;this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+(this.m_normals[d].X+this.m_normals[b].X)*e),h.ClipperOffset.Round(this.m_srcPoly[b].Y+(this.m_normals[d].Y+this.m_normals[b].Y)*e)))};h.ClipperOffset.prototype.DoRound=function(b,d){for(var e=Math.atan2(this.m_sinA,this.m_normals[d].X*this.m_normals[b].X+this.m_normals[d].Y*this.m_normals[b].Y),e=h.Cast_Int32(h.ClipperOffset.Round(this.m_StepsPerRad*
Math.abs(e))),l=this.m_normals[d].X,k=this.m_normals[d].Y,r,w=0;w<e;++w)this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+l*this.m_delta),h.ClipperOffset.Round(this.m_srcPoly[b].Y+k*this.m_delta))),r=l,l=l*this.m_cos-this.m_sin*k,k=r*this.m_sin+k*this.m_cos;this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_normals[b].X*this.m_delta),h.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_normals[b].Y*this.m_delta)))};h.Error=function(b){try{throw Error(b);
}catch(d){alert(d.message)}};h.JS={};h.JS.AreaOfPolygon=function(b,d){d||(d=1);return h.Clipper.Area(b)/(d*d)};h.JS.AreaOfPolygons=function(b,d){d||(d=1);for(var e=0,l=0;l<b.length;l++)e+=h.Clipper.Area(b[l]);return e/(d*d)};h.JS.BoundsOfPath=function(b,d){return h.JS.BoundsOfPaths([b],d)};h.JS.BoundsOfPaths=function(b,d){d||(d=1);var e=h.Clipper.GetBounds(b);e.left/=d;e.bottom/=d;e.right/=d;e.top/=d;return e};h.JS.Clean=function(b,d){if(!(b instanceof Array))return[];var e=b[0]instanceof Array;b=
h.JS.Clone(b);if("number"!=typeof d||null===d)return h.Error("Delta is not a number in Clean()."),b;if(0===b.length||1==b.length&&0===b[0].length||0>d)return b;e||(b=[b]);for(var l=b.length,k,r,w,q,B,L,H,K=[],fa=0;fa<l;fa++)if(r=b[fa],k=r.length,0!==k)if(3>k)w=r,K.push(w);else{w=r;q=d*d;B=r[0];for(H=L=1;H<k;H++)(r[H].X-B.X)*(r[H].X-B.X)+(r[H].Y-B.Y)*(r[H].Y-B.Y)<=q||(w[L]=r[H],B=r[H],L++);B=r[L-1];(r[0].X-B.X)*(r[0].X-B.X)+(r[0].Y-B.Y)*(r[0].Y-B.Y)<=q&&L--;L<k&&w.splice(L,k-L);w.length&&K.push(w)}!e&&
K.length?K=K[0]:e||0!==K.length?e&&0===K.length&&(K=[[]]):K=[];return K};h.JS.Clone=function(b){if(!(b instanceof Array)||0===b.length)return[];if(1==b.length&&0===b[0].length)return[[]];var d=b[0]instanceof Array;d||(b=[b]);var e=b.length,h,k,r,w,q=Array(e);for(k=0;k<e;k++){h=b[k].length;w=Array(h);for(r=0;r<h;r++)w[r]={X:b[k][r].X,Y:b[k][r].Y};q[k]=w}d||(q=q[0]);return q};h.JS.Lighten=function(b,d){if(!(b instanceof Array))return[];if("number"!=typeof d||null===d)return h.Error("Tolerance is not a number in Lighten()."),
h.JS.Clone(b);if(0===b.length||1==b.length&&0===b[0].length||0>d)return h.JS.Clone(b);b[0]instanceof Array||(b=[b]);var e,l,k,r,w,q,B,L,H,K,fa,Q,Y,S,X,da=b.length,la=d*d,ka=[];for(e=0;e<da;e++)if(k=b[e],q=k.length,0!=q){for(r=0;1E6>r;r++){w=[];q=k.length;k[q-1].X!=k[0].X||k[q-1].Y!=k[0].Y?(fa=1,k.push({X:k[0].X,Y:k[0].Y}),q=k.length):fa=0;K=[];for(l=0;l<q-2;l++){B=k[l];H=k[l+1];L=k[l+2];S=B.X;X=B.Y;B=L.X-S;Q=L.Y-X;if(0!==B||0!==Q)Y=((H.X-S)*B+(H.Y-X)*Q)/(B*B+Q*Q),1<Y?(S=L.X,X=L.Y):0<Y&&(S+=B*Y,X+=
Q*Y);B=H.X-S;Q=H.Y-X;L=B*B+Q*Q;L<=la&&(K[l+1]=1,l++)}w.push({X:k[0].X,Y:k[0].Y});for(l=1;l<q-1;l++)K[l]||w.push({X:k[l].X,Y:k[l].Y});w.push({X:k[q-1].X,Y:k[q-1].Y});fa&&k.pop();if(K.length)k=w;else break}q=w.length;w[q-1].X==w[0].X&&w[q-1].Y==w[0].Y&&w.pop();2<w.length&&ka.push(w)}b[0]instanceof Array||(ka=ka[0]);"undefined"==typeof ka&&(ka=[[]]);return ka};h.JS.PerimeterOfPath=function(b,d,e){if("undefined"==typeof b)return 0;var h=Math.sqrt,k=0,r,w,q,B,L=b.length;if(2>L)return 0;for(d&&(b[L]=b[0],
L++);--L;)r=b[L],q=r.X,r=r.Y,w=b[L-1],B=w.X,w=w.Y,k+=h((q-B)*(q-B)+(r-w)*(r-w));d&&b.pop();return k/e};h.JS.PerimeterOfPaths=function(b,d,e){e||(e=1);for(var k=0,q=0;q<b.length;q++)k+=h.JS.PerimeterOfPath(b[q],d,e);return k};h.JS.ScaleDownPath=function(b,d){var e,h;d||(d=1);for(e=b.length;e--;)h=b[e],h.X/=d,h.Y/=d};h.JS.ScaleDownPaths=function(b,d){var e,h,k;d||(d=1);for(e=b.length;e--;)for(h=b[e].length;h--;)k=b[e][h],k.X/=d,k.Y/=d};h.JS.ScaleUpPath=function(b,d){var e,h,k=Math.round;d||(d=1);for(e=
b.length;e--;)h=b[e],h.X=k(h.X*d),h.Y=k(h.Y*d)};h.JS.ScaleUpPaths=function(b,d){var e,h,k,r=Math.round;d||(d=1);for(e=b.length;e--;)for(h=b[e].length;h--;)k=b[e][h],k.X=r(k.X*d),k.Y=r(k.Y*d)};h.ExPolygons=function(){return[]};h.ExPolygon=function(){this.holes=this.outer=null};h.JS.AddOuterPolyNodeToExPolygons=function(b,d){var e=new h.ExPolygon;e.outer=b.Contour();var k=b.Childs(),q=k.length;e.holes=Array(q);var r,w,L,B,H;for(w=0;w<q;w++)for(r=k[w],e.holes[w]=r.Contour(),L=0,B=r.Childs(),H=B.length;L<
H;L++)r=B[L],h.JS.AddOuterPolyNodeToExPolygons(r,d);d.push(e)};h.JS.ExPolygonsToPaths=function(b){var d,e,k,q,r=new h.Paths;d=0;for(k=b.length;d<k;d++)for(r.push(b[d].outer),e=0,q=b[d].holes.length;e<q;e++)r.push(b[d].holes[e]);return r};h.JS.PolyTreeToExPolygons=function(b){var d=new h.ExPolygons,e,k,q;e=0;k=b.Childs();for(q=k.length;e<q;e++)b=k[e],h.JS.AddOuterPolyNodeToExPolygons(b,d);return d}})();
var CindyJS=function(){function q(k){if(0===oa)return console.error("Waiting for "+k+" after we finished waiting."),function(){};0>oa&&(oa=0);++oa;return function(){--oa;0>oa&&console.error("Wait count mismatch: "+k);if(0===oa)for(var q=0,H=ib.length;q<H;)ib[q++].startup()}}function H(k){var q=H.newInstance(k);0>=oa?q.startup():!1!==k.autostart&&ib.push(q);return q}var oa=-1,ib=[];"undefined"===typeof document||"undefined"===typeof window||"undefined"===typeof document.addEventListener||"undefined"!==
typeof window.cindyDontWait&&!0===window.cindyDontWait||document.addEventListener("DOMContentLoaded",q("DOMContentLoaded"));var Ia=null,Ja=null,Ba={};H.getBaseDir=function(){if(null!==Ia)return Ia;for(var k=document.getElementsByTagName("script"),q=0;q<k.length;++q){var H=k[q],Q=H.src;if(Q){var X=/Cindy\.js$/.exec(Q);if(X)return Ia=Q.substr(0,X.index),console.log("Will load extensions from "+Ia),Ja=H,Ia}}console.error("Could not find <script> tag for Cindy.js");return Ia=Ja=!1};H.addNewScript=function(k,
q){q||console.error.bind(console);var Y=H.getBaseDir();if(!1===Y)return!1;var Q=document.createElement("script");Q.src=Y+k;var Y=Ja.nextSibling,X=Ja.parentElement;Y?X.insertBefore(Q,Y):X.appendChild(Q);return Q};H.loadScript=function(k,q,Y,Q){if(window[k])return Y(),!0;Q||(Q=console.error.bind(console));var X=Ba[k];if(!X){X=H.addNewScript(q,Q);if(!1===X)return Q("Can't load additional components."),!1;Ba[k]=X}X.addEventListener("load",Y);X.addEventListener("error",Q);return null};H._autoLoadingPlugin=
{};H.autoLoadPlugin=function(k,q,Y){if(H._pluginRegistry[k])return Y(),!0;var Q=H._autoLoadingPlugin[k];if(!Q){q||(q=k+"-plugin.js");Q=H._autoLoadingPlugin[k]=[];k=H.addNewScript(q);if(!1===k)return!1;k.addEventListener("error",console.error.bind(console))}Q.push(Y);return null};var k={ctype:"undefined"};H.waitFor=q;H._pluginRegistry={};H.instances=[];H.registerPlugin=function(k,q,Y){if(1!==k)return console.error("Plugin API version "+k+" not supported"),!1;H._pluginRegistry[q]=Y;(H._autoLoadingPlugin[q]||
[]).forEach(function(k){k()})};var Ra=0;H.dumpState=function(k){k=H.instances[k||0].saveState();console.log(JSON.stringify(k))};H.debugState=function(k){H.instances.map(function(k){var q=k.config,q=JSON.parse(JSON.stringify(q)),L=k.saveState();console.log(JSON.stringify(L));for(var H in L)q[H]=L[H];k.shutdown();return q}).forEach(function(k){H(k)})};H.newInstance=function(q){function H(){ga.width=W=ga.clientWidth;ga.height=V=ga.clientHeight;z.setTransform(1,0,0,1,0,0);x.setMat(25,0,0,25,250.5,250.5);
if(yb)for(var a=0;a<yb.length;a++){var g=yb[a],c=Object.keys(g)[0];"scale"===c&&(Jb=g.scale,x[c](g.scale));if("translate"===c)x[c](g.translate[0],g.translate[1]);"scaleAndOrigin"===c&&(Jb=g[c][0]/25,x[c].apply(null,g[c]));"visibleRect"===c&&(x[c].apply(null,g[c]),Jb=x.drawingstate.initialmatrix.a/25)}x.createnewbackup();x.greset();a=1;"undefined"!==typeof window&&window.devicePixelRatio&&(a=window.devicePixelRatio);g=z.webkitBackingStorePixelRatio||z.mozBackingStorePixelRatio||z.msBackingStorePixelRatio||
z.oBackingStorePixelRatio||z.backingStorePixelRatio||1;a!==g&&(a/=g,ga.width=W*a,ga.height=V*a,z.scale(a,a))}function Y(a){var g;if("canvas"!==a.tagName.toLowerCase())for(g=a,ga=document.createElement("canvas");g.firstChild;)g.removeChild(g.firstChild);else{ga=a;g=document.createElement("div");var c=null,p=null;Array.prototype.slice.call(ga.attributes).forEach(function(a){"width"===a.name?c=a.value:"height"===a.name?p=a.value:g.setAttributeNodeNS(ga.removeAttributeNode(a))});null===c||g.style.width||
(g.style.width=c+"px");null===p||g.style.height||(g.style.height=p+"px");ga.parentNode.replaceChild(g,ga)}g.classList.add("CindyJS-widget");a=ga.style;a.position="absolute";a.border="none";a.margin=a.padding=a.left=a.top="0px";a.width=a.height="100%";a="static";window.getComputedStyle&&(a=window.getComputedStyle(g).getPropertyValue("position"),a=String(a||"static"));"static"===a&&(g.style.position="relative");g.appendChild(ga);return ga}function Q(){$b=!0;if(0===Kb){if(q.exclusive)for(b=va.instances.length;0<
b;)va.instances[--b].shutdown();void 0!==q.csconsole&&(ha=q.csconsole);ha=null===ha?new Ya:!0===ha?new jb:"string"===typeof ha?new pb(ha):"object"===typeof ha&&"function"===typeof ha.appendChild?new pb(ha):new Ya;sa=[100,100];var a=null;yb=q.transform;if(q.ports&&0<q.ports.length){b=q.ports[0];(a=b.element)||(a=document.getElementById(b.id));var a=Y(a),g=a.parentNode.style;"window"===b.fill?(g.width="100vw",g.height="100vh"):"parent"===b.fill?(g.width="100%",g.height="100%"):b.width&&b.height&&(g.width=
b.width+"px",g.height=b.height+"px");b.background&&(a.style.backgroundColor=b.background);void 0!==b.transform&&(yb=b.transform);Sa(b.grid)&&0<b.grid&&(Ta=b.grid);Sa(b.tgrid)&&0<b.tgrid&&(ac=b.tgrid);b.snap&&(bc=!0);b.axes&&(zb=!0)}a||(a=q.canvas,a||"undefined"===typeof document||(a=document.getElementById(q.canvasname))&&(a=Y(a)));a&&(ga=a,z=a.getContext("2d"),H(),z.setLineDash||(z.setLineDash=function(){}),(q.animation?q.animation.controls:q.animcontrols)&&Ba(q),q.animation&&Sa(q.animation.speed)&&
(void 0===q.animation.accuracy&&q.cinderella&&q.cinderella.version&&2===q.cinderella.version[0]&&9===q.cinderella.version[1]&&1875>q.cinderella.version[2]?oa(.5*q.animation.speed):oa(q.animation.speed)),q.animation&&Sa(q.animation.accuracy)&&(Lb=q.animation.accuracy));q.statusbar&&(cc="string"===typeof q.statusbar?document.getElementById(q.statusbar):q.statusbar);var c=q.scripts,p=null;"string"===typeof c&&c.search(/\*/)&&(p=c);"object"!==typeof c&&(c=null);"move keydown mousedown mouseup mousedrag mousemove mouseclick init tick draw simulationstep simulationstart simulationstop ondrop".split(" ").forEach(function(a){var g;
if(null!==c&&c[a])g=c[a];else{g=a+"script";if(q[g])g=document.getElementById(q[g]);else if(p){if(g=document.getElementById(p.replace(/\*/,a)),!g)return}else return;g=g.text}g=Ma(g,!1);"error"===g.ctype?console.error("Error compiling "+a+" script: "+g.message):ia[a]=g});Sa(q.grid)&&0<q.grid&&(Ta=q.grid);q.snap&&(bc=!0);u={};var b=0;ab={};q.geometry||(q.geometry=[]);Hd(q.geometry);q.behavior||(q.behavior=[]);"function"===typeof dc&&dc(q.behavior);for(var d in q.images)b=X(q.images[d]),b!==k&&(ab[d]=
b);qa.canvas=a;if(q.oninit)q.oninit(qa);va.instances.push(qa);q.use&&q.use.forEach(function(a){t.use$1([v.wrap(a)],{})});Mc.convexhull3d$1&&h("quickhull3d","quickhull3d/quickhull3d.nocache.js");Ia()}}function X(a){var g;"string"===typeof a?(g=new Image,g.src=a):g=a;if(!g.tagName)return console.error("Not a valid image element",g),k;var c={img:g,width:NaN,height:NaN,ready:!0,live:!1,generation:0,whenReady:ka};a=g.tagName.toLowerCase();var p=[];if("img"===a)g.complete?(c.width=g.width,c.height=g.height):
(c.ready=!1,g.addEventListener("load",function(){c.width=g.width;c.height=g.height;c.ready=!0;c.whenReady=ka;p.forEach(ka);b()}),c.whenReady=p.push.bind(p));else if("video"===a)c.live=!0,g.readyState>=g.HAVE_METADATA?(c.width=g.videoWidth,c.height=g.videoHeight):(c.ready=!1,g.addEventListener("loadedmetadata",function(){c.width=g.videoWidth;c.height=g.videoHeight;c.ready=!0;c.whenReady=ka;p.forEach(ka);b()}),c.whenReady=p.push.bind(p));else if("canvas"===a)c.width=g.width,c.height=g.height;else return console.error("Not a valid image element",
a,g),k;return{ctype:"image",value:c}}function Ba(a){function g(a,c){var g=document.createElement("button"),p=document.createElement("img");g.appendChild(p);k.appendChild(g);Ab(p,a);g.addEventListener("click",c);Na[a]=function(a){a?g.classList.add("CindyJS-active"):g.classList.remove("CindyJS-active")}}function c(a){if(h){var c=e.getBoundingClientRect();oa(f*(a.clientX-c.left-e.clientLeft+.5)/c.width+b)}}var p=document.createElement("div");p.className="CindyJS-animcontrols";ga.parentNode.appendChild(p);
var b=0,d=1,f=1;a.animation&&a.animation.speedRange&&Sa(a.animation.speedRange[0])&&Sa(a.animation.speedRange[1])&&(b=a.animation.speedRange[0],d=a.animation.speedRange[1],f=d-b);var e=document.createElement("div");e.className="CindyJS-animspeed";p.appendChild(e);var m=document.createElement("div");e.appendChild(m);K(e,"mousedown",function(a){h=!0;c(a)});K(e,"mousemove",c);K(ga.parentNode,"mouseup",function(a){h=!1},!0);var k=document.createElement("div");k.className="CindyJS-animbuttons";p.appendChild(k);
g("play",S);g("pause",Za);g("stop",Ja);Na.stop(!0);fc=function(a){a=(a-b)/f;a=Math.max(0,Math.min(1,a));a=.1*Math.round(1E3*a);m.style.width=a+"%"};var h=!1}function oa(a){Nc=a;fc&&fc(a)}function ka(a){return a()}function h(a,g){var c=null;q.plugins&&(c=q.plugins[a]);c||(c=va._pluginRegistry[a]);c?t.use$1([v.wrap(a)],{}):(++Oc,va.autoLoadPlugin(a,g,function(){t.use$1([v.wrap(a)],{});Ia()}))}function Ia(){0===--Oc&&(A(ia.init),(q.animation||q).autoplay&&S(),qa.canvas&&la(qa.canvas,q))}function da(){null!==
Bb&&(ma.set(Bb.state),Object.keys(Bb.speeds).forEach(function(a){var g=u.csnames[a];"undefined"!==typeof g.behavior&&(a=Bb.speeds[a],g.behavior.vx=a[0],g.behavior.vy=a[1],g.behavior.vz=a[2],g.behavior.fx=0,g.behavior.fy=0,g.behavior.fz=0)}),Id())}function S(){if(!Ua){if(Nb){var a=bb.backup;a.set(ma);for(var g={},c=0;c<u.points.length;c++){var p=u.points[c];"undefined"!==typeof p.behavior&&(g[p.name]=[p.behavior.vx,p.behavior.vy,p.behavior.vz])}Bb={state:a,speeds:g};Cb=0;Nb=!1;Na.stop(!1)}else Na.pause(!1);
gc=Date.now();Na.play(!0);"function"===typeof dc&&hc&&Jd();Ua=!0;A(ia.simulationstart);b()}}function Za(){Ua&&(Na.play(!1),Na.pause(!0),Ua=!1)}function Ja(){Nb||(Ua?(A(ia.simulationstop),Ua=!1,Na.play(!1)):Na.pause(!1),Na.stop(!0),Nb=!0,da())}function La(){if(!ic){ic=!0;for(var a=va.instances.length;0<a;)if(va.instances[--a]===qa){va.instances.splice(a,1);break}for(a=kb.length;0<a;)try{kb[--a]()}catch(g){console.error(g)}}}function $a(a){this["in"]=function(a,c){console.log(a);c?this.append(this.createTextNode("span",
"blue",a)):this.append(this.createTextNode("p","blue",a))};this.out=function(a,c){console.log(a);c?this.append(this.createTextNode("span","red",a)):this.append(this.createTextNode("p","red",a))};this.err=function(a,c){console.log(a);c?this.append(this.createTextNode("span","red",a)):this.append(this.createTextNode("p","red",a))};this.createTextNode=function(a,c,p){return"undefined"!==typeof document?(a=document.createElement(a),a.appendChild(document.createTextNode(p)),a.style.color=c,a):p+"\n"}}
function jb(){var a=this,g,c=document.createElement("div"),p;c.innerHTML='<div id="console" style="border-top: 1px solid #333333; bottom: 0px; position: absolute; width: 100%;"><div id="log" style="height: 150px; overflow-y: auto;"></div><input id="cmd" type="text" style="box-sizing: border-box; height: 30px; width: 100%;"></div>';document.body.appendChild(c);g=document.getElementById("cmd");p=document.getElementById("log");g.onkeydown=function(c){13===c.keyCode&&""!==g.value&&(a["in"](g.value),c=
t.parse$1([v.wrap(g.value)],[]),c=A(c),console.log(w(c)),"undefined"!==c.ctype&&ha.out(w(c)),g.value="",p.scrollTop=p.scrollHeight)};this.append=function(a){p.appendChild(a)};this.clear=function(){p.innerHTML=""}}function pb(a){var g=a;"string"===typeof a&&(g=document.getElementById(a));this.append=function(a){g.appendChild(a)};this.clear=function(){g.innerHTML=""}}function Ya(){this.append=function(a){};this.clear=function(){}}function K(a,g,c,p){void 0===p&&(p=!1);kb.push(function(){a.removeEventListener(g,
c,p)});a.addEventListener(g,c,p)}function la(a,g){function c(c){var g=a.getBoundingClientRect();c=x.to(c.clientX-g.left-a.clientLeft+.5,c.clientY-g.top-a.clientTop+.5);U.prevx=U.x;U.prevy=U.y;U.x=c[0];U.y=c[1];sa[0]=U.x;sa[1]=U.y;b()}function p(a){U.down=!1;aa=void 0;lb();A(ia.mouseup);sb("mouseup");b();a.preventDefault()}var ba=null;"undefined"!==typeof MutationObserver&&(ba=MutationObserver);ba||"undefined"===typeof WebKitMutationObserver||(ba=WebKitMutationObserver);ba?(ba=new ba(function(c){document.body.contains(a)||
La()}),ba.observe(document.documentElement,{childList:!0,subtree:!0}),kb.push(function(){ba.disconnect()})):(K(a,"DOMNodeRemovedFromDocument",La),K(a,"DOMNodeRemoved",La));!0===g.keylistener?K(document,"keydown",function(a){l(a);return!1}):ia.keydown&&(a.setAttribute("tabindex","0"),K(a,"mousedown",function(){a.focus()}),K(a,"keydown",function(a){9!==a.keyCode&&(l(a),a.preventDefault())}));K(a,"mousedown",function(a){U.button=a.which;c(a);A(ia.mousedown);sb("mousedown");U.down=!0;a.preventDefault()});
K(a,"mouseup",function(a){U.down=!1;aa=void 0;lb();A(ia.mouseup);sb("mouseup");b();a.preventDefault()});K(a,"mousemove",function(a){c(a);U.down?A(ia.mousedrag):A(ia.mousemove);sb("mousemove");a.preventDefault()});K(a,"click",function(a){c(a);A(ia.mouseclick);a.preventDefault()});K(a,"dragenter",function(a){a.preventDefault()});K(a,"dragover",function(a){a.preventDefault()});K(a,"drop",function(c){function g(a,c,R){ba[a]=f.turnIntoCSList([c,v.string(R||c.ctype),v.string(p[a].type),v.string(p[a].name)]);
0===--d&&(a=m,jc=f.turnIntoCSList(ba),kc=a,A(ia.ondrop),kc=jc=k,b())}c.preventDefault();var p=c.dataTransfer.files,ba=Array(p.length),d=p.length,e=c.currentTarget.getBoundingClientRect(),m=f.realVector(x.to(c.clientX-e.left-a.clientLeft+.5,c.clientY-e.top-a.clientTop+.5));Array.prototype.forEach.call(p,function(a,c){var p=new FileReader;/^text\//.test(a.type)?(p.onload=function(){var a=v.string(p.result);g(c,a)},p.readAsText(a)):/^image\//.test(a.type)?(p.onload=function(){var a=new Image;a.onload=
function(){g(c,X(a))};a.src=p.result},p.readAsDataURL(a)):g(c,k)})});K(a,"touchstart",function(a){c(a.targetTouches[0]);A(ia.mousedown);U.down=!0;sb("mousedown");a.preventDefault()},!1);K(a,"touchmove",function(a){c(a.targetTouches[0]);U.down?A(ia.mousedrag):A(ia.mousemove);sb("mousemove");a.preventDefault()},!0);K(a,"touchend",p,!1);"undefined"!==typeof document&&document.body&&K(document.body,"touchcancel",p,!1);"undefined"!==typeof window&&K(window,"resize",function(){Ob(function(){H();b()})},
!1);ib(a.parentNode);b()}function qb(a,g){var c=document.createElement("div");c.setAttribute("style",g);a.appendChild(c);return c}function ib(a){function g(){p.scrollLeft=p.scrollTop=ba.scrollLeft=ba.scrollTop=1E5}function c(){if(d!==a.clientWidth||f!==a.clientHeight)d=a.clientWidth,f=a.clientHeight,e||(e=!0,Ob(function(){e=!1;H();b()}));g()}if("undefined"!==typeof document){var p=qb(a,"position: absolute; transition: 0s; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;");
qb(p,"position: absolute; transition: 0s; left: 0; top: 0; width: 100000px; height: 100000px");var ba=qb(a,"position: absolute; transition: 0s; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;");qb(ba,"position: absolute; transition: 0s; left: 0; top: 0; width: 200%; height: 200%");g();var d=a.clientWidth,f=a.clientHeight,e=!1;p.addEventListener("scroll",c);ba.addEventListener("scroll",c)}}function b(){lc||(lc=Ob(d))}function d(){lc=null;if(!ic){if(Ua){var a=
Date.now(),g=Math.min(50,a-gc)*Nc*Kd;gc=a;a=Cb+g;hc&&"undefined"!==typeof ra&&ra.tick(g);Cb=a;Ua&&A(ia.tick)}e();Ua&&b()}}function e(){x.reset();z.save();z.clearRect(0,0,W,V);var a=x.drawingstate.matrix,g,c,p,b,d;if(0!==Ta){z.beginPath();z.strokeStyle="rgba(0,0,0,0.1)";z.lineWidth=1;z.lineCap="butt";g=Ta*a.a;for(b=Math.ceil(-a.tx/g);(d=b*g+a.tx)<W;){if(b||!zb)z.moveTo(d,0),z.lineTo(d,V);b++}for(b=Math.floor(a.ty/g);(d=b*g-a.ty)<V;){if(b||!zb)z.moveTo(0,d),z.lineTo(W,d);b++}z.stroke()}if(0!==ac){z.beginPath();
z.strokeStyle="rgba(0,0,0,0.1)";z.lineWidth=1;z.lineCap="butt";g=ac*a.a;var e=Math.sqrt(3);c=a.ty/e;p=(V+a.ty)/e;for(b=Math.ceil(-(a.tx+p)/g);(d=b*g+a.tx)+c<W;)z.moveTo(d+c,0),z.lineTo(d+p,V),b++;for(b=Math.ceil(-(a.tx-c)/g);(d=b*g+a.tx)-p<W;)z.moveTo(d-c,0),z.lineTo(d-p,V),b++;g*=.5*e;for(b=Math.floor(a.ty/g);(d=b*g-a.ty)<V;){if(b||!zb)z.moveTo(0,d),z.lineTo(W,d);b++}z.stroke()}zb&&(z.beginPath(),z.strokeStyle="rgba(0,0,0,0.2)",z.lineWidth=3,z.lineCap="butt",z.lineJoin="miter",z.miterLimit=10,z.beginPath(),
z.moveTo(0,-a.ty),z.lineTo(W-6,-a.ty),z.moveTo(W-13,-5-a.ty),z.lineTo(W-3,-a.ty),z.lineTo(W-13,5-a.ty),z.moveTo(a.tx,V),z.lineTo(a.tx,6),z.moveTo(a.tx-5,13),z.lineTo(a.tx,3),z.lineTo(a.tx+5,13),z.stroke());Ld();x.greset();Md();for(a=0;a<u.polygons.length;a++)g=u.polygons[a],g.isshowing&&!1!==g.visible&&(c={color:g.color,alpha:g.alpha,fillcolor:g.fillcolor,fillalpha:g.fillalpha,size:g.size,lineJoin:v.string("miter")},D.drawpolygon([g.vertices],c,"D",!0));for(a=0;a<u.conics.length;a++)u.conics[a].isArc?
(g=u.conics[a],g.isshowing&&!1!==g.visible&&(c={},c.color=g.color,c.alpha=g.alpha,c.size=g.size,D.drawarc(g,c,g.filled?"F":"D"))):(g=u.conics[a],g.isshowing&&!1!==g.visible&&(c={},c.color=g.color,c.alpha=g.alpha,c.size=g.size,D.drawconic(g.matrix,c)));for(a=0;a<u.lines.length;a++)a:if(g=u.lines[a],g.isshowing&&!1!==g.visible&&f._helper.isAlmostReal(g.homog))if("S"===g.kind)c={overhang:g.overhang,dashtype:g.dashtype,size:g.size,color:g.color,alpha:g.alpha,arrow:g.arrow,arrowsize:g.arrowsize,arrowposition:g.arrowposition,
arrowshape:g.arrowshape,arrowsides:g.arrowsides},0<=m.mult(g.startpos.value[2],m.conjugate(g.endpos.value[2])).value.real?t.draw$2([g.startpos,g.endpos],c):(y.handleModifs(c,y.lineModifs),y.drawRaySegment(g.startpos,g.endpos));else if("end"===g.clip.value&&"Join"===g.type)b=u.csnames[g.args[0]],c=u.csnames[g.args[1]],t.draw$2([b.homog,c.homog],{overhang:g.overhang,dashtype:g.dashtype,size:g.size,color:g.color,alpha:g.alpha});else{if("inci"===g.clip.value){b=[1E6,0];c=[-1E6,0];d=[1E6,0];p=[-1E6,0];
for(e=0;e<g.incidences.length;e++){var k=u.csnames[g.incidences[e]].homog,h=k.value[0],l=k.value[1],n=k.value[2];m._helper.isAlmostZero(n)||(h=m.div(h,n),l=m.div(l,n),m._helper.isAlmostReal(h)&&m._helper.isAlmostReal(l)&&(h.value.real<b[0]&&(b=[h.value.real,k]),h.value.real>c[0]&&(c=[h.value.real,k]),l.value.real<d[0]&&(d=[l.value.real,k]),l.value.real>p[0]&&(p=[l.value.real,k])))}c[0]-b[0]>p[0]-d[0]?(b=b[1],c=c[1]):(b=d[1],c=p[1]);if(b!==c){t.draw$2([b,c],{dashtype:g.dashtype,size:g.size,color:g.color,
alpha:g.alpha,overhang:g.overhang});break a}}t.draw$1([g.homog],{dashtype:g.dashtype,size:g.size,color:g.color,alpha:g.alpha})}for(a=0;a<u.points.length;a++)g=u.points[a],g.isshowing&&!1!==g.visible&&f._helper.isAlmostReal(g.homog)&&(c=g.color,g.behavior&&(c=g.color),t.draw$1([g.homog],{size:g.size,color:c,alpha:g.alpha}),g.labeled&&!g.tmp&&(c=g.printname||g.name||"P",p=g.labelpos||{x:3,y:3},b=g.textsize||ja.textsize,d=!0===g.textbold,e=!0===g.textitalics,k=g.text_fontfamily||ja.fontFamily,h=p.x*
p.x+p.y*p.y,l=1,0<h&&(l=1+g.size.value.real/Math.sqrt(h)),D.drawtext([g.homog,v.wrap(c)],{x_offset:v.wrap(l*p.x),y_offset:v.wrap(l*p.y),size:v.wrap(b),bold:v.wrap(d),italics:v.wrap(e),family:v.wrap(k)})));for(a=0;a<u.texts.length;a++)Nd(u.texts[a]);z.restore()}function l(a){a=window.event?event:a;a=a.charCode?a.charCode:a.keyCode;Pc=String.fromCharCode(a);Qc=a;A(ia.keydown);b()}function G(a){var g=a.value;a=g[0].value;var c=g[1].value,g=g[2].value;return f.turnIntoCSList([a[0],m.add(a[1],c[0]),m.add(a[2],
g[0]),c[1],m.add(c[2],g[1]),g[2]])}function r(a){var g=!0;return function(c,p){g&&(console.error("Operator "+a+" is not supported yet."),g=!1);return k}}function w(a){if("undefined"===typeof a)return"_??_";if(null===a)return"_???_";if("undefined"===a.ctype)return"___";if("number"===a.ctype)return m.niceprint(a);if("string"===a.ctype||"boolean"===a.ctype)return a.value;if("list"===a.ctype){for(var g="[",c=0;c<a.value.length;c++)g+=w(A(a.value[c])),c!==a.value.length-1&&(g+=", ");return g+"]"}return"dict"===
a.ctype?Oa.niceprint(a):"function"===a.ctype?"FUNCTION":"infix"===a.ctype?"INFIX":"modifier"===a.ctype?a.key+"->"+w(a.value):"shape"===a.ctype?a.type:"error"===a.ctype?"Error: "+a.message:"variable"===a.ctype?w(J.getvar(a.name)):"geo"===a.ctype?a.value.name:"image"===a.ctype?"IMAGE":"_?_"}function E(a,g){var c="undefined"===a[0].ctype,p="undefined"===a[1].ctype,b=A(a[1]);if(c||p)return k;"variable"===a[0].ctype?J.setvar(a[0].name,b):"infix"===a[0].ctype?"_"===a[0].oper?D.assigntake(a[0],b):console.error("Can't use infix expression as lvalue"):
"field"===a[0].ctype?D.assigndot(a[0],b):"function"===a[0].ctype&&"genList"===a[0].oper?"list"===b.ctype?D.assignlist(a[0].args,b.value):console.error("Expected list in rhs of assignment"):console.error("Left hand side of assignment is not a recognized lvalue");return b}function B(a,g){var c=A(a[0]),p=A(a[1]);if(c.ctype===p.ctype){if("number"===c.ctype)return v.bool(c.value.real===p.value.real&&c.value.imag===p.value.imag);if("string"===c.ctype||"boolean"===c.ctype)return v.bool(c.value===p.value);
if("list"===c.ctype)return f.equals(c,p);if("geo"===c.ctype)return v.bool(c.value===p.value)}return{ctype:"boolean",value:!1}}function Ec(a,g){return v.not(B(a,g))}function pa(a,g){var c=C(a[0]),p=C(a[1]);return"number"===c.ctype&&"number"===p.ctype?{ctype:"boolean",value:m._helper.isAlmostEqual(c,p)}:"string"===c.ctype&&"string"===p.ctype||"boolean"===c.ctype&&"boolean"===p.ctype?{ctype:"boolean",value:c.value===p.value}:"list"===c.ctype&&"list"===p.ctype?f.almostequals(c,p):{ctype:"boolean",value:!1}}
function na(a,g){var c=C(a[0]),p=C(a[1]);return"boolean"===c.ctype&&"boolean"===p.ctype?{ctype:"boolean",value:c.value&&p.value}:k}function Gc(a,g){var c=C(a[0]),p=C(a[1]);return"boolean"===c.ctype&&"boolean"===p.ctype?{ctype:"boolean",value:c.value||p.value}:k}function Hc(a,g){var c=a[0];"void"!==c.ctype&&(c=C(c));var p=C(a[1]),b=v.add(c,p);"Angle"===c.usage&&"Angle"===p.usage&&(b=v.withUsage(b,"Angle"));return b}function Xb(a,g){var c=a[0];"void"!==c.ctype&&(c=C(c));var p=C(a[1]),b=v.sub(c,p);"Angle"===
c.usage&&"Angle"===p.usage&&(b=v.withUsage(b,"Angle"));return b}function Ic(a,g){var c=C(a[0]),p=C(a[1]),b=v.mult(c,p);"Angle"!==c.usage||p.usage?"Angle"!==p.usage||c.usage||(b=v.withUsage(b,"Angle")):b=v.withUsage(b,"Angle");return b}function Jc(a,g){var c=C(a[0]),p=C(a[1]);"number"===p.ctype&&m._helper.isZero(p)&&ha.err("WARNING: Division by zero!");var b=v.div(c,p);"Angle"!==c.usage||p.usage?"Angle"!==p.usage||c.usage||(b=v.withUsage(b,"Angle")):b=v.withUsage(b,"Angle");return b}function Kc(a,
g){var c=C(a[0]),p=C(a[1]);return"number"===c.ctype&&"number"===p.ctype?m.pow(c,p):k}function Lc(a,g){var c=M(a[0]),p=M(a[1]);if(c!==k&&p!==k){var b=f.cross(c,p);"Point"===c.usage&&"Point"===p.usage&&(b=v.withUsage(b,"Line"));"Line"===c.usage&&"Line"===p.usage&&(b=v.withUsage(b,"Point"));return b}return k}function Zb(a){var g=a.length;if(0===g)return[];if(1===g)return[0];if(2===g)return a[0][0]+a[1][1]<=a[0][1]+a[1][0]?[0,1]:[1,0];if(4<g)return Od(a);for(var c=Pd[g],p=Number.POSITIVE_INFINITY,b=c[0],
d=0;d<c.length;++d){for(var f=c[d],e=0,m=0;m<g;++m)e+=a[m][f[m]];e<p&&(p=e,b=f)}return b}function Od(a){function g(){return{matched:-1,prev:-1,start:-1,cost:0,used:!1,leaf:!1}}function c(a){for(var g=0;g<d;++g)0<h[a][g]||k[g].used||(k[g].used=!0,c(k[g].matched))}function p(a){for(var c=0;c<d;++c)0<h[c][a]||m[c].used||(m[c].used=!0,p(m[c].matched))}var b=Math.abs,d=a.length,f,e,m=Array(d),k=Array(d),h=Array(d);for(f=0;f<d;++f)h[f]=Array(d);for(f=0;f<d;++f)for(m[f]=g(),k[f]=g(),m[f].cost=a[f][0],e=
1;e<d;++e)m[f].cost>a[f][e]&&(m[f].cost=a[f][e]);for(;;){for(f=0;f<d;++f)for(e=0;e<d;++e)h[f][e]=a[f][e]-m[f].cost-k[e].cost,h[f][e]<1E-14*(b(a[f][e])+b(m[f].cost)+b(k[e].cost))&&(h[f][e]=0);for(f=0;f<d;++f)m[f].matched=k[f].matched=-1;for(var l=0;;){for(f=0;f<d;++f)m[f].used=m[f].leaf=k[f].used=k[f].leaf=!1,-1===m[f].matched&&(m[f].start=f,m[f].used=m[f].leaf=!0,m[f].prev=-1);for(var n=!1,q=!1;!q;){for(f=0;f<d;++f)if(m[f].leaf)for(m[f].leaf=!1,e=0;e<d;++e)if(!(k[e].used||0<h[f][e])&&m[f].matched!==
e&&(k[e].prev=f,k[e].start=m[f].start,k[e].used=k[e].leaf=!0,-1===k[e].matched)){m[k[e].start].prev=e;n=!0;break}if(n)break;q=!0;for(e=0;e<d;++e)k[e].leaf&&(k[e].leaf=!1,f=k[e].matched,m[f].used||(m[f].prev=e,m[f].start=k[e].start,m[f].used=m[f].leaf=!0,q=!1))}if(!n)break;for(n=0;n<d;++n)if(-1===m[n].matched&&-1!==m[n].prev){e=m[n].prev;do f=k[e].prev,k[e].matched=f,m[f].matched=e,e=m[f].prev;while(f!==n);++l}}if(l===d)break;for(f=0;f<d;++f)m[f].used=m[f].leaf=k[f].used=k[f].leaf=!1;for(f=0;f<d;++f)-1===
m[f].matched&&c(f);for(e=0;e<d;++e)-1===k[e].matched&&p(e);for(f=0;f<d;++f)-1===m[f].matched||m[f].used||k[m[f].matched].used||(m[f].used=!0);l=Number.POSITIVE_INFINITY;for(f=0;f<d;++f)if(!m[f].used)for(e=0;e<d;++e)k[e].used||l>h[f][e]&&(l=h[f][e]);for(f=0;f<d;++f)m[f].used||(m[f].cost+=l),k[f].used&&(k[f].cost-=l)}a=Array(d);for(f=0;f<d;++f)e=m[f].matched,a[f]=e;return a}function mc(a,g){var c=A(a[0]),p=C(a[1]);"string"!==c.ctype&&(c=f.asList(c));if("number"===p.ctype){p=Math.floor(p.value.real);
0>p&&(p=c.value.length+p+1);if(0<p&&p<c.value.length+1)return"list"===c.ctype?c.value[p-1]:{ctype:"string",value:c.value.charAt(p-1)};ha.err("WARNING: Index out of range!");return k}if("list"===p.ctype){for(var b=[],d=0;d<p.value.length;d++){var e=C(p.value[d]);b[d]=mc([c,e],[])}return f.turnIntoCSList(b)}return k}function Rc(a,g){var c=A(a[0]),p=A(a[1]);if("shape"===c.ctype&&"shape"===p.ctype)return D.shapeconcat(c,p);c=f.asList(c);p=f.asList(p);return"list"===c.ctype&&"list"===p.ctype?f.concat(c,
p):k}function Sc(a,g){var c=A(a[0]),p=A(a[1]);return"list"===c.ctype&&"list"===p.ctype?f.set(f.common(c,p)):"shape"===c.ctype&&"shape"===p.ctype?D.shapecommon(c,p):k}function Tc(a,g){var c=A(a[0]),p=A(a[1]);return"list"===c.ctype&&"list"===p.ctype?f.remove(c,p):"shape"===c.ctype&&"shape"===p.ctype?D.shaperemove(c,p):k}function Uc(a,g){var c=A(a[0]),p=A(a[1]);return"list"===c.ctype?f.append(c,p):k}function Vc(a,g){var c=A(a[0]),p=A(a[1]);return"list"===p.ctype?f.prepend(c,p):k}function nc(a,g){a|=
0;g|=0;if(0===a&&0===g)return 0;for(;0!==g;){var c=a;a=g;g=c%g|0}return a}function Qd(a){return 1===a?0:1}function Wc(a,g,c,p,b,d,f){if(-1!==g.indexOf("\n")){var e=Infinity,m=-Infinity,k=Infinity,h=-Infinity;g.split("\n").forEach(function(g){g=Wc(a,g,c,p,b,d);e>g.left&&(e=g.left);m<g.right&&(m=g.right);k>g.top&&(k=g.top);h<g.bottom&&(h=g.bottom);p+=f});return{left:e,right:m,top:k,bottom:h}}var l=a.measureText(g);a.fillText(g,c-l.width*b,p);return{left:c-l.width*b,right:c+l.width*(1-b),top:p-.84*d,
bottom:p+.36*d}}function cb(a){return"image"===a.ctype?a.value:"string"===a.ctype&&ab.hasOwnProperty(a.value)?ab[a.value].value:null}function Xc(a){return a.replace(/[^A-Za-z0-9 \u0080-\uffff]/ig,"\\$&")}function ea(a,g,c){var p=a;g&&(p=p+" at "+g.row+":"+g.col);c&&(p=p+": \u2018"+c+"\u2019");p=Error(p);p.name="CindyScriptParseError";p.description=a;p.location=g;p.text=c;return p}function mb(a){this.input=a;this.re=new RegExp(Yc,"g");for(var g=[],c=a.indexOf("\n")+1;c;)g.push(c),c=a.indexOf("\n",
c)+1;g.push(a.length);this.bols=g;this.bol=this.pos=0;this.line=1}function Pb(a){var g=a[a.length-2],c=a[a.length-3],p=a[a.length-1];if(c){if(c.isSuperscript&&g.precedence<=c.precedence)throw ea("Operator not allowed after superscript",g.start,g.text);if(p){if(!g.op.infix)throw ea("Operator may not be used infix",g.start,g.text);}else if(!g.op.postfix)throw ea("Operator may not be used postfix",g.start,g.text);}else if(p){if(!g.op.prefix)throw ea("Operator may not be used prefix",g.start,g.text);
}else if(!g.op.bare)throw ea("Operator without operands",g.start,g.text);g.ctype="infix";g.oper=g.op.sym;g.args=[c,p];a.splice(a.length-3,3,g)}function Zc(a,g,c,p){a.length&1||a.push(null);for(c=wa[c];3<=a.length&&a[a.length-2].precedence<=c.precedence;)Pb(a);a.push({op:c,precedence:c.precedence+(c.rassoc?1:0),start:g.start,end:g.end,text:g.text,rawtext:g.rawtext});c="";for(var b=g.text,d=0;d<b.length;++d)c+="0123456789+-".charAt(p.indexOf(b.charAt(d)));g.ctype="number";g.value={real:+c,imag:0};a.push(g);
Pb(a)}function $c(a,g){var c=[],p;a:for(;;)switch(p=a.next(),p.toktype){case "OP":var b=wa[p.text];"_"!==b.sym||!c.length||c.length&1||"OP"!==c[c.length-1].toktype||":="!==c[c.length-1].op.sym||(c.pop(),b=wa[":=_"],p.text=b.sym);p.op=b;p.precedence=b.precedence;for(c.length&1||c.push(null);3<=c.length&&c[c.length-2].precedence<=p.precedence;)Pb(c);b.rassoc&&p.precedence++;c.push(p);break;case "ID":p.ctype="variable";p.name=p.text;if(c.length&1)throw ea("Missing operator",p.start,p.text);c.push(p);
break;case "NUM":p.ctype="number";p.value={real:+p.text,imag:0};if(c.length&1)throw ea("Missing operator",p.start,p.text);c.push(p);break;case "STR":p.ctype="string";p.value=p.raw.substring(1,p.raw.length-1);if(c.length&1)throw ea("Missing operator",p.start,p.text);c.push(p);break;case "SUB":Zc(c,p,"_","\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u208a\u208b");break;case "SUP":Zc(c,p,"^","\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079\u207a\u207b");c[c.length-1].isSuperscript=
!0;break;case "BRA":b="[](){}||".indexOf(p.text);if(p.text===g||b&1)break a;var b="[](){}||".charAt(b+1),d=$c(a,b),f=d.closedBy;if(f.text!==b)throw ea("Opening "+p.text+" at "+p.start.row+":"+p.start.col+" closed by "+(f.text||"EOF")+" at "+f.start.row+":"+f.start.col);f=p.text+f.text;b=[];if(d=d.expr){for(;d&&"infix"===d.ctype&&","===d.oper;)b.push(d.args[0]),d=d.args[1];b.push(d)}if(c.length&1){if("{}"===f)throw ea("{\u2026} reserved for future use",p.start);d=c[c.length-1];if("variable"!==d.ctype)throw ea("Function name must be an identifier",
d.start);if(2<c.length&&c[c.length-2].precedence<ad)throw ea("Function call in indexing construct must be enclosed in parentheses",p.start);d.ctype="function";p=d.args=[];for(var f=d.modifs={},e=0;e<b.length;++e){var m=b[e];if(m&&"infix"===m.ctype&&"->"===m.oper){var k=m.args[0];if("variable"!==k.ctype)throw ea("Modifier name must be an identifier",m.start);f[k.name]=m.args[1]}else p.push(m)}d.oper=d.name.toLowerCase()+"$"+d.args.length}else if("||"===f)if(1===b.length)c.push({ctype:"function",oper:"abs_infix",
args:b,modifs:{}});else if(2===b.length)c.push({ctype:"function",oper:"dist_infix",args:b,modifs:{}});else throw ea("Don't support |\u2026| with "+b.length+" arguments",p.start);else{if("{}"===f)throw ea("{\u2026} reserved for future use",p.start);"[]"!==f&&1===b.length?c.push({ctype:"paren",args:b}):0===b.length?c.push({ctype:"list",value:[]}):c.push({ctype:"function",oper:"genList",args:b,modifs:{}})}break;case "EOF":break a}for(c.length&1||c.push(null);3<=c.length;)Pb(c);return{expr:c[0],closedBy:p}}
function Db(a){this.usedFunctions={};this.usedVariables={}}function A(a){if(void 0===a)return k;if("infix"===a.ctype)return a.impl(a.args,{},a);if("variable"===a.ctype)return A(J.getvar(a.name));if("function"===a.ctype)return D.evaluate(a.oper,a.args,a.modifs);if("void"===a.ctype)return k;if("field"===a.ctype){var g=A(a.obj);return"geo"===g.ctype?xa.getField(g.value,a.key):"list"===g.ctype?f.getField(g,a.key):k}return a}function C(a){a=A(a);if("geo"===a.ctype){var g=a.value;if("P"===g.kind)return xa.getField(g,
"xy");if("V"===g.kind)return g.value}return a}function M(a){a=A(a);if("geo"===a.ctype){var g=a.value;if("P"===g.kind||"L"===g.kind)return xa.getField(g,"homog")}return f._helper.isNumberVecN(a,3)?a:f._helper.isNumberVecN(a,2)?(g=f.turnIntoCSList([a.value[0],a.value[1],m.real(1)]),a.usage&&(g=v.withUsage(g,a.usage)),g):k}function Ma(a){var g=new Db;g.usedFunctions=Mc;g.infixmap=P;a=g.parse(a);for(var c in g.usedVariables)J.create(c);return a}function bd(){this._path=[];this._defs=["<defs>"];this._imgcache=
[];this._body=[];this._saveStack=[""];this._clipIndex=0;this._stroke=this._fill="#000";this._strokeOpacity=this._fillOpacity=null;this.height=this.width=0;this.lineWidth=1;this.lineCap="butt";this.lineJoin="miter";this.miterLimit=10;this.globalAlpha=1}function cd(){this._body=[];this._yPos=this._xPos=NaN;this._extGState={Af255:"<< /ca 1 >>",As255:"<< /CA 1 >>"};this._objects=[["%PDF-1.4\n"]];this._offset=this._objects[0][0].length;this._nextIndex=5;this._imgcache=[];this._xobjects={};this._pathUsed=
-1;this._fillAlpha=this._strokeAlpha=this._globalAlpha=1;this.height=this.width=0;this.lineWidth=1;this.lineCap="butt";this.lineJoin="miter";this.miterLimit=10}function dd(a,g){var c=a.width,p=a.height,b=document.createElement("canvas");b.setAttribute("width",c);b.setAttribute("height",p);b.setAttribute("style","display:none;");var d=qa.canvas;d.parentNode.insertBefore(b,d.nextSibling);try{return b.getContext("2d").drawImage(a,0,0,c,p),b.toDataURL(g||"image/png")}finally{b.parentNode.removeChild(b)}}
function Rd(a){a=a.replace(RegExp("[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/]+","g"),"");var g=new Uint8Array(3*a.length>>2),c,p,b,d,f,e;for(p=c=0;c+3<a.length;c+=4)b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c)),d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+1)),f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+2)),e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+
3)),g[p++]=b<<2|d>>4,g[p++]=d<<4|f>>2,g[p++]=f<<6|e;switch(a.length-c){case 0:break;case 2:b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c));d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+1));g[p++]=b<<2|d>>4;break;case 3:b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c));d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+1));f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+
2));g[p++]=b<<2|d>>4;g[p++]=d<<4|f>>2;break;default:throw Error("Malformed Base64 input: "+(a.length-c)+" chars left: "+a.substr(c));}if(p!==g.length)throw Error("Failed assertion: "+p+" should be "+g.length);return g}function Sd(a){function g(c){return(a[c]<<24|a[c+1]<<16|a[c+2]<<8|a[c+3])>>>0}if(57>a.length)throw Error("Too short to be a PNG file");if(2303741511!==g(0)||218765834!==g(4))throw Error("PNG signature missing");for(var c=[],p=8;p<a.length;){if(p+12>a.length)throw Error("Incomplete chunk at offset 0x"+
p.toString(16));var b=g(p);if(2147483648<=b)throw Error("Chunk too long");var d=p+12+b;if(d>a.length)throw Error("Incomplete chunk at offset 0x"+p.toString(16));var f=a.subarray(p+4,p+8),f=String.fromCharCode.apply(String,f);c.push({len:b,type:f,data:a.subarray(p+8,p+8+b),crc:g(p+8+b)});p=d}return c}function Qb(a,g){var c;if(c=/^rgba\(([0-9]+), *([0-9]+), *([0-9]+), *([0-9]+)\)$/.exec(a))g(+c[1],+c[2],+c[3],+c[4]);else if(c=/^rgb\(([0-9]+), *([0-9]+), *([0-9]+)\)$/.exec(a))g(+c[1],+c[2],+c[3],1);
else throw Error("Can't handle color style "+a);}function Td(a){var g=1;Object.keys(ab).forEach(function(c){var p=ab[c].value.img;if(void 0===p.cachedDataURL&&p.src)if("data:"===p.src.substr(0,5))p.cachedDataURL=p.src;else{++g;p.cachedDataURL=null;var b=new XMLHttpRequest;b.responseType="blob";b.onreadystatechange=function(){if(b.readyState===XMLHttpRequest.DONE)if(200===b.status){var c=new FileReader;c.onloadend=function(){p.cachedDataURL=c.result;console.log("Cached data for image "+p.src);0===
--g&&a()};c.readAsDataURL(b.response)}else console.error("Failed to load "+p.src+": "+b.statusText),0===--g&&a()};b.open("GET",p.src,!0);b.send()}});0===--g&&a()}function nb(a,g,c){for(c||(c="0");a.length<g;)a=c+a;return a}function ed(){null!==Eb&&(window.URL.revokeObjectURL(Eb),Eb=null)}function fd(a,g){Td(function(){var c=z;try{z=new a;z.width=W;z.height=V;e();var p=z.toBlob();ed();Eb=window.URL.createObjectURL(p);g.location.href=Eb}finally{z=c}})}function Fb(a){var g=null,c=1E6,p;console.log("getElementAtMouse");
for(var b=0;b<u.gslp.length;b++){var d=u.gslp[b];if(!d.pinned&&!1!==d.visible&&!0!==d.tmp){var e,k,h,l=x.drawingstate.matrix.sdet;if("P"===d.kind){var n=f.normalizeZ(d.homog);if(!f._helper.isAlmostReal(n))continue;e=n.value[0].value.real-a.x;k=n.value[1].value.real-a.y;h=Math.sqrt(e*e+k*k);d.narrow&h>20/l&&(h=1E4)}else if("C"===d.kind)k=u.csnames[d.args[0]],h=0,"undefined"!==typeof d.radius&&(h=d.radius.value.real),e=m.div(k.homog.value[0],k.homog.value[2]).value.real,k=m.div(k.homog.value[1],k.homog.value[2]).value.real,
e-=a.x,k-=a.y,h=Math.sqrt(e*e+k*k)-h,k=e=0,0>h&&(h=-h),h+=30/l;else if("L"===d.kind||"S"===d.kind)e=d.homog,h=m,k=h.add(h.mult(e.value[0],h.conjugate(e.value[0])),h.mult(e.value[1],h.conjugate(e.value[1]))),k=f.scaldiv(h.sqrt(k),e),h=k.value[0].value.real*a.x+k.value[1].value.real*a.y+k.value[2].value.real,e=k.value[0].value.real*h,k=k.value[1].value.real*h,0>h&&(h=-h),h+=1;h<c+.2/l&&(c=h,g=d,p={x:e,y:k})}}return null===g?null:{mover:g,offset:p,prev:{x:a.x,y:a.y}}}function Pa(){return"P"+Ud++}function sb(a){var g=
F[oc].actions;g[tb].event===a&&g[tb]["do"]()&&(b(),tb===g.length-1?(ta=[],tb=Qa=0):tb++)}function pc(a){return a&&.5>Math.abs(a.offset.x)&&.5>Math.abs(a.offset.y)&&!a.mover.tmp}function gd(a){return pc(a)&&"P"===a.mover.kind}function hd(a){return pc(a)&&("L"===a.mover.kind||"S"===a.mover.kind)}function qc(a){aa={mover:a,offset:{x:0,y:0},prev:{x:U.x,y:U.y}}}function ob(){var a=Fb(U);gd(a)?ta[Qa]=a.mover:(ta[Qa]={type:"Free",name:Pa(),labeled:!0,pos:[sa[0],sa[1],1]},Da(ta[Qa]));Qa++}function id(){var a=
Fb(U);return hd(a)?(ta[Qa]=a.mover,Qa++,!0):!1}function jd(){var a=Fb(U),g;(g=hd(a))||(g=pc(a)&&"C"===a.mover.kind);return g?(ta[Qa]=a.mover,Qa++,!0):!1}function ub(){var a=Fb(U);if(gd(a))for(Gb.args[1]=a.mover.name,a=0;a<u.gslp.length;a++){var g=u.gslp[a];!0===g.tmp&&kd(g.name)}else for(a=0;a<u.gslp.length;a++)g=u.gslp[a],!0===g.tmp&&(g.tmp=!1)}function Rb(a){var g={type:"Free",name:Pa(),labeled:!0,pos:[sa[0],sa[1],1],tmp:!0},g=Da(g);Gb=Da({type:a,name:Pa(),labeled:!0,args:[ta[0].name,g.name]});
qc(g)}function Vd(a){for(var g in a)null!==a[g]&&(ja[g]=a[g])}function Hd(a){Object.keys(n).forEach(function(a){var c=n[a];db(c.signature||"_helper"===a,a+" has no signature");void 0!==c.updatePosition&&void 0===c.stateSize&&(c.stateSize=0)});u.gslp=[];u.csnames={};u.points=[];u.lines=[];u.conics=[];u.texts=[];u.free=[];u.polygons=[];a.forEach(ld);md()}function nd(a){"undefined"===typeof a.tracedim&&(a.tracedim=1);"undefined"===typeof a.tracelength&&(a.tracelength=100);"undefined"===typeof a.traceskip&&
(a.traceskip=1);a._traces=Array(a.tracelength);a._traces_index=0;a._traces_tick=0}function Wd(a){void 0===a.size&&(a.size=ja.pointSize);a.size=m.real(a.size);!a.movable||a.pinned?(a.color=f.realVector(a.color||ja.pointColor),a.color=f.scalmult(m.real(ja.dimDependent),a.color)):a.color=f.realVector(a.color||ja.pointColor);void 0===a.alpha&&(a.alpha=ja.alpha);a.alpha=m.real(a.alpha);a.drawtrace&&nd(a)}function Sb(a){void 0===a.size&&(a.size=ja.lineSize);a.size=m.real(a.size);a.color=f.realVector(a.color||
ja.lineColor);void 0===a.alpha&&(a.alpha=ja.alpha);a.alpha=m.real(a.alpha);a.clip=v.string(a.clip||ja.clip);void 0===a.overhang&&(a.overhang=ja.overhangLine);a.overhang=m.real(a.overhang);a.dashtype&&(a.dashtype=v.wrap(a.dashtype))}function Xd(a){void 0===a.overhang&&(a.overhang=ja.overhangSeg);a.arrow&&(a.arrow=v.bool(a.arrow));a.arrowsize&&(a.arrowsize=m.real(a.arrowsize));a.arrowposition&&(a.arrowposition=m.real(a.arrowposition));a.arrowshape&&(a.arrowshape=v.string(a.arrowshape));a.arrowsides&&
(a.arrowsides=v.string(a.arrowsides));Sb(a);a.clip=v.string("end")}function Yd(a){a.size=void 0!==a.textsize?a.textsize:void 0!==a.size?a.size:ja.textsize;a.size=m.real(+a.size)}function Zd(a){a.filled=void 0!==a.filled?v.bool(a.filled):v.bool(!0);a.fillcolor=void 0===a.fillcolor?k:f.realVector(a.fillcolor);void 0===a.fillalpha&&(a.fillalpha=0);a.fillalpha=m.real(a.fillalpha);Sb(a)}function Da(a){a=ld(a);md();return a}function ld(a){var g;if(void 0!==u.csnames[a.name])return console.log("Element name '"+
a.name+"' already exists"),g=u.csnames[a.name],n[g.type].isMovable&&Ea(g,a.pos,"homog"),{ctype:"geo",value:g};if(g=od[a.type]){var c=g(a),p=null;for(g=0;g<c.length;++g)p=Da(c[g]);return p}var b=n[a.type],c=!1;if(!b)return console.error(a),console.error("Operation "+a.type+" not implemented yet"),null;if("**"!==b.signature)if(!Array.isArray(b.signature)&&"*"===b.signature.charAt(1))c=!0,a.args.forEach(function(c){if(u.csnames[c].kind!==b.signature.charAt(0))return console.error("Not all elements in set are of same type: "+
a.name+" expects "+b.signature+" but "+c+" is of kind "+u.csnames[c].kind),"undefined"!==typeof window&&window.alert("Not all elements in set are of same type: "+a.name),null});else if(b.signature.length!==(a.args?a.args.length:0))return console.error("Wrong number of arguments for "+a.name+" of type "+a.type),"undefined"!==typeof window&&window.alert("Wrong number of arguments for "+a.name),null;if(a.args)for(g=0;g<a.args.length;++g){if(!u.csnames.hasOwnProperty(a.args[g]))return console.log("Dropping "+
a.name+" due to missing argument "+a.args[g]),null;if("**"!==b.signature&&!c&&(p=u.csnames[a.args[g]].kind,b.signature[g]!==p&&("S"!==p||"L"!==b.signature[g])))return window.alert("Wrong argument kind "+p+" as argument "+g+" to element "+a.name+" of type "+a.type),null}b.signatureConstraints&&!b.signatureConstraints(a)&&window.alert("signature constraints violated for element "+a.name);u.gslp.push(a);u.csnames[a.name]=a;g=ya.length;a.kind=b.kind;a.stateIdx=g;g+=b.stateSize;a.incidences=[];a.isshowing=
!0;a.movable=!1;b.isMovable&&(a.movable=!0,u.free.push(a));"P"===a.kind&&(u.points.push(a),Wd(a));"L"===a.kind&&(u.lines.push(a),Sb(a));"C"===a.kind&&(u.conics.push(a),Sb(a));"S"===a.kind&&(u.lines.push(a),Xd(a));"Text"===a.kind&&(u.texts.push(a),Yd(a));"Poly"===a.kind&&(u.polygons.push(a),Zd(a));$d(g);ma=Fa=ya;eb=!0;b.initialize&&(ua=za=a.stateIdx,a.param=b.initialize(a),db(za===a.stateIdx+b.stateSize,"State fully initialized"));ua=za=a.stateIdx;b.updatePosition(a,!1);db(ua===a.stateIdx+b.stateSize,
"State fully consumed");db(za===a.stateIdx+b.stateSize,"State fully updated");eb=!1;ma=bb["in"];ma.set(ya);Fa=bb.out;rc(a,b);Tb={};fb(a);return u.csnames[a.name]}function kd(a){var g,c;console.log("Remove element "+a);delete u.csnames[a];for(g=0;g<u.gslp.length;g++)c=u.gslp[g],c.name===a&&(console.log("Removed element from gslp "+a),u.gslp.splice(g,1));for(g=0;g<u.free.length;g++)c=u.free[g],c.name===a&&(console.log("Removed element from free "+a),u.free.splice(g,1));for(g=0;g<u.points.length;g++)c=
u.points[g],c.name===a&&(console.log("Removed element from points "+a),u.points.splice(g,1));for(g=0;g<u.lines.length;g++)c=u.lines[g],c.name===a&&(console.log("Removed element from lines "+a),u.lines.splice(g,1));for(g=0;g<u.conics.length;g++)c=u.conics[g],c.name===a&&(console.log("Removed element from conics "+a),u.conics.splice(g,1));Tb={}}function pd(a,g){var c=u.csnames[g.args[0]].homog,p=u.csnames[g.args[1]].homog,b=a.homog,d=m.div(c.value[0],c.value[2]),c=m.div(c.value[1],c.value[2]),f=m.div(p.value[0],
p.value[2]),p=m.div(p.value[1],p.value[2]),e=m.div(b.value[0],b.value[2]),b=m.div(b.value[1],b.value[2]);return m._helper.isAlmostReal(d)&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(f)&&m._helper.isAlmostReal(p)&&m._helper.isAlmostReal(e)&&m._helper.isAlmostReal(b)?(d=d.value.real,c=c.value.real,f=f.value.real,p=p.value.real,e=e.value.real,b=b.value.real,d=Math.sqrt((d-f)*(d-f)+(c-p)*(c-p))-Math.sqrt((d-e)*(d-e)+(c-b)*(c-b))-Math.sqrt((f-e)*(f-e)+(p-b)*(p-b)),1E-15>d*d):!1}function rc(a,g){a.isshowing=
!0;if(a.args)for(var c=0;c<a.args.length;c++)if(!u.csnames[a.args[c]].isshowing){a.isshowing=!1;return}g.visiblecheck&&g.visiblecheck(a)}function Nd(a){a._bbox=null;if(a.isshowing&&!1!==a.visible){var g={size:a.size},c=a.homog,p=a.text,b=n[a.type].getText,p=b?b(a):p.replace(/@[$#]"([^"\\]|\\.)*"/g,function(a){var c,g;try{if(c=JSON.parse(a.substring(2)),g=u.csnames[c],!g)return"?"}catch(p){return"?"}switch(a.charAt(1)){case "$":return g.printname||c;case "#":return"V"!==g.kind?"?":w(g.value)}}),b=
null;if(a.html)var d=a._textCache||{text:!1},f=a.html,e=f.parentNode,m=e.parentNode,b=function(c,g,p,b,ba){d.invisible&&m.style.removeProperty("display");if(c!==d.text||g!==d.font||p!==d.x||b!==d.y||ba!==d.align){g!==d.font&&(f.style.font=g,f.style.lineHeight=ja.lineHeight);c!==d.text&&!1!==c&&!1===qd(f,c,g)&&(c=!1);m.style.left=p+"px";m.style.top=b+"px";if(ba||e.style.transform)e.style.transform="translateX("+-100*ba+"%)";a._textCache={text:c,font:g,x:p,y:b,align:ba}}};p=v.string(p);a.dock&&(a.dock.to?
c=u.csnames[a.dock.to].homog:rd.hasOwnProperty(a.dock.corner)&&(c=t.screenbounds$0([],{}),c=c.value[rd[a.dock.corner]]),g.offset=a.dock.offset);a.align&&(g.align=v.string(a.align));c&&(a._bbox=D.drawtext([c,p],g,b))}else a.html&&(a.html.parentNode.parentNode.style.display="none",a._textCache={invisible:!0})}function Md(){function a(){var a=e++/c._traces.length,g=c._traces[f];g&&(a*=p*a*a,t.draw$1([g],{size:m.real(b),color:c.color,alpha:m.real(a)}));b*=d}for(var g=0;g<u.points.length;g++){var c=u.points[g];
if(c.drawtrace){c._traces_tick===c.traceskip?(c._traces[c._traces_index]=c.homog,c._traces_index=(c._traces_index+1)%c._traces.length,c._traces_tick=0):c._traces_tick++;var p=c.alpha.value.real,b=c.size.value.real,d=1;1!==c.tracedim&&(b*=c.tracedim,d=Math.pow(c.tracedim,-1/c._traces.length));var f,e=0;for(f=c._traces_index;f<c._traces.length;++f)a();for(f=0;f<c._traces_index;++f)a()}}}function db(a,g){var c="Assertion failed: "+g;if(!a)throw console.log(c),La(),"undefined"!==typeof alert&&alert(c),
Error(c);}function $d(a){if(a!==ya.length){var g,c,p=sc.length;gb.length<a*p?(g=2*a,gb=new Float64Array(p*g)):g=gb.length/p|0;for(c=0;c<p;++c)bb[sc[c]]=gb.subarray(c*g,c*g+a);a=ya;ma=bb["in"];Fa=bb.out;ya=bb.good;ya.set(a)}}function lb(){ya.set(ma);sd(!1);for(var a=ya.length,g=Math.abs,c=0;c<a;c+=2)g(ya[c])>1E12*g(ya[c+1])&&(ya[c+1]=0)}function Ub(){if(vb)Ga=!0;else throw td;}function ud(a,g,c,p,b){return v.add(p,v.mult(c,v.sub(b,p)))}function Ld(){I&&(I.currentMouseAndScripts=[]);tc=!0;Ga=!1;ma.set(ya);
if(aa){var a=aa.mover,g=f.realVector([U.x+aa.offset.x,U.y+aa.offset.y,1]);uc(a,g,"mouse");aa.prev.x=U.x;aa.prev.y=U.y}A(ia.move);A(ia.draw);Ga||lb();tc=!1;I&&(I.fullLog.push(f.turnIntoCSList([f.turnIntoCSList(I.currentMouseAndScripts)])),I.length>I.logLength&&I.splice(0,I.length-I.logLength),I.currentMouseAndScripts=null,I.postMouseHooks.forEach(function(a){a()}))}function Ea(a,g,c){tc?uc(a,g,c):(lb(),Ga=!1,uc(a,g,c),lb())}function uc(a,g,c){I&&I.currentMouseAndScripts&&(I.currentMover=[]);Fa.set(ma);
var p=1E4,b;b=Tb[a.name];if(!b){var d={},e=0;b=[];d[a.name]=a;for(var k=u.gslp,h=0;h<k.length;++h){var l=k[h],rb=l.args;if(rb)for(var q=0;q<rb.length;++q)d.hasOwnProperty(rb[q])&&(d[l.name]=l,b[e++]=l)}Tb[a.name]=b}var d=-1,e=.9,r,t,w,k=n[a.type],h=k.parameterPath||ud;ua=a.stateIdx;l=k.getParamFromState(a);ua=za=a.stateIdx;rb=k.getParamForInput(a,g,c);for(q=d+e;d!==q;){var y=q*q,x=.5/(1+y),x=m.complex(2*q*x+.5,(1-y)*x);vb=d+.5*e<=d||0===p;0===p&&console.log("tracing limit Reached");y=!1;I&&I.currentMouseAndScripts&&
(I.currentStep=[]);try{ua=za=a.stateIdx;var z=h(a,q,x,l,rb);I&&(I.currentParam=z);x=Fa;Fa=ma;k.putParamToState(a,z);Fa=x;za=a.stateIdx;I&&(I.currentElement=a);k.updatePosition(a,!0);db(ua===a.stateIdx+k.stateSize,"State fully consumed");db(za===a.stateIdx+k.stateSize,"State fully updated");for(r=0;r<b.length;++r)t=b[r],w=n[t.type],ua=za=t.stateIdx,I&&(I.currentElement=t),w.updatePosition(t,!1),db(ua===t.stateIdx+w.stateSize,"State fully consumed"),db(za===t.stateIdx+w.stateSize,"State fully updated");
I&&(I.currentElement=null);d=q;e*=1.25;q+=e;1<=q&&(q=1);Fa=ma;ma=x}catch(A){if(A!==td)throw A;e*=.5;q=d+e;--p;y=!0}I&&I.currentMouseAndScripts&&(I.currentMover.push(f.turnIntoCSList([f.turnIntoCSList(I.currentStep),v.wrap(y),v.wrap(d),v.wrap(q),v.wrap(I.currentParam)])),I.currentStep=null,I.currentParam=null)}sd(Ga);for(r=0;r<b.length;++r)t=b[r],w=n[t.type],rc(t,w);I&&I.currentMouseAndScripts&&(I.currentMouseAndScripts.push(f.turnIntoCSList([f.turnIntoCSList(I.currentMover),v.wrap(Ga),v.wrap(a.name),
g,v.wrap(c),l,rb])),I.currentMover=null)}function Id(){lb();vb=!0;for(var a=u.gslp,g=0;g<a.length;g++){var c=a[g],p=n[c.type];ua=za=c.stateIdx;p.updatePosition(c,!1);rc(c,p)}a=Fa;Fa=ma;ma=a;lb()}function sd(a){var g=q.tracingStateReport;"string"===typeof g&&(document.getElementById(g).textContent=a?"BAD":"GOOD")}function ae(){return f.turnIntoCSList(I.fullLog.slice())}function be(a){var g=JSON.stringify(I.fullLog);a=new Blob([g],{type:a?"application/octet-stream":"application/json"});return window.URL.createObjectURL(a)}
function wb(){var a=ua;ua+=2;return m.complex(ma[a],ma[a+1])}function Z(a){for(var g=Array(a),c=0;c<a;++c)g[c]=wb();return f.turnIntoCSList(g)}function Va(a){Fa[za]=a.value.real;Fa[za+1]=a.value.imag;za+=2}function T(a){for(var g=0,c=a.value.length;g<c;++g)Va(a.value[g])}function Ha(a,g){var c=Z(3),p=Z(3),c=vd(a,g,c,p);T(c[0]);T(c[1]);return f.turnIntoCSList(c)}function vd(a,g,c,p){if(eb)return[a,g];var b=f.projectiveDistMinScal(c,a),d=f.projectiveDistMinScal(c,g),e=f.projectiveDistMinScal(p,a),m=
f.projectiveDistMinScal(p,g),h=f.projectiveDistMinScal(c,p),l=f.projectiveDistMinScal(a,g),n=b+m,q=d+e,r;n>q?(r=[g,a],n=q):r=[a,g];q=function(){};if(I&&I.currentStep){var t=[I.labelTracing2,v.wrap(I.currentElement.name),f.turnIntoCSList(r),f.turnIntoCSList([c,p]),f.realMatrix([[b,d],[e,m]]),v.wrap(n),v.wrap(h),v.wrap(l),k];I.currentStep.push(f.turnIntoCSList(t));q=function(a){I.hasOwnProperty(a)||(I[a]=v.wrap(a));t[t.length-1]=I[a]}}f._helper.isNaN(a)||f._helper.isNaN(g)?(q("Tracing failed due to NaNs."),
Ga=!0):h>3*n&&l>3*n?q("Normal case, everything all right."):1E-5>l?1E-5>h?q("Staying inside singularity."):(q("Moved into singularity."),Ga=!0):1E-5>h?q("Moved out of singularity."):(vb?q("Reached refinement limit, giving up."):q("Need to refine."),Ub());return r}function vc(a,g,c,p){var b=Z(3),d=Z(3),e=Z(3),m=Z(3);a=ce(a,g,c,p,b,d,e,m);T(a[0]);T(a[1]);T(a[2]);T(a[3]);return f.turnIntoCSList(a)}function ce(a,g,c,p,b,d,e,m){var h=function(){};b=[b,d,e,m];a=[a,g,c,p];if(eb)return a;d=0;p=Array(4);for(c=
0;4>c;c++)for(p[c]=Array(4),m=0;4>m;m++)e=f.projectiveDistMinScal(b[c],a[m]),p[c][m]=e;e=Zb(p);g=Array(4);for(c=0;4>c;++c)g[c]=a[e[c]],d+=p[c][e[c]];var l=1*d,n=Infinity,q=Infinity;for(c=0;4>c;c++){if(f._helper.isNaN(a[c]))return h("Tracing failed due to NaNs."),Ga=!0,g;for(m=c+1;4>m;m++)e=f.projectiveDistMinScal(b[c],b[m]),n>e&&(n=e),e=f.projectiveDistMinScal(g[c],g[m]),q>e&&(q=e)}if(I&&I.currentStep){var r=[I.labelTracing4,v.wrap(I.currentElement.name),f.turnIntoCSList(g),f.turnIntoCSList(b),f.realMatrix(p),
v.wrap(d),v.wrap(n),v.wrap(q),k];I.currentStep.push(f.turnIntoCSList(r));h=function(a){I.hasOwnProperty(a)||(I[a]=v.wrap(a));r[r.length-1]=I[a]}}n>l&&q>l||(1E-5>q?1E-5>n?h("Staying inside singularity."):(h("Moved into singularity."),Ga=!0):1E-5>n?h("Moved out of singularity."):(vb?h("Reached refinement limit, giving up."):h("Need to refine."),Ub()));return g}function wd(a){var g=a.length,c,p;if(eb){for(c=0;c<g;++c)ua+=2*a[c].value.length,T(a[c]);return a}var b=Array(g),d=Array(g),e=Array(g),m=99,
h=99,l=Array(g);for(c=0;c<g;++c)b[c]=Z(a[c].value.length),d[c]=f.normSquared(b[c]).value.real,e[c]=f.normSquared(a[c]).value.real,l[c]=Array(g);var n;for(c=0;c<g;++c){for(p=0;p<g;++p)n=f.sesquilinearproduct(b[c],a[p]).value,n=(n.real*n.real+n.imag*n.imag)/(d[c]*e[p]),l[c][p]=1-n;for(p=c+1;p<g;++p)n=f.sesquilinearproduct(b[c],b[p]).value,n=(n.real*n.real+n.imag*n.imag)/(d[c]*d[p]),m>1-n&&(m=1-n),n=f.sesquilinearproduct(a[c],a[p]).value,n=(n.real*n.real+n.imag*n.imag)/(e[c]*e[p]),h>1-n&&(h=1-n)}n=Zb(l);
p=Array(g);d=0;e=!1;for(c=0;c<g;++c){var d=d+l[c][n[c]],q=p[c]=a[n[c]];T(q);e|=f._helper.isNaN(q)}e|=isNaN(d);a=function(){};if(I&&I.currentStep){var r=[I.labelTracingSesq,v.wrap(I.currentElement.name),f.turnIntoCSList(p),f.turnIntoCSList(b),f.realMatrix(l),v.wrap(d),v.wrap(m),v.wrap(h),k];I.currentStep.push(f.turnIntoCSList(r));a=function(a){I.hasOwnProperty(a)||(I[a]=v.wrap(a));r[r.length-1]=I[a]}}e?(a("Tracing failed due to NaNs."),Ga=!0):m>3*d&&h>3*d?a("Normal case, everything all right."):1E-5>
h?1E-5>m?a("Staying inside singularity."):(a("Moved into singularity."),Ga=!0):1E-5>m?a("Moved out of singularity."):(vb?a("Reached refinement limit, giving up."):a("Need to refine."),Ub());return p}function fb(a){if(fb.hasOwnProperty(a.kind))fb[a.kind](a)}function xd(a,g){return function(){a.incidences.push(g.name);g.incidences.push(a.name)}}function yd(a,g){return{toString:function(){return"point "+a.name+" incident line "+g.name},apply:xd(a,g),holds:function(){var c=f.scaldiv(f.abs(a.homog),a.homog),
p=f.scaldiv(f.abs(g.homog),g.homog);return 1E-13>m.abs(f.scalproduct(c,p)).value.real}}}function zd(a,g){return{toString:function(){return"point "+a.name+" incident conic "+g.name},apply:xd(a,g),holds:function(){var c=v.mult(g.matrix,a.homog),c=v.mult(a.homog,c),c=m.abs(c);1E-13>c.value.real&&(a.incidences.push(g.name),g.incidences.push(a.name))}}}function md(){if(0!==hb.length){for(var a=0;a<hb.length;++a)hb[a].apply();hb=[]}}function wc(a,g,c){var p=document.createElement("div"),d=document.createElement("img");
d.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAPoCAQAAAC1v1zVAAAAGklEQVR42u3BMQEAAADCoPVPbQ0PoAAAgHcDC7gAAVI8ZnwAAAAASUVORK5CYII=";p.className="CindyJS-baseline";p.appendChild(d);d=document.createElement("div");d.className="CindyJS-button";p.appendChild(d);for(var f=2;f<arguments.length;++f)d.appendChild(arguments[f]);ga.parentNode.appendChild(p);a.html=arguments[arguments.length-1];p=b;if(a.script)var e=Ma(a.script),p=function(){A(e);b()};c.addEventListener(g,p);n.Text.initialize(a)}
function Ka(){}function de(a){if(!/^Select/.test(a.type)&&!n[a.type].isMovable)return null;var g=v.unwrap,c=m.add;switch(a.kind){case "P":case "L":case "Text":return g(a.homog);case "C":return a=a.matrix.value,{xx:g(a[0].value[0]),yy:g(a[1].value[1]),zz:g(a[2].value[2]),xy:g(c(a[0].value[1],a[1].value[0])),xz:g(c(a[0].value[2],a[2].value[0])),yz:g(c(a[1].value[2],a[2].value[1]))};default:return null}}function ee(a){var g={};g.offset=v.unwrap(a.offset);a.to&&(g.to=a.to);a.corner&&(g.corner=a.corner);
return g}function fe(a){var g={};ge.forEach(function(c){if(a.hasOwnProperty(c)){var b=v.unwrap(a[c]);null!==b&&void 0!==b&&(g[c]=b)}});if("P"===a.kind&&(!a.movable||a.pinned)&&g.color){var c=m.real(1/ja.dimDependent);g.color=v.unwrap(f.scalmult(c,a.color))}if(c=de(a))g.pos=c;a.dock&&(g.dock=ee(a.dock));return g}function he(){var a=[];u.gslp.forEach(function(g){g.tmp||a.push(fe(g))});return a}function Jd(){Aa.forEach(function(a){var g=(a.geo||[]).map(function(a){return u.csnames[a]});N[a.type].reset(a,
g[0],g)})}function dc(a){hc=0!==a.length;Aa=[];ca=[];xc=[];N.Environment.init({});a.forEach(function(a){a.behavior?(a.name&&(a.behavior.geo=[a.name]),a=a.behavior,a.gravity&&(a.gravity=-a.gravity)):c=a.geo;var c=(a.geo||[]).map(function(a){return u.csnames[a]}),p=c[0],b=N[a.type];b?(b.init&&b.init(a,p,c),p&&(p.behavior=a,"Mass"===a.type?ca.push(p):"Spring"===a.type&&xc.push(p)),Aa.push(a)):(console.error(a),console.error("Behavior "+a.type+" not implemented yet"))})}var va=this,ha,ia={},Ua=!1,Nb=
!0,Cb=0,Nc=.5,gc=0,Lb=10,Ad=5/360,Kd=.32/Ad/1E3*2,Jb=1,Ta=0,ac=0,bc=!1,zb=!1,ga,yb,Sa=Number.isFinite||function(a){return"number"===typeof a&&isFinite(a)},sa,z,W,V,u,ab,jc=k,kc=k,Na={play:Ka,pause:Ka,stop:Ka},fc=null,Ab=function(a,g){var c=[];Ab=function(a,g){c.push({img:a,id:g})};Ab(a,g);var p=va.getBaseDir()+"images/Icons.svg",b=new XMLHttpRequest;b.onreadystatechange=function(){if(b.readyState===XMLHttpRequest.DONE)if(200!==b.status)console.error("Failed to load CindyJS Icons.svg from "+p+": "+
b.statusText);else{var a=b.responseXML,g=a.documentElement,d={},f,e;for(f=g.firstChild;f;f=e)e=f.nextSibling,f.nodeType===Node.ELEMENT_NODE&&"http://www.w3.org/2000/svg"===f.namespaceURI&&"g"===f.localName.toLowerCase()&&(g.removeChild(f),f.setAttribute("style","display:inline"),d[f.getAttribute("id")]=f);var m=new XMLSerializer;Ab=function(c,p){if(d.hasOwnProperty(p)){var b=d[p];g.appendChild(b);var f;try{f=m.serializeToString(a)}finally{g.removeChild(b)}c.src="data:image/svg+xml;charset=utf-8,"+
encodeURIComponent(f)}};c.forEach(function(a){Ab(a.img,a.id)});c=null}};b.responseType="document";b.open("GET",p);b.send()},Oc=1,Bb=null,kb=[],ic=!1,qa={config:q,startup:Q,shutdown:La,evokeCS:function(a){a=Ma(a,!1);console.log(a);A(a);b()},play:S,pause:Za,stop:Ja,evalcs:function(a){return A(Ma(a,!1))},parse:function(a){return Ma(a)},niceprint:w,canvas:null},$b=!1,Kb=0;q.use&&q.use.forEach(function(a){var g=null;q.plugins&&(g=q.plugins[a]);g||(g=va._pluginRegistry[a]);g||(++Kb,console.log("Loading script for plugin "+
a),va.loadScript(a+"-plugin",a+"-plugin.js",function(){console.log("Successfully loaded plugin "+a);0===--Kb&&$b&&Q()},function(){console.error("Failed to auto-load plugin "+a);0===--Kb&&$b&&Q()}))});jb.prototype=new $a;pb.prototype=new $a;Ya.prototype=new $a;var U={},aa,Pc="",Qc=0,Ob;Ob=q.isNode?process.nextTick:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,
0)};var lc=null,ie=[0,8,1,0,"ga578a63"],m={_helper:{}};m._helper.roundingfactor=1E4;m._helper.angleroundingfactor=10;m._helper.niceround=function(a,g){return Math.round(a*g)/g};m.niceprint=function(a,g){g=g||m._helper.roundingfactor;if("Angle"===a.usage)return m._helper.niceangle(a);var c=m._helper.niceround(a.value.real,g),p=m._helper.niceround(a.value.imag,g);return 0===p?""+c:0<p?""+c+" + i*"+p:""+c+" - i*"+-p};var yc=q.angleUnit||"\u00b0",je=yc.replace(/\s+/g,""),Bd=2*Math.PI,ke=1/Bd,le={rad:Bd,
"\u00b0":360,deg:360,degree:360,gra:400,grad:400,turn:1,cyc:1,rev:1,rot:1,"\u03c0":2,pi:2,quad:4};m._helper.niceangle=function(a){var g=le[je];if(!g)return m.niceprint(v.withUsage(a,null));if("function"===typeof g)return g(a);a=m.niceprint(m.realmult(g*ke,a),200<g?m._helper.angleroundingfactor:null);return-1===a.indexOf("i*")?a+yc:"("+a+")"+yc};m.complex=function(a,g){return{ctype:"number",value:{real:a,imag:g}}};m.real=function(a){return{ctype:"number",value:{real:a,imag:0}}};m.zero=m.real(0);m.one=
m.real(1);m.infinity=m.complex(Infinity,Infinity);m.nan=m.complex(NaN,NaN);m._helper.input=function(a){return"object"===typeof a?m.complex(+a.r,+a.i):m.real(+a)};m.argmax=function(a,g){return a.value.real*a.value.real+a.value.imag*a.value.imag<g.value.real*g.value.real+g.value.imag*g.value.imag?g:a};m.max=function(a,g){return{ctype:"number",value:{real:Math.max(a.value.real,g.value.real),imag:Math.max(a.value.imag,g.value.imag)}}};m.min=function(a,g){return{ctype:"number",value:{real:Math.min(a.value.real,
g.value.real),imag:Math.min(a.value.imag,g.value.imag)}}};m.add=function(a,g){return{ctype:"number",value:{real:a.value.real+g.value.real,imag:a.value.imag+g.value.imag}}};m.sub=function(a,g){return{ctype:"number",value:{real:a.value.real-g.value.real,imag:a.value.imag-g.value.imag}}};m.neg=function(a){return{ctype:"number",value:{real:-a.value.real,imag:-a.value.imag}}};m.re=function(a){return{ctype:"number",value:{real:a.value.real,imag:0}}};m.im=function(a){return{ctype:"number",value:{real:a.value.imag,
imag:0}}};m.conjugate=function(a){return{ctype:"number",value:{real:a.value.real,imag:-a.value.imag}}};m.round=function(a){return{ctype:"number",value:{real:Math.round(a.value.real),imag:Math.round(a.value.imag)}}};m.ceil=function(a){return{ctype:"number",value:{real:Math.ceil(a.value.real),imag:Math.ceil(a.value.imag)}}};m.floor=function(a){return{ctype:"number",value:{real:Math.floor(a.value.real),imag:Math.floor(a.value.imag)}}};m.mult=function(a,g){return{ctype:"number",value:{real:a.value.real*
g.value.real-a.value.imag*g.value.imag,imag:a.value.real*g.value.imag+a.value.imag*g.value.real}}};m.realmult=function(a,g){return{ctype:"number",value:{real:a*g.value.real,imag:a*g.value.imag}}};m.multiMult=function(a){var g=a[0];if("number"!==g.ctype)return k;for(var c=1;c<a.length;c++){if("number"!==a[c].ctype)return k;g=m.mult(g,a[c])}return g};m.abs2=function(a,g){return{ctype:"number",value:{real:a.value.real*a.value.real+a.value.imag*a.value.imag,imag:0}}};m.abs=function(a){return m.sqrt(m.abs2(a))};
m.inv=function(a){var g=a.value.real*a.value.real+a.value.imag*a.value.imag;return{ctype:"number",value:{real:a.value.real/g,imag:-a.value.imag/g}}};m.div=function(a,g){var c=a.value.real,p=a.value.imag,b=g.value.real,d=g.value.imag,f=b*b+d*d;return{ctype:"number",value:{real:(c*b+p*d)/f,imag:(p*b-c*d)/f}}};m.eps=1E-10;m.epsbig=1E-6;m.snap=function(a){var g=a.value.real;a=a.value.imag;Math.floor(g+m.eps)!==Math.floor(g-m.eps)&&(g=Math.round(g));Math.floor(a+m.eps)!==Math.floor(a-m.eps)&&(a=Math.round(a));
return{ctype:"number",value:{real:g,imag:a}}};m.exp=function(a){var g=Math.exp(a.value.real);return{ctype:"number",value:{real:g*Math.cos(a.value.imag),imag:g*Math.sin(a.value.imag)}}};m.cos=function(a){var g=a.value.real;a=a.value.imag;var c=Math.exp(a),p=c*Math.sin(-g),b=c*Math.cos(-g),c=Math.exp(-a);return{ctype:"number",value:{real:(b+c*Math.cos(g))/2,imag:(p+c*Math.sin(g))/2}}};m.sin=function(a){var g=a.value.real;a=a.value.imag;var c=Math.exp(a),p=c*Math.sin(-g),b=c*Math.cos(-g),c=Math.exp(-a);
return{ctype:"number",value:{real:-(p-c*Math.sin(g))/2,imag:(b-c*Math.cos(g))/2}}};m.tan=function(a){var g=m.sin(a);a=m.cos(a);return m.div(g,a)};m.arccos=function(a){var g=m.mult(a,m.neg(a)),g=m.sqrt(m.add(m.real(1),g));a=m.add(m.mult(a,m.complex(0,1)),g);a=m.add(m.mult(m.log(a),m.complex(0,1)),m.real(.5*Math.PI));return v.withUsage(a,"Angle")};m.arcsin=function(a){var g=m.mult(a,m.neg(a)),g=m.sqrt(m.add(m.real(1),g));a=m.add(m.mult(a,m.complex(0,1)),g);a=m.mult(m.log(a),m.complex(0,-1));return v.withUsage(a,
"Angle")};m.arctan=function(a){var g=m.log(m.add(m.mult(a,m.complex(0,-1)),m.real(1)));a=m.log(m.add(m.mult(a,m.complex(0,1)),m.real(1)));g=m.mult(m.sub(g,a),m.complex(0,.5));return v.withUsage(g,"Angle")};m.arctan2=function(a,g){var c;if(void 0===g)c=m.real(Math.atan2(a.value.imag,a.value.real));else if(m._helper.isReal(a)&&m._helper.isReal(g))c=m.real(Math.atan2(g.value.real,a.value.real));else{c=m.add(a,m.mult(m.complex(0,1),g));var p=m.sqrt(m.add(m.mult(a,a),m.mult(g,g)));c=m.mult(m.complex(0,
-1),m.log(m.div(c,p)))}return v.withUsage(c,"Angle")};m.sqrt=function(a){var g=a.value.real,c=a.value.imag;a=Math.sqrt(Math.sqrt(g*g+c*c));g=Math.atan2(c,g);return{ctype:"number",value:{real:a*Math.cos(g/2),imag:a*Math.sin(g/2)}}};m.powRealExponent=function(a,g){var c=a.value.real,p=a.value.imag,b=Math.pow(Math.sqrt(c*c+p*p),g),c=Math.atan2(p,c);return{ctype:"number",value:{real:b*Math.cos(c*g),imag:b*Math.sin(c*g)}}};m.log=function(a){var g=a.value.real;a=a.value.imag;var c=Math.sqrt(g*g+a*a),p=
Math.atan2(a,g);0>a&&(p+=2*Math.PI);0===a&&0>g&&(p=Math.PI);p>Math.PI&&(p-=2*Math.PI);return m.snap({ctype:"number",value:{real:Math.log(c),imag:p}})};m.pow=function(a,g){return m._helper.isZero(g)?m.one:m._helper.isZero(a)?m.zero:m._helper.isReal(g)?m.powRealExponent(a,g.value.real):m.exp(m.mult(m.log(a),g))};m.mod=function(a,g){var c=a.value.real,p=g.value.real,b=a.value.imag,d=g.value.imag,c=c-Math.floor(c/p)*p,b=b-Math.floor(b/d)*d;0===p&&(c=0);0===d&&(b=0);return m.snap({ctype:"number",value:{real:c,
imag:b}})};m._helper.seed="NO";m._helper.seedrandom=function(a){a-=Math.floor(a);m._helper.seed=.8*a+.1};m._helper.rand=function(){if("NO"===m._helper.seed)return Math.random();var a=m._helper.seed,a=1E3*Math.sin(1E3*a),a=a-Math.floor(a);return m._helper.seed=a};m._helper.randnormal=function(){var a=m._helper.rand(),g=m._helper.rand();return Math.sqrt(-2*Math.log(a))*Math.cos(2*Math.PI*g)};m._helper.isEqual=function(a,g){return a.value.real===g.value.real&&a.value.imag===g.value.imag};m._helper.isLessThan=
function(a,g){return a.value.real<g.value.real||a.value.real===g.value.real&&a.value.imag<g.value.imag};m._helper.compare=function(a,g){return m._helper.isLessThan(a,g)?-1:m._helper.isEqual(a,g)?0:1};m._helper.isAlmostEqual=function(a,g,c){var p=m.eps;"undefined"!==typeof c&&(p=c);c=a.value.real-g.value.real;a=a.value.imag-g.value.imag;return c<p&&c>-p&&a<p&&a>-p};m._helper.isZero=function(a){return 0===a.value.real&&0===a.value.imag};m._helper.isAlmostZero=function(a){var g=a.value.real;a=a.value.imag;
return g<m.eps&&g>-m.eps&&a<m.eps&&a>-m.eps};m._helper.isReal=function(a){return 0===a.value.imag};m._helper.isAlmostReal=function(a){a=a.value.imag;return a<m.epsbig&&a>-m.epsbig};m._helper.isNaN=function(a){return isNaN(a.value.real)||isNaN(a.value.imag)};m._helper.isFinite=function(a){return isFinite(a.value.real)&&isFinite(a.value.imag)};m._helper.isAlmostImag=function(a){a=a.value.real;return a<m.epsbig&&a>-m.epsbig};m._helper.z3a=m.complex(-.5,.5*Math.sqrt(3));m._helper.z3b=m.complex(-.5,-.5*
Math.sqrt(3));m._helper.cub1={ctype:"list",value:[m.one,m.one,m.one]};m._helper.cub2={ctype:"list",value:[m._helper.z3a,m.one,m._helper.z3b]};m._helper.cub3={ctype:"list",value:[m._helper.z3b,m.one,m._helper.z3a]};m.solveCubic=function(a,g,c,p){a=m._helper.solveCubicHelper(a,g,c,p);return[f.scalproduct(m._helper.cub1,a),f.scalproduct(m._helper.cub2,a),f.scalproduct(m._helper.cub3,a)]};m._helper.solveCubicHelper=function(a,g,c,p){var b=a.value.real;a=a.value.imag;var d=g.value.real;g=g.value.imag;
var e=c.value.real,k=c.value.imag,h=p.value.real,l=p.value.imag,n=b*e-a*k;c=b*k+a*e;p=4*n-(d*d-g*g);var q=4*c-2*d*g,r=b*d-a*g,t=b*g+a*d,u=p*e-q*k-18*(r*h-t*l),q=p*k+q*e-18*(r*l+t*h);p=27*(b*b-a*a);var v=54*a*b,w=p*h-v*l,y=p*l+v*h,x=d*d-g*g,z=2*d*g,A=x*d-z*g,B=x*g+z*d,C=w+4*A,v=y+4*B;p=27*(u*e-q*k+C*h-v*l);q=27*(u*k+q*e+C*l+v*h);C=Math.sqrt(Math.sqrt(p*p+q*q));v=Math.atan2(q,p);q=C*Math.sin(v/2);p=C*Math.cos(v/2);A=-2*A+9*(r*e-t*k)-w+(p*b-q*a);B=-2*B+9*(r*k+t*e)-y+(p*a+q*b);p=Math.exp(Math.log(Math.sqrt(A*
A+B*B))/3);e=Math.atan2(B,A);v=p*Math.sin(e/3);q=p*Math.cos(e/3);p*=p;e*=2;n=2*x-6*n;c=2*z-6*c;z=-1.5874010519681996*(d*q-g*v);d=-1.5874010519681996*(d*v+g*q);g=1.2599210498948732*p*Math.cos(e/3);e=1.2599210498948732*p*Math.sin(e/3);p=4.762203155904599*(q*b-v*a);q=4.762203155904599*(q*a+v*b);b=p*p+q*q;v=(-n*q+c*p)/b;n=(n*p+c*q)/b;c=v;v=(-z*q+d*p)/b;z=(z*p+d*q)/b;d=v;v=(-g*q+e*p)/b;g=(g*p+e*q)/b;e=v;return f.turnIntoCSList([m.complex(n,c),m.complex(z,d),m.complex(g,e)])};var f={_helper:{},turnIntoCSList:function(a){return{ctype:"list",
value:a}}};f.EMPTY=f.turnIntoCSList([]);f.asList=function(a){return"list"===a.ctype?a:"number"===a.ctype||"boolean"===a.ctype||"geo"===a.ctype?f.turnIntoCSList([a]):f.EMPTY};f.realVector=function(a){for(var g=[],c=0;c<a.length;c++)g[c]={ctype:"number",value:{real:a[c],imag:0}};return{ctype:"list",value:g}};f._helper.unitvector=function(a,g){var c=f.zerovector(a);c.value[Math.floor(g.value.real-1)]=m.real(1);return c};f.idMatrix=function(a){for(var g=f.zeromatrix(a,a),c=m.real(1),p=0;p<a.value.real;p++)g.value[p].value[p]=
c;return g};f._helper.flippedidMatrix=function(a){for(var g=f.zeromatrix(a,a),c=m.real(1),p=0;p<a.value.real;p++)g.value[p].value[a.value.real-p-1]=c;return g};f.println=function(a){for(var g=[],c=0;c<a.value.length;c++)if("number"===a.value[c].ctype)g[c]=m.niceprint(a.value[c]);else if("list"===a.value[c].ctype)f.println(a.value[c]);else return k;"number"===a.value[0].ctype&&console.log(g)};f.matrix=function(a){return f.turnIntoCSList(a.map(f.turnIntoCSList))};f.realMatrix=function(a){for(var g=
a.length,c=Array(g),p=0;p<g;p++)c[p]=f.realVector(a[p]);return f.turnIntoCSList(c)};f.ex=f.realVector([1,0,0]);f.ey=f.realVector([0,1,0]);f.ez=f.realVector([0,0,1]);f.linfty=f.realVector([0,0,1]);f.ii=f.turnIntoCSList([m.complex(1,0),m.complex(0,1),m.complex(0,0)]);f.jj=f.turnIntoCSList([m.complex(1,0),m.complex(0,-1),m.complex(0,0)]);f.fundDual=f.realMatrix([[1,0,0],[0,1,0],[0,0,0]]);f.fund=f.realMatrix([[0,0,0],[0,0,0],[0,0,1]]);f.sequence=function(a,g){for(var c=[],p=0,b=Math.round(a.value.real);b<
Math.round(g.value.real)+1;b++)c[p]={ctype:"number",value:{real:b,imag:0}},p++;return{ctype:"list",value:c}};f.pairs=function(a){for(var g=[],c=0;c<a.value.length-1;c++)for(var p=c+1;p<a.value.length;p++)g.push({ctype:"list",value:[a.value[c],a.value[p]]});return{ctype:"list",value:g}};f.triples=function(a){for(var g=[],c=0;c<a.value.length-2;c++)for(var p=c+1;p<a.value.length-1;p++)for(var b=p+1;b<a.value.length;b++)g.push({ctype:"list",value:[a.value[c],a.value[p],a.value[b]]});return{ctype:"list",
value:g}};f.cycle=function(a){for(var g=[],c=0;c<a.value.length-1;c++)g[c]={ctype:"list",value:[a.value[c],a.value[c+1]]};g.push({ctype:"list",value:[a.value[a.value.length-1],a.value[0]]});return{ctype:"list",value:g}};f.consecutive=function(a){for(var g=[],c=0;c<a.value.length-1;c++)g[c]={ctype:"list",value:[a.value[c],a.value[c+1]]};return{ctype:"list",value:g}};f.reverse=function(a){for(var g=[],c=a.value.length-1;0<=c;c--)g.push(a.value[c]);return{ctype:"list",value:g}};f.directproduct=function(a,
g){for(var c=[],p=0;p<a.value.length;p++)for(var b=0;b<g.value.length;b++)c.push({ctype:"list",value:[a.value[p],g.value[b]]});return{ctype:"list",value:c}};f.concat=function(a,g){for(var c=[],p=0;p<a.value.length;p++)c.push(a.value[p]);for(p=0;p<g.value.length;p++)c.push(g.value[p]);return{ctype:"list",value:c}};f.prepend=function(a,g){var c=[];c[0]=a;for(var p=0;p<g.value.length;p++)c[p+1]=g.value[p];return{ctype:"list",value:c}};f.append=function(a,g){for(var c=[],p=0;p<a.value.length;p++)c[p]=
a.value[p];c.push(g);return{ctype:"list",value:c}};f.contains=function(a,g){for(var c=0;c<a.value.length;c++)if(D.equals(a.value[c],g).value)return{ctype:"boolean",value:!0};return{ctype:"boolean",value:!1}};f.common=function(a,g){for(var c=[],p=0,b=0;b<a.value.length;b++){for(var d=!1,f=a.value[b],e=0;e<g.value.length;e++)d=d||D.equals(f,g.value[e]).value;d&&(c[p]=a.value[b],p++)}return{ctype:"list",value:c}};f.remove=function(a,g){for(var c=[],p=0,b=0;b<a.value.length;b++){for(var d=!1,f=a.value[b],
e=0;e<g.value.length;e++)d=d||D.equals(f,g.value[e]).value;d||(c[p]=a.value[b],p++)}return{ctype:"list",value:c}};f.sort1=function(a){a=a.value.slice();a.sort(v.compare);return f.turnIntoCSList(a)};f._helper.isEqual=function(a,g){return f.equals(a,g).value};f._helper.isLessThan=function(a,g){for(var c=a.value.length,p=g.value.length,b=0;!(b>=c||b>=p)&&v.isEqual(a.value[b],g.value[b]);)b++;return b===c&&b<p?!0:b===p&&b<c||b===c&&b===p?!1:v.isLessThan(a.value[b],g.value[b])};f._helper.compare=function(a,
g){return f._helper.isLessThan(a,g)?-1:f._helper.isEqual(a,g)?0:1};f.equals=function(a,g){if(a.value.length!==g.value.length)return{ctype:"boolean",value:!1};for(var c=!0,p=0;p<a.value.length;p++)var b=a.value[p],d=g.value[p],c="list"===b.ctype&&"list"===d.ctype?c&&f.equals(b,d).value:c&&B([b,d],[]).value;return{ctype:"boolean",value:c}};f.almostequals=function(a,g){if(a.value.length!==g.value.length)return{ctype:"boolean",value:!1};for(var c=!0,p=0;p<a.value.length;p++)var b=a.value[p],d=g.value[p],
c="list"===b.ctype&&"list"===d.ctype?c&&f.almostequals(b,d).value:c&&pa([b,d],[]).value;return{ctype:"boolean",value:c}};f._helper.isAlmostReal=function(a){for(var g=!0,c=0;c<a.value.length;c++)var p=a.value[c],g="list"===p.ctype?g&&f._helper.isAlmostReal(p):g&&m._helper.isAlmostReal(p);return g};f._helper.isAlmostZero=function(a){for(var g=0;g<a.value.length;g++){var c=a.value[g];if("list"===c.ctype){if(!f._helper.isAlmostZero(c))return!1}else if(!m._helper.isAlmostZero(c))return!1}return!0};f._helper.isNaN=
function(a){for(var g=!1,c=0;c<a.value.length;c++)var p=a.value[c],g="list"===p.ctype?g||f._helper.isNaN(p):g||m._helper.isNaN(p);return g};f.set=function(a){var g=[],c=0;a=a.value.slice();a.sort(v.compare);for(var p=0;p<a.length;p++)0!==p&&B([g[g.length-1],a[p]],[]).value||(g[c]=a[p],c++);return{ctype:"list",value:g}};f.maxval=function(a){for(var g=m.zero,c=0;c<a.value.length;c++){var p=a.value[c];"number"===p.ctype&&(g=m.argmax(g,p));"list"===p.ctype&&(g=m.argmax(g,f.maxval(p)))}return g};f.maxIndex=
function(a,g,c){var p=0;void 0!==c&&(p=c);c=p;for(var b=g(a.value[p]).value.real;p<a.value.length;++p){var d=g(a.value[p]).value.real;d>b&&(c=p,b=d)}return c};f.normalizeMax=function(a){var g=m.inv(f.maxval(a));return m._helper.isFinite(g)?f.scalmult(g,a):a};f.normalizeZ=function(a){var g=m.inv(a.value[2]);return f.scalmult(g,a)};f.dehom=function(a){a=a.value.slice();var g=a.length-1,c=m.inv(a[g]);a.length=g;for(var p=0;p<g;++p)a[p]=m.mult(c,a[p]);return f.turnIntoCSList(a)};f.normalizeAbs=function(a){var g=
m.inv(f.abs(a));return f.scalmult(g,a)};f.max=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=[],p=0;p<a.value.length;p++)c[p]=v.max(a.value[p],g.value[p]);return{ctype:"list",value:c}};f.min=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=[],p=0;p<a.value.length;p++)c[p]=v.min(a.value[p],g.value[p]);return{ctype:"list",value:c}};f.scaldiv=function(a,g){if("number"!==a.ctype)return k;for(var c=[],p=0;p<g.value.length;p++){var b=g.value[p];c[p]="number"===b.ctype?
v.div(b,a):"list"===b.ctype?f.scaldiv(a,b):k}return{ctype:"list",value:c}};f.scalmult=function(a,g){if("number"!==a.ctype)return k;for(var c=[],p=0;p<g.value.length;p++){var b=g.value[p];c[p]="number"===b.ctype?v.mult(b,a):"list"===b.ctype?f.scalmult(a,b):k}return{ctype:"list",value:c}};f.add=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=[],p=0;p<a.value.length;p++){var b=a.value[p],d=g.value[p];c[p]="number"===b.ctype&&"number"===d.ctype?v.add(b,d):"list"===b.ctype&&"list"===
d.ctype?f.add(b,d):k}return{ctype:"list",value:c}};f.sub=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=[],p=0;p<a.value.length;p++){var b=a.value[p],d=g.value[p];c[p]="number"===b.ctype&&"number"===d.ctype?m.sub(b,d):"list"===b.ctype&&"list"===d.ctype?f.sub(b,d):k}return{ctype:"list",value:c}};f.abs2=function(a){for(var g=0,c=0;c<a.value.length;c++){var p=a.value[c];if("number"===p.ctype)g+=m.abs2(p).value.real;else if("list"===p.ctype)g+=f.abs2(p).value.real;else return k}return{ctype:"number",
value:{real:g,imag:0}}};f.abs=function(a){return m.sqrt(f.abs2(a))};f.normalizeMaxXX=function(a){for(var g=-1E4,c=m.real(1),p=0;p<a.value.length;p++){var b=m.abs(a.value[p]);b.value.real>g&&(c=a.value[p],g=b.value.real)}return f.scaldiv(c,a)};f.recursive=function(a,g){for(var c=[],p=0;p<a.value.length;p++){var b=C(a.value[p]);c[p]="number"===b.ctype?m[g](b):"list"===b.ctype?f[g](b):k}return{ctype:"list",value:c}};f.re=function(a){return f.recursive(a,"re")};f.neg=function(a){return f.recursive(a,
"neg")};f.im=function(a){return f.recursive(a,"im")};f.conjugate=function(a){return f.recursive(a,"conjugate")};f.transjugate=function(a){return f.transpose(f.conjugate(a))};f.round=function(a){return f.recursive(a,"round")};f.ceil=function(a){return f.recursive(a,"ceil")};f.floor=function(a){return f.recursive(a,"floor")};f._helper.colNumb=function(a){if("list"!==a.ctype)return-1;for(var g=-1,c=0;c<a.value.length;c++){if("list"!==a.value[c].ctype)return-1;if(0===c)g=a.value[c].value.length;else if(g!==
a.value[c].value.length)return-1}return g};f._helper.isNumberVecN=function(a,g){if("list"!==a.ctype||a.value.length!==g)return!1;for(var c=0;c<a.value.length;c++)if("number"!==a.value[c].ctype)return!1;return!0};f.isNumberVector=function(a){if("list"!==a.ctype)return{ctype:"boolean",value:!1};for(var g=0;g<a.value.length;g++)if("number"!==a.value[g].ctype)return{ctype:"boolean",value:!1};return{ctype:"boolean",value:!0}};f.isNumberVectorN=function(a,g){if("list"!==a.ctype)return{ctype:"boolean",value:!1};
if(a.value)for(var c=0;c<a.value.length;c++)if("number"!==a.value[c].ctype)return{ctype:"boolean",value:!1};return{ctype:"boolean",value:!0}};f.isNumberMatrix=function(a){if(-1===f._helper.colNumb(a))return{ctype:"boolean",value:!1};for(var g=0;g<a.value.length;g++)if(!f.isNumberVector(a.value[g]).value)return{ctype:"boolean",value:!1};return{ctype:"boolean",value:!0}};f.scalproduct=function(a,g){if(a.value.length!==g.value.length)return k;for(var c={ctype:"number",value:{real:0,imag:0}},p=0;p<g.value.length;p++){var b=
a.value[p],d=g.value[p];if("number"===b.ctype&&"number"===d.ctype)c=m.add(m.mult(b,d),c);else return k}return c};f.sesquilinearproduct=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=0,p=0,b=0;b<g.value.length;b++)var d=a.value[b].value,f=g.value[b].value,c=c+(d.real*f.real+d.imag*f.imag),p=p+(d.real*f.imag-d.imag*f.real);return m.complex(c,p)};f.normSquared=function(a){for(var g=0,c=0;c<a.value.length;c++)var p=a.value[c].value,g=g+(p.real*p.real+p.imag*p.imag);return m.real(g)};
f.productMV=function(a,g){if(a.value[0].value.length!==g.value.length)return k;for(var c=[],p=0;p<a.value.length;p++){for(var b={ctype:"number",value:{real:0,imag:0}},d=a.value[p],e=0;e<g.value.length;e++){var h=d.value[e],l=g.value[e];if("number"===h.ctype&&"number"===l.ctype)b=m.add(m.mult(h,l),b);else return k}c[p]=b}return f.turnIntoCSList(c)};f.productVM=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=[],p=0;p<g.value[0].value.length;p++){for(var b={ctype:"number",value:{real:0,
imag:0}},d=0;d<a.value.length;d++){var e=a.value[d],h=g.value[d].value[p];if("number"===e.ctype&&"number"===h.ctype)b=m.add(m.mult(e,h),b);else return k}c[p]=b}return f.turnIntoCSList(c)};f.productMM=function(a,g){if(a.value[0].value.length!==g.value.length)return k;for(var c=[],p=0;p<a.value.length;p++){var b=f.productVM(a.value[p],g);c[p]=b}return f.turnIntoCSList(c)};f.mult=function(a,g){return a.value.length===g.value.length&&f.isNumberVector(a).value&&f.isNumberVector(g).value?f.scalproduct(a,
g):f.isNumberMatrix(a).value&&g.value.length===a.value[0].value.length&&f.isNumberVector(g).value?f.productMV(a,g):f.isNumberMatrix(g).value&&a.value.length===g.value.length&&f.isNumberVector(a).value?f.productVM(a,g):f.isNumberMatrix(a).value&&f.isNumberMatrix(g)&&g.value.length===a.value[0].value.length?f.productMM(a,g):k};f.projectiveDistMinScal=function(a,g){var c=f.abs(a),p=f.abs(g);if(0===c.value.real||0===p.value.real)return 0;var b=f.conjugate(g),b=f.scalproduct(a,b),b=m._helper.isAlmostZero(b)?
m.real(1):m.div(b,m.abs(b)),c=f.scaldiv(c,a),p=f.scaldiv(p,g),p=f.scalmult(b,p),b=f.abs(f.add(c,p)),p=f.abs(f.sub(c,p));return Math.min(b.value.real,p.value.real)};f.conicDist=function(a,g){var c=G(a),p=G(g);console.log(w(c),w(p));return f.projectiveDistMinScal(c,p)};f.crossOperator=function(a){var g=a.value[0],c=a.value[1];a=a.value[2];return f.turnIntoCSList([f.turnIntoCSList([m.zero,m.neg(a),c]),f.turnIntoCSList([a,m.zero,m.neg(g)]),f.turnIntoCSList([m.neg(c),g,m.zero])])};f.cross=function(a,g){var c=
m.sub(m.mult(a.value[1],g.value[2]),m.mult(a.value[2],g.value[1])),p=m.sub(m.mult(a.value[2],g.value[0]),m.mult(a.value[0],g.value[2])),b=m.sub(m.mult(a.value[0],g.value[1]),m.mult(a.value[1],g.value[0]));return f.turnIntoCSList([c,p,b])};f.crossratio3harm=function(a,g,c,p,b){var d=f.det3(a,c,b),e=f.det3(g,p,b);a=f.det3(a,p,b);g=f.det3(g,c,b);d=m.mult(d,e);e=m.mult(a,g);return f.turnIntoCSList([d,e])};f.crossratio3=function(a,g,c,p,b){a=f.crossratio3harm(a,g,c,p,b);return m.div(a.value[0],a.value[1])};
f.veronese=function(a){var g=m.mult(a.value[0],a.value[0]),c=m.mult(a.value[1],a.value[1]),p=m.mult(a.value[2],a.value[2]),b=m.mult(a.value[0],a.value[1]),d=m.mult(a.value[0],a.value[2]);a=m.mult(a.value[1],a.value[2]);return f.turnIntoSCList([g,c,p,b,d,a])};f.matrixFromVeronese=function(a){var g=a.value[0],c=a.value[1],p=a.value[2],b=m.realmult(.5,a.value[3]),d=m.realmult(.5,a.value[4]);a=m.realmult(.5,a.value[5]);return f.turnIntoCSList([f.turnIntoCSList([g,b,d]),f.turnIntoCSList([b,c,a]),f.turnIntoCSList([d,
a,p])])};f.det2=function(a,g){var c=m.mult(a.value[0],g.value[1]);return c=m.sub(c,m.mult(a.value[1],g.value[0]))};f.det3=function(a,g,c){return m.complex(a.value[0].value.real*g.value[1].value.real*c.value[2].value.real-a.value[0].value.imag*g.value[1].value.imag*c.value[2].value.real-a.value[0].value.imag*g.value[1].value.real*c.value[2].value.imag-a.value[0].value.real*g.value[1].value.imag*c.value[2].value.imag+a.value[2].value.real*g.value[0].value.real*c.value[1].value.real-a.value[2].value.imag*
g.value[0].value.imag*c.value[1].value.real-a.value[2].value.imag*g.value[0].value.real*c.value[1].value.imag-a.value[2].value.real*g.value[0].value.imag*c.value[1].value.imag+a.value[1].value.real*g.value[2].value.real*c.value[0].value.real-a.value[1].value.imag*g.value[2].value.imag*c.value[0].value.real-a.value[1].value.imag*g.value[2].value.real*c.value[0].value.imag-a.value[1].value.real*g.value[2].value.imag*c.value[0].value.imag-a.value[0].value.real*g.value[2].value.real*c.value[1].value.real+
a.value[0].value.imag*g.value[2].value.imag*c.value[1].value.real+a.value[0].value.imag*g.value[2].value.real*c.value[1].value.imag+a.value[0].value.real*g.value[2].value.imag*c.value[1].value.imag-a.value[2].value.real*g.value[1].value.real*c.value[0].value.real+a.value[2].value.imag*g.value[1].value.imag*c.value[0].value.real+a.value[2].value.imag*g.value[1].value.real*c.value[0].value.imag+a.value[2].value.real*g.value[1].value.imag*c.value[0].value.imag-a.value[1].value.real*g.value[0].value.real*
c.value[2].value.real+a.value[1].value.imag*g.value[0].value.imag*c.value[2].value.real+a.value[1].value.imag*g.value[0].value.real*c.value[2].value.imag+a.value[1].value.real*g.value[0].value.imag*c.value[2].value.imag,-a.value[0].value.imag*g.value[1].value.imag*c.value[2].value.imag+a.value[0].value.imag*g.value[1].value.real*c.value[2].value.real+a.value[0].value.real*g.value[1].value.real*c.value[2].value.imag+a.value[0].value.real*g.value[1].value.imag*c.value[2].value.real-a.value[2].value.imag*
g.value[0].value.imag*c.value[1].value.imag+a.value[2].value.imag*g.value[0].value.real*c.value[1].value.real+a.value[2].value.real*g.value[0].value.real*c.value[1].value.imag+a.value[2].value.real*g.value[0].value.imag*c.value[1].value.real-a.value[1].value.imag*g.value[2].value.imag*c.value[0].value.imag+a.value[1].value.imag*g.value[2].value.real*c.value[0].value.real+a.value[1].value.real*g.value[2].value.real*c.value[0].value.imag+a.value[1].value.real*g.value[2].value.imag*c.value[0].value.real+
a.value[0].value.imag*g.value[2].value.imag*c.value[1].value.imag-a.value[0].value.imag*g.value[2].value.real*c.value[1].value.real-a.value[0].value.real*g.value[2].value.real*c.value[1].value.imag-a.value[0].value.real*g.value[2].value.imag*c.value[1].value.real+a.value[2].value.imag*g.value[1].value.imag*c.value[0].value.imag-a.value[2].value.imag*g.value[1].value.real*c.value[0].value.real-a.value[2].value.real*g.value[1].value.real*c.value[0].value.imag-a.value[2].value.real*g.value[1].value.imag*
c.value[0].value.real+a.value[1].value.imag*g.value[0].value.imag*c.value[2].value.imag-a.value[1].value.imag*g.value[0].value.real*c.value[2].value.real-a.value[1].value.real*g.value[0].value.real*c.value[2].value.imag-a.value[1].value.real*g.value[0].value.imag*c.value[2].value.real)};f.det4m=function(a){var g=a.value,c=g[0].value,p=c[0].value,b=+p.real,d=+p.imag,p=c[1].value,f=+p.real,e=+p.imag,p=c[2].value,k=+p.real,h=+p.imag,p=c[3].value,l=+p.real,n=+p.imag,c=g[1].value,p=c[0].value,q=+p.real,
r=+p.imag,p=c[1].value,t=+p.real,u=+p.imag,p=c[2].value,v=+p.real,w=+p.imag,p=c[3].value,c=+p.real,p=+p.imag;a=b*t-d*u-f*q+e*r;var x=b*u+d*t-f*r-e*q,y=b*v-d*w-k*q+h*r,z=b*w+d*v-k*r-h*q,A=b*c-d*p-l*q+n*r,B=b*p+d*c-l*r-n*q,C=f*v-e*w-k*t+h*u,D=f*w+e*v-k*u-h*t,E=f*c-e*p-l*t+n*u,F=f*p+e*c-l*u-n*t,G=k*c-h*p-l*v+n*w,H=k*p+h*c-l*w-n*v,c=g[2].value,p=c[0].value,b=+p.real,d=+p.imag,p=c[1].value,f=+p.real,e=+p.imag,p=c[2].value,k=+p.real,h=+p.imag,p=c[3].value,l=+p.real,n=+p.imag,c=g[3].value,p=c[0].value,q=
+p.real,r=+p.imag,p=c[1].value,t=+p.real,u=+p.imag,p=c[2].value,v=+p.real,w=+p.imag,p=c[3].value,c=+p.real,p=+p.imag,g=b*t-d*u-f*q+e*r,I=b*u+d*t-f*r-e*q,J=b*v-d*w-k*q+h*r,K=b*w+d*v-k*r-h*q,L=b*c-d*p-l*q+n*r,b=b*p+d*c-l*r-n*q,d=f*v-e*w-k*t+h*u,q=f*w+e*v-k*u-h*t,r=f*c-e*p-l*t+n*u,f=f*p+e*c-l*u-n*t,e=k*c-h*p-l*v+n*w,k=k*p+h*c-l*w-n*v;return m.complex(a*e-x*k-y*r+z*f+A*d-B*q+C*L-D*b-E*J+F*K+G*g-H*I,a*k+x*e-y*f-z*r+A*q+B*d+C*b+D*L-E*K-F*J+G*I+H*g)};f.eucangle=function(a,g){var c=f.cross(a,f.linfty),p=
f.cross(g,f.linfty),b=f.det3(f.ez,c,f.ii),c=f.det3(f.ez,c,f.jj),d=f.det3(f.ez,p,f.ii),p=f.det3(f.ez,p,f.jj),b=m.div(m.mult(b,p),m.mult(d,c)),b=m.log(b);return b=m.mult(b,m.complex(0,.5))};f.zerovector=function(a){a=Math.floor(a.value.real);for(var g=Array(a),c=0;c<a;c++)g[c]=0;return f.realVector(g)};f.zeromatrix=function(a,g){for(var c=Math.floor(a.value.real),p=Array(c),b=0;b<c;b++)p[b]=f.zerovector(g);return f.turnIntoCSList(p)};f.vandermonde=function(a){for(var g=a.value.length,c=f.zeromatrix(g,
g),p=0;p<g;p++)for(var b=0;b<g;b++)c.value[p].value[b]=m.pow(a.value[p],m.real(b-1));return c};f.transpose=function(a){for(var g=[],c=a.value[0].value.length,b=a.value.length,d=0;d<c;d++){for(var e=[],m=0;m<b;m++)e[m]=a.value[m].value[d];g[d]=f.turnIntoCSList(e)}return f.turnIntoCSList(g)};f.column=function(a,g){for(var c=[],b=a.value.length,d=Math.floor(g.value.real-1),e=0;e<b;e++)c[e]=a.value[e].value[d];return f.turnIntoCSList(c)};f.row=function(a,g){for(var c=[],b=a.value[0].value.length,d=Math.floor(g.value.real-
1),e=0;e<b;e++)c[e]=a.value[d].value[e];return f.turnIntoCSList(c)};f.adjoint2=function(a){var g=a.value[0].value[0],c=a.value[1].value[0],b=Array(2);b[0]=f.turnIntoCSList([a.value[1].value[1],m.neg(a.value[0].value[1])]);b[1]=f.turnIntoCSList([m.neg(c),g]);return b=f.turnIntoCSList(b)};f.adjoint3=function(a){var g,c,b,d,f,e,m,k,h,l,n,q,r,t,u,v,w;g=a.value[0].value;c=g[0].value;b=c.real;d=c.imag;c=g[1].value;f=c.real;e=c.imag;c=g[2].value;m=c.real;k=c.imag;g=a.value[1].value;c=g[0].value;h=c.real;
l=c.imag;c=g[1].value;n=c.real;q=c.imag;c=g[2].value;r=c.real;t=c.imag;g=a.value[2].value;c=g[0].value;a=c.real;u=c.imag;c=g[1].value;v=c.real;w=c.imag;c=g[2].value;g=c.real;c=c.imag;return{ctype:"list",value:[{ctype:"list",value:[{ctype:"number",value:{real:n*g-r*v-q*c+t*w,imag:n*c-r*w-v*t+g*q}},{ctype:"number",value:{real:-f*g+m*v+e*c-k*w,imag:-f*c+m*w+v*k-g*e}},{ctype:"number",value:{real:f*r-m*n-e*t+k*q,imag:f*t-m*q-n*k+r*e}}]},{ctype:"list",value:[{ctype:"number",value:{real:-h*g+r*a+l*c-t*u,
imag:-h*c+r*u+a*t-g*l}},{ctype:"number",value:{real:b*g-m*a-d*c+k*u,imag:b*c-m*u-a*k+g*d}},{ctype:"number",value:{real:-b*r+m*h+d*t-k*l,imag:-b*t+m*l+h*k-r*d}}]},{ctype:"list",value:[{ctype:"number",value:{real:h*v-n*a-l*w+q*u,imag:h*w-n*u-a*q+v*l}},{ctype:"number",value:{real:-b*v+f*a+d*w-e*u,imag:-b*w+f*u+a*e-v*d}},{ctype:"number",value:{real:b*n-f*h-d*q+e*l,imag:b*q-f*l-h*e+n*d}}]}]}};f.inverse=function(a){var g=a.value.length;if(g!==a.value[0].value.length)return console.log("Inverse works only for square matrices"),
k;if(2===g)return f.scaldiv(f.det(a),f.adjoint2(a));if(3===g)return f.scaldiv(f.det(a),f.adjoint3(a));g=f.LUdecomp(a);a=a.value.length;var c=m.real(0),b=m.real(1),d=f.zerovector(m.real(a));d.value[0]=b;for(var e=Array(a),h=0;h<a;h++)e[h]=f._helper.LUsolve(g,d),d.value[h]=c,d.value[h+1]=b;e=f.turnIntoCSList(e);return e=f.transpose(e)};f.linearsolve=function(a,g){return 2===a.value.length?f.linearsolveCramer2(a,g):3===a.value.length?f.linearsolveCramer3(a,g):f.LUsolve(a,g)};f.getDiag=function(a){if(a.value.length!==
a.value[0].value.length)return k;for(var g=Array(a.value.length),c=0;c<a.value.length;c++)g[c]=a.value[c].value[c];return f.turnIntoCSList(g)};f.getSubDiag=function(a){if(a.value.length!==a.value[0].value.length)return k;for(var g=Array(a.value.length-1),c=0;c<a.value.length-1;c++)g[c]=a.value[c+1].value[c];return f.turnIntoCSList(g)};f.eig2=function(a){var g=m.add(a.value[0].value[0],a.value[1].value[1]);a=f.det2(a.value[0],a.value[1]);var c=m.mult(g,g),b=g=m.mult(g,m.real(.5));a=m.sqrt(m.sub(m.div(c,
m.real(4)),a));g=m.add(g,a);b=m.sub(b,a);return f.turnIntoCSList([g,b])};f.eig=function(a,g){var c=g||!0,b=a,d=m.real(b.value.length),e=d.value.real;m.real(0);var b=f._helper.QRIteration(b)[0],b=f.getDiag(b),b=f.sort1(b),d=f.idMatrix(d,d),h=Array(e),h=f.turnIntoCSList(h);if(c){for(var k,l,n,q=0,r=!1,c=0;c<e;c++)r?l=k.value[q]:(k=b.value[c],k=f.sub(a,f.scalmult(k,d)),k=f.nullSpace(k),l=k.value[0],void 0!==l&&(n=l)),void 0===l&&(l=n),1E-8>f.abs(l).value.real&&0===q&&(l=f._helper.inverseIteration(a,
b.value[c])),h.value[c]=f._helper.isAlmostZeroVec(l)?l:f.scaldiv(f.abs(l),l),c<e-1&&((r=1E-6>m.abs(m.sub(b.value[c],b.value[c+1])).value.real)?q++:q=0);h=f.transpose(h)}return f.turnIntoCSList([b,h])};f._helper.isNormalMatrix=function(a){return 1E-10>f.abs(f.sub(a,f.transjugate(a))).value.real};f._helper.QRIteration=function(a,g){var c,b=a;c=m.real(b.value.length);var d=c.value.real,e=c.value.real;m.real(0);var k;f.idMatrix(c,c);var h=f.zeromatrix(c,c),l=f.idMatrix(c,c),n=g?g:2500,q,r,t,u=0,w=Array(e);
for(c=0;c<n;c++){k=f._helper.getBlock(b,[e-2,e-1],[e-2,e-1]);q=f.eig2(k);k=q.value[0];q=q.value[1];f.abs(k);f.abs(q);r=b.value[e-1].value[e-1];t=m.abs(m.sub(r,k)).value.real;r=m.abs(m.sub(r,q)).value.real;q=t<r?k:q;k=f.idMatrix(m.real(e),m.real(e));q=f.scalmult(q,k);k=f.QRdecomp(f.sub(b,q));b=v.mult(k.R,k.Q);b=f.add(b,q);k.Q=f._helper.buildBlockMatrix(k.Q,f.idMatrix(m.real(u),m.real(u)));l=v.mult(l,k.Q);if(1E-48>m.abs2(b.value[b.value.length-1].value[b.value[0].value.length-2]).value.real&&1<e){w[d-
u-1]=b.value[e-1].value[e-1];for(c=0;c<e;c++)h.value[e-1].value[c]=b.value[e-1].value[c],h.value[c].value[e-1]=b.value[c].value[e-1];b=f._helper.getBlock(b,[0,e-2],[0,e-2]);u++;e--}if(1===e){h.value[0].value[0]=b.value[0].value[0];break}if(f._helper.isUpperTriangular(b)){for(c=0;c<e;c++)h.value[c].value[c]=b.value[c].value[c];break}}return[h,l]};f.rank=function(a,g){return f.RRQRdecomp(a,g).rank};f._helper.isAlmostZeroVec=function(a){for(var g=a.value.length,c=0;c<g;c++)if(!m._helper.isAlmostZero(a.value[c]))return!1;
return!0};f._helper.isLowerTriangular=function(a){for(var g=a.value.length,c=a.value[0].value.length,b=0;b<g;b++)for(var d=b+1;d<c;d++)if(!m._helper.isAlmostZero(a.value[b].value[d]))return!1;return!0};f._helper.isUpperTriangular=function(a){return f._helper.isLowerTriangular(f.transpose(a))};f._helper.isAlmostId=function(a){var g=a.value.length,c=m.real(g);if(g!==a.value[0].value.length)return!1;a=f.sub(a,f.idMatrix(c),c);for(c=0;c<g;c++)for(var b=0;b<g;b++)if(1E-16<m.abs(a.value[c].value[b]).value.real)return!1;
return!0};f.nullSpace=function(a,g){var c=a.value.length,b=f.RRQRdecomp(f.transjugate(a),g),d=f.transpose(b.Q),b=c-b.rank.value.real,e=Array(b);d.value.reverse();for(var k,h=0;h<b;h++)k=d.value[h],e[h]=f.scaldiv(f.abs(k),k);e=f.turnIntoCSList(e);return 0<e.value.length?e:f.turnIntoCSList([f.zerovector(m.real(c))])};f._helper.isAlmostDiagonal=function(a){var g=a.value.length;m.real(g);m.real(0);if(g!==a.value[0].value.length)return!1;for(var c=0;c<g;c++)for(var b=0;b<g;b++)if(c!==b&&1E-16<m.abs(a.value[c].value[b]).value.real)return!1;
return!0};f._helper.inverseIteration=function(a,g){console.log("warning: code untested");for(var c=a.value.length,b=Array(c),d=0;d<c;d++)b[d]=2*Math.random()-.5;for(var b=f.realVector(b),c=f.idMatrix(m.real(c),m.real(c)),d=m.add(g,m.real(.1*Math.random()-.5)),e=0;100>e;e++)b=f.scaldiv(f.abs(b),b),b=f.LUsolve(f.sub(a,f.scalmult(d,c)),JSON.parse(JSON.stringify(b)));return f.scaldiv(f.abs(b),b)};f._helper.toHessenberg=function(a){var g=JSON.parse(JSON.stringify(a)),c=g.value.length,b=m.real(c-1),d=m.real(c);
m.real(1);if(f._helper.isUpperTriangular(g))return[f.idMatrix(b,b),a];var e;a=f.idMatrix(d,d);for(var k,d=1;d<c-1;d++)e=f.column(g,m.real(d)),e.value=e.value.splice(d),k=f.abs2(e).value.real,1E-16<k&&(e=f._helper.getHouseHolder(e),a=v.mult(a,e),g=v.mult(v.mult(e,g),e)),b.value.real--;return[a,g]};f._helper.swapEl=function(a,g,c){var b;"[object Array]"===Object.prototype.toString.call(a)?(b=a[g],a[g]=a[c],a[c]=b):"list"===a.ctype&&(b=a.value[g],a.value[g]=a.value[c],a.value[c]=b)};f.RRQRdecomp=function(a,
g){var c=Math.sqrt(m.eps);void 0!==g&&(c=.1*g.value.real);var c=c*c,b,d=a.value.length,e=m.real(d),k=m.real(1),h=f._helper.unitvector(m.real(a.value.length),k),l=f.idMatrix(e,e),n=JSON.parse(JSON.stringify(a)),q=f.transpose(a),r=Array(d);for(b=0;b<d;b++)r[b]=f.abs2(q.value[b]);r=f.turnIntoCSList(r);q=Array(d);for(b=0;b<d;b++)q[b]=b;b=f.maxIndex(r,m.abs);for(var t=r.value[b],u=0,w=0;1E-16<m.abs2(t).value.real;w++){u++;f._helper.swapColumn(n,w,b);f._helper.swapEl(r,w,b);f._helper.swapEl(q,w,b);b=f._helper.getBlock(n,
[w],[w]);b=f.column(b,k);t=f.abs2(b).value.real;1E-8<t&&(b=f._helper.getHouseHolder(b),b=f._helper.buildBlockMatrix(f.idMatrix(m.real(w),m.real(w)),b),l=v.mult(l,f.transjugate(b)),n=v.mult(b,n));for(b=w+1;b<d;b++)r.value[b]=m.sub(r.value[b],m.mult(n.value[w].value[b],m.conjugate(n.value[w].value[b])));b=f.maxIndex(r,m.abs2,w+1);t=r.value[b];if(w+2===d){m.abs(t).value.real>c&&u++;break}e=m.sub(e,k);h.value=h.value.splice(0,h.value.length-1)}return{Q:l,R:n,P:f.turnIntoCSList(q),rank:m.real(u)}};f._helper.getHouseHolder=
function(a){var g=m.real(a.value.length);if(1E-16>f.abs2(a))return f.idMatrix(g,g);var c,b=m.real(1),d=f._helper.unitvector(m.real(a.value.length),b);c=f._helper.QRgetAlpha(a,0);c=f.sub(a,f.scalmult(c,d));c=f.scaldiv(f.abs(c),c);a=m.div(f.sesquilinearproduct(a,c),f.sesquilinearproduct(c,a));g=f.idMatrix(g,g);return g=f.sub(g,f.scalmult(m.add(b,a),f._helper.transposeMult(c,f.conjugate(c))))};f._helper.reOrderbyPivots=function(a,g){for(var c=a.value.length.length,b=f.transpose(a),c=Array(c),d=0;d<g.length;d++)c[g[d]]=
b.value[d];c=f.turnIntoCSList(c);return f.transpose(c)};f.QRdecomp=function(a){var g,c=a.value.length,b=m.real(c);if(f._helper.isUpperTriangular(a))return{Q:f.idMatrix(b,b),R:a};var d=m.real(1),e=f._helper.unitvector(m.real(a.value.length),d),k,h=f.idMatrix(b,b);a=JSON.parse(JSON.stringify(a));for(var l=0;;l++){g=f._helper.getBlock(a,[l],[l]);g=f.column(g,d);k=f.abs2(g).value.real;1E-8<k&&(g=f._helper.getHouseHolder(g),g=f._helper.buildBlockMatrix(f.idMatrix(m.real(l),m.real(l)),g),h=v.mult(h,f.transjugate(g)),
a=v.mult(g,a));if(l+2===c)break;b=m.sub(b,d);e.value=e.value.splice(0,e.value.length-1)}return{Q:h,R:a}};f._helper.swapColumn=function(a,g,c){for(var b,d=0;d<a.value.length;d++)b=a.value[d].value[g],a.value[d].value[g]=a.value[d].value[c],a.value[d].value[c]=b};f._helper.buildBlockMatrix=function(a,g){if(0===a.value.length)return g;if(0===g.value.length)return a;for(var c=a.value.length,b=a.value[0].value.length,d=b+g.value[0].value.length,d=f.zeromatrix(m.real(c+g.value.length),m.real(d)),e=0;e<
a.value.length;e++)for(var k=0;k<a.value[0].value.length;k++)d.value[e].value[k]=a.value[e].value[k];for(e=0;e<g.value.length;e++)for(k=0;k<g.value[0].value.length;k++)d.value[c+e].value[b+k]=g.value[e].value[k];return d};f._helper.getBlock=function(a,g,c){a=JSON.parse(JSON.stringify(a));var b=g[0],d=c[0];g=void 0===g[1]?a.value.length:g[1];c=void 0===c[1]?a.value[0].value.length:c[1];g++;c++;a.value=a.value.slice(b,g);for(b=0;b<a.value.length;b++)a.value[b].value=a.value[b].value.slice(d,c);return a};
f._helper.setBlock=function(a,g,c){a=JSON.parse(JSON.stringify(a));var b=c[0];c=c[1];for(var d=g.value.length,f=g.value[0].value.length,e=0;e<d;e++)for(var k=0;k<f;k++)a.value[b+e].value[c+k]=g.value[e].value[k];return a};f._helper.transposeMult=function(a,g){if(a.value.length!==g.value.length)return k;for(var c=a.value.length,b=Array(c),d=0;d<c;d++)b[d]=f.scalmult(a.value[d],g);return f.turnIntoCSList(b)};f._helper.QRgetAlpha=function(a,g){return 0>a.value[g].value.real?f.abs(a):m.neg(f.abs(a))};
f.LUdecomp=function(a){a=JSON.parse(JSON.stringify(a));var g,c,b,d,f,e=0,k,h=a.value.length,l=h-1,n=Array(h);for(b=0;b<h;++b){f=b;d=a.value[b];k=m.abs(d.value[b]).value.real;for(c=b+1;c<h;++c)g=m.abs(a.value[c].value[b]),k<g.value.real&&(k=g.value.real,f=c);k<m.eps&&console.log("Warning: singular matrix!");n[b]=f;f!==b&&(a.value[b]=a.value[f],a.value[f]=d,d=a.value[b],e++);c=d.value[b];for(g=b+1;g<h;++g)a.value[g].value[b]=m.div(a.value[g].value[b],c);for(g=b+1;g<h;++g){f=a.value[g];for(c=b+1;c<l;++c)f.value[c]=
m.sub(f.value[c],m.mult(f.value[b],d.value[c])),++c,f.value[c]=m.sub(f.value[c],m.mult(f.value[b],d.value[c]));c===l&&(f.value[c]=m.sub(f.value[c],m.mult(f.value[b],d.value[c])))}}return{LU:a,P:n,TransPos:e}};f.LUsolve=function(a,g){var c=f.LUdecomp(a);return f._helper.LUsolve(c,g)};f._helper.LUsolve=function(a,g){var c=JSON.parse(JSON.stringify(g)),b,d=a.LU,f=d.value.length,e=JSON.parse(JSON.stringify(c)),k=a.P,h;for(b=f-1;-1!==b;--b)e.value[b]=c.value[b];for(b=0;b<f;++b)for(c=k[b],k[b]!==b&&(h=
e.value[b],e.value[b]=e.value[c],e.value[c]=h),h=d.value[b],c=0;c<b;++c)e.value[b]=m.sub(e.value[b],m.mult(e.value[c],h.value[c]));for(b=f-1;0<=b;--b){h=d.value[b];for(c=b+1;c<f;++c)e.value[b]=m.sub(e.value[b],m.mult(e.value[c],h.value[c]));e.value[b]=m.div(e.value[b],h.value[b])}return e};f.linearsolveCramer2=function(a,g){var c=f.column(a,m.real(1)),b=f.column(a,m.real(2)),d=f.det2(c,b);m._helper.isZero(d)&&console.log("A is not regular!");b=f.det2(g,b);b=m.div(b,d);c=f.det2(c,g);c=m.div(c,d);return f.turnIntoCSList([b,
c])};f.linearsolveCramer3=function(a,g){var c=f.column(a,m.real(1)),b=f.column(a,m.real(2)),d=f.column(a,m.real(3)),e=f.det3(c,b,d);m._helper.isZero(e)&&console.log("A is not regular!");var k=f.det3(g,b,d),d=f.det3(c,g,d),c=f.det3(c,b,g),k=f.turnIntoCSList([k,d,c]);return k=f.scaldiv(e,k)};f.linearsolveCGNR=function(a,g){var c=f.transpose(a),b=v.mult(c,a),c=v.mult(c,g);return f.linearsolveCG(b,c)};f.linearsolveCG=function(a,g){var c,b,d,e,k,h;e=g;b=c=f.sub(g,v.mult(a,g));for(var l=Math.ceil(1.2*a.value.length),
n=0;n<l;){n++;k=v.mult(a,b);h=d=f.scalproduct(c,c);d=m.div(d,f.scalproduct(b,k));e=f.add(e,v.mult(d,b));c=f.sub(c,v.mult(d,k));if(f.abs(c).value.real<m.eps)break;d=f.scalproduct(c,c);d=m.div(d,h);b=f.add(c,v.mult(d,b))}n>=l&&console.log("CG did not converge");return e};f.det=function(a){if(1===a.value.length)return a.value[0].value[0];if(2===a.value.length)return f.det2(a.value[0],a.value[1]);if(3===a.value.length)return f.det3(a.value[0],a.value[1],a.value[2]);if(4===a.value.length)return f.det4m(a);
var g=a.value.length,c=m.real(1),b,d,e=JSON.parse(JSON.stringify(a)),k,h,l,n;for(a=0;a<g-1;a++){d=a;for(b=a+1;b<g;b++)m.abs(e.value[b].value[a]).value.real>m.abs(e.value[d].value[a]).value.real&&(d=b);d!==a&&(b=e.value[d],e.value[d]=e.value[a],e.value[a]=b,c=m.neg(c));k=e.value[a];for(b=a+1;b<g;b++){h=e.value[b];l=m.div(h.value[a],k.value[a]);for(d=a+1;d<g-1;d+=2)n=d+1,h.value[d]=m.sub(h.value[d],m.mult(k.value[d],l)),h.value[n]=m.sub(h.value[n],m.mult(k.value[n],l));d!==g&&(h.value[d]=m.sub(h.value[d],
m.mult(k.value[d],l)))}if(m._helper.isZero(k.value[a]))return m.real(0);c=m.mult(c,k.value[a])}return m.mult(c,e.value[a].value[a])};f.LUdet=function(a){a=f.LUdecomp(a);for(var g=a.LU,c=g.value.length,b=g.value[0].value[0],d=1;d<c;d++)b=m.mult(b,g.value[d].value[d]);1===a.TransPos%2&&(b=m.neg(b));return b};f.getField=function(a,g){var c;if("homog"===g){if(f._helper.isNumberVecN(a,3))return a;if(f._helper.isNumberVecN(a,2))return f.turnIntoCSList([a.value[0],a.value[1],m.real(1)])}if("xy"===g){if(f._helper.isNumberVecN(a,
2))return a;if(f._helper.isNumberVecN(a,3))return f.turnIntoCSList([m.div(a.value[0],a.value[2]),m.div(a.value[1],a.value[2])])}if("x"===g&&f.isNumberVector(a)){c=a.value.length;if(0<c&&3!==c)return a.value[0];if(3===c)return"Point"===a.usage?m.div(a.value[0],a.value[2]):a.value[0]}if("y"===g&&f.isNumberVector(a)){c=a.value.length;if(1<c&&3!==c)return a.value[1];if(3===c)return"Point"===a.usage?m.div(a.value[1],a.value[2]):a.value[1]}return"z"===g&&f.isNumberVector(a)&&(c=a.value.length,2<c)?a.value[2]:
k};f.nil=f.turnIntoCSList([]);f.ofGeos=function(a){return f.turnIntoCSList(a.map(function(a){return{ctype:"geo",value:a}}))};var Oa={key:function(a){if("string"===a.ctype)return"s"+a.value.length+":"+a.value+";";if("number"===a.ctype)return"n"+a.value.real+","+a.value.imag+";";if("list"===a.ctype)return"l"+a.value.length+":"+a.value.map(Oa.key).join(",")+";";if("boolean"===a.ctype)return"b"+a.value+";";if("dict"===a.ctype)return a=Object.keys(a.value).sort(),"d"+a.length+":"+a.join(",")+";";"undefined"!==
a.ctype&&ha.err("Bad dictionary key: "+w(a));return"undef"},create:function(){return{ctype:"dict",value:{}}},clone:function(a){var g=Oa.create(),c;for(c in a.value)a.value.hasOwnProperty(c)&&(g.value[c]=a.value[c]);return g},put:function(a,g,c){a.value[Oa.key(g)]={key:g,value:c}},get:function(a,g,c){return(a=a.value[Oa.key(g)])?a.value:c},niceprint:function(a){return"{"+Object.keys(a.value).sort().map(function(g){g=a.value[g];return w(g.key)+":"+w(g.value)}).join(", ")+"}"}},v={_helper:{},order:{undefined:0,
"boolean":1,number:2,term:3,atomic:4,variable:5,geo:6,string:7,list:8},string:function(a){return{ctype:"string",value:a}},bool:function(a){return{ctype:"boolean",value:a}},not:function(a){return v.bool(!a.value)},isLessThan:function(a,g){return-1===v.compare(a,g)},isEqual:function(a,g){return 0===v.compare(a,g)},compareResults:function(a,g){return v.compare(a.result,g.result)},compare:function(a,g){if(a.ctype!==g.ctype)return v.order[a.ctype]-v.order[g.ctype];if("number"===a.ctype)return m._helper.compare(a,
g);if("list"===a.ctype)return f._helper.compare(a,g);if("geo"===a.ctype)return a.value.name===g.value.name?0:a.value.name<g.value.name?-1:1;if("string"===a.ctype)return a.value===g.value?0:a.value<g.value?-1:1;if("boolean"===a.ctype)return a.value===g.value?0:!1===a.value?-1:1},add:function(a,g){return"void"===a.ctype&&"number"===g.ctype||"void"===a.ctype&&"list"===g.ctype?g:"number"===a.ctype&&"number"===g.ctype?m.add(a,g):"string"===a.ctype||"string"===g.ctype?{ctype:"string",value:w(a)+w(g)}:"list"===
a.ctype&&"list"===g.ctype?f.add(a,g):k},sub:function(a,g){return"void"===a.ctype&&"number"===g.ctype?m.neg(g):"void"===a.ctype&&"list"===g.ctype?f.neg(g):"number"===a.ctype&&"number"===g.ctype?m.sub(a,g):"list"===a.ctype&&"list"===g.ctype?f.sub(a,g):k},mult:function(a,g){return"number"===a.ctype&&"number"===g.ctype?m.mult(a,g):"number"===a.ctype&&"list"===g.ctype?f.scalmult(a,g):"list"===a.ctype&&"number"===g.ctype?f.scalmult(g,a):"list"===a.ctype&&"list"===g.ctype?f.mult(a,g):k},div:function(a,g){return"number"===
a.ctype&&"number"===g.ctype?m.div(a,g):"list"===a.ctype&&"number"===g.ctype?f.scaldiv(g,a):k},max:function(a,g){return"number"===a.ctype&&"number"===g.ctype?m.max(a,g):"list"===a.ctype&&"list"===g.ctype?f.max(a,g):k},min:function(a,g){return"number"===a.ctype&&"number"===g.ctype?m.min(a,g):"list"===a.ctype&&"list"===g.ctype?f.min(a,g):k},wrap:function(a){if("number"===typeof a)return m.real(a);if("object"===typeof a&&void 0!==a.length){for(var g=[],c=0;c<a.length;c++)g[c]=v.wrap(a[c]);return f.turnIntoCSList(g)}return"string"===
typeof a?{ctype:"string",value:a}:"boolean"===typeof a?{ctype:"boolean",value:a}:k},unwrap:function(a){if("object"!==typeof a||null===a)return a;if(Array.isArray(a))return a.map(v.unwrap);switch(a.ctype){case "string":case "boolean":return a.value;case "number":return 0===a.value.imag?a.value.real:{r:a.value.real,i:a.value.imag};case "list":return a.value.map(v.unwrap);default:return null}},withUsage:function(a,g){return{ctype:a.ctype,value:a.value,usage:g}}},Wa={},P={};P[":"]=r(":");P["\u00b0"]=
function(a,g){var c=C(a[0]);return"number"===c.ctype&&"void"===a[1].ctype?v.withUsage(m.realmult(Math.PI/180,c),"Angle"):k};P._=mc;P["^"]=Kc;P["\u221a"]=function(a,g){return"void"===a[0].ctype?t.sqrt$1([a[1]],g):k};P["*"]=Ic;P["\u00d7"]=Lc;P["/"]=Jc;P["+"]=Hc;P["-"]=Xb;P["!"]=function(a,g){var c=C(a[1]);return"void"===a[0].ctype&&"boolean"===c.ctype?{ctype:"boolean",value:!c.value}:k};P["=="]=B;P["~="]=pa;P["~<"]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&
m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real-b.value.real<=-m.eps}:k};P["~>"]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real-b.value.real>=m.eps}:k};P["=:="]=r("=:=");P[">="]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real>=
b.value.real}:"string"===c.ctype&&"string"===b.ctype?{ctype:"boolean",value:c.value>=b.value}:k};P["<="]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real<=b.value.real}:"string"===c.ctype&&"string"===b.ctype?{ctype:"boolean",value:c.value<=b.value}:k};P["~>="]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?
{ctype:"boolean",value:c.value.real-b.value.real>-m.eps}:k};P["~<="]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real-b.value.real<m.eps}:k};P[">"]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real>b.value.real}:"string"===c.ctype&&"string"===b.ctype?{ctype:"boolean",
value:c.value>b.value}:k};P["<"]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real<b.value.real}:"string"===c.ctype&&"string"===b.ctype?{ctype:"boolean",value:c.value<b.value}:k};P["<>"]=Ec;P["\u2208"]=function(a,g){var c=A(a[0]),b=A(a[1]);return"list"===b.ctype?f.contains(b,c):k};P["\u2209"]=function(a,g){var c=A(a[0]),b=A(a[1]);return"list"===b.ctype?v.not(f.contains(b,c)):
k};P["&"]=na;P["%"]=Gc;P["!="]=Ec;P["~!="]=function(a,g){return v.not(pa(a,g))};P[".."]=function(a,g){var c=A(a[0]),b=A(a[1]);return"number"===c.ctype&&"number"===b.ctype?f.sequence(c,b):k};P["++"]=Rc;P["--"]=Tc;P["~~"]=Sc;P[":>"]=Uc;P["<:"]=Vc;P["="]=E;P[":="]=function(a,g,c){g="undefined"===a[1].ctype;if("undefined"===a[0].ctype||g)return k;if("function"===a[0].ctype){g=a[0].oper;var b=a[0].args,d=a[1],f=1;if(Wa.hasOwnProperty(g)){f=Wa[g];if(f.definer===c)return k;f=f.generation+1}Wa[g]={oper:g,
body:d,arglist:b,definer:c,generation:f}}"variable"===a[0].ctype&&J.setvar(a[0].name,a[1]);return k};P[":=_"]=function(a,g){if("void"!==a[1].ctype)return k;"function"===a[0].ctype&&delete Wa[a[0].oper];return k};P["::="]=r("::=");P[";"]=function(a,g){var c="void"===a[0].ctype,b="void"===a[1].ctype;if(c&&b)return k;if(!c&&b)return A(a[0]);c||b||A(a[0]);return b?k:A(a[1])};var t={},D={evaluate:function(a,g,c){if(Wa.hasOwnProperty(a)){a=Wa[a];if(void 0===a)g=k;else{var b=[];for(c=0;c<a.arglist.length;c++)b[c]=
A(g[c]);for(c=0;c<a.arglist.length;c++)J.newvar(a.arglist[c].name),J.setvar(a.arglist[c].name,b[c]);J.pushVstack("*");g=A(a.body);J.cleanVstack();for(c=0;c<a.arglist.length;c++)J.removevar(a.arglist[c].name)}return g}if(b=t[a])return b(g,c);var d=a.lastIndexOf("$");if(-1!==d&&(d=a.substr(0,d),b=t[d]))return b(g,c);ha.err("Called undefined function "+d+" (as "+a+")");return k},equals:function(a,g){return"number"===a.ctype&&"number"===g.ctype?{ctype:"boolean",value:a.value.real===g.value.real&&a.value.imag===
g.value.imag}:"string"===a.ctype&&"string"===g.ctype||"boolean"===a.ctype&&"boolean"===g.ctype?{ctype:"boolean",value:a.value===g.value}:"list"===a.ctype&&"list"===g.ctype?f.equals(a,g):"geo"===a.ctype&&"geo"===g.ctype?{ctype:"boolean",value:a.value===g.value}:{ctype:"boolean",value:!1}}},J={};J.vars=function(){var a={pi:m.real(Math.PI),"\u03c0":m.real(Math.PI),i:m.complex(0,1),"true":v.bool(!0),"false":v.bool(!1),"#":k,nil:f.turnIntoCSList([]),newline:v.string("\n"),tab:v.string("\t")},g=[],c;for(c in a)g[c]=
[a[c]];return g}();J.isVariable=function(a){return this.vars.hasOwnProperty(a)};J.create=function(a){if(this.vars.hasOwnProperty(a))return this.vars[a];var g=[null];return this.vars[a]=g};J.newvar=function(a){a=this.vars[a];a.push(k);return a};J.removevar=function(a){var g=this.vars[a];0===g.length&&console.error("Removing non-existing "+a);g.pop();0===g.length&&console.warn("Removing last "+a)};J.setvar=function(a,g){var c=this.vars[a];0===c.length&&console.error("Setting non-existing variable "+
a);void 0===g&&(console.error("Setting variable "+a+" to undefined value"),g=k);if("undefined"===g.ctype)c[c.length-1]=g;else{var b=g;null===b&&(b=k);c[c.length-1]=b}};J.undefinedWarning={};J.getvar=function(a){var g=this.vars[a];0===g.length&&console.error("Getting non-existing variable "+a);g=g[g.length-1];if(null===g){if(u.csnames.hasOwnProperty(a))return{ctype:"geo",value:u.csnames[a]};console&&console.log&&void 0===this.undefinedWarning[a]&&(this.undefinedWarning[a]=!0,console.log("Warning: Accessing undefined variable: "+
a));return k}return g};J.dump=function(a){var g=this.vars[a];console.log("*** Dump "+a);for(a=0;a<g.length;a++)console.log(a+":> "+w(g[a]))};J.vstack=[];J.pushVstack=function(a){this.vstack.push(a)};J.popVstack=function(){this.vstack.pop()};J.cleanVstack=function(){for(var a=this.vstack;0<a.length&&"*"!==a[a.length-1];)this.removevar(a[a.length-1]),a.pop();0<a.length&&a.pop()};var xa={generalFields:{color:"color",colorhsb:"",size:"size",alpha:"alpha",fillcolor:"fillcolor",fillalpha:"fillalpha",isshowing:"isshowing",
visible:"visible",name:"name",caption:"caption",trace:"",tracelength:"",selected:""},getGeoField:function(a,g){return"undefined"!==typeof u.csnames[a]?xa.getField(u.csnames[a],g):k},setGeoField:function(a,g,c){return"undefined"!==typeof u.csnames[a]?xa.setField(u.csnames[a],g,c):k},getField:function(a,g){var c;if("P"===a.kind){if("xy"===g)return c=f.dehom(a.homog),v.withUsage(c,"Point");if("homog"===g)return v.withUsage(a.homog,"Point");if("x"===g)return m.div(a.homog.value[0],a.homog.value[2]);if("y"===
g)return m.div(a.homog.value[1],a.homog.value[2])}if("L"===a.kind||"S"===a.kind){if("homog"===g)return v.withUsage(a.homog,"Line");if("angle"===g)return c=f.eucangle(f.ey,a.homog),v.withUsage(c,"Angle");if("slope"===g)return m.neg(m.div(a.homog.value[0],a.homog.value[1]))}if("Tr"===a.kind&&"matrix"===g)return a.matrix;if("C"===a.kind){if("radius"===g){var b=a.matrix;c=b.value[0].value[0];var d=b.value[0].value[2],e=b.value[1].value[2],b=b.value[2].value[2];m.mult(c,c);d=m.div(d,c);e=m.div(e,c);c=
m.div(b,c);return c=m.sqrt(m.sub(m.add(m.mult(d,d),m.mult(e,e)),c))}if("size"===g)return a.size;if("matrix"===g)return a.matrix;if("center"===g)return c=n._helper.CenterOfConic(a.matrix),c=f.dehom(c),v.withUsage(c,"Point");if("dualMatrix"===g)return f.normalizeMax(f.adjoint3(a.matrix))}if("Text"===a.kind){if("pressed"===g)return a.checkbox?v.bool(a.checkbox.checked):v.bool(!1);if(("text"===g||"currenttext"===g)&&"EditableText"===a.type)return v.string(String(a.html.value));if("xy"===g)return c=f.dehom(a.homog),
v.withUsage(c,"Point");if("homog"===g)return v.withUsage(a.homog,"Point");if("x"===g)return m.div(a.homog.value[0],a.homog.value[2]);if("y"===g)return m.div(a.homog.value[1],a.homog.value[2])}if("trace"===g)return v.bool(!!a.drawtrace);if(xa.generalFields[g])return(c=a[xa.generalFields[g]])&&c.ctype?c:"object"!==typeof c?v.wrap(c):k;if(a.behavior){if("mass"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.mass);if("radius"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.radius);if("charge"===
g&&"Mass"===a.behavior.type)return m.real(a.behavior.charge);if("friction"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.friction);if("vx"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.vx);if("vy"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.vy);if("v"===g&&"Mass"===a.behavior.type)return f.realVector([a.behavior.vx,a.behavior.vy]);if("fx"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.fx);if("fy"===g&&"Mass"===a.behavior.type)return m.real(a.behavior.fy);if("f"===
g&&"Mass"===a.behavior.type)return f.realVector([a.behavior.fx,a.behavior.fy])}return k},setField:function(a,g,c){var b;"color"===g&&f._helper.isNumberVecN(c,3)&&(a.color=c);"size"===g&&"number"===c.ctype&&(a.size=c);"alpha"===g&&"number"===c.ctype&&(a.alpha=c);"fillcolor"===g&&f._helper.isNumberVecN(c,3)&&("EditableText"===a.type?(a.fillcolor=c.value.map(function(a){return a.value.real}),a.html.style.backgroundColor=y.makeColor(a.fillcolor,a.fillalpha)):a.fillcolor=c);"fillalpha"===g&&"number"===
c.ctype&&(a.fillalpha=c);"visible"===g&&"boolean"===c.ctype&&(a.visible=c.value);"pinned"===g&&"boolean"===c.ctype&&(a.pinned=c.value);"printlabel"===g&&(a.printname=w(c));"trace"===g&&"boolean"===c.ctype&&(c.value&&!a.drawtrace?(a.drawtrace=!0,nd(a)):a.drawtrace=c.value);"P"===a.kind&&a.movable&&("xy"===g&&f._helper.isNumberVecN(c,2)&&Ea(a,f.turnIntoCSList([c.value[0],c.value[1],m.real(1)]),"homog"),"xy"===g&&f._helper.isNumberVecN(c,3)&&Ea(a,c,"homog"),"x"===g&&"number"===c.ctype&&Ea(a,f.turnIntoCSList([m.mult(c,
a.homog.value[2]),a.homog.value[1],a.homog.value[2]]),"homog"),"y"===g&&"number"===c.ctype&&Ea(a,f.turnIntoCSList([a.homog.value[0],m.mult(c,a.homog.value[2]),a.homog.value[2]]),"homog"),"homog"===g&&f._helper.isNumberVecN(c,3)&&Ea(a,c,"homog"));"homog"===g&&"L"===a.kind&&a.movable&&f._helper.isNumberVecN(c,3)&&Ea(a,c,"homog");if("angle"===g&&"Through"===a.type&&"number"===c.ctype){b=m.cos(c);var d=m.sin(c);b=f.turnIntoCSList([b,d,m.real(0)]);Ea(a,b,"dir")}"slope"===g&&"Through"===a.type&&"number"===
c.ctype&&(b=f.turnIntoCSList([m.real(1),c,m.real(0)]),Ea(a,b,"dir"));"C"===a.kind&&"radius"===g&&"CircleMr"===a.type&&"number"===c.ctype&&Ea(a,c,"radius");"Text"===a.kind&&("pressed"===g&&"boolean"===c.ctype&&a.checkbox&&(a.checkbox.checked=c.value),"text"!==g&&"currenttext"!==g||"EditableText"!==a.type||(a.html.value=w(c)),a.movable&&("xy"===g?f._helper.isNumberVecN(c,2)?a.homog=f.turnIntoCSList([c.value[0],c.value[1],m.real(1)]):f._helper.isNumberVecN(c,3)&&(a.homog=c):"homog"===g&&f._helper.isNumberVecN(c,
3)?a.homog=c:"x"===g&&"number"===c.ctype?a.homog=f.turnIntoCSList([m.mult(c,a.homog.value[2]),a.homog.value[1],a.homog.value[2]]):"y"===g&&"number"===c.ctype&&(a.homog=f.turnIntoCSList([a.homog.value[0],m.mult(c,a.homog.value[2]),a.homog.value[2]]))));a.behavior&&("mass"===g&&"Mass"===a.behavior.type&&"number"===c.ctype&&(a.behavior.mass=c.value.real),"mass"===g&&"Sun"===a.behavior.type&&"number"===c.ctype&&(a.behavior.mass=c.value.real),"friction"===g&&"Mass"===a.behavior.type&&"number"===c.ctype&&
(a.behavior.friction=c.value.real),"charge"===g&&"Mass"===a.behavior.type&&"number"===c.ctype&&(a.behavior.charge=c.value.real),"radius"===g&&"Mass"===a.behavior.type&&"number"===c.ctype&&(a.behavior.radius=c.value.real),"vx"===g&&"Mass"===a.behavior.type&&"number"===c.ctype&&(a.behavior.vx=c.value.real),"vy"===g&&"Mass"===a.behavior.type&&"number"===c.ctype&&(a.behavior.vy=c.value.real),"v"===g&&"Mass"===a.behavior.type&&f._helper.isNumberVecN(c,2)&&(a.behavior.vx=c.value[0].value.real,a.behavior.vy=
c.value[1].value.real))}};t.version$0=function(a,g){var c=["CindyJS"].concat(ie);return f.turnIntoCSList(c.map(v.wrap))};t.clearconsole$0=function(a,g){ha.clear()};t.err$1=function(a,g){var c="",b;"variable"===a[0].ctype?(c=a[0].name,b=J.getvar(a[0].name)):b=a[0];b=c+" ===> "+w(A(b));ha.err(b);return k};t.errc$1=function(a,g){var c;"variable"===a[0].ctype?(c=A(J.getvar(a[0].name)),console.log(a[0].name+" ===> "+w(c))):(c=A(a[0]),console.log(" ===> "+w(c)));return k};t.print$1=function(a,g){ha.out(w(A(a[0])),
!0);return k};t.println$1=function(a,g){ha.out(w(A(a[0])));return k};t.dump$1=function(a,g){console.log(JSON.stringify(a[0]));return k};t.repeat$2=function(a,g){return t.repeat$3([a[0],null,a[1]],g)};t.repeat$3=function(a,g){var c=C(a[0]),b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);if("number"!==c.ctype)return k;var c=Math.round(c.value.real),d=1,f=1,e=c+1,h=!1,m=!1,l=!1,n;void 0!==g.start&&(n=A(g.start),"number"===n.ctype&&(h=!0,f=n.value.real));void 0!==g.step&&(n=A(g.step),"number"===
n.ctype&&(l=!0,d=n.value.real));void 0!==g.stop&&(n=A(g.stop),"number"===n.ctype&&(m=!0,e=n.value.real));!h||m||l||(e=d*c+f);h||!m||l||(f=-d*(c-1)+e,e+=d);h||m||!l||(e=d*c+f);h&&m&&!l&&(d=(e-f)/(c-1),e+=d);h&&!m&&l&&(e=d*c+f);!h&&m&&l&&(f=-d*(c-1)+e,e+=d);h&&m&&l&&(e+=d);(f<=e&&0<d||f>=e&&0>d)&&h&&m&&l&&(c=Math.floor((e-f)/d));J.newvar(b);e=k;for(h=0;h<c;h++)J.setvar(b,{ctype:"number",value:{real:h*d+f,imag:0}}),e=A(a[2]);J.removevar(b);return e};t.while$2=function(a,g){for(var c=a[1],b=a[0],d=A(b),
f=k;"list"!==d.ctype&&d.value;)f=A(c),d=A(b);return f};t.apply$2=function(a,g){return t.apply$3([a[0],null,a[1]],g)};t.apply$3=function(a,g){var c=C(a[0]);if("list"!==c.ctype)return k;var b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);var c=c.value,d=[];J.newvar(b);for(var f=0;f<c.length;f++)J.setvar(b,c[f]),d[f]=A(a[2]);J.removevar(b);return{ctype:"list",value:d}};t.forall$2=function(a,g){return t.forall$3([a[0],null,a[1]],g)};t.forall$3=function(a,g){var c=C(a[0]);if("list"!==c.ctype)return k;
var b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);c=c.value;J.newvar(b);for(var d,f=0;f<c.length;f++)J.setvar(b,c[f]),d=A(a[2]);J.removevar(b);return d};t.select$2=function(a,g){return t.select$3([a[0],null,a[1]],g)};t.select$3=function(a,g){var c=C(a[0]);if("list"!==c.ctype)return k;var b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);var c=c.value,d=[];J.newvar(b);for(var f=0,e=0;e<c.length;e++){J.setvar(b,c[e]);var h=A(a[2]);"boolean"===h.ctype&&!0===h.value&&(d[f]=c[e],f++)}J.removevar(b);
return{ctype:"list",value:d}};t.flatten$1=function(a,g){function c(a,g){return-1===g||"list"!==a.ctype?a:[].concat.apply([],a.value.map(function(a){return c(a,g-1)}))}var b=C(a[0]);if("list"!==b.ctype)return b;var d=g.levels;void 0===d?d=1:(d=A(d),d="number"===d.ctype?d.value.real:"string"===d.ctype&&"all"===d.value?-2:1);return{ctype:"list",value:c(b,d)}};t.createvar$1=function(a,g){"variable"===a[0].ctype&&J.newvar(a[0].name);return k};t.local=function(a,g){for(var c=0;c<a.length;c++)"variable"===
a[c].ctype&&J.newvar(a[c].name);return k};t.removevar$1=function(a,g){var c=A(a[0]);"variable"===a[0].ctype&&J.removevar(a[0].name);return c};t.release=function(a,g){if(0===a.length)return k;for(var c=A(a[a.length-1]),b=0;b<a.length;b++)"variable"===a[b].ctype&&J.removevar(a[b].name);return c};t.regional=function(a,g){for(var c=0;c<a.length;c++)if("variable"===a[c].ctype){var b=a[c].name;J.newvar(b);J.pushVstack(b)}return k};t.genList=function(a,g){return f.turnIntoCSList(a.map(A))};D.assigntake=
function(a,g){var c=a.args[0],b=A(c),d=C(a.args[1]),e=k;if("list"===b.ctype||"string"===b.ctype)d=Math.floor(d.value.real),0>d&&(d=b.value.length+d+1),0<d&&d<=b.value.length&&("list"===b.ctype?(b=b.value.slice(),b[d-1]=A(g),e=f.turnIntoCSList(b)):(b=b.value,b=b.substring(0,d-1)+w(A(g))+b.substring(d,b.length),e=v.string(b)));E([c,e])};D.assigndot=function(a,g){var c=A(a.obj),b=a.key;"geo"===c.ctype&&b&&xa.setField(c.value,b,C(g));return k};D.assignlist=function(a,g){var c=a.length,b=g.length;b<c&&
(c=b);for(b=0;b<c;b++)E([a[b],g[b]],[])};t.if$2=function(a,g){return t.if$3(a,g)};t.if$3=function(a,g){var c=C(a[0]);if("boolean"===c.ctype){if(!0===c.value)return A(a[1]);if(3===a.length)return A(a[2])}else ha.err("Condition for if is not boolean");return k};t.and$2=na;t.or$2=Gc;t.xor$2=function(a,g){var c=C(a[0]),b=C(a[1]);return"boolean"===c.ctype&&"boolean"===b.ctype?{ctype:"boolean",value:c.value!==b.value}:k};t.not$1=function(a,g){var c=C(a[0]);return"boolean"===c.ctype?{ctype:"boolean",value:!c.value}:
k};D.genericListMathGen=function(a,g,c){t[a+"$1"]=function(a,b){var p=A(a[0]);if("list"!==p.ctype)return k;p=p.value;if(0===p.length)return c;for(var d=p[0],f=1;f<p.length;f++)d=g(d,p[f]);return d};var b=a+"$3";t[a+"$2"]=function(a,c){return t[b]([a[0],null,a[1]])};t[b]=function(a,b){var p=C(a[0]);if("list"!==p.ctype)return k;p=p.value;if(0===p.length)return c;var d="#";null!==a[1]&&"variable"===a[1].ctype&&(d=a[1].name);J.newvar(d);J.setvar(d,p[0]);for(var f=A(a[2]),e=1;e<p.length;e++){J.setvar(d,
p[e]);var h=A(a[2]),f=g(f,h)}J.removevar(d);return f}};D.genericListMathGen("product",v.mult,m.real(1));D.genericListMathGen("sum",v.add,m.real(0));D.genericListMathGen("max",v.max,k);D.genericListMathGen("min",v.min,k);t.max$2=function(a,g){var c=C(a[0]);if("list"===c.ctype)return t.max$3([c,null,a[1]]);var b=C(a[1]);return t.max$1([f.turnIntoCSList([c,b])])};t.min$2=function(a,g){var c=C(a[0]);if("list"===c.ctype)return t.min$3([c,null,a[1]]);var b=C(a[1]);return t.min$1([f.turnIntoCSList([c,b])])};
t.add$2=Hc;t.sub$2=Xb;t.mult$2=Ic;t.div$2=Jc;t.mod$2=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype?m.mod(c,b):k};t.pow$2=Kc;t.exp$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.exp(c):k};t.sin$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.sin(c):k};t.sqrt$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.sqrt(c):k};D.laguerre=function(a,g,c){if("list"!==a.ctype)return k;var b=a.value.length-1,d;for(d=0;d<=b;d++)if("number"!==a.value[d].ctype)return k;
if("number"!==g.ctype)return k;for(var f=[1,.3141,.5926,.5358,.9793,.2385,.6264,.3383,.2795,.0288],e,h,l,n=1;n<=c;n++){h=l=m.zero;e=a.value[b];for(d=b-1;0<=d;d--)l=m.add(h,m.mult(l,g)),h=m.add(e,m.mult(h,g)),e=m.add(a.value[d],m.mult(e,g));if(m._helper.isLessThan(m.abs(e),m.real(1E-14)))break;d=m.div(h,e);h=m.mult(d,d);e=m.sub(h,m.div(m.mult(m.real(2),l),e));l=m.sqrt(m.mult(m.real(b-1),m.sub(m.mult(m.real(b),e),h)));e=m.add(d,l);d=m.sub(d,l);m._helper.isLessThan(m.abs(e),m.abs(d))&&(e=d);d=m._helper.isLessThan(m.real(1E-14),
m.abs(e))?m.div(m.real(b),e):m.mult(m.add(m.abs(g),m.one),m.complex(Math.cos(n),Math.sin(n)));if(m._helper.isLessThan(m.abs(d),m.real(1E-14)))break;0===n%20&&n<c-19&&(d=m.mult(d,m.real(f[Math.floor(n/20)])));g=m.sub(g,d)}return g};D.quadratic_roots=function(a){if("list"!==a.ctype)return k;var g=a.value[2],c=a.value[1];a=a.value[0];if(m._helper.isZero(a))return[m.zero,m.neg(m.div(c,g))];var b=m.sqrt(m.sub(m.mult(c,c),m.mult(m.real(4),m.mult(g,a))));0<=m.re(c)&&(b=m.neg(b));return[m.div(m.sub(b,c),
m.mult(m.real(2),g)),m.div(m.mult(m.real(2),a),m.sub(b,c))]};D.roots=function(a){var g=[],c=a,b=a.value.length-1;if(0>=b)return f.turnIntoCSList([]);if(m._helper.isZero(a.value[b]))return g=D.roots(f.turnIntoCSList(a.value.slice(0,b))),f.append(g,m.infinity);if(1===b)g[0]=m.neg(m.div(a.value[0],a.value[1]));else if(2===b)g=D.quadratic_roots(a);else{for(var d=0;d<b-2;d++){g[d]=D.laguerre(a,m.zero,200);g[d]=D.laguerre(c,g[d],1);var e=[];e[b-d]=a.value[b-d];for(var h=b-d;0<h;h--)e[h-1]=m.add(a.value[h-
1],m.mult(e[h],g[d]));e.shift();a=f.turnIntoCSList(e)}a=D.quadratic_roots(a);g[b-2]=a[0];g[b-1]=a[1]}return f.turnIntoCSList(g)};t.roots$1=function(a,g){var c=C(a[0]);if("list"===c.ctype){for(var b=0;b<c.value.length;b++)if("number"!==c.value[b].ctype)return k;c=D.roots(c);return f.sort1(c)}return k};t.autodiff$3=function(a,g){var c="x",b;if("function"===a[0].ctype)b=Wa[a[0].oper].body,c=a[0].args[0].name;else if("function"===typeof a[0].impl)b=a[0];else return console.log("could not parse function"),
k;var d=C(a[1]),f=C(a[2]);if(1>f.value.real)return console.log("grade cant be < 1"),k;f=m.add(f,m.real(1));return O.autodiff(b,c,d,f)};t.cos$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.cos(c):k};t.tan$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.tan(c):k};t.arccos$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.arccos(c):k};t.arcsin$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.arcsin(c):k};t.arctan$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?
m.arctan(c):k};t.arctan2$2=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype?m.arctan2(c,b):k};t.arctan2$1=function(a,g){var c=C(a[0]);if("list"===c.ctype&&2===c.value.length){if(c=c.value,"number"===c[0].ctype&&"number"===c[1].ctype)return t.arctan2$2(c,g)}else if("number"===c.ctype)return m.arctan2(c);return k};t.log$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.log(c):k};D.recursiveGen=function(a){var g=m[a],c=f[a];t[a+"$1"]=function(a,b){var d=C(a[0]);
return"number"===d.ctype?g(d):"list"===d.ctype?c(d):k}};D.recursiveGen("im");D.recursiveGen("re");D.recursiveGen("conjugate");D.recursiveGen("round");D.recursiveGen("ceil");D.recursiveGen("floor");D.recursiveGen("abs");t.abs_infix=t.abs$1;t.random$0=function(a,g){return m.real(m._helper.rand())};t.random$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.complex(c.value.real*m._helper.rand(),c.value.imag*m._helper.rand()):k};t.seedrandom$1=function(a,g){var c=C(a[0]);"number"===c.ctype&&m._helper.seedrandom(c.value.real);
return k};t.randomnormal$0=function(a,g){return m.real(m._helper.randnormal())};t.randominteger$1=function(a,g){var c=C(a[0]);if("number"===c.ctype){var b=c.value.real|0,c=c.value.imag|0,b=b*m._helper.rand()|0,c=c*m._helper.rand()|0;return m.complex(b,c)}return k};t.randomint$1=t.randominteger$1;t.randombool$0=function(a,g){return.5<m._helper.rand()?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isreal$1=function(a,g){var c=A(a[0]);return"number"===c.ctype&&m._helper.isAlmostReal(c)?{ctype:"boolean",
value:!0}:{ctype:"boolean",value:!1}};t.isinteger$1=function(a,g){var c=A(a[0]);return"number"===c.ctype&&m._helper.isAlmostReal(c)&&c.value.real===Math.floor(c.value.real)?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.iseven$1=function(a,g){var c=A(a[0]);return"number"===c.ctype&&m._helper.isAlmostReal(c)&&c.value.real/2===Math.floor(c.value.real/2)?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isodd$1=function(a,g){var c=A(a[0]);return"number"===c.ctype&&m._helper.isAlmostReal(c)&&
(c.value.real-1)/2===Math.floor((c.value.real-1)/2)?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.iscomplex$1=function(a,g){return"number"===A(a[0]).ctype?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isstring$1=function(a,g){return"string"===A(a[0]).ctype?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.islist$1=function(a,g){return"list"===A(a[0]).ctype?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.ismatrix$1=function(a,g){var c=A(a[0]);return-1!==f._helper.colNumb(c)?
{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.iscircle$1=function(a,g){var c=A(a[0]);return"geo"===c.ctype&&"C"===c.value.kind&&"Circle"===c.value.matrix.usage?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isconic$1=function(a,g){var c=A(a[0]);return"geo"===c.ctype&&"C"===c.value.kind?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isline$1=function(a,g){var c=A(a[0]);return"geo"===c.ctype&&"L"===c.value.kind?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.ispoint$1=
function(a,g){var c=A(a[0]);return"geo"===c.ctype&&"P"===c.value.kind?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isgeometric$1=function(a,g){return"geo"===A(a[0]).ctype?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isnumbermatrix$1=function(a,g){var c=A(a[0]);return f.isNumberMatrix(c).value?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isnumbervector$1=function(a,g){var c=A(a[0]);return f.isNumberVector(c).value?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};
t.issun$1=function(a,g){var c=A(a[0]);return"geo"===c.ctype&&void 0!==c.value.behavior&&"Sun"===c.value.behavior.type?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.ismass$1=function(a,g){var c=A(a[0]);return"geo"===c.ctype&&void 0!==c.value.behavior&&"Mass"===c.value.behavior.type?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isspring$1=function(a,g){var c=A(a[0]);return"geo"===c.ctype&&void 0!==c.value.behavior&&"Spring"===c.value.behavior.type?{ctype:"boolean",value:!0}:{ctype:"boolean",
value:!1}};t.isbouncer$1=function(a,g){var c=A(a[0]);return"geo"===c.ctype&&void 0!==c.value.behavior&&"Bouncer"===c.value.behavior.type?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};t.isundefined$1=function(a,g){return"undefined"===A(a[0]).ctype?{ctype:"boolean",value:!0}:{ctype:"boolean",value:!1}};var Cd={ArcBy3:"Arc",CenterOfConic:"Center",ConicBy1p4l:"Conic1P4L",ConicBy4p1l:"Conic4P1L",ConicBy5lines:"Conic5L",ConicBy2Foci1P:"ConicFoci",ConicFromPrincipalDirections:"ConicPrincipleDirs",
Free:"FreePoint",PolarOfLine:"PolarLine",PolarOfPoint:"PolarPoint",PointOnSegment:"PointOnLine",Button:"Text",ToggleButton:"Text",TrReflectionL:"TrReflection",TrReflectionP:"TrReflection",TrReflectionC:"TrReflection",TrTranslation:"TrProjection",TrSimilarity:"TrProjection",TrAffine:"TrProjection",TransformP:"Transform",TransformL:"Transform",TransformSegment:"Transform",TransformS:"Transform",TransformPolygon:"Transform",TransformArc:"Transform",TransformConic:"Transform",TransformC:"Transform",TrMoebiusP:"Transform",
TrMoebiusL:"Transform",TrMoebiusSegment:"Transform",TrMoebiusS:"Transform",TrMoebiusPolygon:"Transform",TrMoebiusArc:"Transform",TrMoebiusCircle:"Transform",TrMoebiusC:"Transform",TrInverseMoebius:"TrInverse",Perp:"Orthogonal",Para:"Parallel",AngleBisector:"AngularBisector",IntersectLC:"IntersectionConicLine",IntersectCirCir:"IntersectionCircleCircle",OtherPointOnCircle:"PointOnCircle"};t.algorithm$1=function(a,g){var c=A(a[0]);if("geo"===c.ctype){var c=c.value,b=c.type,d=C(g.compatibility);"string"===
d.ctype&&/^cinderella$/i.test(d.value)&&(/^Select/.test(b)&&(c=u.csnames[c.args[0]],b=c.type),Cd.hasOwnProperty(b)?b=Cd[b]:"CircleMr"===b&&(b=c.pinned?"CircleByFixedRadius":"CircleByRadius"));return v.string(b)}return k};t.inputs$1=function(a,g){var c=A(a[0]);if("geo"===c.ctype){var c=c.value,b=c.type,d=[];c.args&&(d=c.args.map(function(a){return{ctype:"geo",value:u.csnames[a]}}));if(/^Select/.test(b)||n[b].isMovable)switch(c.kind){case "P":case "L":d.push(c.homog);break;case "C":d.push(c.matrix)}return f.turnIntoCSList(d)}return k};
t.moveto$2=function(a,g){var c=A(a[0]),b=C(a[1]);"geo"===c.ctype&&(c=c.value,f._helper.isNumberVecN(b,2)?xa.setField(c,"xy",b):f._helper.isNumberVecN(b,3)&&xa.setField(c,"homog",b));return k};t.matrixrowcolumn$1=function(a,g){var c=A(a[0]);return-1!==f._helper.colNumb(c)?f.realVector([c.value.length,c.value[0].value.length]):k};t.rowmatrix$1=function(a,g){var c=A(a[0]);return"list"===c.ctype?f.turnIntoCSList([c]):k};t.columnmatrix$1=function(a,g){var c=A(a[0]);return"list"===c.ctype?f.turnIntoCSList(c.value.map(function(a){return f.turnIntoCSList([a])})):
k};t.submatrix$3=function(a,g){var c=A(a[0]),b=A(a[1]),d=A(a[2]);if("list"===c.ctype&&"number"===b.ctype&&"number"===d.ctype){var e=Math.round(b.value.real),b=Math.round(d.value.real),c=c.value.slice();0<b&&b<=c.length&&c.splice(b-1,1);var h=!0,c=c.map(function(a){if("list"!==a.ctype)h=!1;else return a=a.value.slice(),0<e&&e<=a.length&&a.splice(e-1,1),f.turnIntoCSList(a)});return h?f.turnIntoCSList(c):k}return k};t.complex$1=function(a,g){var c,b,d;d=C(a[0]);if("list"===d.ctype&&f.isNumberVector(d)){if(2===
d.value.length)return c=d.value[0],b=d.value[1],m.complex(c.value.real-b.value.imag,b.value.real+c.value.imag);if(3===d.value.length)return c=d.value[0],b=d.value[1],d=d.value[2],c=m.div(c,d),b=m.div(b,d),m.complex(c.value.real-b.value.imag,b.value.real+c.value.imag)}return k};t.gauss$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?f.realVector([c.value.real,c.value.imag]):k};t.cross$2=Lc;t.crossratio$4=function(a,g){var c=A(a[0]),b=A(a[1]),d=A(a[2]),e=A(a[3]),h=M(c),l=M(b),n=M(d),q=M(e);return h!==
k&&l!==k&&n!==k&&q!==k?f.crossratio3(h,l,n,q,f.ii):"number"===c.ctype&&"number"===b.ctype&&"number"===d.ctype&&"number"===e.ctype?m.div(m.mult(m.sub(c,d),m.sub(b,e)),m.mult(m.sub(c,e),m.sub(b,d))):k};t.para$2=function(a,g){var c=C(a[0]),b=C(a[1]),d=M(c),e=M(b);if(c!==k&&b!==k){var b=b.usage,h=d,m=e;if("Line"===c.usage||"Point"===b)h=e,m=d;c=f.cross(f.cross(f.linfty,m),h);return v.withUsage(c,"Line")}return k};t.perp$2=function(a,g){var c=C(a[0]),b=C(a[1]),d=M(c),e=M(b);if(c!==k&&b!==k){var h=b.usage||
e.usage,b=d,l=e;if("Line"===(c.usage||d.usage)||"Point"===h)b=e,l=d;c=f.turnIntoCSList([l.value[0],l.value[1],m.zero]);c=f.cross(c,b);return v.withUsage(c,"Line")}return k};t.perp$1=function(a,g){var c=C(a[0]);return f._helper.isNumberVecN(c,2)?f.turnIntoCSList([m.neg(c.value[1]),c.value[0]]):k};t.parallel$2=t.para$2;t.perpendicular$2=t.perp$2;t.perpendicular$1=t.perp$1;t.meet$2=function(a,g){var c=M(a[0]),b=M(a[1]);return c!==k&&b!==k?(c=f.cross(c,b),v.withUsage(c,"Point")):k};t.join$2=function(a,
g){var c=M(a[0]),b=M(a[1]);return c!==k&&b!==k?(c=f.cross(c,b),v.withUsage(c,"Line")):k};t.dist$2=function(a,g){var c=C(a[0]),b=C(a[1]),c=Xb([c,b],[]);return t.abs$1([c],[])};t.dist_infix=t.dist$2;t.point$1=function(a,g){var c=A(a[0]);return f._helper.isNumberVecN(c,3)||f._helper.isNumberVecN(c,2)?v.withUsage(c,"Point"):c};t.line$1=function(a,g){var c=A(a[0]);return f._helper.isNumberVecN(c,3)?v.withUsage(c,"Line"):c};t.det$3=function(a,g){var c=M(a[0]),b=M(a[1]),d=M(a[2]);if(c!==k&&b!==k&&d!==k)return f.det3(c,
b,d)};t.det$1=function(a,g){var c=C(a[0]);if("list"===c.ctype){var b=f._helper.colNumb(c);if(-1!==b&&b===c.value.length)return f.det(c)}return k};t.eig$1=function(a,g){var c=C(a[0]);if("list"===c.ctype){var b=f._helper.colNumb(c);if(-1!==b&&b===c.value.length)return f.eig(c)}return k};t.eigenvalues$1=function(a,g){var c=C(a[0]);if("list"===c.ctype){var b=f._helper.colNumb(c);if(-1!==b&&b===c.value.length)return f.eig(c,!1).value[0]}return k};t.rank$1=function(a,g){var c=C(a[0]);if("list"===c.ctype){var b=
f._helper.colNumb(c);if(-1!==b&&b===c.value.length)return f.rank(c,g.precision)}return k};t.kernel$1=function(a,g){var c=C(a[0]);if("list"===c.ctype){var b=f._helper.colNumb(c);if(-1!==b&&b===c.value.length)return c=f.nullSpace(c,g.precision),f.transpose(c)}return k};t.eigenvectors$1=function(a,g){var c=C(a[0]);if("list"===c.ctype){var b=f._helper.colNumb(c);if(-1!==b&&b===c.value.length)return f.eig(c).value[1]}return k};t.area$3=function(a,g){var c=M(a[0]),b=M(a[1]),d=M(a[2]);if(c!==k&&b!==k&&d!==
k){var e=c.value[2],h=b.value[2],l=d.value[2];if(!m._helper.isAlmostZero(e)&&!m._helper.isAlmostZero(h)&&!m._helper.isAlmostZero(l))return c=f.scaldiv(e,c),b=f.scaldiv(h,b),d=f.scaldiv(l,d),c=f.det3(c,b,d),m.realmult(.5,c)}return k};t.inverse$1=function(a,g){var c=C(a[0]);if("list"===c.ctype){var b=f._helper.colNumb(c);if(-1!==b&&b===c.value.length)return f.inverse(c)}return k};t.linearsolve$2=function(a,g){var c=C(a[0]),b=C(a[1]);if("list"===c.ctype){var d=f._helper.colNumb(c);if(-1!==d&&d===c.value.length&&
f._helper.isNumberVecN(b,d))return f.linearsolve(c,b)}return k};var Pd=[[[]],[[0]],[[0,1],[1,0]],[[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0]],[[0,1,2,3],[0,1,3,2],[0,2,1,3],[0,2,3,1],[0,3,1,2],[0,3,2,1],[1,0,2,3],[1,0,3,2],[1,2,0,3],[1,2,3,0],[1,3,0,2],[1,3,2,0],[2,0,1,3],[2,0,3,1],[2,1,0,3],[2,1,3,0],[2,3,0,1],[2,3,1,0],[3,0,1,2],[3,0,2,1],[3,1,0,2],[3,1,2,0],[3,2,0,1],[3,2,1,0]]];t.mincostmatching$1=function(a,g){var c=A(a[0]);if(f.isNumberMatrix(c)){var b=c.value.length,d=f._helper.colNumb(c),
e=b<d?d:b,h,l,n=Array(e);for(h=0;h<e;++h)for(n[h]=Array(e),l=0;l<e;++l)n[h][l]=h<b&&l<d?c.value[h].value[l].value.real:0;c=Zb(n);e=Array(b);for(h=0;h<b;++h)l=c[h],e[h]=l<d?m.real(l+1):m.real(0);return f.turnIntoCSList(e)}return k};t.take$2=mc;t.length$1=function(a,g){var c=A(a[0]);return"list"===c.ctype||"string"===c.ctype?m.real(c.value.length):k};t.pairs$1=function(a,g){var c=A(a[0]);return"list"===c.ctype?f.pairs(c):k};t.triples$1=function(a,g){var c=A(a[0]);return"list"===c.ctype?f.triples(c):
k};t.cycle$1=function(a,g){var c=A(a[0]);return"list"===c.ctype?f.cycle(c):k};t.consecutive$1=function(a,g){var c=A(a[0]);return"list"===c.ctype?f.consecutive(c):k};t.reverse$1=function(a,g){var c=A(a[0]);return"list"===c.ctype?f.reverse(c):k};t.directproduct$2=function(a,g){var c=A(a[0]),b=A(a[1]);return"list"===c.ctype&&"list"===b.ctype?f.directproduct(c,b):k};t.concat$2=Rc;t.common$2=Sc;t.remove$2=Tc;t.append$2=Uc;t.prepend$2=Vc;t.contains$2=function(a,g){var c=A(a[0]),b=A(a[1]);return"list"===
c.ctype?f.contains(c,b):k};t.sort$2=function(a,g){return t.sort$3([a[0],null,a[1]],g)};t.sort$3=function(a,g){var c=C(a[0]);if("list"!==c.ctype)return k;var b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);var c=c.value,d=[];J.newvar(b);var e;for(e=0;e<c.length;e++)J.setvar(b,c[e]),d[e]={val:c[e],result:A(a[2])};J.removevar(b);d.sort(v.compareResults);b=[];for(e=0;e<c.length;e++)b[e]=d[e].val;return{ctype:"list",value:b}};t.sort$1=function(a,g){var c=A(a[0]);return"list"===c.ctype?f.sort1(c):
k};t.set$1=function(a,g){var c=A(a[0]);return"list"===c.ctype?f.set(c):k};t.combinations$2=function(a,g){function c(a,g){a===h?n.push(f.turnIntoCSList(l.slice())):g<e&&(l[a]=b.value[g],c(a+1,g+1),c(a,g+1))}var b=A(a[0]),d=A(a[1]),e,h,l,n;if("number"===d.ctype){h=d.value.real|0;if("number"===b.ctype){e=b.value.real|0;e-h<h&&(h=e-h);if(0>h)return m.real(0);if(0===h)return m.real(1);if(1===h)return b;for(var q=d=1,r=1;r<=h;++r)var t=e-h+r|0,u=r|0,v=nc(t,u)|0,t=t/v|0,u=u/v|0,v=nc(d,u)|0,d=d/v|0,u=u/v|
0,v=nc(t,q)|0,t=t/v|0,q=q/v|0,d=d*t|0,q=q*u|0;return m.real(d/q)}if("list"===b.ctype){e=b.value.length;if(0>h||h>e)return f.turnIntoCSList([]);if(0===h)return f.turnIntoCSList([f.turnIntoCSList([])]);if(h===e)return f.turnIntoCSList([b]);n=[];l=Array(h);c(0,0);return f.turnIntoCSList(n)}}return k};t.zeromatrix$2=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype?f.zeromatrix(c,b):k};t.zerovector$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?f.zerovector(c):
k};t.transpose$1=function(a,g){var c=C(a[0]);return"list"===c.ctype&&-1!==f._helper.colNumb(c)?f.transpose(c):k};t.row$2=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===b.ctype&&"list"===c.ctype&&-1!==f._helper.colNumb(c)?f.row(c,b):k};t.column$2=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===b.ctype&&"list"===c.ctype&&-1!==f._helper.colNumb(c)?f.column(c,b):k};t.dict$0=function(a,g){var c=Oa.create(),b;for(b in g)g.hasOwnProperty(b)&&Oa.put(c,v.string(b),A(g[b]));return c};t.put$3=
function(a,g){var c=A(a[0]),b=A(a[1]),d=A(a[2]);return"dict"===c.ctype?(c=Oa.clone(c),Oa.put(c,b,d),c):k};t.get$2=function(a,g){var c=A(a[0]),b=A(a[1]);return"dict"===c.ctype?Oa.get(c,b,k):k};t.red$1=function(a,g){var c=A(a[0]);return"number"===c.ctype?f.realVector([Math.min(1,Math.max(0,c.value.real)),0,0]):k};t.green$1=function(a,g){var c=A(a[0]);return"number"===c.ctype?f.realVector([0,Math.min(1,Math.max(0,c.value.real)),0]):k};t.blue$1=function(a,g){var c=A(a[0]);return"number"===c.ctype?f.realVector([0,
0,Math.min(1,Math.max(0,c.value.real))]):k};t.gray$1=function(a,g){var c=A(a[0]);return"number"===c.ctype?(c=Math.min(1,Math.max(0,c.value.real)),f.realVector([c,c,c])):k};t.grey$1=t.gray$1;D.HSVtoRGB=function(a,g,c){var b,d,e,h,k,m;a&&void 0===g&&void 0===c&&(g=a.s,c=a.v,a=a.h);h=Math.floor(6*a);k=6*a-h;a=c*(1-g);m=c*(1-k*g);g=c*(1-(1-k)*g);switch(h%6){case 0:b=c;d=g;e=a;break;case 1:b=m;d=c;e=a;break;case 2:b=a;d=c;e=g;break;case 3:b=a;d=m;e=c;break;case 4:b=g;d=a;e=c;break;case 5:b=c,d=a,e=m}return f.realVector([b,
d,e])};t.hue$1=function(a,g){var c=A(a[0]);return"number"===c.ctype?(c=c.value.real,c-=Math.floor(c),D.HSVtoRGB(c,1,1)):k};D.shapeconvert=function(a){var g,c;if("circle"===a.type){g=a.value.value[0];g=v.div(g,g.value[2]);var b=g.value[0].value.real,d=g.value[1].value.real;a=a.value.value[1].value.real;c=Array(125);var e=2*Math.PI/125;for(g=0;125>g;g++)c[g]={X:b+Math.cos(g*e)*a,Y:d+Math.sin(g*e)*a};return[c]}if("polygon"===a.type){b=[];for(g=0;g<a.value.length;g++){d=a.value[g];c=[];for(e=0;e<d.length;e++)c[e]=
{X:d[e].X,Y:d[e].Y};b[g]=c}return b}};D.shapeop=function(a,g,c){a=D.shapeconvert(a);var b=D.shapeconvert(g);ClipperLib.JS.ScaleUpPaths(a,1E3);ClipperLib.JS.ScaleUpPaths(b,1E3);g=new ClipperLib.Clipper;g.AddPaths(a,ClipperLib.PolyType.ptSubject,!0);g.AddPaths(b,ClipperLib.PolyType.ptClip,!0);var b=a=ClipperLib.PolyFillType.pftNonZero,d=new ClipperLib.Paths;g.Execute(c,d,a,b);ClipperLib.JS.ScaleDownPaths(d,1E3);return{ctype:"shape",type:"polygon",value:d}};D.shapecommon=function(a,g){return D.shapeop(a,
g,ClipperLib.ClipType.ctIntersection)};D.shaperemove=function(a,g){return D.shapeop(a,g,ClipperLib.ClipType.ctDifference)};D.shapeconcat=function(a,g){return D.shapeop(a,g,ClipperLib.ClipType.ctUnion)};t.key$0=function(a,g){return{ctype:"string",value:Pc}};t.keycode$0=function(a,g){return m.real(Qc)};t.mouse$0=function(a,g){return f.realVector([sa[0],sa[1]])};t.mover$0=function(a,g){if(aa&&aa.mover)return{ctype:"geo",value:aa.mover};console.log("Not moving anything at the moment");return k};t.translate$1=
function(a,g){var c=C(a[0]);"list"===c.ctype&&f.isNumberVector(c)&&2===c.value.length&&x.translate(c.value[0].value.real,c.value[1].value.real);return k};t.rotate$1=function(a,g){var c=C(a[0]);"number"===c.ctype&&x.rotate(c.value.real);return k};t.scale$1=function(a,g){var c=C(a[0]);"number"===c.ctype&&x.scale(c.value.real);return k};t.greset$0=function(a,g){var c=Xa.stack.length;x.greset();for(var b=0;b<c;b++)z.restore();return k};t.gsave$0=function(a,g){x.gsave();z.save();return k};t.grestore$0=
function(a,g){x.grestore();z.restore();return k};t.color$1=function(a,g){var c=C(a[0]);"list"===c.ctype&&f.isNumberVector(c).value&&x.setcolor(c);return k};t.linecolor$1=function(a,g){var c=C(a[0]);"list"===c.ctype&&f.isNumberVector(c).value&&x.setlinecolor(c);return k};t.pointcolor$1=function(a,g){var c=C(a[0]);"list"===c.ctype&&f.isNumberVector(c).value&&x.setpointcolor(c);return k};t.alpha$1=function(a,g){var c=C(a[0]);"number"===c.ctype&&x.setalpha(c);return k};t.pointsize$1=function(a,g){var c=
C(a[0]);"number"===c.ctype&&x.setpointsize(c);return k};t.linesize$1=function(a,g){var c=C(a[0]);"number"===c.ctype&&x.setlinesize(c);return k};t.textsize$1=function(a,g){var c=C(a[0]);"number"===c.ctype&&x.settextsize(c);return k};t.playanimation$0=function(a,g){S();return k};t.pauseanimation$0=function(a,g){Za();return k};t.stopanimation$0=function(a,g){Ja();return k};t.text$1=function(a,g){var c=C(a[0]);return v.string(w(c))};t.replace$3=function(a,g){var c=A(a[0]),b=A(a[1]),d=A(a[2]);if("string"===
c.ctype&&"string"===b.ctype&&"string"===d.ctype)return c=c.value,b=b.value.replace(/[^A-Za-z0-9]/g,"\\$&"),d=d.value.replace(/\$/g,"$$$$"),c=c.replace(new RegExp(b,"g"),d),{ctype:"string",value:c}};t.replace$2=function(a,g){function c(a,c,g){var e="";d=b=-1;for(var f=0;f<c.length;f++){var h=c[f][0],k=a.indexOf(h,g);-1!==k&&(-1===b?(e=h,b=k,d=f):k<b&&(e=h,b=k,d=f))}return e}var b,d,e,f=A(a[0]);e=A(a[1]);if("string"===f.ctype&&"list"===e.ctype){for(var f=f.value,h=[],m=0;m<e.value.length;m++){var l=
e.value[m];"list"===l.ctype&&2===l.value.length&&"string"===l.value[0].ctype&&"string"===l.value[1].ctype&&(h[h.length]=[l.value[0].value,l.value[1].value])}b=-1;for(e=c(f,h,0);-1!==b;)f=f.substring(0,b)+h[d][1]+f.substring(b+e.length,f.length),e=b+h[d][1].length,e=c(f,h,e);return{ctype:"string",value:f}}return k};t.substring$3=function(a,g){var c=A(a[0]),b=C(a[1]),d=C(a[2]);return"string"===c.ctype&&"number"===b.ctype&&"number"===d.ctype?{ctype:"string",value:c.value.substring(Math.floor(b.value.real),
Math.floor(d.value.real))}:k};t.tokenize$2=function(a,g){var c=A(a[0]),b=A(a[1]);if("string"===c.ctype&&"string"===b.ctype)return t.tokenize$2([c,f.turnIntoCSList([b])],g);if("string"===c.ctype&&"list"===b.ctype){c=c.value;if(0===b.value.length){b=!0;if(void 0!==g.autoconvert){var d=A(g.autoconvert);"boolean"===d.ctype&&(b=d.value)}return b&&(b=parseFloat(c),!isNaN(b))?m.real(b):v.string(c)}var d=b.value[0],e=f.turnIntoCSList(b.value.slice(1)),c=c.split(d.value);return f.turnIntoCSList(c.map(function(a){return t.tokenize$2([v.string(a),
e],g)}))}return k};t.indexof$2=function(a,g){var c=A(a[0]),b=A(a[1]);return"string"===c.ctype&&"string"===b.ctype?(c=c.value.indexOf(b.value),m.real(c+1)):k};t.indexof$3=function(a,g){var c=A(a[0]),b=A(a[1]),d=A(a[2]);return"string"===c.ctype&&"string"===b.ctype&&"number"===d.ctype?(c=c.value.indexOf(b.value,Math.round(d.value.real)-1),m.real(c+1)):k};t.parse$1=function(a,g){var c=A(a[0]);return"string"===c.ctype?(c=Ma(c.value),A(c)):k};t.unicode$1=function(a,g){var c;c=A(a[0]);var b=16;if(g.base){var d=
A(g.base);"number"===d.ctype&&(b=d.value.real)}if("string"===c.ctype)c=parseInt(c.value,b);else if("number"===c.ctype)c=c.value.real;else return k;"undefined"!==typeof String.fromCodePoint?c=String.fromCodePoint(c):65535>=c?c=String.fromCharCode(c):(c-=65536,c=String.fromCharCode((c>>10)+55296,(c&1023)+56320));return v.string(c)};t.international$1=function(a,g){return t.international$2([a[0],null],g)};t.international$2=function(a,g){var c=A(a[0]);if("string"!==c.ctype)return k;var b=(q.translations||
{})[q.language||"en"]||{};if(!b.hasOwnProperty(c.value))return c;var d=b[c.value];if("string"===typeof d)return v.string(d);if(null===a[1])return c;var e=A(a[1]),e="number"===e.ctype?e.value.real:0,b=(b._pluralFormFunction||Qd)(e);return b<d.length?v.string(d[b]):c};t.currentlanguage$0=function(a,g){return v.string(q.language||"en")};D.basismap=function(a,g,c,b){var d=f.turnIntoCSList([a,g,c]),d=f.adjoint3(f.transpose(d));b=v.mult(d,b);d=f.turnIntoCSList([v.mult(b.value[0],a),v.mult(b.value[1],g),
v.mult(b.value[2],c)]);return f.transpose(d)};t.map$8=function(a,g){var c=M(a[0]),b=M(a[1]),d=M(a[2]),e=M(a[3]),h=M(a[4]),m=M(a[5]),l=M(a[6]),n=M(a[7]);return h!==k&&m!==k&&l!==k&&n!==k&&c!==k&&b!==k&&d!==k&&e!==k?(h=D.basismap(h,m,l,n),c=D.basismap(c,b,d,e),c=v.mult(h,f.adjoint3(c)),f.normalizeMax(c)):k};t.map$6=function(a,g){var c=M(a[0]),b=M(a[1]),d=M(a[2]),e=f.realVector([0,0,1]),h=f.cross,m=h(h(d,h(e,h(c,b))),h(b,h(e,h(c,d)))),l=M(a[3]),n=M(a[4]),q=M(a[5]),e=h(h(q,h(e,h(l,n))),h(n,h(e,h(l,q))));
return l!==k&&n!==k&&q!==k&&e!==k&&c!==k&&b!==k&&d!==k&&m!==k?(l=D.basismap(l,n,q,e),c=D.basismap(c,b,d,m),c=v.mult(l,f.adjoint3(c)),f.normalizeMax(c)):k};t.map$4=function(a,g){var c=f.ii,b=f.jj,d=M(a[0]),e=M(a[1]),h=M(a[2]),m=M(a[3]);return h!==k&&m!==k&&d!==k&&e!==k?(h=D.basismap(h,m,c,b),c=D.basismap(d,e,c,b),c=v.mult(h,f.adjoint3(c)),f.normalizeMax(c)):k};t.map$2=function(a,g){var c=f.ii,b=f.jj,d=M(a[0]),e=v.add(f.realVector([1,0,0]),d),h=M(a[1]),m=v.add(f.realVector([1,0,0]),h);return h!==k&&
m!==k&&d!==k&&e!==k?(h=D.basismap(h,m,c,b),c=D.basismap(d,e,c,b),c=v.mult(h,f.adjoint3(c)),f.normalizeMax(c)):k};t.pointreflect$1=function(a,g){var c=f.ii,b=f.jj,d=M(a[0]),e=v.add(f.realVector([1,0,0]),d),h=v.add(f.realVector([-1,0,0]),d);return h!==k&&d!==k&&e!==k?(h=D.basismap(d,h,c,b),c=D.basismap(d,e,c,b),c=v.mult(h,f.adjoint3(c)),f.normalizeMax(c)):k};t.linereflect$1=function(a,g){var c=f.ii,b=f.jj,d=M(a[0]),e=f.realVector([Math.random(),Math.random(),Math.random()]),h=f.realVector([Math.random(),
Math.random(),Math.random()]),e=f.cross(e,d),h=f.cross(h,d);return d!==k&&e!==k?(d=D.basismap(e,h,c,b),c=D.basismap(e,h,b,c),c=v.mult(d,f.adjoint3(c)),f.normalizeMax(c)):k};D.extractPointVec=function(a){var g={ok:!1};if("geo"===a.ctype){var c=a.value;if("P"===c.kind)return g.x=xa.getField(c,"x"),g.y=xa.getField(c,"y"),g.z=m.real(1),g.ok=!0,g}if("list"!==a.ctype)return g;var b=a.value;if(2===b.length&&(a=b[0],c=b[1],"number"===a.ctype&&"number"===c.ctype))return g.x=a,g.y=c,g.z=m.real(1),g.ok=!0,g;
3===b.length&&(a=b[0],c=b[1],b=b[2],"number"===a.ctype&&"number"===c.ctype&&"number"===b.ctype&&(g.x=m.div(a,b),g.y=m.div(c,b),g.z=m.real(1),g.ok=!0));return g};t.polygon$1=function(a,g){var c=A(a[0]);if("list"===c.ctype){for(var b=[],d=0;d<c.value.length;d++){var e=D.extractPoint(c.value[d]);if(!e.ok)return k;b[d]={X:e.x,Y:e.y}}return{ctype:"shape",type:"polygon",value:[b]}}return k};t.circle$2=function(a,g){var c=C(a[0]),b=C(a[1]),c=D.extractPointVec(c);if(!c.ok||"number"!==b.ctype)return k;c=f.turnIntoCSList([c.x,
c.y,c.z]);return{ctype:"shape",type:"circle",value:f.turnIntoCSList([c,b])}};t.screen$0=function(a,g){var c=x.drawingstate.initialmatrix,b=function(a,g){var b=a-c.tx,d=g+c.ty;return{X:(b*c.d-d*c.b)/c.det,Y:-(-b*c.c+d*c.a)/c.det}};return{ctype:"shape",type:"polygon",value:[[b(0,0),b(W,0),b(W,V),b(0,V)]]}};t.halfplane$2=function(a,g){var c=C(a[0]),b=C(a[1]),d=M(c),e=M(b);if(c!==k&&b!==k){var h=b.usage,b=e;if("Line"===c.usage||"Point"===h)d=e,b=c;c=f.turnIntoCSList([b.value[0],b.value[1],m.zero]);c=
f.cross(c,d);e=f.cross(b,c);e=v.div(e,e.value[2]);d=v.div(d,d.value[2]);d=f.sub(d,e);c=f.abs(d);d=v.div(d,c);c=e.value[0].value.real;e=e.value[1].value.real;b=1E3*d.value[0].value.real;d=1E3*d.value[1].value.real;return{ctype:"shape",type:"polygon",value:[[{X:c+d/2,Y:e-b/2},{X:c+d/2+b,Y:e-b/2+d},{X:c-d/2+b,Y:e+b/2+d},{X:c-d/2,Y:e+b/2}]]}}return k};t.element$1=function(a,g){var c=A(a[0]);return"string"===c.ctype&&u.csnames.hasOwnProperty(c.value)?{ctype:"geo",value:u.csnames[c.value]}:k};D.all$1=function(a,
g){var c=A(a[0]);return"geo"===c.ctype&&c.value.incidences?f.ofGeos(c.value.incidences.map(function(a){return u.csnames[a]}).filter(g)):f.nil};t.allpoints$0=function(a,g){return f.ofGeos(u.points)};t.allpoints$1=function(a,g){return D.all$1(a,function(a){return"P"===a.kind})};t.allmasses$0=function(a,g){return f.ofGeos(ca)};t.allmasses$1=function(a,g){return D.all$1(a,function(a){return"P"===a.kind&&a.behavior&&"Mass"===a.behavior.type})};t.allsprings$0=function(a,g){return f.ofGeos(xc)};t.allsprings$1=
function(a,g){return D.all$1(a,function(a){return"S"===a.kind&&a.behavior&&"Spring"===a.behavior.type})};t.alllines$0=function(a,g){return f.ofGeos(u.lines)};t.alllines$1=function(a,g){return D.all$1(a,function(a){return"L"===a.kind||"S"===a.kind})};t.allsegments$0=function(a,g){return f.ofGeos(u.lines.filter(function(a){return"S"===a.kind}))};t.allsegments$1=function(a,g){return D.all$1(a,function(a){return"S"===a.kind})};t.allconics$0=function(a,g){return f.ofGeos(u.conics)};t.allconics$1=function(a,
g){return D.all$1(a,function(a){return"C"===a.kind})};t.allcircles$0=function(a,g){return f.ofGeos(u.conics.filter(function(a){return"Circle"===a.matrix.usage}))};t.allcircles$1=function(a,g){return D.all$1(a,function(a){return"C"===a.kind&&"Circle"===a.matrix.usage})};t.allelements$0=function(a,g){return f.ofGeos(u.gslp)};t.allelements$1=function(a,g){return D.all$1(a,function(a){return!0})};t.incidences$1=t.allelements$1;t.createpoint$2=function(a,g){var c=A(a[0]),b=M(a[1]);return"string"!==c.ctype?
(console.log("Name must be a string"),k):"list"!==b.ctype&&f.isNumberVector(b)?(console.log("Position must be a number vector"),k):Da({name:c.value,type:"Free",labeled:!0,pos:b})};t.create$3=function(a,g){var c=A(a[0]),b=A(a[1]),d=A(a[2]),e,h;if("string"===c.ctype)e=c.value;else{if("list"!==c.ctype)return console.log("Names must be a string or a list of strings"),k;if(1!==c.value.length){e=v.string(c.value.map(function(a){return a.value}).join("__"));e=t.create$3([e,b,d],g);if(e!==k)for(b=v.string(e.kind.replace(/^(.*)s$/,
"Select$1")),d=f.turnIntoCSList([v.string(e.name)]),h=0;h<c.value.length;++h)t.create$3([c.value[h],b,d],{index:m.real(h+1)});return e}if("string"!==c.value[0].ctype)return console.log("Element of names list must be a string"),k;e=c.value[0].value}if("string"!==b.ctype)return console.log("Type must be a string"),k;if("list"!==d.ctype)return console.log("Arguments must be a list"),k;if(!n.hasOwnProperty(b.value)&&!od.hasOwnProperty(b.value))return console.log("Invalid geometric operation: '"+b.value+
"'"),k;var c=[],l=null;for(h=0;h<d.value.length;h++){var q=d.value[h];if("string"===q.ctype)c.push(q.value);else if("geo"===q.ctype)c.push(q.value.name);else if(l=M(q),l===k)return console.log("Unknown argument type"),k}e={name:e,type:b.value,labeled:!0};l&&(e.pos=l);0<c.length&&(e.args=c);b=C(g.index);"number"===b.ctype&&(e.index=b.value.real|0);return Da(e)};t.javascript$1=function(a,g){var c=A(a[0]);"string"===c.ctype&&(new Function(c.value)).call(qa);return k};t.use$1=function(a,g){function c(a,
c,g){t[a.toLowerCase()+"$"+c]=g}var b=A(a[0]);if("string"===b.ctype){var b=b.value,d;q.plugins&&(d=q.plugins[b]);d||(d=va._pluginRegistry[b]);if(d)return d({instance:qa,config:q,nada:k,evaluate:A,extractPoint:D.extractPoint,evaluateAndVal:C,defineFunction:c,addShutdownHook:kb.push.bind(kb),addAutoCleaningEventListener:K,getVariable:J.getvar.bind(J),getInitialMatrix:function(){return x.drawingstate.initialmatrix},setTextRenderer:function(a,c){zc=a;c&&(qd=c)},getImage:function(a,c){"string"===typeof a&&
(a=v.string(a));var g=cb(a);if(!g)return null;!c&&g.cdyUpdate&&g.cdyUpdate();return g},getMyfunction:function(a){return Wa.hasOwnProperty(a)?Wa[a]:null}}),{ctype:"boolean",value:!0};console.log("Plugin "+b+" not found");return{ctype:"boolean",value:!1}}return k};t.format$2=function(a,g){function c(a){a=a.toFixed(f);var c;do c=a,a=a.substring(0,a.length-1);while(""!==a&&"-"!==a&&+a===+c);return""+c}function b(a){var g;return"number"===a.ctype?(g=c(a.value.real),a=c(a.value.imag),g="0"===a?g:"-"===
a.substring(0,1)?g+" - i*"+a.substring(1):g+" + i*"+a,{ctype:"string",value:g}):"list"===a.ctype?{ctype:"list",value:a.value.map(b)}:{ctype:"string",value:w(a).toString()}}var d=C(a[0]),e=C(a[1]),f;return"number"!==d.ctype&&"list"!==d.ctype||"number"!==e.ctype?k:(f=Math.max(0,Math.min(20,Math.round(e.value.real))),b(d))};Date.now||(Date.now=function(){return(new Date).getTime()});var Dd=0;t.timestamp$0=function(a,g){return m.real(Date.now())};t.seconds$0=function(a,g){return m.real((Date.now()-Dd)/
1E3)};t.resetclock$0=function(a,g){Dd=Date.now();return k};t.time$0=function(a,g){var c=new Date;return f.realVector([c.getHours(),c.getMinutes(),c.getSeconds(),c.getMilliseconds()])};t.date$0=function(a,g){var c=new Date;return f.realVector([c.getFullYear(),c.getMonth()+1,c.getDate()])};t.simulationtime$0=function(a,g){return m.real(Cb*Ad)};t.settimeout$2=function(a,g){function c(){A(e);b()}var d=A(a[0]),e=a[1];"number"===d.ctype&&"undefined"!==typeof window&&window.setTimeout(c,1E3*d.value.real);
return k};D.formatForWebGL=function(a){return a.toFixed(10)};t.generateWebGL$2=function(a,g){var c=D.formatForWebGL,b=a[0],d=A(a[1]);console.log(d);if("list"!==d.ctype)return k;for(var e=[],f=0;f<d.value.length;f++)"string"===d.value[f].ctype&&e.push(d.value[f].value);console.log("***********");console.log(e);d=D.plotvars(b);console.log(d);-1===d.indexOf("a")&&-1===d.indexOf("b")&&-1===d.indexOf("c")&&-1===d.indexOf("d")&&-1===d.indexOf("e")&&-1===d.indexOf("f")&&(b=C(b));if("number"===b.ctype)return{ctype:"string",
value:"vec2("+c(b.value.real)+","+c(b.value.imag)+")"};if("variable"===b.ctype)return{ctype:"string",value:b.name};if("string"===b.ctype||"void"===b.ctype)return b;if(2===b.args.length&&("infix"===b.ctype||"function"===b.ctype)){c=t.compileToWebGL$1([b.args[0]],{});d=t.compileToWebGL$1([b.args[1]],{});if("+"===b.oper||"add"===b.oper)return void 0===c.value||"void"===c.ctype?{ctype:"string",value:d.value}:{ctype:"string",value:"addc("+c.value+","+d.value+")"};if("*"===b.oper||"mult"===b.oper)return{ctype:"string",
value:"multc("+c.value+","+d.value+")"};if("/"===b.oper||"div"===b.oper)return{ctype:"string",value:"divc("+c.value+","+d.value+")"};if("-"===b.oper||"sub"===b.oper)return void 0===c.value||"void"===c.ctype?{ctype:"string",value:"negc("+d.value+")"}:{ctype:"string",value:"subc("+c.value+","+d.value+")"};if("^"===b.oper||"pow"===b.oper)return{ctype:"string",value:"powc("+c.value+","+d.value+")"}}if("function"===b.ctype&&1===b.args.length){c=t.compileToWebGL$1([b.args[0]],{});if("sin$1"===b.oper)return{ctype:"string",
value:"sinc("+c.value+")"};if("cos$1"===b.oper)return{ctype:"string",value:"cosc("+c.value+")"};if("tan$1"===b.oper)return{ctype:"string",value:"tanc("+c.value+")"};if("exp$1"===b.oper)return{ctype:"string",value:"expc("+c.value+")"};if("log$1"===b.oper)return{ctype:"string",value:"logc("+c.value+")"};if("arctan$1"===b.oper)return{ctype:"string",value:"arctanc("+c.value+")"};if("arcsin$1"===b.oper)return{ctype:"string",value:"arcsinc("+c.value+")"};if("arccos$1"===b.oper)return{ctype:"string",value:"arccosc("+
c.value+")"};if("sqrt$1"===b.oper)return{ctype:"string",value:"sqrtc("+c.value+")"}}return k};t.compileToWebGL$1=function(a,g){var c,b;c=D.formatForWebGL;var d=a[0];b=D.plotvars(d);-1===b.indexOf("a")&&-1===b.indexOf("b")&&-1===b.indexOf("c")&&-1===b.indexOf("d")&&-1===b.indexOf("e")&&-1===b.indexOf("f")&&(d=C(d));if("number"===d.ctype)return{ctype:"string",value:"vec2("+c(d.value.real)+","+c(d.value.imag)+")"};if("variable"===d.ctype)return{ctype:"string",value:d.name};if("string"===d.ctype||"void"===
d.ctype)return d;if(2===d.args.length&&("infix"===d.ctype||"function"===d.ctype)){c=t.compileToWebGL$1([d.args[0]],{});b=t.compileToWebGL$1([d.args[1]],{});if("+"===d.oper||"add"===d.oper)return void 0===c.value||"void"===c.ctype?{ctype:"string",value:b.value}:{ctype:"string",value:"addc("+c.value+","+b.value+")"};if("*"===d.oper||"mult"===d.oper)return{ctype:"string",value:"multc("+c.value+","+b.value+")"};if("/"===d.oper||"div"===d.oper)return{ctype:"string",value:"divc("+c.value+","+b.value+")"};
if("-"===d.oper||"sub"===d.oper)return void 0===c.value||"void"===c.ctype?{ctype:"string",value:"negc("+b.value+")"}:{ctype:"string",value:"subc("+c.value+","+b.value+")"};if("^"===d.oper||"pow"===d.oper)return{ctype:"string",value:"powc("+c.value+","+b.value+")"}}if("function"===d.ctype&&1===d.args.length){c=t.compileToWebGL$1([d.args[0]],{});if("sin$1"===d.oper)return{ctype:"string",value:"sinc("+c.value+")"};if("cos$1"===d.oper)return{ctype:"string",value:"cosc("+c.value+")"};if("tan$1"===d.oper)return{ctype:"string",
value:"tanc("+c.value+")"};if("exp$1"===d.oper)return{ctype:"string",value:"expc("+c.value+")"};if("log$1"===d.oper)return{ctype:"string",value:"logc("+c.value+")"};if("arctan$1"===d.oper)return{ctype:"string",value:"arctanc("+c.value+")"};if("arcsin$1"===d.oper)return{ctype:"string",value:"arcsinc("+c.value+")"};if("arccos$1"===d.oper)return{ctype:"string$1",value:"arccosc("+c.value+")"};if("sqrt$1"===d.oper)return{ctype:"string",value:"sqrtc("+c.value+")"}}return k};t.setsimulationspeed$1=function(a,
b){var c=C(a[0]);"number"===c.ctype&&oa(c.value.real);return k};t.setsimulationaccuracy$1=function(a,b){var c=C(a[0]);"number"===c.ctype&&"undefined"!==typeof N&&"undefined"!==typeof N.env&&(N.env.accuracy=Math.max(1,c.value.real|0));return k};t.setsimulationquality$1=function(a,b){var c=C(a[0]);"number"===c.ctype&&"undefined"!==typeof N&&"undefined"!==typeof N.env&&(c=c.value.real,0===c&&(N.env.errorbound=.01,N.env.lowestdeltat=1E-5,N.env.slowdownfactor=2),1===c&&(N.env.errorbound=.001,N.env.lowestdeltat=
1E-7,N.env.slowdownfactor=2),2===c&&(N.env.errorbound=1E-5,N.env.lowestdeltat=1E-10,N.env.slowdownfactor=4),3===c&&(N.env.errorbound=1E-6,N.env.lowestdeltat=1E-12,N.env.slowdownfactor=4));return k};var Vb=null,cc=null;t.createtool$3=function(a,b){var c,d="left",e="top",f=null;b.space&&(c=A(b.space),"number"===c.ctype&&(f=c.value.real/2));var h=null;b.toolbar&&(c=A(b.toolbar),"string"===c.ctype&&((h=document.getElementById(c.value))||console.warn("Element #"+c.value+" not found")));if(!h){if(b.reference){var m=
A(b.reference);if("string"===m.ctype)switch(m.value){case "UR":d="right";break;case "LL":e="bottom";break;case "LR":d="right",e="bottom"}}h=document.createElement("div");h.className="CindyJS-toolbar";ga.parentNode.appendChild(h);m=A(a[1]);c=A(a[2]);"number"===m.ctype&&(h.style[d]=m.value.real+"px");"number"===c.ctype&&(h.style[e]=c.value.real+"px");null!==f&&(h.style.margin=-f+"px")}m=A(a[0]);if("string"===m.ctype)m=[[m.value]];else if("list"===m.ctype)m=m.value.map(function(a){return"string"===a.ctype?
[a.value]:"list"===a.ctype?a.value.map(function(a){return"string"===a.ctype?a.value:null}):[null]});else return console.log("Name must be a string or a list of strings"),k;if(b.flipped&&(c=A(b.flipped),"boolean"===c.ctype&&c.value)){console.log("Flipping");var l=0;c=m.length;m.forEach(function(a){a.length>l&&(l=a.length)});for(var n=[],q=0;q<l;++q){n[q]=[];for(var r=0;r<c;++r)n[q][r]=m[r][q]||null}m=n}"bottom"===e&&m.reverse();m.forEach(function(a){"right"===d&&a.reverse();var c=document.createElement("div");
h.appendChild(c);a.forEach(function(a){function b(){Vb&&Vb.classList.remove("CindyJS-active");Vb=d;d.classList.add("CindyJS-active");oc=a;var c=F[oc].actions;cc&&(cc.textContent=c[0].tooltip||"");ta=[];tb=Qa=0}F.hasOwnProperty(a)||(console.log("Tool '"+a+"' not implemented yet."),a=null);if(null===a){var g=document.createElement("span");g.className="CindyJS-spacer";c.appendChild(g)}else{var d=document.createElement("button"),g=document.createElement("img");g.src=va.getBaseDir()+"images/"+a+".png";
d.appendChild(g);d.addEventListener("click",b);Vb||b();null!==f&&(d.style.margin=f+"px");c.appendChild(d)}})});return k};t.dropped$0=function(){return jc};t.droppoint$0=function(){return kc};t.parsecsv$1=function(a,b){var c=!0,d=C(b.autoconvert);"boolean"===d.ctype&&(c=d.value);var e=null,d=C(b.delimiter);"string"===d.ctype&&/^[^\"\r\n]$/.test(d.value)&&(e=d.value);d=C(a[0]);if("string"!==d.ctype)return console.log("CSV data is not a string"),k;var d=d.value,h='(?:"((?:[^"]+|"")*)"|([^]*?))(\r\n|(,)|[\r\n]|$)';
e&&(e=e.replace(/[^A-Za-z0-9]/g,"\\$&").replace(/\$/g,"$$$$"),h=h.replace(/,/g,e));for(var h=new RegExp(h,"g"),e=[],l=[],n=null;h.lastIndex<d.length;){var q=h.exec(d),r=q[2];"string"===typeof q[1]&&(r=q[1].replace(/""/g,'"'));r=c?/^[Tt]rue$/.test(r)?v.bool(!0):/^[Ff]alse$/.test(r)?v.bool(!1):/^[\-+]?([0-9]+(\.[0-9]*)?|\.[0-9]+|Infinity)$/.test(r)?m.real(Number(r)):v.string(r):v.string(r);e.push(r);q[4]&&h.lastIndex===d.length&&(e.push(v.string("")),q={});if(!q[4]){null===n&&(n=e.length);if(n<e.length)for(n=
e.length,q=0;q<l.length;++q)for(r=l[q].length;r<n;++r)l[q][r]=k;else if(n>e.length)for(q=e.length;q<n;++q)e[q]=k;l.push(e);e=[]}}return f.turnIntoCSList(l.map(f.turnIntoCSList))};t.load$2=function(a,b){return t.load$3([a[0],null,a[1]],b)};t.load$3=function(a,g){function c(){if(h.readyState===XMLHttpRequest.DONE){var c;200===h.status?c=v.string(String(h.responseText)):(ha.err("Failed to load "+f+": "+h.statusText),c=k);J.newvar(d);J.setvar(d,c);A(a[2]);J.removevar(d);b()}}var d="#";null!==a[1]&&"variable"===
a[1].ctype&&(d=a[1].name);var e=C(a[0]),f=null,h=null;"string"===e.ctype&&/^https?:\/\//.test(e.value)&&(f=e.value);return null!==f?(h=new XMLHttpRequest,h.onreadystatechange=c,h.open("GET",f),h.send(),v.bool(!0)):k};D.extractPoint=function(a){var b={ok:!1};if("geo"===a.ctype){var c=a.value;if("P"===c.kind)return b.x=xa.getField(c,"x").value.real,b.y=xa.getField(c,"y").value.real,b.ok=!0,b}if("list"!==a.ctype)return b;var d=a.value;if(2===d.length&&(a=d[0],c=d[1],"number"===a.ctype&&"number"===c.ctype))return b.x=
a.value.real,b.y=c.value.real,b.ok=!0,b;3===d.length&&(a=d[0],c=d[1],d=d[2],"number"===a.ctype&&"number"===c.ctype&&"number"===d.ctype&&(a=m.div(a,d),c=m.div(c,d),b.x=a.value.real,b.y=c.value.real,b.ok=!0));return b};t.draw$1=function(a,b){var c=C(a[0]);if("shape"===c.ctype)D.drawshape(c,b);else if("Line"===c.usage)y.handleModifs(b,y.lineModifs),y.drawline(c);else{var d=D.extractPoint(c);if(!d.ok){if("undefined"!==typeof c.value&&2===c.value.length)return t.draw$2(c.value,b);return}null!==b&&y.handleModifs(b,
y.pointModifs);y.drawpoint(d)}return k};t.draw$2=function(a,b){var c=C(a[0]),d=C(a[1]),c=D.extractPoint(c),d=D.extractPoint(d);if(!c.ok||!d.ok)return k;null!==b&&y.handleModifs(b,y.lineModifs);y.drawsegcore(c,d);return k};t.drawcircle$2=function(a,b){return D.drawcircle(a,b,"D")};D.arcHelper=function(a){var b={};b.startPoint=M(a[0]);b.viaPoint=M(a[1]);b.endPoint=M(a[2]);return b};t.fillcircle$2=function(a,b){return D.drawcircle(a,b,"F")};t.drawarc$3=function(a,b){var c=D.arcHelper(a);return D.drawarc(c,
b,"D")};t.fillarc$3=function(a,b){var c=D.arcHelper(a);return D.drawarc(c,b,"F")};D.drawarc=function(a,b,c){var d=a.startPoint,e=a.viaPoint;a=a.endPoint;if(!f._helper.isAlmostReal(f.turnIntoCSList([d,e,a])))return k;y.handleModifs(b,y.conicModifs);y.preDrawCurve();b=f.det3(d,e,a);if(1E-12<Math.abs(b.value.real)){b=n._helper.ConicBy5(null,d,e,a,f.ii,f.jj);var h=n._helper.CenterOfConic(b),h=f.normalizeMax(h);b=m.real(0);var l=f.turnIntoCSList([f.turnIntoCSList([h.value[2],b,m.neg(h.value[0])]),f.turnIntoCSList([b,
h.value[2],m.neg(h.value[1])]),f.turnIntoCSList([b,b,h.value[2]])]);b=f.normalizeZ(v.mult(l,d));f.normalizeZ(v.mult(l,e));l=f.normalizeZ(v.mult(l,a));b=-Math.atan2(b.value[1].value.real,b.value[0].value.real);l=-Math.atan2(l.value[1].value.real,l.value[0].value.real);h=f.normalizeZ(h);d=f.normalizeZ(d);e=f.normalizeZ(e);a=f.normalizeZ(a);var q=f.abs(f.sub(d,h)),r=[h.value[0].value.real,h.value[1].value.real],h=x.drawingstate.matrix,t=r[0]*h.a-r[1]*h.b+h.tx,r=r[0]*h.c-r[1]*h.d-h.ty,d=0<f.det3(d,e,
a).value.real;z.save();z.beginPath();z.translate(t,r);z.arc(0,0,q.value.real*h.sdet,b,l,d);"F"===c&&(z.fillStyle=y.lineColor,z.closePath(),z.fill());"D"===c&&z.stroke();z.restore()}else{if("D"!==c)return k;c=D.extractPoint(d);b=D.extractPoint(e);l=D.extractPoint(a);if(!c.ok||!b.ok||!l.ok)return k;q=(c.x-l.x)*(c.x-l.x)+(c.y-l.y)*(c.y-l.y);h=(l.x-b.x)*(l.x-b.x)+(l.y-b.y)*(l.y-b.y);if(1E-12>(c.x-b.x)*(c.x-b.x)+(c.y-b.y)*(c.y-b.y)||1E-12>q||1E-12>h)return k;0>f.crossratio3(d,a,e,f.cross(f.cross(d,e),
f.linfty),f.ii).value.real?y.drawsegcore(c,l):y.drawRaySegment(d,a)}return k};D.drawcircle=function(a,b,c){var d=C(a[0]);a=C(a[1]);var e=D.extractPoint(d);if(!e.ok||"number"!==a.ctype||!m._helper.isAlmostReal(a))return k;var d=x.drawingstate.matrix,f=e.x*d.a-e.y*d.b+d.tx,e=e.x*d.c-e.y*d.d-d.ty;y.handleModifs(b,y.conicModifs);y.preDrawCurve();z.lineJoin="miter";z.beginPath();z.arc(f,e,Math.abs(a.value.real)*d.sdet,0,2*Math.PI);z.closePath();"D"===c&&z.stroke();"F"===c&&(z.fillStyle=y.lineColor,z.fill());
"C"===c&&z.clip();return k};t.drawconic$1=function(a,b){var c;c=C(a[0]);if("list"!==c.ctype||3!==c.value.length&&6!==c.value.length)return console.error("could not parse conic"),k;if(6===c.value.length){for(var d=0;6>d;d++)if("number"!==c.value[d].ctype)return console.error("could not parse conic"),k;var e=m.real(.5),d=c.value[0],h=c.value[2],h=m.mult(h,e),l=c.value[1],n=c.value[3],n=m.mult(n,e),q=c.value[4],q=m.mult(q,e);c=c.value[5];c=f.turnIntoCSList([f.turnIntoCSList([d,h,n]),f.turnIntoCSList([h,
l,q]),f.turnIntoCSList([n,q,c])])}else{for(d=0;3>d;d++)for(h=0;3>h;h++)if("number"!==c.value[d].value[h].ctype)return console.error("could not parse conic"),k;f.equals(c,f.transpose(c)).value||(d=v.mult(c,m.real(.5)),c=v.mult(f.transpose(c),m.real(.5)),c=f.add(d,c))}c=f.normalizeMax(c);return D.drawconic(c,b)};D.drawconic=function(a,b){y.handleModifs(b,y.conicModifs);if(0!==y.lsize){y.preDrawCurve();for(var c=f.normalizeMax(a),d=c,e=0;2>e;e++)for(var h=0;2>h;h++)if(Math.abs(c.value[e].value[h].value.imag)>
m.eps)return;e=f.turnIntoCSList([f.realVector([-1,-1,1]),f.realVector([1,0,0]),f.realVector([0,1,0])]);h=x.from(0,0,1);h[2]=1;var l=x.from(1,0,1);l[2]=1;var q=x.from(0,1,1);q[2]=1;var h=f.turnIntoCSList([f.realVector(h),f.realVector(l),f.realVector(q)]),h=f.transpose(h),e=v.mult(h,e),e=f.inverse(e),c=v.mult(f.transpose(e),c),c=v.mult(c,e),e=c.value[0].value[0].value.real,h=c.value[1].value[0].value.real,l=c.value[1].value[1].value.real,q=c.value[2].value[0].value.real,r=c.value[2].value[1].value.real,
u=c.value[2].value[2].value.real,c=[[e,h,q],[h,l,r],[q,r,u]],w=1E-14>Math.abs(e*l*u-e*r*r-h*h*u+2*h*q*r-l*q*q);if(w&&"Circle"===a.usage){var A=v.mult(f.adjoint3(d),f.linfty);m.abs(A.value[2]).value.real>m.eps&&(w=!1)}var A=W>V?W:V,B=-1.5*A,C=1.5*A,D=-1.5*A,ec=1.5*A,E=1;w&&(E=0);if(E)var q=0,q=1E-14<Math.abs(e-h)?Math.atan(h/e-l)/2:Math.PI/4,F=function(a){var c=Math.cos(a);a=Math.sin(a);return[[c,-a,0],[a,c,0],[0,0,1]]}(q),F=f.realMatrix(F),e=f.transpose(F),c=v.mult(f.realMatrix(c),F),c=v.mult(e,c),
e=c.value[0].value[0].value.real,h=c.value[1].value[0].value.real,l=c.value[1].value[1].value.real,q=c.value[2].value[0].value.real,r=c.value[2].value[1].value.real,u=c.value[2].value[2].value.real;var c=[e,h,l,q,r,u],e=function(){var a=n._helper.splitDegenConic(d);if(a!==k){var c=a[1],a=[a[0]];t.draw$1(a,b);a[0]=c;t.draw$1(a,b)}},G=function(a){"undefined"!==a&&6===a.length||console.error("this does not define a Conic");if(w)return"degenerate";a=a[0]*a[2]-a[1]*a[1];return 1E-14>Math.abs(a)?"parabola":
1E-14<a?"ellipsoid":"hyperbola"};G(c);var H=function(a,c){return 0<a&&a<W&&0<c&&c<V},I=[],J=[],K=[],L=[],M=[],N=[],O=function(){I=[];J=[];K=[];L=[];M=[];N=[]},P=function(a,c){z.beginPath();z.moveTo(a[0],c[0]);for(var b=1;b<a.length;b++)z.lineTo(a[b],c[b]);z.stroke()},Q=function(a,c,b){var g,d,e=G(a);if(6!==a.length)console.error("Conic needs 6 Parameters");else{var p=a[0],h=a[1],k=a[2],m=a[3],l=a[4];a=a[5];var n;g=b-c;for(var ba=.1*g+c,q=b-.1*g,R=c;R<=b;R+=n){n=R<ba||R>q||100>Math.abs(b-c)?.5:0>R||
R>V?10:3;d=-p*k*R*R-2*p*l*R-p*a+h*h*R*R+2*h*m*R+m*m;d=Math.sqrt(d);g=1/p*(-h*R-m+d);d=-1/p*(h*R+m+d);var r,Ca;E?(r=[g,R,1],Ca=[d,R,1],r=v.mult(F,f.realVector(r)),Ca=v.mult(F,f.realVector(Ca)),g=r.value[0].value.real,d=Ca.value[0].value.real,r=r.value[1].value.real,Ca=Ca.value[1].value.real):Ca=r=R;isNaN(g)||"ellipsoid"!==e?!isNaN(g)&&g>=B&&g<=C&&(I.push(g),K.push(r)):(I.push(g),K.push(r));isNaN(d)||"ellipsoid"!==e?!isNaN(d)&&d>=B&&d<=C&&(J.push(d),L.push(Ca)):(J.push(d),L.push(Ca))}}},h=function(a){var c,
b,g;G(a);if(6!==a.length)console.error("Conic needs 6 Parameters");else{g=a[0];var d=a[1],e=a[2],f=a[3],p=a[4],h=a[5];c=-g*p+d*f;b=Math.sqrt(g*(-g*e*h+g*Math.pow(p,2)+Math.pow(d,2)*h-2*d*f*p+e*Math.pow(f,2)));e=g*e-Math.pow(d,2);1E-14<Math.abs(e)?(g=(c-b)/e,b=(c+b)/e):b=g=(-g*h+f*f)/(2*g*p-2*d*f);!isNaN(g)&&g>D&&g<ec||(g=D);!isNaN(b)&&b>D&&b<ec||(b=D);c=g<b?g:b;b=g>b?g:b;Q(a,D,c);M=I.concat(J.reverse());N=K.concat(L.reverse());P(M,N);O();Q(a,b,ec);P(I,K);if(H(I[0],K[1])||H(J[0],L[0]))z.beginPath(),
z.moveTo(I[0],K[0]),z.lineTo(J[0],L[0]),z.stroke();P(J,L);O();Q(a,c,b);P(I,K);z.beginPath();z.moveTo(I[0],K[0]);z.lineTo(J[0],L[0]);z.stroke();z.beginPath();z.moveTo(I[I.length-1],K[K.length-1]);z.lineTo(J[J.length-1],L[L.length-1]);z.stroke();P(J,L);O()}};w?e():h(c)}};t.drawall$1=function(a,b){var c=A(a[0]);if("list"===c.ctype){y.handleModifs(b,y.pointAndLineModifs);for(var d=0;d<c.value.length;d++)t.draw$1([c.value[d]],null)}return k};t.connect$1=function(a,b){return D.drawpolygon(a,b,"D",!1)};
t.drawpoly$1=function(a,b){return D.drawpolygon(a,b,"D",!0)};t.fillpoly$1=function(a,b){return D.drawpolygon(a,b,"F",!0)};t.drawpolygon$1=function(a,b){return D.drawpolygon(a,b,"D",!0)};t.fillpolygon$1=function(a,b){return D.drawpolygon(a,b,"F",!0)};D.drawpolygon=function(a,b,c,d){function e(){for(var a=m.value,c=0;c<a.length;c++){var b=a[c],g;for(g=0;g<b.length;g++){var d=b[g],f=d.X*h.a-d.Y*h.b+h.tx,d=d.X*h.c-d.Y*h.d-h.ty;0===g?z.moveTo(f,d):z.lineTo(f,d)}z.closePath()}}function f(){var a;for(a=
0;a<m.value.length;a++){var c=D.extractPoint(m.value[a]);if(!c.ok)return;var b=c.x*h.a-c.y*h.b+h.tx,c=c.x*h.c-c.y*h.d-h.ty;0===a?z.moveTo(b,c):z.lineTo(b,c)}d&&z.closePath()}y.handleModifs(b,y.conicModifs);y.preDrawCurve();z.mozFillRule="evenodd";var h=x.drawingstate.matrix,m=A(a[0]);z.beginPath();"list"===m.ctype&&f();"shape"===m.ctype&&e();"D"===c&&(y.fillColor&&(z.fillStyle=y.fillColor,z.fill()),z.stroke());"F"===c&&(z.fillStyle=y.lineColor,z.fill());"C"===c&&z.clip();return k};var zc=Wc,qd=function(a,
b,c){if(-1!==b.indexOf("\n"))for(b=b.split("\n"),a.textContent=b[0],c=1;c<b.length;++c)a.appendChild(document.createElement("br")),a.appendChild(document.createTextNode(b[c]));else a.textContent=b};D.drawtext=function(a,b,c){var d=C(a[0]);a=A(a[1]);var e=D.extractPoint(d);if(!e.ok)return null;y.handleModifs(b,y.textModifs);b=x.drawingstate.textsize;null===b&&(b=ja.textsize);null!==y.size&&(b=y.size);z.fillStyle=y.textColor;var f=x.drawingstate.matrix,d=e.x*f.a-e.y*f.b+f.tx+y.xOffset,e=e.x*f.c-e.y*
f.d-f.ty-y.yOffset;a=w(a);f=y.bold+y.italics+Math.round(10*b)/10+"px "+y.family;z.font=f;return c?c(a,f,d,e,y.align,b):zc(z,a,d,e,y.align,b,b*ja.lineHeight)};t.drawtext$2=function(a,b){D.drawtext(a,b,null);return k};t.drawtable$2=function(a,b){var c=C(a[0]),d=C(a[1]),e=D.extractPoint(c);if(!e.ok||"list"!==d.ctype)return k;var d=d.value,c=d.length,h=-1,m;for(m=0;m<c;++m)"list"===d[m].ctype&&d[m].value.length>h&&(h=d[m].value.length);-1===h?(d=d.map(function(a){return[a]}),h=1):d=d.map(function(a){return f.asList(a).value});
var l=100,n=null,q=!0,r=x.drawingstate.textcolor;y.handleModifs(b,{size:!0,color:function(a){f._helper.isNumberVecN(a,3)&&(r=y.makeColor([a.value[0].value.real,a.value[1].value.real,a.value[2].value.real]))},alpha:!0,bold:!0,italics:!0,family:!0,align:!0,x_offset:!0,y_offset:!0,offset:!0,width:function(a){"number"===a.ctype&&(l=a.value.real)},height:function(a){"number"===a.ctype&&(n=a.value.real)},border:function(a){"boolean"===a.ctype&&(q=a.value)}});var t=x.drawingstate.textsize;null===t&&(t=ja.textsize);
null!==y.size&&(t=y.size);null===n&&(n=1.6*t);z.font=y.bold+y.italics+Math.round(10*t)/10+"px "+y.family;m=x.drawingstate.matrix;var u=h*l,v=c*n,t=e.x*m.a-e.y*m.b+m.tx+y.xOffset,A=e.x*m.c-e.y*m.d-m.ty-y.yOffset-v;if(q){y.preDrawCurve();z.strokeStyle=y.lineColor;z.beginPath();for(m=1;m<c;++m)z.moveTo(t,A+m*n),z.lineTo(t+u,A+m*n);for(e=1;e<h;++e)z.moveTo(t+e*l,A),z.lineTo(t+e*l,A+v);z.stroke();z.lineWidth=y.lsize+1;z.beginPath();z.rect(t,A,u,v);z.stroke()}t+=y.align*l+(1-2*y.align)*n*.3;A+=.7*n;z.fillStyle=
r;for(m=0;m<c;++m)for(e=0;e<h;++e)u=w(d[m][e]),zc(z,u,t+e*l,A+m*n,y.align);return k};D.drawshape=function(a,b){return"polygon"===a.type?D.drawpolygon([a],b,"D",1):"circle"===a.type?D.drawcircle([a.value.value[0],a.value.value[1]],b,"D"):k};D.fillshape=function(a,b){return"polygon"===a.type?D.drawpolygon([a],b,"F",1):"circle"===a.type?D.drawcircle([a.value.value[0],a.value.value[1]],b,"F"):k};D.clipshape=function(a,b){return"polygon"===a.type?D.drawpolygon([a],b,"C",1):"circle"===a.type?D.drawcircle([a.value.value[0],
a.value.value[1]],b,"C"):k};t.fill$1=function(a,b){var c=A(a[0]);return"shape"===c.ctype?D.fillshape(c,b):k};t.clip$1=function(a,b){var c=A(a[0]);return"shape"===c.ctype?D.clipshape(c,b):"list"===c.ctype?(c=t.polygon$1(a,[]),t.clip$1([c],[])):k};t.plot$1=function(a,b){return t.plot$2([a[0],null],b)};t.plot$2=function(a,b){function c(a){return"number"===a.ctype&&m._helper.isAlmostReal(a)}function d(a,c,b,g,e){n++;c=+c.value.real;e=+g.value.real;g=c*E.a-e*E.b+E.tx;c=c*E.c-e*E.d-E.ty;a=+a.value.real;
e=+b.value.real;b=a*E.a-e*E.b+E.tx;a=a*E.c-e*E.d-E.ty;q?(z.lineTo(b,a),z.lineTo(g,c)):(z.beginPath(),z.moveTo(b,a),z.lineTo(g,c),q=!0)}function e(a,b,g,f,k){var n=c(g),r=c(f);if(.001>k)!h&&q&&(z.stroke(),q=!1);else if(n||r){var t=m.real((a.value.real+b.value.real)/2);J.setvar(B,t);var u=A(w),v=c(u);if(n&&r&&v){var Mb=g.value.real,r=u.value.real,v=f.value.real;if(n=1>Math.abs(Mb+v-2*r)/l){var x=m.real((a.value.real+t.value.real)/2);J.setvar(B,x);var x=A(w),y=m.real((t.value.real+b.value.real)/2);J.setvar(B,
y);y=A(w);Mb=Math.abs(Mb+r-2*x.value.real)/l;r=Math.abs(r+v-2*y.value.real)/l;n=n&&1>Mb&&1>r}n?(d(a,t,g,u,k/2),d(t,b,u,f,k/2)):(e(a,t,g,u,k/2),e(t,b,u,f,k/2))}else e(a,t,g,u,k/2),e(t,b,u,f,k/2)}}var h=!1,l=.2/Jb,n=0,q=!1,r=-10,t=10,u=.1,v=1E3,w=a[0],B;if(null!==a[1]&&"variable"===a[1].ctype)B=a[1].name;else{var C=D.plotvars(w);B="#";-1!==C.indexOf("t")&&(B="t");-1!==C.indexOf("z")&&(B="z");-1!==C.indexOf("y")&&(B="y");-1!==C.indexOf("x")&&(B="x")}J.newvar(B);var E=x.drawingstate.matrix;y.handleModifs(b,
{color:!0,alpha:!0,size:!0,dashpattern:!0,dashtype:!0,dashing:!0,lineCap:!0,lineJoin:!0,miterLimit:!0,connect:function(a){"boolean"===a.ctype&&(h=a.value)},start:function(a){"number"===a.ctype&&(r=a.value.real)},stop:function(a){"number"===a.ctype&&(t=a.value.real)},steps:function(a){"number"===a.ctype&&(v=a.value.real)}});z.strokeStyle=y.lineColor;z.lineWidth=y.lsize;var F,G,H,I,q=!1,C=m.real(14.32);J.setvar(B,C);H=A(w);if("number"!==H.ctype){if(f.isNumberVector(H).value&&2===H.value.length){q=!1;
u=(t-r)/v;for(C=r;C<t;C+=u)J.setvar(B,m.real(C)),I=A(w),f.isNumberVector(I).value&&2===I.value.length&&(F=+I.value[0].value.real,G=+I.value[1].value.real,I=F*E.a-G*E.b+E.tx,F=F*E.c-G*E.d-E.ty,q?z.lineTo(I,F):(z.beginPath(),z.moveTo(I,F),q=!0));z.stroke();J.removevar(B)}return k}for(I=r;I<t+u;I+=u)C=m.real(I),J.setvar(B,C),H=A(w),C.value.real>r&&e(F,C,G,H,u),F=C,G=H;J.removevar(B);q&&z.stroke();return k};t.plotX$1=function(a,b){var c=a[0],d=D.plotvars(c),e="#";-1!==d.indexOf("t")&&(e="t");-1!==d.indexOf("z")&&
(e="z");-1!==d.indexOf("y")&&(e="y");-1!==d.indexOf("x")&&(e="x");J.newvar(e);d=x.drawingstate.matrix;z.fillStyle=x.drawingstate.linecolor;z.lineWidth=1;z.lineCap=y.lineCap;z.lineJoin=y.lineJoin;z.miterLimit=y.miterLimit;for(var f=!1,h=-10;10>h;h+=.01){J.setvar(e,m.real(h));var l=A(c);if("number"===l.ctype){var n=+l.value.real,l=h*d.a-n*d.b+d.tx,n=h*d.c-n*d.d-d.ty;f?z.lineTo(l,n):(z.beginPath(),z.moveTo(l,n),f=!0)}}z.stroke();J.removevar(e);return k};D.plotvars=function(a){function b(a,c){var g={},
d;for(d=a.length-1;0<=d;--d)g[a[d]]=a[d];for(d=c.length-1;0<=d;--d)g[c[d]]=c[d];d=[];for(var e in g)g.hasOwnProperty(e)&&d.push(g[e]);return d}function c(a,c){for(var b=0;b<a.length;b++)a[b]===c&&(a.splice(b,1),b--);return a}var d,e,f,h;if("variable"===a.ctype)return[a.name];if("infix"===a.ctype)return d=D.plotvars(a.args[0]),a=D.plotvars(a.args[1]),b(d,a);if("list"===a.ctype){f=a.value;e=[];for(h=0;h<f.length;h++)d=D.plotvars(f[h]),e=b(e,d);return e}if("function"===a.ctype){f=a.args;e=[];for(h=0;h<
f.length;h++)d=D.plotvars(f[h]),e=b(e,d);"apply"!==a.oper&&"select"!==a.oper&&"forall"!==a.oper&&"sum"!==a.oper&&"product"!==a.oper&&"repeat"!==a.oper&&"min"!==a.oper&&"max"!==a.oper&&"sort"!==a.oper||"variable"!==a.args[1].ctype||(e=c(e,a.args[1].name));return e}return[]};t.clrscr$0=function(a,b){"undefined"!==typeof W&&"undefined"!==typeof V&&z.clearRect(0,0,W,V);return k};t.repaint$0=function(a,g){b();return k};t.screenbounds$0=function(a,b){var c=v.withUsage(f.realVector(x.to(0,0)),"Point"),d=
v.withUsage(f.realVector(x.to(W,0)),"Point"),e=v.withUsage(f.realVector(x.to(W,V)),"Point"),h=v.withUsage(f.realVector(x.to(0,V)),"Point");return f.turnIntoCSList([c,d,e,h])};t.createimage$3=function(a,b){var c=A(a[0]),d=C(a[1]),e=C(a[2]);if("number"!==d.ctype||"number"!==e.ctype||"string"!==c.ctype)return k;var f=document.createElement("canvas");f.id=c.value;f.width=d.value.real;f.height=e.value.real;f.style.display="none";document.body.appendChild(f);ab[c.value]=X(f);return k};t.clearimage$1=function(a,
b){var c=A(a[0]);if("string"!==c.ctype&&"image"!==c.ctype)return k;var c=cb(c),d=c.img;if("undefined"===typeof d||null===d)return k;var e=c.width,f=c.height;d.getContext("2d").clearRect(0,0,e,f);c.generation++;return k};t.canvas$4=function(a,b){var c=C(a[0]),d=C(a[1]),e=A(a[2]),f=a[3],h=D.extractPoint(c),m=D.extractPoint(d);if(!h.ok||!m.ok||"string"!==e.ctype&&"image"!==e.ctype)return k;e=cb(e);if(!e||!e.img.getContext)return k;var d=e.img,l=e.width,c=e.height,n=m.x-h.x,q=m.y-h.y,r=h.x-q*c/l,t=h.y+
n*c/l,q=m.x-q*c/l,n=m.y+n*c/l,m=x.from(h.x,h.y,1),r=x.from(r,t,1),q=x.from(q,n,1),h=m[0],t=m[1],n=r[0],u=r[1],v=q[0],w=q[1],r=l*(t-u)/((h-n)*(t-w)-(h-v)*(t-u)),l=l*(h-n)/((t-u)*(h-v)-(t-w)*(h-n)),q=-r*h-l*t,m=(c*(t-w)-c*(t-u))/((h-n)*(t-w)-(h-v)*(t-u)),n=(c*(h-v)-c*(h-n))/((t-u)*(h-v)-(t-w)*(h-n)),c=c-m*h-n*t,d=d.getContext("2d"),h=z;z=d;z.save();z.transform(r,m,l,n,q,c);e.generation++;A(f);z.restore();z=h};t.canvas$5=function(a,b){var c=C(a[0]),d=C(a[1]),e=C(a[2]),f=A(a[3]),h=a[4],c=D.extractPoint(c),
m=D.extractPoint(d),l=D.extractPoint(e);if(!c.ok||!m.ok||!l.ok||"string"!==f.ctype&&"image"!==f.ctype)return k;f=cb(f);if(!f||!f.img.getContext)return k;var e=f.img,n=f.width,d=f.height,q=x.from(c.x,c.y,1),r=x.from(m.x,m.y,1),m=x.from(l.x,l.y,1),c=q[0],l=q[1],t=r[0],u=r[1],v=m[0],w=m[1],m=((0-n)*(l-w)-0*(l-u))/((c-t)*(l-w)-(c-v)*(l-u)),n=((0-n)*(c-v)-0*(c-t))/((l-u)*(c-v)-(l-w)*(c-t)),r=0-m*c-n*l,q=((d-d)*(l-w)-(d-0)*(l-u))/((c-t)*(l-w)-(c-v)*(l-u)),t=((d-d)*(c-v)-(d-0)*(c-t))/((l-u)*(c-v)-(l-w)*
(c-t)),d=d-q*c-t*l,e=e.getContext("2d"),c=z;z=e;z.save();z.transform(m,q,n,t,r,d);f.generation++;A(h);z.restore();z=c};t.screenresolution$0=function(a,b){return m.real(x.drawingstate.matrix.a)};t.layer$1=function(a,b){};t.imagesize$1=function(a,b){var c=cb(C(a[0]));return c?f.realVector([+c.width,+c.height]):k};t.imageready$1=function(a,b){var c=cb(C(a[0]));return v.bool(!(!c||!c.ready))};t.drawimage$2=function(a,b){function c(){var a=1,c=1,d=1,p=1,h=0,m=1,n=D.extractPoint(e);if(!n.ok)return k;l=
cb(l);if(!l)return k;z.save();var q;void 0!==b.angle&&(q=A(b.angle),"number"===q.ctype&&(h=q.value.real));void 0!==b.rotation&&(q=A(b.rotation),"number"===q.ctype&&(h=q.value.real));void 0!==b.scale&&(q=C(b.scale),"number"===q.ctype&&(c=a=q.value.real),f.isNumberVector(q).value&&2===q.value.length&&(a=q.value[0].value.real,c=q.value[1].value.real));void 0!==b.scalex&&(q=A(b.scalex),"number"===q.ctype&&(a=q.value.real));void 0!==b.scaley&&(q=A(b.scaley),"number"===q.ctype&&(c=q.value.real));void 0!==
b.flipx&&(q=A(b.flipx),"boolean"===q.ctype&&q.value&&(d=-1));void 0!==b.flipy&&(q=A(b.flipy),"boolean"===q.ctype&&q.value&&(p=-1));void 0!==b.alpha&&(q=A(b.alpha),"number"===q.ctype&&(m=q.value.real));var r=x.drawingstate.matrix,R=x.drawingstate.initialmatrix,t=l.width,u=l.height;q=n.x*r.a-n.y*r.b+r.tx;var v=n.x*r.c-n.y*r.d-r.ty,w=(n.x+1)*r.a-n.y*r.b+r.tx-q,r=(n.x+1)*r.c-n.y*r.d-r.ty-v,Ca=(n.x+1)*R.a-n.y*R.b+R.tx-(n.x*R.a-n.y*R.b+R.tx),R=(n.x+1)*R.c-n.y*R.d-R.ty-(n.x*R.c-n.y*R.d-R.ty),n=Math.sqrt(w*
w+r*r)/Math.sqrt(Ca*Ca+R*R),w=-Math.atan2(w,r)+Math.atan2(Ca,R),r=x.drawingstate.matrix.sdet/72,a=a*r,c=c*r;1!==m&&(z.globalAlpha=m);z.translate(q,v);z.scale(a*d*n,c*p*n);z.rotate(h+w);z.translate(-q,-v);z.translate(-t/2,-u/2);a=l;a.drawTo?a.drawTo(z,q,v):z.drawImage(a.img,q,v);z.globalAlpha=1;z.restore()}function d(){var a=1,c=1,f=1,p=1,n=D.extractPoint(e),q=D.extractPoint(h),r;if(!n.ok||!q.ok)return k;l=cb(l);if(!l)return k;var t=l.width,u=l.height;if(0===m)r={},r.x=n.x-(q.y-n.y),r.y=n.y+(q.x-n.x),
p=u/t;else if(r=D.extractPoint(m),!n.ok)return k;z.save();var v;void 0!==b.alpha&&(v=A(b.alpha),"number"===v.ctype&&(a=v.value.real));void 0!==b.aspect&&(v=A(b.aspect),"number"===v.ctype&&(p=v.value.real));void 0!==b.flipx&&(v=A(b.flipx),"boolean"===v.ctype&&v.value&&(c=-1));void 0!==b.flipy&&(v=A(b.flipy),"boolean"===v.ctype&&v.value&&(f=-1));v=x.drawingstate.matrix;1!==a&&(z.globalAlpha=a);a=n.x*v.a-n.y*v.b+v.tx;n=n.x*v.c-n.y*v.d-v.ty;z.transform(q.x*v.a-q.y*v.b+v.tx-a,q.x*v.c-q.y*v.d-v.ty-n,r.x*
v.a-r.y*v.b+v.tx-a,r.x*v.c-r.y*v.d-v.ty-n,a,n);z.scale(1/t,-1/u*p);z.translate(t/2,-u/2);z.scale(c,f);z.translate(-t/2,u/2);z.translate(0,-u);c=l;c.drawTo?c.drawTo(z,0,0):z.drawImage(c.img,0,0);z.globalAlpha=1;z.restore()}var e,h,m,l;return 2===a.length?(e=C(a[0]),l=C(a[1]),c()):3===a.length?(e=C(a[0]),h=C(a[1]),m=0,l=C(a[2]),d()):4===a.length?(e=C(a[0]),h=C(a[1]),m=C(a[2]),l=C(a[3]),d()):k};t.drawimage$3=t.drawimage$2;t.drawimage$4=t.drawimage$2;t.allimages$0=function(){var a=[];Object.keys(ab).forEach(function(b){a.push({ctype:"string",
value:b})});return f.turnIntoCSList(a)};t.cameravideo$0=function(){var a=null,b={video:!0,audio:!1},c=navigator.mediaDevices&&navigator.mediaDevices.getUserMedia;c?a=function(a,c){navigator.mediaDevices.getUserMedia(b).then(a,c)}:(c=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia)&&(a=function(a,d){c.call(navigator,b,a,d)});if(!a)return console.warn("getUserMedia call not supported"),k;var d=document.createElement("video");d.autoplay=!0;var e=
X(d);console.log("Opening stream.");a(function(a){a=window.URL.createObjectURL(a);d.src=a;d.addEventListener("loadeddata",S)},function(a){console.error("Could not get user video:",String(a),a)});return e};"use strict";var me=[{key:[":"],field:["."],deg:["\u00b0"],take:["_"]},{functionCall:!0},{rassoc:!0,pow:["^"],sqrt:["\u221a"]},{mul:["*","\u2062","\u22c5","\u00b7"],cross:["\u00d7"],div:["/","\u00f7","\u2215","\u2236"]},{add:["+"],sub:["-","\u2212"],neg:["!","\u00ac"]},{seq:[".."]},{eq:["==","\u225f"],
ne:["!=","<>","\u2260"],lt:["<"],gt:[">"],le:["<=","\u2264","\u2266"],ge:[">=","\u2265","\u2267"],aeq:["~=","\u2248"],ane:["~!=","\u2249"],alt:["~<","\u2a89"],agt:["~>","\u2a8a"],ale:["~<=","\u2a85"],age:["~>=","\u2a86"],"in":["\u2208"],nin:["\u2209"]},{and:["&","\u2227"],or:["%","\u2228"]},{rassoc:!0,prepend:["<:"]},{concat:["++","\u222a"],remove:["--","\u2216"],common:["~~","\u2229"],append:[":>"]},{rassoc:!0,assign:["="],define:[":="],undefine:[":=_"],bdefine:["::="]},{seq:[";"]},{modif:["->",
"\u2192"]},{rassoc:!0,list:[","]}],ne=["+","-"],oe=["!","\u221a"],pe=["\u00b0",":=_"],qe=[";",","],Ac=[],wa={},ad;(function(){var a=0;me.forEach(function(b){a+=2;var c=!!b.rassoc;b.functionCall&&(ad=a);for(var d in b){var e=b[d];if("boolean"!==typeof e)for(var f={name:d,sym:e[0],symbols:e,rassoc:c,precedence:a,prefix:!1,postfix:!1,infix:!0,bare:!1},h=0;h<e.length;++h){var m=e[h];if(wa.hasOwnProperty(m))throw Error("Duplicate operator: "+m);wa[m]=f;Ac.push(m)}}});ne.forEach(function(a){wa[a].prefix=
!0});oe.forEach(function(a){wa[a].prefix=!0;wa[a].infix=!1});pe.forEach(function(a){wa[a].postfix=!0;wa[a].infix=!1});qe.forEach(function(a){wa[a].prefix=!0;wa[a].postfix=!0;wa[a].infix=!0;wa[a].bare=!0})})();Ac.sort(function(a,b){return b.length-a.length});var re="(?:[0-9](?: [0-9])*(?: \\.(?! \\.)(?: [0-9])*)?|\\.(?: [0-9])+)(?: [Ee](?: [+-])?(?: [0-9])+)?".replace(/ /g,"[ \t]*"),se="(?:[\u207a\u207b] )?[\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079](?: [\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079])*".replace(/ /g,
"[ \t]*"),te="(?:[\u208a\u208b] )?[\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089](?: [\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089])*".replace(/ /g,"[ \t]*"),Bc=function(a,b,c){var d,e,f=0,h="(?:[",m=b.length;for(d=0;d<m;++d)e=b.charCodeAt(d),55296<=e?(h+="]|"+b.charAt(d)+"[",f=56320):(h+=String.fromCharCode(e=f=a[e-32]+f),f+=a[b.charCodeAt(++d)-32],f!==e&&(f!==e+1&&(h+="-"),h+=String.fromCharCode(f)));return h+"]|["+c+"][\udc00-\udfff])"}([2,0,106,3,4,1,6,5,7,11,17,
8,12,21,9,22,30,10,15,24,25,16,13,42,46,14,18,19,29,37,27,28,35,26,32,36,40,43,47,53,20,48,50,56,33,34,39,51,52,55,63,64,65,68,85,23,31,38,45,49,105,59,66,69,72,88,102,114,117,128,157,191,41,44,54,60,67,70,71,73,74,75,76,80,81,82,83,84,86,87,89,93,94,98,99,107,108,116,122,130,132,134,138,160,165,185,195,196,255,268,277,310,332,339,362,365,390,449,457,470,512,513,541,568,582,619,673,726,768,820,921,991,1164,2684,6581,8453,11171,20949],"T4(4I!)!'!&/ 0 \u0096')2$+! !\u0083$ %## !(!   ! ; u \u0086.\u0088 =#!+YoA& 87C% } !5%+%) #!*! <0a,!4B1%'!&-'!1!$!33`HsG$!;!+.52'(#%#- & !$#$!*!9%  2%H''%#- & % % %B# !H *+   - & % $$!;!5%3!,(#%#- & % $$!X%  5!:! '$  #$% ! %$%$ $)W!G(   / 2$!> &%C(   / . $$!L! %5%;(   D#!*!* 4'&*$W + !#&]F %6&]% !#% !#!(# &   ! !#% # %1!#$ !/#L!S( @?$\u00817-!*''#$!$%+ ',6!:= !&!#7 \u0090 ##& ! ##D ##B ##& ! ##9 K ##^Y2*V#'$\u009d#5 4&p((+, #2*2*2,  5OC!'!Uy.D !&_)0J<#$,E'4Q/1Pv!|8:&K<9%)E>@7 )@\u0080# #$%1gT\u008e#'#=#'#( ! ! ! 0#P & !$  &$##'',&  &d!9!*,b!'!#. !$$(! ! ! # 1##&$'!G%\u00a58 8 \u0084(#$%6= !&!#Q+!*/1& & & & & & & &t!\u0097%E$&%'V(  z #&D${:Aj2\u0099\u00a6q\u00a9E\u00a4UZ#\u008d$2)%-8*0#_J+#b#M#(S1   # /0O2[R'$! !6>)/A?+8<!*$ .)$ D3  (-/$!$[ !$%#$#! !4 #1+ 6'#'#'1& & 7 .)c0\u00a86/'I\u00a7\u0093#\\N&6$&! . , $ ! % % \u007fM\u0092;R#Gh)d$ \u0085=4(4,a$'#'#'# \ud800!) 4 : % 9#6@\u0082\u0094?$IIX*5 ((=)<#@'(\ud801!f~N.Of\u008f1-)(\ud802!'#! E %$!#/)/10^: %)-)4nQ(%T!5#   AZ?$?C( >?G)-):9*\ud803!`KJ9J\ud804#PriL3>@7M$!6F2#/! !C* 3V& ! # 9 .+8N(#%#- & % $$!;!6$\ud805eF-% !\u008987#=F-!k7x4\ud806\u0087RB!\u0095K\ud808!\u00a2\ud809e\u008a\ud80d!8\ud811!\u009c\ud81a!\u009b+0c<;F*#BH&:\ud81b\u00a0U,!l,\ud82c!%\ud82f!\"&,$++.\ud835!w m %#!#%## ) ! & S ##( & > # $ !$& \u0091#3 3 0 3 0 3 0 3 0 3 (\ud83a!\u008b\ud83b\u0098# A % !#! . # ! !(!'! ! !   % !#! ! ! ! ! % !## & # # ! . 5&  $ 5\ud869!\u009f7\u008c\ud86d!\u00a1,g\ud86e!<#\u00a3\ud873!\u009e\ud87e!\u009a",
"\ud80c\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872"),ue=("#(?: [1-9])?|(?:'|"+Bc+")(?: (?:[0-9']|"+Bc+"))*").replace(/ /g,"[ \t]*"),Yc=["([ \t\n]+)|(//.*)|(/\\*)","("+re+")","("+Ac.map(Xc).join("|")+")","("+"[](){}||".split("").map(Xc).join("|")+")","("+te+")","("+se+")","("+ue+")",'("[^"]*")|($)'].join("|"),ve=new RegExp("[ \t]*".replace(/\*$/,"+"),"g"),Cc="ANY WS COMMENT START_COMMENT NUM OP BRA SUB SUP ID STR EOF".split(" ");(function(){var a=(new RegExp(Yc,"g")).exec("");if(a.hasOwnProperty(Cc.length))throw Error("RE has more groups than expected");
if(!a.hasOwnProperty(Cc.length-1))throw Error("RE has fewer groups than expected");})();mb.prototype.advanceBy=function(a){this.advanceTo(this.pos+a)};mb.prototype.advanceTo=function(a){for(this.pos=a;this.bols[0]<=a;)this.bol=this.bols.shift(),this.line++};mb.prototype.curPos=function(){return{row:this.line,col:this.pos-this.bol,pos:this.pos}};mb.prototype.nextInternal=function(){var a=this.re.exec(this.input);if(a.index!==this.pos)throw ea("Invalid token",this.curPos(),this.input.substring(this.pos,
a.index));var b=this.curPos();this.advanceBy(a[0].length);var c=this.curPos(),d;for(d=1;null==a[d];++d);return{start:b,end:c,raw:a[0],text:a[0].replace(ve,""),toktype:Cc[d]}};mb.prototype.next=function(){var a;do if(a=this.nextInternal(),"START_COMMENT"===a.toktype){var b=/\*\/|\/\*/g;b.lastIndex=a.start.pos+2;for(var c=1,d;0<c;)if(d=b.exec(this.input))"/*"===d[0]?++c:--c;else throw ea("Unterminated comment",a.start,a.text);this.re.lastIndex=b.lastIndex;this.advanceTo(b.lastIndex);a.end=this.curPos();
a.raw=this.input.substring(a.start.pos,a.end.pos);a.text=a.raw;a.toktype="COMMENT"}while("WS"===a.toktype||"COMMENT"===a.toktype);return a};var we={ctype:"void"};Db.prototype.postprocess=function(a){if(null===a)return we;if(a){if("infix"===a.ctype)if(":="===a.oper){var b=a.args[0];if("function"===b.ctype)b.args.forEach(function(c){if(null===c||"variable"!==c.ctype)throw ea("Function argument must be an identifier",c.start||a.start);});else if("variable"!==b.ctype)throw ea(a.oper+" can only be used to define functions or variables",
a.start);}else if(","===a.oper)throw ea("comma may only be used to delimit list elements",a.start);a.args&&(a.args=a.args.map(this.postprocess,this));if(a.modifs)for(var c in a.modifs)a.modifs[c]=this.postprocess(a.modifs[c]);if("paren"===a.ctype)return a.args[0];if("infix"===a.ctype){if("."===a.oper){if(!a.args[1]||"variable"!==a.args[1].ctype)throw ea("Field name must be identifier",a.start,a.text);a.ctype="field";a.obj=a.args[0];a.key=a.args[1].name;delete a.args}this.infixmap&&(a.impl=this.infixmap[a.oper])}else"variable"===
a.ctype?this.usedVariables[a.name]=!0:"function"===a.ctype&&(this.usedFunctions[a.oper]=!0)}if("infix"===a.ctype)return{ctype:"infix",oper:String(a.oper),args:[a.args[0],a.args[1]],impl:a.impl};if("variable"===a.ctype)return{ctype:"variable",name:String(a.name)};if("number"===a.ctype)return{ctype:"number",value:{real:+a.value.real,imag:+a.value.imag}};if("string"===a.ctype)return{ctype:"string",value:String(a.value)};if("list"===a.ctype)return{ctype:"list",value:a.value};if("function"===a.ctype)return{ctype:"function",
oper:String(a.oper),args:a.args,modifs:a.modifs};if("field"===a.ctype)return{ctype:"field",obj:a.obj,key:String(a.key)};throw Error("Unsupported AST node of type "+a.ctype);};Db.prototype.parse=function(a){try{var b=$c(new mb(a));if("EOF"!==b.closedBy.toktype)throw ea("Closing bracket never opened.",b.closedBy.start,b.closedBy.text);return this.postprocess(b.expr)}catch(c){return c.ctype="error",c}};"undefined"!==typeof process&&"undefined"!==typeof module&&"undefined"!==typeof module.exports&&"undefined"===
typeof window&&(module.exports.Parser=Db,module.exports.Tokenizer=mb,module.exports.unicodeLetters=Bc,module.exports.parse=function(a){return(new Db).parse(a)});var Mc={},Dc;Dc=[0,0,0,0,0,0,0,0,0,0,0,0];t.playsin$1=function(a,b){var c=C(a[0]),d=0;if("number"===c.ctype){var e;void 0!==b.line&&(e=A(b.line),"number"===e.ctype&&(d=Math.floor(e.value.real),0>d&&(d=0),10<d&&(d=10)));c=c.value.real;0!==Dc[d]&&Dc[d].set({freq:c})}return k};var O={printArr:function(a){for(var b=a.value.length,c=[],d=[],e=
!1,f=0;f<b;f++)c[f]=a.value[f].value.real,d[f]=a.value[f].value.imag,0!==d[f]&&(e=!0);console.log(c);e&&console.log(d)},zero:function(a){for(var b=[],c=m.real(0),d=0;d<a.value.real;d++)b[d]=c;return f.turnIntoCSList(b)},number:function(a,b){var c=O.zero(b);c.value[0]=a;return c},variable:function(a,b){var c=O.zero(b);c.value[0]=a;c.value[1]=m.real(1);return c},add:function(a,b){return f.add(a,b)},sub:function(a,b){return f.sub(a,b)},mult:function(a,b){if(a.value.length!==b.value.length)return console.error("dims don't fit return nada"),
k;for(var c=a.value.length,d=O.zero(m.real(c)),e=m.real(0),f=0;f<c;f++){for(var h=0;h<=f;h++)e=m.add(e,m.mult(a.value[h],b.value[f-h]));d.value[f]=e;e=m.real(0)}return d},pow:function(a,b){if(0>b.value.real||b.value.real!==Math.floor(b.value.real))return O.root(a,b);for(var c=a,d=1;d<b.value.real;d++)c=O.mult(c,a);return c},root:function(a,b){var c=m.real(0),d=m.real(1),e=m.add(d,b),f=a.value.length,h=O.zero(m.real(f));h.value[0]=m.pow(a.value[0],b);for(var k=c,l,n,q=1;q<f;q++){n=m.real(q);for(var r=
1;r<=q;r++)l=m.mult(e,m.real(r)),l=m.div(l,n),l=m.sub(l,d),l=m.mult(l,a.value[r]),l=m.mult(l,h.value[q-r]),k=m.add(k,l);k=m.div(k,a.value[0]);h.value[q]=k;k=c}return h},findFirstNoneZero:function(a,b,c){for(var d=Infinity,e=Infinity,f=c;f<a.value.length;f++)if(1E-12<m.abs2(a.value[f]).value.real){d=f;break}for(a=c;a<b.value.length;a++)if(1E-12<m.abs2(b.value[a]).value.real){e=a;break}return[d,e]},div:function(a,b){if(a.value.length!==b.value.length)return console.log("dims don't fit - return nada"),
k;for(var c=a.value.length,d=m.real(0),e=O.zero(m.real(c)),f=d,h,l=0;l<c;l++){h=O.findFirstNoneZero(a,b,l);l<h[0]&&h[0]===h[1]&&Infinity!==h[0]&&(a.value.splice(l,h[0]),b.value.splice(l,h[0]),e.value.splice(l,h[0]),c-=h[0]);h=a.value[l];for(var n=0;n<l;n++)f=m.add(f,m.mult(e.value[n],b.value[l-n]));h=m.sub(h,f);h=m.div(h,b.value[0]);e.value[l]=h;f=d}return e},exp:function(a){var b=m.real(0),c=a.value.length,d=O.zero(m.real(c)),e=b,f;d.value[0]=m.exp(a.value[0]);for(var h=1;h<c;h++){for(var k=1;k<=
h;k++)f=m.mult(m.real(k),a.value[k]),f=m.mult(f,d.value[h-k]),e=m.add(e,f);d.value[h]=m.div(e,m.real(h));e=b}return d},log:function(a){var b=m.real(0),c=a.value.length,d=O.zero(m.real(c));d.value[0]=m.log(a.value[0]);for(var e=b,f,h,k=1;k<c;k++){f=a.value[k];for(var l=1;l<k;l++)h=m.mult(m.real(l),d.value[l]),h=m.mult(h,a.value[k-l]),e=m.add(e,h);e=m.div(e,m.real(k));f=m.sub(f,e);f=m.div(f,a.value[0]);d.value[k]=f;e=b}return d},sincos:function(a){var b=m.real(0),c=a.value.length,d=O.zero(m.real(c)),
e=O.zero(m.real(c));d.value[0]=m.sin(a.value[0]);e.value[0]=m.cos(a.value[0]);for(var f=b,h=b,k,l,n,q=1;q<c;q++){n=m.real(q);for(var r=1;r<=q;r++)l=m.mult(m.real(r),a.value[r]),k=m.mult(l,e.value[q-r]),l=m.mult(l,d.value[q-r]),h=m.add(h,k),f=m.add(f,l);h=m.div(h,n);f=m.div(f,m.neg(n));d.value[q]=h;e.value[q]=f;f=h=b}O.sinsave=d;O.cossave=e;return[d,e]},sin:function(a){return O.sincos(a)[0]},cos:function(a){return O.sincos(a)[1]},faculty:function(a){var b=[];b[0]=m.real(1);for(var c=1,d=1;d<=a.value.real;d++)c*=
d,b[d]=m.real(c);return b=f.turnIntoCSList(b)},diff:function(a,b,c,d){var e;if("variable"===a.ctype)e=a.name!==b?O.number(A(a),d):O.variable(c,d);else if("number"===a.ctype)e=O.number(a,d);else{if("infix"===a.ctype){if("*"===a.oper)return O.mult(O.diff(a.args[0],b,c,d),O.diff(a.args[1],b,c,d));if("^"===a.oper)return O.pow(O.diff(a.args[0],b,c,d),O.diff(a.args[1],b,c,d).value[0]);if("/"===a.oper)return O.div(O.diff(a.args[0],b,c,d),O.diff(a.args[1],b,c,d));if("+"===a.oper)return O.add(O.diff(a.args[0],
b,c,d),O.diff(a.args[1],b,c,d));if("-"===a.oper)return O.sub(O.diff(a.args[0],b,c,d),O.diff(a.args[1],b,c,d));console.log("infix not found",a.oper);return k}if("function"===a.ctype){if("exp$1"===a.oper)return O.exp(O.diff(a.args[0],b,c,d));if("log$1"===a.oper)return O.log(O.diff(a.args[0],b,c,d));if("sin$1"===a.oper)return O.sin(O.diff(a.args[0],b,c,d));if("cos$1"===a.oper)return O.cos(O.diff(a.args[0],b,c,d))}else return console.log("ctype not found",a.ctype),k}return e},adevaluate:function(a,b,
c,d){a=O.diff(a,b,c,d);d=O.faculty(d);for(b=2;b<a.value.length;b++)a.value[b]=m.mult(a.value[b],d.value[b]);return a},autodiff:function(a,b,c,d){for(var e=[],h=c.value.length,m,k=0;k<h;k++)m=O.adevaluate(a,b,c.value[k],d),e[k]=m;return e=f.turnIntoCSList(e)}},y={handleModifs:function(a,b){y.dashing&&y.unSetDash();y.colorraw=null;y.fillcolorraw=null;y.size=null;0>=y.psize&&(y.psize=0);0>=y.lsize&&(y.lsize=0);y.overhang=1;y.dashing=!1;y.isArrow=!1;y.arrowSides="==>";y.arrowposition=1;y.headlen=10;y.arrowShape=
y.arrowShapes.line;y.alpha=x.drawingstate.alpha;y.fillalpha=0;y.bold="";y.italics="";y.family="sans-serif";y.align=0;y.xOffset=0;y.yOffset=0;y.lineCap="round";y.lineJoin="round";y.miterLimit=10;var c,d;for(c in a){var e=a[c];e&&((d=b[c])?(!0===d&&(d=y.modifHandlers[c]),d(A(e))):console.log("Modifier not supported: "+c))}null!==y.size?y.psize=y.lsize=y.size:(y.psize=x.drawingstate.pointsize,y.lsize=x.drawingstate.linesize);y.dashing&&y.dashing(y.lsize);null!==y.colorraw?y.pointColor=y.lineColor=y.textColor=
y.makeColor(y.colorraw):1===y.alpha?(y.pointColor=x.drawingstate.pointcolor,y.lineColor=x.drawingstate.linecolor,y.textColor=x.drawingstate.textcolor):(y.pointColor=y.makeColor(x.drawingstate.pointcolorraw),y.lineColor=y.makeColor(x.drawingstate.linecolorraw),y.textColor=y.makeColor(x.drawingstate.textcolorraw));y.black=1===y.alpha?"rgb(0,0,0)":"rgba(0,0,0,"+y.alpha+")";y.fillColor=y.fillcolorraw&&0<y.fillalpha?y.makeColor(y.fillcolorraw,y.fillalpha):null},modifHandlers:{size:function(a){"number"===
a.ctype&&(y.size=a.value.real,0>y.size&&(y.size=0),1E3<y.size&&(y.size=1E3))},color:function(a){f.isNumberVector(a).value&&3===a.value.length&&(y.colorraw=[a.value[0].value.real,a.value[1].value.real,a.value[2].value.real])},fillcolor:function(a){f.isNumberVector(a).value&&3===a.value.length&&(y.fillcolorraw=[a.value[0].value.real,a.value[1].value.real,a.value[2].value.real])},alpha:function(a){"number"===a.ctype&&(y.alpha=a.value.real)},fillalpha:function(a){"number"===a.ctype&&(y.fillalpha=a.value.real)},
dashpattern:function(a){if("list"===a.ctype){for(var b=[],c=0,d=0;c<a.value.length;c++)"number"===a.value[c].ctype&&(b[d++]=a.value[c].value.real);y.dashing=y.setDash.bind(null,b)}},dashtype:function(a){if("number"===a.ctype)a=Math.floor(a.value.real);else if("string"===a.ctype)a=a.value;else return;if(a=y.dashTypes[a])y.dashing=y.setDash.bind(null,a)},dashing:function(a){"number"===a.ctype&&(a=Math.floor(a.value.real),y.dashing=y.setDash.bind(null,[2*a,a]))},overhang:function(a){"number"===a.ctype&&
(y.overhang=y.overhang*a.value.real+(1-y.overhang)*(1-a.value.real))},arrow:function(a){"boolean"===a.ctype?y.isArrow=a.value:console.error("arrow needs to be of type boolean")},arrowshape:function(a){"string"!==a.ctype?console.error("arrowshape needs to be of type string"):y.arrowShapes.hasOwnProperty(a.value)?(y.arrowShape=y.arrowShapes[a.value],y.isArrow=!0,y.arrowShape.deprecated&&(console.log("arrowshape "+a.value+" is deprecated, use "+y.arrowShape.deprecated+" instead."),y.arrowShape.deprecated=
null)):(a=Object.keys(y.arrowShapes),a.sort(),a=a.join(", "),console.error("arrowshape needs to be one of "+a))},arrowsides:function(a){"string"!==a.ctype?console.error("arrowsides is not of type string"):"==>"!==a.value&&"<==>"!==a.value&&"<=="!==a.value?console.error("arrowsides is unknows"):(y.arrowSides=a.value,y.isArrow=!0)},arrowposition:function(a){"number"!==a.ctype?console.error("arrowposition is not of type number"):0>a.value.real?console.error("arrowposition has to be positive"):1<a.value.real?
y.overhang=y.overhang*a.value.real+(1-y.overhang)*(1-a.value.real):(y.arrowposition=a.value.real,y.isArrow=!0)},arrowsize:function(a){"number"!==a.ctype?console.error("arrowsize is not of type number"):0>a.value.real?console.error("arrowsize has to be positive"):y.headlen*=a.value.real},bold:function(a){"boolean"===a.ctype&&a.value&&(y.bold="bold ")},italics:function(a){"boolean"===a.ctype&&a.value&&(y.italics="italic ")},family:function(a){"string"===a.ctype&&(y.family=a.value)},align:function(a){"string"===
a.ctype&&(a=a.value,"left"===a&&(y.align=0),"right"===a&&(y.align=1),"mid"===a&&(y.align=.5))},x_offset:function(a){"number"===a.ctype&&(y.xOffset=a.value.real)},y_offset:function(a){"number"===a.ctype&&(y.yOffset=a.value.real)},offset:function(a){"list"===a.ctype&&2===a.value.length&&"number"===a.value[0].ctype&&"number"===a.value[1].ctype&&(y.xOffset=a.value[0].value.real,y.yOffset=a.value[1].value.real)},lineCap:function(a){"string"!==a.ctype||"round"!==a.value&&"square"!==a.value&&"butt"!==a.value||
(y.lineCap=a.value)},lineJoin:function(a){"string"!==a.ctype||"round"!==a.value&&"bevel"!==a.value&&"miter"!==a.value||(y.lineJoin=a.value)},miterLimit:function(a){"number"===a.ctype&&0<a.value.real&&(y.miterLimit=Math.round(a.value.real))}},lineModifs:{size:!0,color:!0,alpha:!0,dashpattern:!0,dashtype:!0,dashing:!0,overhang:!0,arrow:!0,arrowshape:!0,arrowsides:!0,arrowposition:!0,arrowsize:!0,lineCap:!0,lineJoin:!0,miterLimit:!0},pointModifs:{size:!0,color:!0,alpha:!0}};y.pointAndLineModifs=y.lineModifs;
y.conicModifs={size:!0,color:!0,alpha:!0,fillcolor:!0,fillalpha:!0,lineCap:!0,lineJoin:!0,miterLimit:!0};y.textModifs={size:!0,color:!0,alpha:!0,bold:!0,italics:!0,family:!0,align:!0,x_offset:!0,y_offset:!0,offset:!0};y.makeColor=function(a,b){void 0===b&&(b=y.alpha);return"rgba("+Math.floor(255*a[0])+","+Math.floor(255*a[1])+","+Math.floor(255*a[2])+","+b+")"};y.preDrawCurve=function(){z.lineWidth=y.lsize;z.lineCap=y.lineCap;z.lineJoin=y.lineJoin;z.miterLimit=y.miterLimit;z.strokeStyle=y.lineColor};
y.arrowShapes={"default":{close:!1,fill:!1,ratio:1,deprecated:"line"},line:{close:!1,fill:!1,ratio:1},empty:{close:!0,fill:!1,ratio:1},hollow:{close:!0,fill:!1,ratio:1,deprecated:"empty"},full:{close:!0,fill:!0,ratio:1},jet:{close:!0,fill:!0,ratio:1.5},delta:{close:!0,fill:!0,ratio:1.5,deprecated:"jet"}};y.clipSegment=function(a,b){var c=b.x-a.x,d=b.y-a.y,e=y.clipLineCore(-d,c,a.x*b.y-b.x*a.y);if(2!==e.length)return[];var f=e[0],e=e[1],h=1/(c*c+d*d),m=((f.x-a.x)*c+(f.y-a.y)*d)*h,c=((e.x-a.x)*c+(e.y-
a.y)*d)*h;0>m&&(f=a);1<m&&(f=b);0>c&&(e=a);1<c&&(e=b);return f===e?[]:[f,e]};y.drawsegcore=function(a,b){function c(a,b,c,g){var d=a-g*r+.5*t,e=b-g*t-.5*r,f=a-g*r-.5*t;g=b-g*t+.5*r;z.beginPath();y.arrowShape.fill&&(z.lineWidth=y.lsize/2);z.moveTo(d,e);z.lineTo(a,b);z.lineTo(f,g);y.arrowShape.close&&(z.fillStyle=y.lineColor,z.lineTo(a-c*r,b-c*t),z.closePath(),y.arrowShape.fill&&z.fill());z.stroke()}var d=x.drawingstate.matrix,e=a.x*d.a-a.y*d.b+d.tx,f=a.x*d.c-a.y*d.d-d.ty,h=b.x*d.a-b.y*d.b+d.tx,m=b.x*
d.c-b.y*d.d-d.ty,k=y.overhang,l=1-k,d=k*e+l*h,n=k*f+l*m,q=k*h+l*e,k=k*m+l*f;if(0>d||d>W||0>n||n>V||0>q||q>W||0>k||k>V){k=y.clipSegment({x:d,y:n},{x:q,y:k});if(2!==k.length||.01>y.lsize)return;d=k[0].x;n=k[0].y;q=k[1].x;k=k[1].y}y.preDrawCurve();if(!y.isArrow||e===f&&h===m).01>y.lsize||(z.beginPath(),z.moveTo(d,n),z.lineTo(q,k),z.stroke());else{var e=h-e,f=m-f,h=y.headlen/Math.sqrt(e*e+f*f),r=e*h,t=f*h,m=y.arrowposition,l=1-m,f=m*d+l*q,e=m*n+l*k,h=m*q+l*d,m=m*k+l*n,l=y.arrowSides;z.beginPath();y.arrowShape.close?
("<==>"===l||"<=="===l?(1>y.arrowposition&&(z.moveTo(d,n),z.lineTo(f,e)),z.moveTo(f+r,e+t)):z.moveTo(d,n),"==>"===l||"<==>"===l?(z.lineTo(h-r,m-t),1>y.arrowposition&&(z.moveTo(h,m),z.lineTo(q,k))):z.lineTo(q,k)):(z.moveTo(d,n),z.lineTo(q,k));z.stroke();"==>"!==l&&"<==>"!==l||c(h,m,1,y.arrowShape.ratio);"<=="!==l&&"<==>"!==l||c(f,e,-1,-y.arrowShape.ratio)}};y.drawpoint=function(a){var b=x.drawingstate.matrix,c=a.x*b.a-a.y*b.b+b.tx;a=a.x*b.c-a.y*b.d-b.ty;z.lineWidth=.3*y.psize;z.beginPath();z.arc(c,
a,y.psize,0,2*Math.PI);z.fillStyle=y.pointColor;z.fill();z.beginPath();z.arc(c,a,1.15*y.psize,0,2*Math.PI);z.fillStyle=y.black;z.strokeStyle=y.black;z.stroke()};y.clipLineCore=function(a,b,c){var d=Math.SQRT1_2*y.lsize,e=0-d,f=W+d,h=0-d,d=V+d,m=0>e*a+h*b+c,k=0>f*a+h*b+c,l=0>e*a+d*b+c,n=0>f*a+d*b+c,q=[];m!==k&&q.push({x:(-c-b*h)/a,y:h});k!==n&&q.push({x:f,y:(-c-a*f)/b});l!==n&&q.push({x:(-c-b*d)/a,y:d});m!==l&&q.push({x:e,y:(-c-a*e)/b});return q};y.clipLine=function(a){a=f.normalizeMax(f.productVM(a,
x.toMat()));return y.clipLineCore(a.value[0].value.real,a.value[1].value.real,a.value[2].value.real)};y.drawline=function(a){f._helper.isAlmostReal(a)&&(a=y.clipLine(a),2===a.length&&.01<=y.lsize&&(y.preDrawCurve(),z.beginPath(),z.moveTo(a[0].x,a[0].y),z.lineTo(a[1].x,a[1].y),z.stroke()))};y.drawRaySegment=function(a,b){var c=D.extractPoint(a),d=D.extractPoint(b);if(c.ok&&d.ok){var e=c.x-d.x,f=c.y-d.y,h=25E3/x.drawingstate.matrix.sdet/Math.sqrt(e*e+f*f),e=e*h,f=f*h;y.drawsegcore(c,{x:c.x+e,y:c.y+
f});y.drawsegcore(d,{x:d.x-e,y:d.y-f})}};y.dashTypes={solid:[],dashed:[10,10],tightdash:[10,4],dotted:[1,3],dashdot:[10,5,1,5],"dashvalue.solid":[],"dashvalue.dashed":[10,10],"dashvalue.tightdash":[10,4],"dashvalue.dotted":[1,3],"dashvalue.dashdot":[10,5,1,5],0:[],1:[10,10],2:[10,4],3:[1,3],4:[10,5,1,5]};y.setDash=function(a,b){var c=Math.sqrt(b);a=a.slice();for(var d=0;d<a.length;d++)a[d]*=c;z.webkitLineDash=a;z.setLineDash(a);z.mozDash=a};y.unSetDash=function(){z.webkitLineDash=[];z.setLineDash([]);
z.mozDash=[]};bd.prototype={set fillStyle(a){var b=this;Qb(a,function(a,d,e,f){b._fill="#"+nb(a.toString(16),2)+nb(d.toString(16),2)+nb(e.toString(16),2);b._fillOpacity=255===f?null:f})},set strokeStyle(a){var b=this;Qb(a,function(a,d,e,f){b._stroke="#"+nb(a.toString(16),2)+nb(d.toString(16),2)+nb(e.toString(16),2);b._strokeOpacity=255===f?null:f})},clearRect:function(){},beginPath:function(){this._path=[]},_pathcmd:function(){this._path.push.apply(this._path,arguments)},closePath:function(){this._pathcmd("Z")},
moveTo:function(a,b){this._pathcmd("M",a,b)},lineTo:function(a,b){this._pathcmd("L",a,b)},bezierCurveTo:function(a,b,c,d,e,f){this._pathcmd("C",a,b,c,d,e,f)},quadraticCurveTo:function(a,b,c,d){this._pathcmd("Q",a,b,c,d)},arc:function(a,b,c,d,e,f){var h=c*Math.cos(d)+a,m=c*Math.sin(d)+b,k=c*Math.cos(e)+a,l=c*Math.sin(e)+b;e=f?d-e:e-d;e>=2*Math.PI?this._pathcmd(this._path.length?"L":"M",h,m,"A",c,c,0,0,f?1:0,a-c*Math.cos(d),b-c*Math.sin(d),"A",c,c,0,0,f?1:0,h,m):this._pathcmd(this._path.length?"L":
"M",h,m,"A",c,c,0,e>Math.PI?1:0,f?1:0,k,l)},rect:function(a,b,c,d){this._pathcmd("M",a,b,"h",c,"v",d,"h",-c,"z")},_cmd:function(a){1!==this.globalAlpha?(this._body.push('<g opacity="'+this.globalAlpha+'">'),this._body.push(a),this._body.push("</g>")):this._body.push(a)},_attrs:function(a){var b="",c;for(c in a)null!==a[c]&&(b+=" "+c+'="'+a[c]+'"');return b},fill:function(){this._cmd("<path"+this._attrs({d:this._path.join(" "),fill:this._fill,"fill-opacity":this._fillOpacity})+"/>")},stroke:function(){this._cmd("<path"+
this._attrs({d:this._path.join(" "),stroke:this._stroke,"stroke-opacity":this._strokeOpacity,"stroke-width":this.lineWidth,"stroke-linecap":this.lineCap,"stroke-linejoin":this.lineJoin,"stroke-miterlimit":"miter"===this.lineJoin?this.miterLimit:null})+"/>")},clip:function(){++this._clipIndex;this._body.push('<clipPath id="clip'+this._clipIndex+'"><path d="'+this._path.join(" ")+'"/></clipPath>','<g clip-path="url(#clip'+this._clipIndex+')">');this._saveStack[this._saveStack.length-1]+="</g>"},save:function(){this._saveStack.push("")},
restore:function(){this._body.push(this._saveStack.pop());0===this._saveStack.length&&this._saveStack.push("")},_transform:function(a){this._body.push('<g transform="'+a+'">');this._saveStack[this._saveStack.length-1]+="</g>"},translate:function(a,b){this._transform("translate("+a+" "+b+")")},rotate:function(a){this._transform("rotate("+Math.PI/180*a+")")},scale:function(a,b){this._transform("scale("+a+" "+b+")")},transform:function(a,b,c,d,e,f){this._transform("matrix("+[a,b,c,d,e,f].join(" ")+")")},
drawImage:function(a,b,c){if(3!==arguments.length)throw Error("SvgWriterContext only supports 3-argument version of drawImage");var d=this._imgcache.indexOf(a);if(-1===d){var d=this._imgcache.length,e;e=a.cachedDataURL?a.cachedDataURL:dd(a);this._defs.push('<image id="img'+d+'" x="0" y="0" width="'+a.width+'" height="'+a.height+'" xlink:href="'+e+'"/>');this._imgcache.push(a)}this._cmd('<use x="'+b+'" y="'+c+'" xlink:href="#img'+d+'"/>')},toBlob:function(){for(;1<this._saveStack.length||""!==this._saveStack[0];)this.restore();
var a='<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="'+this.width+'px" height="'+this.height+'px">\n'+this._defs.join("\n")+'\n</defs>\n<g stroke="none" fill="none">\n'+this._body.join("\n")+"\n</g>\n</svg>\n";return new Blob([a],{type:"image/svg+xml"})}};cd.prototype={_cmd:function(){this._body.push(Array.prototype.join.call(arguments," "))},_setAlpha:function(a,b,c){var d=Math.round(255*
a*this._globalAlpha);b+=d;this._extGState[b]="<< /"+c+" "+d/255+" >>";this._cmd("/"+b,"gs");return a},set globalAlpha(a){this._globalAlpha=a;this._setAlpha(this._strokeAlpha,"As","CA");this._setAlpha(this._fillAlpha,"Af","ca")},set fillStyle(a){var b=this;Qb(a,function(a,d,e,f){b._cmd(a/255,d/255,e/255,"rg");b._setAlpha(b._fillAlpha=f,"Af","ca")})},set strokeStyle(a){var b=this;Qb(a,function(a,d,e,f){b._cmd(a/255,d/255,e/255,"RG");b._setAlpha(b._strokeAlpha=f,"As","CA")})},set lineWidth(a){this._cmd(a,
"w")},set lineCap(a){this._cmd({butt:0,round:1,square:2}[a],"J")},set lineJoin(a){this._cmd({miter:0,round:1,bevel:2}[a],"j")},set miterLimit(a){this._cmd(a,"M")},clearRect:function(){},beginPath:function(){this._pathUsed=!1},closePath:function(){this._cmd("h")},moveTo:function(a,b){this._cmd(this._xPos=a,this._yPos=-b,"m")},lineTo:function(a,b){this._cmd(this._xPos=a,this._yPos=-b,"l")},bezierCurveTo:function(a,b,c,d,e,f){this._cmd(a,-b,c,-d,this._xPos=e,this._yPos=-f,"c")},quadraticCurveTo:function(a,
b,c,d){this.bezierCurveTo((2*a+this._xPos)/3,(2*b-this._yPos)/3,(c+2*a)/3,(d+2*b)/3,c,d)},_kappa:.5522847498307935,arc:function(a,b,c,d,e,f){if(0===d&&e===2*Math.PI)d=this._kappa*c,this.moveTo(a+c,b),this.bezierCurveTo(a+c,b+d,a+d,b+c,a,b+c),this.bezierCurveTo(a-d,b+c,a-c,b+d,a-c,b),this.bezierCurveTo(a-c,b-d,a-d,b-c,a,b-c),this.bezierCurveTo(a+d,b-c,a+c,b-d,a+c,b);else throw Error("PdfWriterContext.arc only supports full circles");},rect:function(a,b,c,d){this._cmd(a,-b,c,-d,"re")},_usePath:function(a){if(this._pathUsed){var b=
this._body[this._pathUsed],c={"S + f":"B","f + S":"B","W n + S":"W S","W n + f":"W f","S + W n":"W S","f + W n":"W f","B + W n":"W B","W S + f":"W B","W f + S":"W B"}[b+" + "+a];if(!c)throw Error("Don't know how to combine '"+b+"' and '"+a+"'");this._body.splice(this._pathUsed,1);a=c}this._pathUsed=this._body.length;this._cmd(a)},fill:function(){this._usePath("f")},stroke:function(){this._usePath("S")},clip:function(){this._usePath("W n")},save:function(){this._cmd("q")},restore:function(){this._cmd("Q")},
translate:function(a,b){this.transform(1,0,0,1,a,b)},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);this.transform(b,a,-a,b,0,0)},scale:function(a,b){this.transform(a,0,0,b,0,0)},transform:function(a,b,c,d,e,f){this._cmd(a,-b,-c,d,e,-f,"cm")},_png:function(a){if("data:image/png;base64,"!==a.substr(0,22))return{error:"Not a base64-encoded PNG file"};a=Rd(a.substr(22));var b=Sd(a);console.log("PNG chunks:",b.map(function(a){return a.type}));if("IHDR"!==b[0].type)throw Error("Image does not start with an IHDR");
var c=b[0].data;a=(c[0]<<24|c[1]<<16|c[2]<<8|c[3])>>>0;var d=(c[4]<<24|c[5]<<16|c[6]<<8|c[7])>>>0,e=c[8],f=c[9],h=0===(f&2),m=0!==(f&4),k=c[10],l=c[11],c=c[12];if(0!==k)throw Error("Unsupported PNG compression method: "+k);if(0!==l)throw Error("Unsupported PNG filter method: "+l);if(0!==c)return{error:"Interlaced image not supported"};if(0!==(f&1))return{error:"Indexed PNG image not supported"};l=null;f=h?1:3;k=b.filter(function(a){return"IDAT"===a.type}).map(function(a){return a.data});if(m){m=window.pako;
l=new m.Inflate;for(b=0;b<k.length;++b)l.push(k[b],b+1===k.length);if(l.err)throw Error(l.err);l=l.result;c=e>>>3;if(l.length!==d*(a*(f+1)*c+1))throw Error("Data length mismatch");for(var n=f*c,k=new Uint8Array(d*(a*n+1)),q=new Uint8Array(d*(a*c+1)),r=0,t=0,u=0,v=0;v<d;++v){k[t++]=q[u++]=l[r++];for(var w=0;w<a;++w){for(b=0;b<n;++b)k[t++]=l[r++];for(b=0;b<c;++b)q[u++]=l[r++]}}if(r!==l.length||t!==k.length||u!==q.length)throw Error("Seems we garbled our index computation somehow");q=m.deflate(q);l=
this._strm({Type:"/XObject",Subtype:"/Image",Width:a,Height:d,ColorSpace:"/DeviceGray",BitsPerComponent:e,Filter:"/FlateDecode",DecodeParms:this._dict({Predictor:15,Colors:1,BitsPerComponent:e,Columns:a})},q).ref;k=[m.deflate(k)]}var x=0;k.forEach(function(a){x+=a.length});return this._obj([this._dict({Type:"/XObject",Subtype:"/Image",Name:"/img"+this._imgcache.length,Width:a,Height:d,ColorSpace:h?"/DeviceGray":"/DeviceRGB",SMask:l,BitsPerComponent:e,Length:x,Filter:"/FlateDecode",DecodeParms:this._dict({Predictor:15,
Colors:f,BitsPerComponent:e,Columns:a})}),"\nstream\n"].concat(k,["\nendstream"]))},drawImage:function(a,b,c){if(3!==arguments.length)throw Error("PdfWriterContext only supports 3-argument version of drawImage");var d=this._imgcache.indexOf(a);if(-1===d){d=this._imgcache.length;this._imgcache.push(a);var e=this._png(a.cachedDataURL||"");e.hasOwnProperty("error")&&(e=this._png(dd(a)));if(e.hasOwnProperty("error"))throw Error(e.error);this._xobjects["img"+d]=e.ref}this._cmd("q");this._setAlpha(1,"Af",
"ca");this._cmd(a.width,0,0,a.height,b,-c-a.height,"cm");this._cmd("/img"+d,"Do");this._cmd("Q")},_dict:function(a){var b="<<",c;for(c in a)b+=" /"+c+" "+a[c];return b+" >>"},_obj:function(a,b){b||(b=this._nextIndex++);Array.isArray(a)||(a=[this._dict(a)]);a.index=b;a.ref=b+" 0 R";a.offset=this._offset;var c=0;a.unshift(b+" 0 obj\n");a.push("\nendobj\n");for(var d=0;d<a.length;++d)c+=a[d].length;this._offset+=c;this._objects.push(a);return a},_strm:function(a,b,c){a.Length=b.length;return this._obj([this._dict(a),
"\nstream\n",b,"\nendstream"],c)},toBlob:function(){var a;a="["+[0,-this.height,this.width,0].join(" ")+"]";this._obj({Type:"/Catalog",Pages:"2 0 R"},1);this._obj({Type:"/Pages",Kids:"[3 0 R]",Count:1},2);this._obj({Type:"/Page",Parent:"2 0 R",MediaBox:a,Contents:"4 0 R",Resources:this._dict({ProcSet:"[/PDF /Text /ImageB /ImageC /ImageI]",XObject:this._dict(this._xobjects),ExtGState:this._dict(this._extGState)})},3);var b=this._body.join("\n"),c=new Uint8Array(b.length);for(a=0;a<b.length;++a)c[a]=
b.charCodeAt(a)&255;b=window.pako.deflate(c);this._strm({Filter:"/FlateDecode"},b,4);var b=this._objects,d=[];for(a=1;a<b.length;++a)d[b[a].index]=b[a];c="xref\n0 "+d.length+"\n";for(a=0;a<d.length;++a)c=d[a]?c+(nb(String(d[a].offset),10)+" 00000 n \n"):c+"0000000000 65535 f \n";a="trailer\n"+this._dict({Size:d.length,Root:"1 0 R"})+"\nstartxref\n"+this._offset+"\n%%EOF\n";b=Array.prototype.concat.apply([],b);b.push(c,a);return new Blob(b,{type:"application/pdf"})}};var Eb=null;kb.push(ed);qa.exportSVG=
function(){fd(bd,window.open("about:blank","_blank"))};qa.exportPDF=function(){var a=window.open("about:blank","_blank");va.loadScript("pako","pako.min.js",function(){fd(cd,a)})};var oc="Move",Gb,ta=[],Qa=0,Ud=0,tb=0,F={Delete:{}};F.Delete.actions=[];F.Delete.actions[0]={};F.Delete.actions[0].event="mousedown";F.Delete.actions[0].tooltip="...";F.Delete.actions[0]["do"]=function(){aa=Fb(U);null!==aa&&kd(aa.mover.name);return!0};F.Move={};F.Move.actions=[];F.Move.actions[0]={};F.Move.actions[0].event=
"mousedown";F.Move.actions[0].tooltip="Move free elements by dragging the mouse";F.Move.actions[0]["do"]=function(){for(var a=U,b=null,c=1E6,d,e=0;e<u.free.length;e++){var h=u.free[e];if(!h.pinned&&!1!==h.visible&&!0!==h.tmp){var k,l,n,q=x.drawingstate.matrix.sdet;if("P"===h.kind){l=f.normalizeZ(h.homog);if(!f._helper.isAlmostReal(l))continue;k=l.value[0].value.real-a.x;l=l.value[1].value.real-a.y;n=Math.sqrt(k*k+l*l);if(h.narrow&&n>("number"===typeof h.narrow?h.narrow:20)/q)continue}else if("C"===
h.kind)l=u.csnames[h.args[0]],n=h.radius,k=m.div(l.homog.value[0],l.homog.value[2]).value.real,l=m.div(l.homog.value[1],l.homog.value[2]).value.real,k-=a.x,l-=a.y,n=Math.sqrt(k*k+l*l)-n.value.real,l=k=0,0>n&&(n=-n),n+=30/q;else if("L"===h.kind)k=h.homog,n=m,l=n.add(n.mult(k.value[0],n.conjugate(k.value[0])),n.mult(k.value[1],n.conjugate(k.value[1]))),l=f.scaldiv(n.sqrt(l),k),n=l.value[0].value.real*a.x+l.value[1].value.real*a.y+l.value[2].value.real,k=-l.value[0].value.real*n,l=-l.value[1].value.real*
n,0>n&&(n=-n),n+=25/q;else if("Text"===h.kind){if(!h._bbox)continue;l=x.from(a.x,a.y,1);k=Math.max(0,l[0]-h._bbox.right,h._bbox.left-l[0]);l=Math.max(0,l[1]-h._bbox.bottom,h._bbox.top-l[1]);n=Math.sqrt(k*k+l*l);if(20<n)continue;n/=q;l=f.normalizeZ(h.homog);if(!f._helper.isAlmostReal(l))continue;k=l.value[0].value.real-a.x;l=l.value[1].value.real-a.y}else continue;n<c+.2/q&&(c=n,b=h,d={x:k,y:l})}}console.log("Moving "+(b?b.name:"nothing"));aa=null===b?null:{mover:b,offset:d,prev:{x:a.x,y:a.y}};return!0};
F.Point={};F.Point.actions=[];F.Point.actions[0]={};F.Point.actions[0].event="mousedown";F.Point.actions[0].tooltip="Add a single point with the mouse";F.Point.actions[0]["do"]=function(){Da({type:"Free",name:Pa(),labeled:!0,pos:[sa[0],sa[1],1]});return!0};F.Mid={};F.Mid.actions=[];F.Mid.actions[0]={};F.Mid.actions[0].event="mousedown";F.Mid.actions[0].tooltip="Construct two points and their midpoint by dragging";F.Mid.actions[0]["do"]=function(){ob();return!0};F.Mid.actions[1]={};F.Mid.actions[1].event=
"mousemove";F.Mid.actions[1]["do"]=function(){Rb("Mid");return!0};F.Mid.actions[2]={};F.Mid.actions[2].event="mouseup";F.Mid.actions[2]["do"]=function(){ub();return!0};F.Circle={};F.Circle.actions=[];F.Circle.actions[0]={};F.Circle.actions[0].event="mousedown";F.Circle.actions[0].tooltip="Construct two points and a circle by dragging the mouse";F.Circle.actions[0]["do"]=function(){ob();return!0};F.Circle.actions[1]={};F.Circle.actions[1].event="mousemove";F.Circle.actions[1]["do"]=function(){Rb("CircleMP");
return!0};F.Circle.actions[2]={};F.Circle.actions[2].event="mouseup";F.Circle.actions[2]["do"]=function(){ub();return!0};F.Compass={};F.Compass.actions=[];F.Compass.actions[0]={};F.Compass.actions[0].event="mousedown";F.Compass.actions[0].tooltip="...";F.Compass.actions[0]["do"]=function(){ob();return!0};F.Compass.actions[1]={};F.Compass.actions[1].event="mousedown";F.Compass.actions[1].tooltip="...";F.Compass.actions[1]["do"]=function(){ob();return!0};F.Compass.actions[2]={};F.Compass.actions[2].event=
"mousedown";F.Compass.actions[2].tooltip="...";F.Compass.actions[2]["do"]=function(){ob();Da({type:"Compass",name:Pa(),labeled:!0,args:[ta[0].name,ta[1].name,ta[2].name]});return!0};F.Line={};F.Line.actions=[];F.Line.actions[0]={};F.Line.actions[0].event="mousedown";F.Line.actions[0].tooltip="Construct two points and their connecting line by dragging the mouse";F.Line.actions[0]["do"]=function(){ob();return!0};F.Line.actions[1]={};F.Line.actions[1].event="mousemove";F.Line.actions[1]["do"]=function(){Rb("Join");
return!0};F.Line.actions[2]={};F.Line.actions[2].event="mouseup";F.Line.actions[2]["do"]=function(){ub();return!0};F.Segment={};F.Segment.actions=[];F.Segment.actions[0]={};F.Segment.actions[0].event="mousedown";F.Segment.actions[0].tooltip="Draw a segment by dragging the mouse";F.Segment.actions[0]["do"]=function(){ob();return!0};F.Segment.actions[1]={};F.Segment.actions[1].event="mousemove";F.Segment.actions[1]["do"]=function(){Rb("Segment");return!0};F.Segment.actions[2]={};F.Segment.actions[2].event=
"mouseup";F.Segment.actions[2]["do"]=function(){ub();return!0};F.Parallel={};F.Parallel.actions=[];F.Parallel.actions[0]={};F.Parallel.actions[0].event="mousedown";F.Parallel.actions[0].tooltip="Construct a parallel line by dragging a line";F.Parallel.actions[0]["do"]=function(){return id()};F.Parallel.actions[1]={};F.Parallel.actions[1].event="mousemove";F.Parallel.actions[1]["do"]=function(){var a={type:"Free",name:Pa(),labeled:!0,pos:[sa[0],sa[1],1],tmp:!0},a=Da(a);Gb=Da({type:"Para",name:Pa(),
labeled:!0,args:[ta[0].name,a.name]});qc(a);return!0};F.Parallel.actions[2]={};F.Parallel.actions[2].event="mouseup";F.Parallel.actions[2]["do"]=function(){ub();return!0};F.Orthogonal={};F.Orthogonal.actions=[];F.Orthogonal.actions[0]={};F.Orthogonal.actions[0].event="mousedown";F.Orthogonal.actions[0].tooltip="Construct a orthogonal line by dragging a line";F.Orthogonal.actions[0]["do"]=function(){if(id()){var a={type:"Free",name:Pa(),labeled:!0,pos:[sa[0],sa[1],1],tmp:!0},a=Da(a);Gb=Da({type:"Perp",
name:Pa(),labeled:!0,args:[ta[0].name,a.name]});qc(a);return!0}return!1};F.Orthogonal.actions[1]={};F.Orthogonal.actions[1].event="mouseup";F.Orthogonal.actions[1]["do"]=function(){ub();return!0};F.Intersection={};F.Intersection.actions=[];F.Intersection.actions[0]={};F.Intersection.actions[0].event="mousedown";F.Intersection.actions[0].tooltip="Select two elements to define their intersection";F.Intersection.actions[0]["do"]=function(){return jd()};F.Intersection.actions[1]={};F.Intersection.actions[1].event=
"mousedown";F.Intersection.actions[1]["do"]=function(){return jd()?(Gb=Da({type:"Meet",name:Pa(),labeled:!0,args:[ta[0].name,ta[1].name]}),!0):!1};var Xa={},x={drawingstate:{}};x.drawingstate.linecolor="rgb(0,0,255)";x.drawingstate.linecolorraw=[0,0,1];x.drawingstate.pointcolor="rgb(0,255,0)";x.drawingstate.pointcolorraw=[0,1,0];x.drawingstate.textcolor="rgb(0,0,0)";x.drawingstate.textcolorraw=[0,0,0];x.drawingstate.alpha=1;x.drawingstate.pointsize=4;x.drawingstate.linesize=1;x.drawingstate.textsize=
null;x.drawingstate.matrix={};x.drawingstate.matrix.a=25;x.drawingstate.matrix.b=0;x.drawingstate.matrix.c=0;x.drawingstate.matrix.d=25;x.drawingstate.matrix.tx=250.5;x.drawingstate.matrix.ty=250.5;x.drawingstate.matrix.det=x.drawingstate.matrix.a*x.drawingstate.matrix.d-x.drawingstate.matrix.b*x.drawingstate.matrix.c;x.drawingstate.matrix.sdet=Math.sqrt(x.drawingstate.matrix.det);x.drawingstate.initialmatrix={};x.drawingstate.initialmatrix.a=x.drawingstate.matrix.a;x.drawingstate.initialmatrix.b=
x.drawingstate.matrix.b;x.drawingstate.initialmatrix.c=x.drawingstate.matrix.c;x.drawingstate.initialmatrix.d=x.drawingstate.matrix.d;x.drawingstate.initialmatrix.tx=x.drawingstate.matrix.tx;x.drawingstate.initialmatrix.ty=x.drawingstate.matrix.ty;x.drawingstate.initialmatrix.det=x.drawingstate.matrix.det;x.drawingstate.initialmatrix.sdet=x.drawingstate.matrix.sdet;x.clone=function(a){if(null===a||"object"!==typeof a)return a;var b=a.constructor(),c;for(c in a)b[c]=x.clone(a[c]);return b};Xa.backup=
x.clone(x.drawingstate);Xa.stack=[];x.clone(x.drawingstate);x.reset=function(){x.drawingstate.matrix.a=x.drawingstate.initialmatrix.a;x.drawingstate.matrix.b=x.drawingstate.initialmatrix.b;x.drawingstate.matrix.c=x.drawingstate.initialmatrix.c;x.drawingstate.matrix.d=x.drawingstate.initialmatrix.d;x.drawingstate.matrix.tx=x.drawingstate.initialmatrix.tx;x.drawingstate.matrix.ty=x.drawingstate.initialmatrix.ty;x.drawingstate.matrix.det=x.drawingstate.initialmatrix.det;x.drawingstate.matrix.sdet=x.drawingstate.initialmatrix.sdet};
x.from=function(a,b,c){a/=c;b/=c;c=x.drawingstate.matrix;return[a*c.a-b*c.b+c.tx,a*c.c-b*c.d-c.ty]};x.to=function(a,b){var c=x.drawingstate.matrix,d=a-c.tx,e=b+c.ty;return[(d*c.d-e*c.b)/c.det,-(-d*c.c+e*c.a)/c.det,1]};x.toMat=function(){var a=x.drawingstate.matrix;return f.realMatrix([[a.d,-a.b,-a.tx*a.d-a.ty*a.b],[a.c,-a.a,-a.tx*a.c-a.ty*a.a],[0,0,a.det]])};x.dumpTrafo=function(){function a(a){return Math.round(1E3*a)/1E3}var b=x.drawingstate.matrix;console.log("a:"+a(b.a)+" b:"+a(b.b)+" c:"+a(b.c)+
" d:"+a(b.d)+" tx:"+a(b.ty)+" ty:"+a(b.tx))};x.setMat=function(a,b,c,d,e,f){var h=x.drawingstate.matrix;h.a=a;h.b=b;h.c=c;h.d=d;h.tx=e;h.ty=f;h.det=a*d-b*c;h.sdet=Math.sqrt(h.det)};x.scaleAndOrigin=function(a,b,c){x.setMat(a,0,0,a,b,c)};x.visibleRect=function(a,b,c,d){var e=c-a,f=b-d,e=W*f<V*e?W/e:V/f;x.setMat(e,0,0,e,(W-e*(a+c))/2,(V-e*(b+d))/2)};x.applyMat=function(a,b,c,d,e,f){var h=x.drawingstate.matrix;x.setMat(h.a*a+h.c*b,h.b*a+h.d*b,h.a*c+h.c*d,h.b*c+h.d*d,h.a*e+h.c*f+h.tx,h.b*e+h.d*f+h.ty)};
x.translate=function(a,b){x.applyMat(1,0,0,1,a,b)};x.rotate=function(a){var b=Math.cos(a);a=Math.sin(a);x.applyMat(b,a,-a,b,0,0)};x.scale=function(a){x.applyMat(a,0,0,a,0,0)};x.gsave=function(){Xa.stack.push(x.clone(x.drawingstate))};x.grestore=function(){0!==Xa.stack.length&&(x.drawingstate=Xa.stack.pop())};x.greset=function(){x.drawingstate=x.clone(Xa.backup);x.drawingstate.matrix.ty-=V;x.drawingstate.initialmatrix.ty-=V;Xa.stack=[]};x.createnewbackup=function(){x.drawingstate.initialmatrix.a=x.drawingstate.matrix.a;
x.drawingstate.initialmatrix.b=x.drawingstate.matrix.b;x.drawingstate.initialmatrix.c=x.drawingstate.matrix.c;x.drawingstate.initialmatrix.d=x.drawingstate.matrix.d;x.drawingstate.initialmatrix.tx=x.drawingstate.matrix.tx;x.drawingstate.initialmatrix.ty=x.drawingstate.matrix.ty;x.drawingstate.initialmatrix.det=x.drawingstate.matrix.det;x.drawingstate.initialmatrix.sdet=x.drawingstate.matrix.sdet;Xa.backup=x.clone(x.drawingstate)};x.makecolor=function(a,b,c){a=Math.floor(255*a);b=Math.floor(255*b);
c=Math.floor(255*c);return 1===x.drawingstate.alpha?"rgb("+a+","+b+","+c+")":"rgba("+a+","+b+","+c+","+x.drawingstate.alpha+")"};x.setcolor=function(a){var b=a.value[0].value.real,c=a.value[1].value.real;a=a.value[2].value.real;x.drawingstate.linecolor=x.drawingstate.pointcolor=x.makecolor(b,c,a);x.drawingstate.linecolorraw=x.drawingstate.pointcolorraw=[b,c,a]};x.setlinecolor=function(a){var b=a.value[0].value.real,c=a.value[1].value.real;a=a.value[2].value.real;x.drawingstate.linecolor=x.makecolor(b,
c,a);x.drawingstate.linecolorraw=[b,c,a]};x.settextcolor=function(a){var b=a.value[0].value.real,c=a.value[1].value.real;a=a.value[2].value.real;x.drawingstate.textcolor=x.makecolor(b,c,a);x.drawingstate.textcolorraw=[b,c,a]};x.setpointcolor=function(a){var b=a.value[0].value.real,c=a.value[1].value.real;a=a.value[2].value.real;x.drawingstate.pointcolor=x.makecolor(b,c,a);x.drawingstate.pointcolorraw=[b,c,a]};x.setalpha=function(a){x.drawingstate.alpha=a.value.real;x.drawingstate.linecolor=x.makecolor(x.drawingstate.linecolorraw[0],
x.drawingstate.linecolorraw[1],x.drawingstate.linecolorraw[2]);x.drawingstate.pointcolor=x.makecolor(x.drawingstate.pointcolorraw[0],x.drawingstate.pointcolorraw[1],x.drawingstate.pointcolorraw[2]);x.drawingstate.textcolor=x.makecolor(x.drawingstate.textcolorraw[0],x.drawingstate.textcolorraw[1],x.drawingstate.textcolorraw[2])};x.setpointsize=function(a){x.drawingstate.pointsize=a.value.real};x.setlinesize=function(a){x.drawingstate.linesize=a.value.real};x.settextsize=function(a){x.drawingstate.textsize=
a.value.real};var ja={clip:"none",pointColor:[1,0,0],lineColor:[0,0,1],pointSize:5,lineSize:1,alpha:1,overhangLine:1,overhangSeg:1,dimDependent:.7,fontFamily:"sans-serif",textsize:20,lineHeight:1.45};q.defaultAppearance&&Vd(q.defaultAppearance);var Tb={},rd={UL:0,UR:1,LR:2,LL:3},sc=["in","out","good","backup"],gb=new Float64Array(0),bb={};sc.forEach(function(a){bb[a]=gb});var ma=gb,Fa=gb,ya=gb,ua,za,eb,Ga,vb,tc=!1,td={toString:function(){return"RefineException"}},I=null;q.enableTraceLog&&(I={logLength:Infinity,
fullLog:[],currentMouseAndScripts:null,currentMover:null,currentStep:null,currentElement:null,currentParam:null,labelTracing2:v.wrap("tracing2"),labelTracing4:v.wrap("tracing4"),labelTracingSesq:v.wrap("tracingSesq"),postMouseHooks:[]},"number"===typeof q.enableTraceLog&&(I.logLength=q.enableTraceLog),qa.getTraceLog=ae,qa.formatTraceLog=be,qa.addTraceHook=I.postMouseHooks.push.bind(I.postMouseHooks));Ha.stateSize=12;vc.stateSize=24;var hb=[];fb.P=function(a){u.lines.forEach(function(b){b=yd(a,b);
b.holds()&&hb.push(b)});u.conics.forEach(function(b){b=zd(a,b);b.holds()&&hb.push(b)})};fb.L=function(a){u.points.forEach(function(b){b=yd(b,a);b.holds()&&hb.push(b)})};fb.S=fb.L;fb.C=function(a){u.points.forEach(function(b){b=zd(b,a);b.holds()&&hb.push(b)})};var n={_helper:{},RandomLine:{}};n.RandomLine.kind="L";n.RandomLine.signature=[];n.RandomLine.updatePosition=function(a){a.homog=f.realVector([Math.random()-.5,Math.random()-.5,Math.random()-.5]);a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,
"Line")};n.FreeLine={};n.FreeLine.kind="L";n.FreeLine.signature=[];n.FreeLine.isMovable=!0;n.FreeLine.initialize=function(a){a=n._helper.initializeLine(a);T(a)};n.FreeLine.getParamForInput=function(a,b,c){"mouse"===c?(a=f.cross(b,f.ez),a=f.cross(a,b)):a="homog"===c?b:f.turnIntoCSList([m.zero,m.zero,m.zero]);return f.normalizeMax(a)};n.FreeLine.getParamFromState=function(a){return Z(3)};n.FreeLine.putParamToState=function(a,b){T(b)};n.FreeLine.updatePosition=function(a){var b=Z(3);T(b);a.homog=v.withUsage(b,
"Line")};n.FreeLine.stateSize=6;n.RandomPoint={};n.RandomPoint.kind="P";n.RandomPoint.signature=[];n.RandomPoint.updatePosition=function(a){a.homog=f.realVector([100*Math.random(),100*Math.random(),100*Math.random()]);a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,"Point")};n.Join={};n.Join.kind="L";n.Join.signature=["P","P"];n.Join.updatePosition=function(a){a.homog=f.cross(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog);a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,
"Line")};n.Segment={};n.Segment.kind="S";n.Segment.signature=["P","P"];n.Segment.updatePosition=function(a){var b=u.csnames[a.args[0]],c=u.csnames[a.args[1]];n.Segment.setSegmentPos(a,f.cross(b.homog,c.homog),f.scalmult(c.homog.value[2],b.homog),f.scalmult(b.homog.value[2],c.homog))};n.Segment.setSegmentPos=function(a,b,c,d){b=f.normalizeMax(b);a.homog=v.withUsage(b,"Line");b=f.turnIntoCSList([c,d]);b=f.normalizeMax(b);a.startpos=b.value[0];a.endpos=b.value[1]};n.Meet={};n.Meet.kind="P";n.Meet.signature=
["L","L"];n.Meet.updatePosition=function(a){a.homog=f.cross(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog);a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,"Point")};n.Meet.visiblecheck=function(a){var b=!0,c=u.csnames[a.args[0]],d=u.csnames[a.args[1]];"S"===c.kind&&(b=pd(a,c));b&&"S"===d.kind&&(b=pd(a,d));a.isshowing=b};n._helper.midpoint=function(a,b){return f.normalizeMax(f.add(f.scalmult(b.value[2],a),f.scalmult(a.value[2],b)))};n.Mid={};n.Mid.kind="P";n.Mid.signature=["P",
"P"];n.Mid.updatePosition=function(a){var b=n._helper.midpoint(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog);a.homog=v.withUsage(b,"Point")};n.Perp={};n.Perp.kind="L";n.Perp.signature=["L","P"];n.Perp.updatePosition=function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,b=f.turnIntoCSList([b.value[0],b.value[1],m.zero]);a.homog=f.cross(b,c);a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,"Line")};n.Para={};n.Para.kind="L";n.Para.signature=["L","P"];n.Para.updatePosition=
function(a){var b=u.csnames[a.args[1]].homog;a.homog=f.cross(f.cross(f.linfty,u.csnames[a.args[0]].homog),b);a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,"Line")};n.Horizontal={};n.Horizontal.kind="L";n.Horizontal.signature=["P"];n.Horizontal.updatePosition=function(a){a.homog=f.cross(f.ex,u.csnames[a.args[0]].homog);a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,"Line")};n.HorizontalLine={};n.HorizontalLine.kind="L";n.HorizontalLine.signature=[];n.HorizontalLine.isMovable=
!0;n.HorizontalLine.initialize=function(a){a=n._helper.initializeLine(a);a=f.turnIntoCSList([m.zero,a.value[1],a.value[2]]);a=f.normalizeMax(a);T(a)};n.HorizontalLine.getParamForInput=function(a,b,c){if("mouse"===c)b=f.cross(b,f.ex);else if("homog"===c){if(0!==b.value[0].real||0!==b.value[0].imag)b=f.turnIntoCSList([m.zero,b.value[1],b.value[2]])}else b=f.turnIntoCSList([m.zero,m.zero,m.zero]);return f.normalizeMax(b)};n.HorizontalLine.getParamFromState=function(a){return Z(3)};n.HorizontalLine.putParamToState=
function(a,b){T(b)};n.HorizontalLine.updatePosition=function(a){var b=Z(3);T(b);a.homog=v.withUsage(b,"Line")};n.HorizontalLine.stateSize=6;n.Vertical={};n.Vertical.kind="L";n.Vertical.signature=["P"];n.Vertical.updatePosition=function(a){a.homog=f.cross(f.ey,u.csnames[a.args[0]].homog);a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,"Line")};n.VerticalLine={};n.VerticalLine.kind="L";n.VerticalLine.signature=[];n.VerticalLine.isMovable=!0;n.VerticalLine.initialize=function(a){a=n._helper.initializeLine(a);
a=f.turnIntoCSList([a.value[0],m.zero,a.value[2]]);a=f.normalizeMax(a);T(a)};n.VerticalLine.getParamForInput=function(a,b,c){if("mouse"===c)b=f.cross(b,f.ey);else if("homog"===c){if(0!==b.value[1].real||0!==b.value[1].imag)b=f.turnIntoCSList([b.value[0],m.zero,b.value[2]])}else b=f.turnIntoCSList([m.zero,m.zero,m.zero]);return f.normalizeMax(b)};n.VerticalLine.getParamFromState=function(a){return Z(3)};n.VerticalLine.putParamToState=function(a,b){T(b)};n.VerticalLine.updatePosition=function(a){var b=
Z(3);T(b);a.homog=v.withUsage(b,"Line")};n.VerticalLine.stateSize=6;n.LineByFixedAngle={};n.LineByFixedAngle.kind="L";n.LineByFixedAngle.signature=["L","P"];n.LineByFixedAngle.initialize=function(a){var b=m._helper.input(a.angle),c=m.cos(b),b=m.sin(b);a.rot=f.turnIntoCSList([f.turnIntoCSList([b,c,m.zero]),f.turnIntoCSList([m.neg(c),b,m.zero]),f.turnIntoCSList([m.zero,m.zero,m.zero])])};n.LineByFixedAngle.updatePosition=function(a){var b=u.csnames[a.args[1]],c=f.productMV(a.rot,u.csnames[a.args[0]].homog);
a.homog=f.cross(b.homog,c);a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,"Line")};n.Through={};n.Through.kind="L";n.Through.signature=["P"];n.Through.isMovable=!0;n.Through.initialize=function(a){a=a.dir?v.wrap(a.dir):f.realVector([a.pos[1],-a.pos[0],0]);T(a)};n.Through.getParamForInput=function(a,b,c){a="dir"===c||"mouse"===c?f.cross(u.csnames[a.args[0]].homog,b):"homog"===c?b:f.turnIntoCSList([m.zero,m.zero,m.zero]);a=f.cross(f.linfty,a);return f.normalizeMax(a)};n.Through.getParamFromState=
function(a){return Z(3)};n.Through.putParamToState=function(a,b){T(b)};n.Through.updatePosition=function(a){var b=Z(3);T(b);b=f.cross(u.csnames[a.args[0]].homog,b);b=f.normalizeMax(b);a.homog=v.withUsage(b,"Line")};n.Through.stateSize=6;n.Free={};n.Free.kind="P";n.Free.signature=[];n.Free.isMovable=!0;n.Free.initialize=function(a){a=n._helper.initializePoint(a);T(a)};n.Free.getParamForInput=function(a,b,c){if("mouse"===c&&bc&&0!==Ta){b=f.normalizeZ(b);a=b.value[0].value.real;c=b.value[1].value.real;
var d=Math.round(a/Ta)*Ta,e=Math.round(c/Ta)*Ta;.2>Math.abs(d-a)&&.2>Math.abs(e-c)&&(b=f.realVector([d,e,1]))}return f.normalizeMax(b)};n.Free.getParamFromState=function(a){return Z(3)};n.Free.putParamToState=function(a,b){T(b)};n.Free.updatePosition=function(a){var b=Z(3);T(b);a.homog=v.withUsage(b,"Point")};n.Free.stateSize=6;n._helper.projectPointToLine=function(a,b){var c=f.turnIntoCSList([b.value[0],b.value[1],m.zero]),c=f.cross(c,a);return f.normalizeMax(f.cross(c,b))};n.PointOnLine={};n.PointOnLine.kind=
"P";n.PointOnLine.signature=["L"];n.PointOnLine.isMovable=!0;n.PointOnLine.initialize=function(a){var b=n._helper.initializePoint(a);a=u.csnames[a.args[0]].homog;var b=n._helper.projectPointToLine(b,a),b=f.normalizeMax(b),c=f.cross(f.linfty,b);f.normalizeMax(c);T(b);T(a);eb=!1};n.PointOnLine.updatePosition=function(a,b){var c,d=u.csnames[a.args[0]].homog;c=Z(3);Z(3);if(!b){ua=a.stateIdx;var e=ma;ma=ya;var h=Z(3),m=Z(3);ma=e;e=f.cross(m,d);f._helper.isAlmostZero(e)&&(e=f.cross(f.linfty,d));h=n._helper.CircleMP(e,
h);h=n._helper.IntersectLC(d,h);e=n._helper.pointReflection(e,c);c=vd(h[0],h[1],c,e)[0]}c=f.normalizeMax(c);T(c);T(d);a.homog=v.withUsage(c,"Point")};n.PointOnLine.getParamForInput=function(a,b,c){return b=n._helper.projectPointToLine(b,u.csnames[a.args[0]].homog)};n.PointOnLine.getParamFromState=function(a){return Z(3)};n.PointOnLine.putParamToState=function(a,b){return T(b)};n.PointOnLine.stateSize=12;n.PointOnCircle={};n.PointOnCircle.kind="P";n.PointOnCircle.signature=["C"];n.PointOnCircle.isMovable=
!0;n.PointOnCircle.initialize=function(a){var b=u.csnames[a.args[0]];a=f.normalizeZ(n._helper.initializePoint(a));var c=f.normalizeZ(n._helper.CenterOfConic(b.matrix)),d=f.sub(a,c),d=f.turnIntoCSList([d.value[1],m.neg(d.value[0]),m.zero]),c=f.cross(a,c),b=n._helper.IntersectLC(c,b.matrix),c=f.projectiveDistMinScal(a,b[0]);f.projectiveDistMinScal(a,b[1])<c?(a=b[1],b=b[0]):(a=b[0],b=b[1]);T(d);T(a);T(b);eb=!1};n.PointOnCircle.putParamToState=function(a,b){T(b)};n.PointOnCircle.getParamFromState=function(a){return Z(3)};
n.PointOnCircle.getParamForInput=function(a,b,c){c=f.normalizeZ(n._helper.CenterOfConic(u.csnames[a.args[0]].matrix));b=f.sub(b,c);ua=a.stateIdx;a=Z(3);var d=f.normalizeZ(Z(3));c=f.sub(d,c);0>m.sub(m.mult(a.value[0],c.value[1]),m.mult(a.value[1],c.value[0])).value.real&&(b=f.neg(b));return f.turnIntoCSList([b.value[1],m.neg(b.value[0]),m.zero])};n.PointOnCircle.parameterPath=function(a,b,c,d,e){d=f.normalizeAbs(d);e=f.normalizeAbs(e);var h=f.scalproduct(d,e);if(0<=h.value.real)return ud(a,b,c,d,e);
a=f.turnIntoCSList([m.sub(d.value[1],e.value[1]),m.sub(e.value[0],d.value[0]),m.zero]);h=f.scalproduct(d,a);0>h.value.real&&(a=f.neg(a));0>b?(b=2*b+1,c=b*b,h=.25/(1+c),c=m.complex(2*b*h+.25,(1-c)*h)):(b=2*b-1,c=b*b,h=.25/(1+c),c=m.complex(2*b*h+.75,(1-c)*h));var k=m.sub(m.real(1),c);b=m.mult(c,c);h=m.mult(k,k);c=m.mult(c,k);d=f.scalmult(h,d);d=f.add(d,f.scalmult(c,a));return d=f.add(d,f.scalmult(b,e))};n.PointOnCircle.updatePosition=function(a){var b=Z(3);T(b);var c=u.csnames[a.args[0]],b=f.productMV(c.matrix,
b),c=n._helper.IntersectLC(b,c.matrix),c=Ha(c[0],c[1]),b=f.normalizeMax(c.value[0]);a.homog=v.withUsage(b,"Point");a.antipodalPoint=c.value[1]};n.PointOnCircle.stateSize=6+Ha.stateSize;n.OtherPointOnCircle={};n.OtherPointOnCircle.kind="P";n.OtherPointOnCircle.signature=["P"];n.OtherPointOnCircle.signatureConstraints=function(a){return"PointOnCircle"===u.csnames[a.args[0]].type};n.OtherPointOnCircle.updatePosition=function(a){var b=u.csnames[a.args[0]].antipodalPoint,b=f.normalizeMax(b);a.homog=v.withUsage(b,
"Point")};n.PointOnSegment={};n.PointOnSegment.kind="P";n.PointOnSegment.signature=["S"];n.PointOnSegment.isMovable=!0;n.PointOnSegment.initialize=function(a){var b=n._helper.initializePoint(a);a=n.PointOnSegment.getParamForInput(a,b);Va(a)};n.PointOnSegment.getParamForInput=function(a,b){var c=u.csnames[a.args[0]],d=c.homog,d=f.turnIntoCSList([d.value[0],d.value[1],m.zero]),e=f.sub(c.startpos,c.endpos),c=f.crossratio3(e,c.startpos,c.endpos,b,d);0>c.value.real&&(c=m.complex(0,c.value.imag));1<c.value.real&&
(c=m.complex(1,c.value.imag));return c};n.PointOnSegment.getParamFromState=function(a){return wb()};n.PointOnSegment.putParamToState=function(a,b){Va(b)};n.PointOnSegment.updatePosition=function(a){var b=wb();Va(b);var c=u.csnames[a.args[0]],d=c.startpos,c=f.sub(c.endpos,d),b=f.add(d,f.scalmult(b,c)),b=f.normalizeMax(b);a.homog=v.withUsage(b,"Point")};n.PointOnSegment.stateSize=2;n._helper.CenterOfConic=function(a){a=f.adjoint3(a);return{ctype:"list",value:[a.value[2].value[0],a.value[2].value[1],
a.value[2].value[2]]}};n.CenterOfConic={};n.CenterOfConic.kind="P";n.CenterOfConic.signature=["C"];n.CenterOfConic.updatePosition=function(a){var b=n._helper.CenterOfConic(u.csnames[a.args[0]].matrix);a.homog=b;a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,"Point")};n._helper.CircleMP=function(a,b){var c=a.value[0],d=a.value[1],e=m.neg(a.value[2]),h=m.zero,c=f.turnIntoCSList([f.turnIntoCSList([e,h,c]),f.turnIntoCSList([h,e,d]),f.turnIntoCSList([c,d,h])]),e=v.mult(v.mult(b,c),b),d=v.mult(v.mult(b,
f.fund),b),e=v.mult(e,f.fund),c=v.mult(d,c);return f.sub(e,c)};n.CircleMP={};n.CircleMP.kind="C";n.CircleMP.signature=["P","P"];n.CircleMP.updatePosition=function(a){a.matrix=n._helper.CircleMP(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog);a.matrix=f.normalizeMax(a.matrix);a.matrix=v.withUsage(a.matrix,"Circle")};n.CircleMr={};n.CircleMr.kind="C";n.CircleMr.signature=["P"];n.CircleMr.isMovable=!0;n.CircleMr.initialize=function(a){Va(m.real(a.radius))};n.CircleMr.getParamForInput=function(a,
b,c){if("radius"===c)return b;a=u.csnames[a.args[0]].homog;a=f.normalizeZ(a);b=f.normalizeZ(b);b=f.sub(a,b);return b=f.abs(b)};n.CircleMr.getParamFromState=function(a){return wb()};n.CircleMr.putParamToState=function(a,b){Va(b)};n.CircleMr.updatePosition=function(a){var b=wb();Va(b);var c=u.csnames[a.args[0]].homog,d=m.mult(c.value[2],b),d=m.mult(d,d);if(!m._helper.isFinite(d)&&!m._helper.isNaN(d))return f.fund;c=n._helper.ScaledCircleMrr(c,d);a.matrix=v.withUsage(c,"Circle");a.radius=b};n.CircleMr.stateSize=
2;n._helper.ScaledCircleMrr=function(a,b){var c=a.value[0],d=a.value[1],e=m.neg(a.value[2]),e=f.scalmult(e,f.turnIntoCSList([c,d,e])).value,c=f.turnIntoCSList([c,d]),c=m.sub(f.scalproduct(c,c),b),e=n._helper.buildConicMatrix([e[2],m.zero,e[2],e[0],e[1],c]);return f.normalizeMax(e)};n.Compass={};n.Compass.kind="C";n.Compass.signature=["P","P","P"];n.Compass.updatePosition=function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,d=u.csnames[a.args[2]].homog,e=b.value[2],h=c.value[2],
k=d.value[2],b=f.scalmult(m.mult(h,k),b),c=f.scalmult(m.mult(e,k),c),d=f.scalmult(m.mult(e,h),d),b=f.sub(c,b),d=n._helper.ScaledCircleMrr(d,f.scalproduct(b,b));a.matrix=v.withUsage(d,"Circle")};n._helper.getConicType=function(a){if(1E-16>m.abs(f.det(a)).value.real)return"degenerate";var b=m.mult(a.value[0].value[0],a.value[1].value[1]),b=m.sub(b,m.pow(a.value[0].value[1],m.real(2))),b=b.value.real;return 1E-16>Math.abs(b)?"parabola":1E-16<b?"ellipsoid":"hyperbola"};n._helper.ConicBy5=function(a,b,
c,d,e,h){a=f.turnIntoCSList([f.cross(c,d)]);var k=f.turnIntoCSList([f.cross(b,e)]);b=f.turnIntoCSList([f.cross(b,c)]);d=f.turnIntoCSList([f.cross(d,e)]);return n._helper.conicFromTwoDegenerates(a,k,b,d,h)};n._helper.conicFromTwoDegenerates=function(a,b,c,d,e){a=v.mult(f.transpose(b),a);c=v.mult(f.transpose(d),c);a=f.add(a,f.transpose(a));c=f.add(c,f.transpose(c));d=v.mult(v.mult(e,a),e);e=v.mult(v.mult(e,c),e);c=v.mult(d,c);e=v.mult(e,a);return f.sub(c,e)};n.ConicBy5={};n.ConicBy5.kind="C";n.ConicBy5.signature=
["P","P","P","P","P"];n.ConicBy5.updatePosition=function(a){var b=n._helper.ConicBy5(a,u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog);a.matrix=b;a.matrix=f.normalizeMax(a.matrix);a.matrix=v.withUsage(a.matrix,"Conic")};n._helper.buildConicMatrix=function(a){var b=a[1],c=a[2],d=a[3],e=a[4],h=a[5];return f.turnIntoCSList([f.turnIntoCSList([a[0],b,d]),f.turnIntoCSList([b,c,e]),f.turnIntoCSList([d,e,h])])};n._helper.splitDegenConic=
function(a){var b=f.adjoint3(a),c=0,d,e,h=m.abs2(b.value[0].value[0]).value.real;for(d=1;3>d;d++)e=m.abs2(b.value[d].value[d]).value.real,e>h&&(c=d,h=e);d=m.sqrt(m.mult(m.real(-1),b.value[c].value[c]));if(1E-16>m.abs2(d).value.real)return a=f.turnIntoCSList([m.zero,m.zero,m.zero]),[a,a];c=m.real(c+1);e=f.column(b,c);e=f.scaldiv(d,e);d=e.value[0];h=e.value[1];e=e.value[2];d=f.turnIntoCSList([f.turnIntoCSList([m.real(0),e,m.mult(m.real(-1),h)]),f.turnIntoCSList([m.mult(m.real(-1),e),m.real(0),d]),f.turnIntoCSList([h,
m.mult(m.real(-1),d),m.real(0)])]);a=f.add(a,d);var k=0;for(d=h=b=0;3>d;d++)for(c=0;3>c;c++)e=m.abs2(a.value[d].value[c]).value.real,e>h&&(k=d,b=c,h=e);d=a.value[k];a=f.transpose(a);a=a.value[b];d=f.normalizeMax(d);a=f.normalizeMax(a);d=v.withUsage(d,"Line");a=v.withUsage(a,"Line");return[d,a]};n.SelectConic={};n.SelectConic.kind="C";n.SelectConic.signature=["Cs"];n.SelectConic.initialize=function(a){if(void 0!==a.index)return a.index-1;var b=m._helper.input(a.pos.xx),c=m._helper.input(a.pos.yy),
d=m._helper.input(a.pos.zz),e=m.realmult(.5,m._helper.input(a.pos.xy)),h=m.realmult(.5,m._helper.input(a.pos.xz)),k=m.realmult(.5,m._helper.input(a.pos.yz)),b=f.turnIntoCSList([f.turnIntoCSList([b,e,h]),f.turnIntoCSList([e,c,k]),f.turnIntoCSList([h,k,d])]);a=u.csnames[a.args[0]].results;c=f.conicDist(b,a[0]);d=0;for(e=1;e<a.length;++e)h=f.conicDist(b,a[e]),h<c&&(c=h,d=e);return d};n.SelectConic.updatePosition=function(a){a.matrix=u.csnames[a.args[0]].results[a.param];a.matrix=f.normalizeMax(a.matrix);
a.matrix=v.withUsage(a.matrix,"Conic")};n._helper.ConicBy4p1l=function(a,b,c,d,e,h){var k=f.scalproduct(b,h),l=f.scalproduct(c,h),q=f.scalproduct(d,h),r=f.scalproduct(e,h),t=f.det3(c,d,e),u=f.det3(b,c,e),v=f.det3(b,d,e),w=f.det3(b,c,d),x=m.mult,l=m.sqrt(x(x(l,r),x(t,u))),k=m.sqrt(x(x(k,q),x(v,w))),q=f.cross(f.cross(b,d),h);h=f.cross(f.cross(c,e),h);q=f.scalmult(l,q);k=f.scalmult(k,h);h=f.normalizeMax(f.add(q,k));k=f.normalizeMax(f.sub(q,k));k=Ha(h,k);h=n._helper.ConicBy5(a,b,c,d,e,k.value[0]);a=n._helper.ConicBy5(a,
b,c,d,e,k.value[1]);return[f.normalizeMax(h),f.normalizeMax(a)]};n.ConicBy4p1l={};n.ConicBy4p1l.kind="Cs";n.ConicBy4p1l.signature=["P","P","P","P","L"];n.ConicBy4p1l.updatePosition=function(a){var b=n._helper.ConicBy4p1l(a,u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog);a.results=b};n.ConicBy4p1l.stateSize=Ha.stateSize;n._helper.ConicBy3p2l=function(a,b,c,d,e){function h(a,b,c,d){return m.sub(m.mult(a,d),m.mult(b,
c))}var k=f.cross(a,b),l=f.cross(d,e);d=f.cross(d,k);e=f.cross(e,k);k=f.turnIntoCSList([d,e,l]);c=f.productVM(c,f.adjoint3(k));l=f.adjoint3(f.turnIntoCSList([f.scalmult(c.value[0],d),f.scalmult(c.value[1],e),f.scalmult(c.value[2],l)]));c=f.transpose(l);d=m.mult;e=f.productMV(c,a);a=e.value[0];e=e.value[1];k=f.productMV(c,b);b=k.value[0];var k=k.value[1],n=m.sqrt(d(a,e)),q=m.sqrt(d(b,k)),r,t=Array(4);for(r=0;4>r;++r){var u=(r&2)-1,v=d(m.real(((r&1)<<1)-1),n),w=d(m.real(u),q),x=h(e,v,k,w),y=h(b,w,a,
v),u=h(a,e,b,k),z=m.add(m.add(h(b,k,a,e),h(k,w,e,v)),h(w,b,v,a)),v=d(x,x),w=d(y,y),A=d(z,z),B=d(x,y),x=d(x,z),y=d(y,z),B=m.sub(B,d(m.real(.5),d(u,u))),u=f.turnIntoCSList([f.turnIntoCSList([v,B,x]),f.turnIntoCSList([B,w,y]),f.turnIntoCSList([x,y,A])]),u=f.productMM(l,f.productMM(u,c)),u=f.turnIntoCSList([u.value[0].value[0],u.value[0].value[1],u.value[0].value[2],u.value[1].value[1],u.value[1].value[2],u.value[2].value[2]]);t[r]=u}return t};n.ConicBy3p2l={};n.ConicBy3p2l.kind="Cs";n.ConicBy3p2l.signature=
["P","P","P","L","L"];n.ConicBy3p2l.updatePosition=function(a){for(var b=n._helper.ConicBy3p2l(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog),b=wd(b),c=Array(4),d=0;4>d;++d){var e=b[d].value;c[d]=f.turnIntoCSList([f.turnIntoCSList([e[0],e[1],e[2]]),f.turnIntoCSList([e[1],e[3],e[4]]),f.turnIntoCSList([e[2],e[4],e[5]])])}a.results=c};n.ConicBy3p2l.stateSize=48;n.ConicBy2p3l={};n.ConicBy2p3l.kind="Cs";n.ConicBy2p3l.signature=
["P","P","L","L","L"];n.ConicBy2p3l.updatePosition=function(a){for(var b=n._helper.ConicBy3p2l(u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog,u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog),b=wd(b),c=Array(4),d=0;4>d;++d){var e=b[d].value,e=f.turnIntoCSList([f.turnIntoCSList([e[0],e[1],e[2]]),f.turnIntoCSList([e[1],e[3],e[4]]),f.turnIntoCSList([e[2],e[4],e[5]])]);c[d]=f.normalizeMax(f.adjoint3(e))}a.results=c};n.ConicBy2p3l.stateSize=48;n.ConicBy1p4l={};n.ConicBy1p4l.kind=
"Cs";n.ConicBy1p4l.signature=["P","L","L","L","L"];n.ConicBy1p4l.updatePosition=function(a){var b=n._helper.ConicBy4p1l(a,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog,u.csnames[a.args[0]].homog),c=b[0],b=b[1],c=f.adjoint3(c),b=f.adjoint3(b),b=[c,b];a.results=b};n.ConicBy1p4l.stateSize=Ha.stateSize;n.ConicParabolaPL={};n.ConicParabolaPL.kind="C";n.ConicParabolaPL.signature=["P","L"];n.ConicParabolaPL.updatePosition=function(a){var b=u.csnames[a.args[0]].homog.value,
c=u.csnames[a.args[1]].homog.value,d=m.mult,e=m.neg,h=m.add,k=m.sub,l=b[0],q=b[1],r=b[2],t=c[0],b=c[1],c=c[2],w=d(r,r),x=d(t,t),y=d(b,b),z=d(r,c),A=e(r),r=h(x,y),y=d(w,y),x=d(w,x),e=d(e(w),d(t,b)),t=d(A,h(d(l,r),d(z,t))),b=d(A,h(d(q,r),d(z,b))),d=k(d(h(d(l,l),d(q,q)),r),d(w,d(c,c))),d=n._helper.buildConicMatrix([y,e,x,t,b,d]),d=f.normalizeMax(d);a.matrix=v.withUsage(d,"Conic")};n.ConicBy2Foci1P={};n.ConicBy2Foci1P.kind="Cs";n.ConicBy2Foci1P.signature=["P","P","P"];n.ConicBy2Foci1P.updatePosition=
function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,d=u.csnames[a.args[2]].homog,e=f.ii,h=f.jj,k=f.normalizeMax(f.cross(b,d)),l=f.normalizeMax(f.cross(c,d)),q=f.normalizeMax(f.cross(d,e)),d=f.normalizeMax(f.cross(d,h)),l=n._helper.coHarmonic(q,d,k,l),k=f.normalizeMax(l[0]),l=f.normalizeMax(l[1]),e=f.turnIntoCSList([e]),q=f.turnIntoCSList([h]),d=f.turnIntoCSList([b]),r=f.turnIntoCSList([c]),h=n._helper.conicFromTwoDegenerates(e,q,d,r,k),h=f.normalizeMax(h),e=n._helper.conicFromTwoDegenerates(e,
q,d,r,l),e=f.normalizeMax(e),h=f.normalizeMax(f.adjoint3(h)),e=f.normalizeMax(f.adjoint3(e));"ellipsoid"!==n._helper.getConicType(h)&&(k=h,h=e,e=k);f.almostequals(b,c).value&&(b=m.real(3),e=f.zeromatrix(b,b));a.results=[h,e]};n.ConicBy2Pol1P={};n.ConicBy2Pol1P.kind="C";n.ConicBy2Pol1P.signature=["P","L","P","L","P"];n.ConicBy2Pol1P.updatePosition=function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,d=u.csnames[a.args[2]].homog,e=u.csnames[a.args[3]].homog,h=u.csnames[a.args[4]].homog,
k=f.scalproduct,l=f.scalmult,n=f.sub,q=f.productMM,r=m.realmult,t=f.transpose,w=f.turnIntoCSList,x=n(l(k(c,b),h),l(r(2,k(c,h)),b)),y=n(l(k(e,d),h),l(r(2,k(e,h)),d)),z=w([f.cross(b,h)]),h=w([f.cross(d,h)]),y=q(t(z),w([f.cross(b,y)])),w=q(t(h),w([f.cross(d,x)])),q=q(t(z),h),b=k(b,e),c=k(d,c),d=f.add(l(c,y),l(b,w)),d=n(d,l(r(2,m.mult(b,c)),q)),d=f.add(d,t(d)),d=f.normalizeMax(d),d=v.withUsage(d,"Conic");a.matrix=d};n.ConicBy2Pol1L={};n.ConicBy2Pol1L.kind="C";n.ConicBy2Pol1L.signature=["P","L","P","L",
"L"];n.ConicBy2Pol1L.updatePosition=function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,d=u.csnames[a.args[2]].homog,e=u.csnames[a.args[3]].homog,h=u.csnames[a.args[4]].homog,k=f.scalproduct,l=f.scalmult,n=f.productMM,q=m.mult,r=f.transpose,t=f.turnIntoCSList,w=k(c,b),x=k(c,d),y=k(e,b),z=k(e,d),A=k(h,b),k=k(h,d),B=t([f.sub(l(q(y,k),c),l(q(x,A),e))]),b=f.add(n(r(t([l(q(y,x),h)])),t([f.sub(f.add(l(m.sub(q(w,k),q(x,A)),e),l(m.sub(q(z,A),q(y,k)),c)),l(f.det3(c,e,h),f.cross(b,d)))])),
n(r(B),B)),b=f.add(b,r(b)),b=f.normalizeMax(b),b=v.withUsage(b,"Conic");a.matrix=b};n._helper.conic1Pol3Inc=function(a,b,c,d,e){var h=f.scalproduct,k=f.scalmult,l=f.productMM,n=f.cross,q=m.realmult,r=m.mult,t=f.transpose,u=f.turnIntoCSList,v=f.det3,w=v(a,c,d),x=u([n(c,e)]),y=u([n(a,e)]),z=u([n(c,d)]),A=h(b,a),B=h(b,c);b=h(b,e);n=u([n(d,f.sub(k(A,e),k(q(2,b),a)))]);x=k(w,l(t(x),n));a=q(2,m.add(r(v(a,d,e),B),r(w,b)));a=m.sub(r(v(c,d,e),A),a);x=f.add(x,k(a,l(t(y),z)));x=f.add(x,t(x));return x=f.normalizeMax(x)};
n.ConicBy1Pol3P={};n.ConicBy1Pol3P.kind="C";n.ConicBy1Pol3P.signature=["P","L","P","P","P"];n.ConicBy1Pol3P.updatePosition=function(a){var b=n._helper.conic1Pol3Inc(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog),b=v.withUsage(b,"Conic");a.matrix=b};n.ConicBy1Pol3L={};n.ConicBy1Pol3L.kind="C";n.ConicBy1Pol3L.signature=["P","L","L","L","L"];n.ConicBy1Pol3L.updatePosition=function(a){var b=n._helper.conic1Pol3Inc(u.csnames[a.args[1]].homog,
u.csnames[a.args[0]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog),b=f.normalizeMax(f.adjoint3(b)),b=v.withUsage(b,"Conic");a.matrix=b};n._helper.coHarmonic=function(a,b,c,d){var e=f.realVector([100*Math.random(),100*Math.random(),1]),h=f.det3(e,c,a),k=f.det3(e,c,b);c=f.det3(e,d,a);d=f.det3(e,d,b);d=m.sqrt(m.mult(d,k));h=m.sqrt(m.mult(c,h));a=v.mult(a,d);h=v.mult(b,h);b=f.add(a,h);a=f.sub(a,h);return[b,a]};n.ConicInSquare={};n.ConicInSquare.kind="C";n.ConicInSquare.signature=
["P","P","P","P"];n.ConicInSquare.updatePosition=function(a){var b=D.basismap(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog),c=m.one,c=n._helper.buildConicMatrix([c,c,c,m.real(-3),c,c]),b=f.adjoint3(b),b=f.productMM(f.productMM(f.transpose(b),c),b),b=f.normalizeMax(b);a.matrix=v.withUsage(b,"Conic")};n.ConicBy5lines={};n.ConicBy5lines.kind="C";n.ConicBy5lines.signature=["L","L","L","L","L"];n.ConicBy5lines.updatePosition=function(a){var b=
n._helper.ConicBy5(a,u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog),b=f.adjoint3(b);a.matrix=b;a.matrix=f.normalizeMax(a.matrix);a.matrix=v.withUsage(a.matrix,"Conic")};n.ConicFromPrincipalDirections={};n.ConicFromPrincipalDirections.kind="C";n.ConicFromPrincipalDirections.signature=["P","P","P"];n.ConicFromPrincipalDirections.updatePosition=function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,
d=u.csnames[a.args[2]].homog,e=n._helper.pointReflection(b,c),h=f.cross(c,b),b=f.turnIntoCSList([h.value[0],h.value[1],m.zero]),h=f.turnIntoCSList([h]),c=f.turnIntoCSList([f.cross(c,b)]),e=f.turnIntoCSList([f.cross(e,b)]);a.matrix=n._helper.conicFromTwoDegenerates(h,h,c,e,d);a.matrix=f.normalizeMax(a.matrix);a.matrix=v.withUsage(a.matrix,"Conic")};n.CircleBy3={};n.CircleBy3.kind="C";n.CircleBy3.signature=["P","P","P"];n.CircleBy3.updatePosition=function(a){var b=n._helper.ConicBy5(a,u.csnames[a.args[0]].homog,
u.csnames[a.args[1]].homog,f.ii,f.jj,u.csnames[a.args[2]].homog);a.matrix=f.normalizeMax(b);a.matrix=v.withUsage(a.matrix,"Circle")};n.ArcBy3={};n.ArcBy3.kind="C";n.ArcBy3.signature=["P","P","P"];n.ArcBy3.updatePosition=function(a){n.CircleBy3.updatePosition(a);a.startPoint=u.csnames[a.args[0]].homog;a.viaPoint=u.csnames[a.args[1]].homog;a.endPoint=u.csnames[a.args[2]].homog};n.ArcBy3.initialize=function(a){a.startPoint=u.csnames[a.args[0]].homog;a.viaPoint=u.csnames[a.args[1]].homog;a.endPoint=u.csnames[a.args[2]].homog;
a.isArc=!0};n.PolarOfPoint={};n.PolarOfPoint.kind="L";n.PolarOfPoint.signature=["P","C"];n.PolarOfPoint.updatePosition=function(a){var b=v.mult(u.csnames[a.args[1]].matrix,u.csnames[a.args[0]].homog),b=f.normalizeMax(b);a.homog=v.withUsage(b,"Line")};n.PolarOfLine={};n.PolarOfLine.kind="P";n.PolarOfLine.signature=["L","C"];n.PolarOfLine.updatePosition=function(a){var b=u.csnames[a.args[0]],c=f.adjoint3(u.csnames[a.args[1]].matrix),b=v.mult(c,b.homog),b=f.normalizeMax(b);a.homog=v.withUsage(b,"Point")};
n.AngleBisector={};n.AngleBisector.kind="Ls";n.AngleBisector.signature=["L","L","P"];n.AngleBisector.updatePosition=function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,d=u.csnames[a.args[2]].homog,e=f.add,h=f.sub,k=f.abs,l=f.cross,m=f.scalmult,n=f.normalizeMax,q=f._helper.isAlmostZero,r=f.linfty,t=m(k(l(l(r,c),r)),b),b=m(k(l(l(r,b),r)),c),h=h(t,b),e=e(t,b);q(h)&&(h=l(l(l(r,e),r),d));q(e)&&(e=l(l(l(r,h),r),d));a.results=Ha(n(h),n(e))};n.AngleBisector.stateSize=Ha.stateSize;n._helper.IntersectLC=
function(a,b){var c=m,d=f.crossOperator(a),e=f.transpose(d),e=v.mult(e,v.mult(b,d)),h=f.maxIndex(a,m.abs2),k,l,n,q;0===h?(h=e.value[1].value[1],k=e.value[1].value[2],l=e.value[2].value[1],n=e.value[2].value[2],q=a.value[0]):1===h?(h=e.value[0].value[0],k=e.value[0].value[2],l=e.value[2].value[0],n=e.value[2].value[2],q=a.value[1]):(h=e.value[0].value[0],k=e.value[0].value[1],l=e.value[1].value[0],n=e.value[1].value[1],q=a.value[2]);c=c.div(c.sqrt(c.sub(c.mult(k,l),c.mult(h,n))),q);c=f.add(e,f.scalmult(c,
d));h=f.maxIndex(c,f.abs2);d=c.value[h];d=f.normalizeMax(d);d=v.withUsage(d,"Point");c=f.transpose(c);h=f.maxIndex(c,f.abs2);c=c.value[h];c=f.normalizeMax(c);c=v.withUsage(c,"Point");return[d,c]};n.IntersectLC={};n.IntersectLC.kind="Ps";n.IntersectLC.signature=["L","C"];n.IntersectLC.updatePosition=function(a){var b=n._helper.IntersectLC(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].matrix);a.results=Ha(b[0],b[1])};n.IntersectLC.stateSize=Ha.stateSize;n.OtherIntersectionCL={};n.OtherIntersectionCL.kind=
"P";n.OtherIntersectionCL.signature=["C","L","P"];n.OtherIntersectionCL.updatePosition=function(a){var b=u.csnames[a.args[2]].homog,c=n._helper.IntersectLC(u.csnames[a.args[1]].homog,u.csnames[a.args[0]].matrix),d=c[0],c=c[1],e=f.projectiveDistMinScal(d,b),b=f.projectiveDistMinScal(c,b);a.homog=e<b?c:d;a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,"Point")};n.IntersectCirCir={};n.IntersectCirCir.kind="Ps";n.IntersectCirCir.signature=["C","C"];n.IntersectCirCir.updatePosition=function(a){var b=
u.csnames[a.args[0]].matrix,c=u.csnames[a.args[1]].matrix,d=f.scalmult(c.value[0].value[0],b.value[2]),c=f.scalmult(b.value[0].value[0],c.value[2]),d=f.sub(d,c),d=f.turnIntoCSList([d.value[0],d.value[1],m.realmult(.5,d.value[2])]),d=f.normalizeMax(d),b=n._helper.IntersectLC(d,b);a.results=Ha(b[0],b[1])};n.IntersectCirCir.stateSize=Ha.stateSize;n.OtherIntersectionCC={};n.OtherIntersectionCC.kind="P";n.OtherIntersectionCC.signature=["C","C","P"];n.OtherIntersectionCC.updatePosition=function(a){var b=
u.csnames[a.args[0]].matrix,c=u.csnames[a.args[1]].matrix,d=u.csnames[a.args[2]].homog,e=f.scalmult(c.value[0].value[0],b.value[2]),c=f.scalmult(b.value[0].value[0],c.value[2]),e=f.sub(e,c),e=f.turnIntoCSList([e.value[0],e.value[1],m.realmult(.5,e.value[2])]),e=f.normalizeMax(e),e=n._helper.IntersectLC(e,b),b=e[0],e=e[1],c=f.projectiveDistMinScal(b,d),d=f.projectiveDistMinScal(e,d);a.homog=c<d?e:b;a.homog=f.normalizeMax(a.homog);a.homog=v.withUsage(a.homog,"Point")};n._helper.IntersectConicConic=
function(a,b){var c=a.value[0],d=a.value[1],e=a.value[2],h=b.value[0],k=b.value[1],l=b.value[2],q=f.det3(c,d,e),r=m.add(m.add(f.det3(c,d,l),f.det3(c,k,e)),f.det3(h,d,e)),c=m.add(m.add(f.det3(c,k,l),f.det3(h,d,l)),f.det3(h,k,e)),h=f.det3(h,k,l),l=m.abs2(q).value.real,k=m.abs2(h).value.real;l<k&&(l=a,a=b,b=l,l=h,h=q,q=l,l=c,c=r,r=l,l=k);1E-24>l?(q=a,c=b):(r=m.solveCubic(q,r,c,h),c=m.abs2(m.sub(r[0],r[1])).value.real,h=m.abs2(m.sub(r[0],r[2])).value.real,k=m.abs2(m.sub(r[1],r[2])).value.real,c>h?(q=
r[1],r=c>k?r[0]:r[2]):(q=r[2],r=h>k?r[0]:r[1]),q=f.add(f.scalmult(q,a),b),c=f.add(f.scalmult(r,a),b));r=n._helper.splitDegenConic(q);q=r[0];r=r[1];c=n._helper.splitDegenConic(c);k=c[0];h=c[1];c=f.cross(q,k);k=f.cross(r,k);q=f.cross(q,h);r=f.cross(r,h);c=f.normalizeMax(c);k=f.normalizeMax(k);q=f.normalizeMax(q);r=f.normalizeMax(r);c=v.withUsage(c,"Point");k=v.withUsage(k,"Point");q=v.withUsage(q,"Point");r=v.withUsage(r,"Point");return[c,k,q,r]};n.IntersectConicConic={};n.IntersectConicConic.kind=
"Ps";n.IntersectConicConic.signature=["C","C"];n.IntersectConicConic.updatePosition=function(a){var b=n._helper.IntersectConicConic(u.csnames[a.args[0]].matrix,u.csnames[a.args[1]].matrix),b=vc(b[0],b[1],b[2],b[3]);a.results=b};n.IntersectConicConic.stateSize=vc.stateSize;n.SelectP={};n.SelectP.kind="P";n.SelectP.signature=["Ps"];n.SelectP.initialize=function(a){if(void 0!==a.index)return a.index-1;var b=u.csnames[a.args[0]].results.value;a=n._helper.initializePoint(a);for(var c=f.projectiveDistMinScal(a,
b[0]),d=0,e=1;e<b.length;++e){var h=f.projectiveDistMinScal(a,b[e]);h<c&&(c=h,d=e)}return d};n.SelectP.updatePosition=function(a){a.homog=u.csnames[a.args[0]].results.value[a.param]};n.SelectL={};n.SelectL.kind="L";n.SelectL.signature=["Ls"];n.SelectL.initialize=function(a){if(void 0!==a.index)return a.index-1;var b=u.csnames[a.args[0]].results.value;a=n._helper.initializeLine(a);for(var c=f.projectiveDistMinScal(a,b[0]),d=0,e=1;e<b.length;++e){var h=f.projectiveDistMinScal(a,b[e]);h<c&&(c=h,d=e)}return d};
n.SelectL.updatePosition=function(a){a.homog=u.csnames[a.args[0]].results.value[a.param];a.homog=v.withUsage(a.homog,"Line")};n._helper.moebiusStep=function(a,b,c){var d=m.add,e=m.sub,f=m.mult,h=a.value[0],k=a.value[1];a=a.value[2];var l=b.value[0],n=b.value[1];b=b.value[2];var q=c.value[0],r=c.value[1],t=c.value[2];c=e(f(b,q),f(l,t));var u=e(f(b,r),f(n,t)),q=e(f(h,t),f(a,q)),r=e(f(k,t),f(a,r));return[e(f(h,c),f(k,u)),d(f(k,c),f(h,u)),f(a,c),f(a,u),e(f(l,q),f(n,r)),d(f(n,q),f(l,r)),f(b,q),f(b,r)]};
n.TrMoebius={};n.TrMoebius.kind="Mt";n.TrMoebius.signature="PPPPPP".split("");n.TrMoebius.updatePosition=function(a){var b=m.neg,c=n._helper.moebiusStep(u.csnames[a.args[0]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[4]].homog),d=n._helper.moebiusStep(u.csnames[a.args[1]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[5]].homog),d=f.normalizeMax(f.matrix([[d[0],b(d[1]),d[4],b(d[5])],[d[1],d[0],d[5],d[4]],[d[2],b(d[3]),d[6],b(d[7])],[d[3],d[2],d[7],d[6]]])),c=f.normalizeMax(f.matrix([[c[6],
b(c[4])],[c[7],b(c[5])],[b(c[2]),c[0]],[b(c[3]),c[1]]])),e=f.productMM(d,c),c=e.value[0].value[0],d=e.value[1].value[0],h=e.value[0].value[1],k=e.value[1].value[1],l=e.value[2].value[0],q=e.value[3].value[0],r=e.value[2].value[1],e=e.value[3].value[1];a.mat1=f.normalizeMax(f.matrix([[b(l),q,b(r)],[q,l,e],[c,b(d),h]]));a.mat2=f.normalizeMax(f.matrix([[b(q),b(l),b(e)],[b(l),q,b(r)],[d,c,k]]))};n.TrMoebiusP={};n.TrMoebiusP.kind="P";n.TrMoebiusP.signature=["Mt","P"];n.TrMoebiusP.updatePosition=function(a){var b=
u.csnames[a.args[0]],c=u.csnames[a.args[1]].homog,d=f.productMV(b.mat1,c),b=f.productMV(b.mat2,c);a.homog=f.normalizeMax(f.cross(d,b));a.homog=v.withUsage(a.homog,"Point")};n._helper.TrMoebiusP=function(a,b){var c=f.productMV(b.mat1,a),d=f.productMV(b.mat2,a);return f.normalizeMax(f.cross(c,d))};n.TrMoebiusL={};n.TrMoebiusL.kind="C";n.TrMoebiusL.signature=["Mt","L"];n.TrMoebiusL.updatePosition=function(a){var b=u.csnames[a.args[0]],c=u.csnames[a.args[1]].homog,d=function(){var a=f.realVector([Math.random()-
.5,Math.random()-.5,Math.random()-.5]);return f.normalizeMax(a)},e=f.cross(d(),c),h=f.cross(d(),c),c=f.cross(d(),c),e=n._helper.TrMoebiusP(e,b),h=n._helper.TrMoebiusP(h,b),b=n._helper.TrMoebiusP(c,b);a.matrix=f.normalizeMax(n._helper.ConicBy5(null,e,h,b,f.ii,f.jj));a.matrix=v.withUsage(a.matrix,"Circle")};n.TrMoebiusS={};n.TrMoebiusS.kind="C";n.TrMoebiusS.signature=["Mt","S"];n.TrMoebiusS.updatePosition=function(a){var b=u.csnames[a.args[0]],c=u.csnames[a.args[1]],d=c.startpos,c=c.endpos,e=f.add(d,
c),d=n._helper.TrMoebiusP(d,b),e=n._helper.TrMoebiusP(e,b),b=n._helper.TrMoebiusP(c,b);a.startPoint=d;a.viaPoint=e;a.endPoint=b;a.isArc=!0;a.matrix=f.normalizeMax(n._helper.ConicBy5(null,d,e,b,f.ii,f.jj));a.matrix=v.withUsage(a.matrix,"Circle")};n.TrMoebiusC={};n.TrMoebiusC.kind="C";n.TrMoebiusC.signature=["Mt","C"];n.TrMoebiusC.updatePosition=function(a){var b=u.csnames[a.args[0]],c=u.csnames[a.args[1]].matrix;if("Circle"!==c.usage)console.log("applying Moebius transform to conics is not implemented yet"),
b=m.real(3),a.matrix=f.zeromatrix(b,b);else{var d=function(){var a=f.realVector([Math.random()-.5,Math.random()-.5,Math.random()-.5]);return f.normalizeMax(a)},e=n._helper.IntersectLC(d(),c),d=n._helper.IntersectLC(d(),c),c=e[1],d=d[1],e=n._helper.TrMoebiusP(e[0],b),c=n._helper.TrMoebiusP(c,b),b=n._helper.TrMoebiusP(d,b);a.matrix=f.normalizeMax(n._helper.ConicBy5(null,e,c,b,f.ii,f.jj))}a.matrix=v.withUsage(a.matrix,"Circle")};n.TrMoebiusArc={};n.TrMoebiusArc.kind="C";n.TrMoebiusArc.signature=["Mt",
"C"];n.TrMoebiusArc.updatePosition=function(a){var b=u.csnames[a.args[0]],c=u.csnames[a.args[1]],d=c.viaPoint,e=c.endPoint,c=n._helper.TrMoebiusP(c.startPoint,b),d=n._helper.TrMoebiusP(d,b),b=n._helper.TrMoebiusP(e,b);a.startPoint=c;a.viaPoint=d;a.endPoint=b;a.isArc=!0;a.matrix=f.normalizeMax(n._helper.ConicBy5(null,c,d,b,f.ii,f.jj));a.matrix=v.withUsage(a.matrix,"Circle")};n._helper.trBuildMatrix=function(a,b){var c=b(0),d=b(1),e=f.productMM(d,f.adjoint3(c));a.matrix=f.normalizeMax(e);e=f.transpose(f.productMM(c,
f.adjoint3(d)));a.dualMatrix=f.normalizeMax(e)};n.TrProjection={};n.TrProjection.kind="Tr";n.TrProjection.signature="PPPPPPPP".split("");n.TrProjection.updatePosition=function(a){n._helper.trBuildMatrix(a,function(b){return D.basismap(u.csnames[a.args[0+b]].homog,u.csnames[a.args[2+b]].homog,u.csnames[a.args[4+b]].homog,u.csnames[a.args[6+b]].homog)})};n.TrAffine={};n.TrAffine.kind="Tr";n.TrAffine.signature="PPPPPP".split("");n.TrAffine.updatePosition=function(a){var b=m.mult,c=f.scalmult,d=f.turnIntoCSList,
e=f.transpose,h=f.normalizeMax,k=f.productMM,l=f.adjoint3,n=d([u.csnames[a.args[0]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[4]].homog]),q=d([u.csnames[a.args[1]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[5]].homog]),r=e(n),e=e(q),t=r.value[2].value,v=e.value[2].value,w=[b(t[0],v[2]),b(t[1],v[0]),b(t[2],v[1])],r=l(r).value;a.matrix=h(k(e,d([c(b(w[0],v[1]),r[0]),c(b(w[1],v[2]),r[1]),c(b(w[2],v[0]),r[2])])));r=n.value;a.dualMatrix=h(k(l(q),d([c(b(t[2],w[1]),r[0]),c(b(t[0],w[2]),r[1]),
c(b(t[1],w[0]),r[2])])))};n.TrSimilarity={};n.TrSimilarity.kind="Tr";n.TrSimilarity.signature=["P","P","P","P"];n.TrSimilarity.updatePosition=function(a){n._helper.trBuildMatrix(a,function(b){return D.basismap(u.csnames[a.args[0+b]].homog,u.csnames[a.args[2+b]].homog,f.ii,f.jj)})};n.TrTranslation={};n.TrTranslation.kind="Tr";n.TrTranslation.signature=["P","P"];n.TrTranslation.updatePosition=function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,d=f.cross(b,c).value,b=m.mult(b.value[2],
c.value[2]),c=f.turnIntoCSList,e=m.neg,h=m.zero,d=c([c([b,h,d[1]]),c([h,b,e(d[0])]),c([h,h,b])]),d=f.normalizeMax(d);a.matrix=d;b=e(d.value[0].value[0]);d=c([c([b,h,h]),c([h,b,h]),c([d.value[0].value[2],d.value[1].value[2],b])]);a.dualMatrix=d};n.TrReflectionP={};n.TrReflectionP.kind="Tr";n.TrReflectionP.signature=["P"];n.TrReflectionP.updatePosition=function(a){var b=u.csnames[a.args[0]].homog.value,c=m.realmult(-.5,b[2]),d=m.zero,b=f.turnIntoCSList([f.turnIntoCSList([c,d,b[0]]),f.turnIntoCSList([d,
c,b[1]]),f.turnIntoCSList([d,d,m.neg(c)])]),b=f.normalizeMax(b);a.matrix=b;a.dualMatrix=f.transpose(b)};n.TrReflectionL={};n.TrReflectionL.kind="Tr";n.TrReflectionL.signature=["L"];n.TrReflectionL.updatePosition=function(a){var b=m.mult,c=m.realmult,d=m.zero,e=u.csnames[a.args[0]].homog.value,h=e[0],k=e[1],e=e[2],l=b(h,h),n=b(k,k),q=c(-.5,m.sub(l,n)),r=b(h,k),b=f.turnIntoCSList([f.turnIntoCSList([m.neg(q),r,b(h,e)]),f.turnIntoCSList([r,q,b(k,e)]),f.turnIntoCSList([d,d,c(-.5,m.add(l,n))])]),b=f.normalizeMax(b);
a.matrix=b;a.dualMatrix=f.transpose(b)};n.TrReflectionS={};n.TrReflectionS.kind="Tr";n.TrReflectionS.signature=["S"];n.TrReflectionS.updatePosition=n.TrReflectionL.updatePosition;n.TrReflectionC={};n.TrReflectionC.kind="Rc";n.TrReflectionC.signature=["C"];n.TrReflectionC.updatePosition=function(a){var b=u.csnames[a.args[0]].matrix;if("Circle"!==b.usage)console.log("reflection in general conics is not defined"),a.sclRsq=m.zero,a.matrix=f.fund;else{var c=m.add,d=m.mult,e=b.value[2].value,h=e[0],k=e[1],
e=e[2],l=b.value[0].value[0];a.sclRsq=m.sub(c(d(h,h),d(k,k)),d(l,e))}a.dualMatrix=a.matrix=b};n._helper.ReflectC=function(a,b){var c=m.add,d=m.sub,e=m.mult,h=f.scalmult,k=a.matrix,l=k.value[0].value[0],n=k.value[2].value,q=n[1],r=n[2],t=b.value[0].value[0],u=b.value[2].value,w=u[1],x=u[2],c=d(m.realmult(2,c(e(n[0],u[0]),e(q,w))),c(e(l,x),e(t,r)));return v.withUsage(f.normalizeMax(f.sub(h(c,k),h(a.sclRsq,b))),"Circle")};n.ReflectCC={};n.ReflectCC.kind="C";n.ReflectCC.signature=["Rc","C"];n.ReflectCC.updatePosition=
function(a){var b=u.csnames[a.args[1]];"Circle"!==b.matrix.usage?(console.log("reflecting general conics in circles is not defined"),a.matrix=v.withUsage(f.fund,"Circle")):a.matrix=n._helper.ReflectC(u.csnames[a.args[0]],b.matrix)};n.ReflectCL={};n.ReflectCL.kind="C";n.ReflectCL.signature=["Rc","L"];n.ReflectCL.updatePosition=function(a){var b=m.zero,c=u.csnames[a.args[1]].homog.value,b=n._helper.buildConicMatrix([b,b,b,c[0],c[1],m.realmult(2,c[2])]);a.matrix=n._helper.ReflectC(u.csnames[a.args[0]],
b)};n._helper.ReflectCP=function(a,b){var c=b.matrix,d=c.value[2].value,d=f.turnIntoCSList([d[0],d[1],m.neg(c.value[0].value[0])]),e=f.cross;return f.normalizeMax(e(f.productMV(c,a),e(d,a)))};n.ReflectCP={};n.ReflectCP.kind="P";n.ReflectCP.signature=["Rc","P"];n.ReflectCP.updatePosition=function(a){a.homog=v.withUsage(n._helper.ReflectCP(u.csnames[a.args[1]].homog,u.csnames[a.args[0]]),"Point")};n.ReflectCArc={};n.ReflectCArc.kind="C";n.ReflectCArc.signature=["Rc","C"];n.ReflectCArc.updatePosition=
function(a){var b=u.csnames[a.args[0]],c=u.csnames[a.args[1]],d=c.viaPoint,e=c.endPoint,f=n._helper.ReflectCP(c.startPoint,b),d=n._helper.ReflectCP(d,b),e=n._helper.ReflectCP(e,b);a.startPoint=f;a.viaPoint=d;a.endPoint=e;a.isArc=!0;a.matrix=n._helper.ReflectC(b,c.matrix)};n.ReflectCS={};n.ReflectCS.kind="C";n.ReflectCS.signature=["Rc","S"];n.ReflectCS.updatePosition=function(a){var b=u.csnames[a.args[0]],c=u.csnames[a.args[1]],d=c.startpos,e=c.endpos,f=n._helper.midpoint(d,e),d=n._helper.ReflectCP(d,
b),f=n._helper.ReflectCP(f,b),e=n._helper.ReflectCP(e,b);a.startPoint=d;a.viaPoint=f;a.endPoint=e;a.isArc=!0;e=m.zero;c=c.homog.value;c=n._helper.buildConicMatrix([e,e,e,c[0],c[1],m.realmult(2,c[2])]);a.matrix=n._helper.ReflectC(b,c)};n.TrInverse={};n.TrInverse.kind="Tr";n.TrInverse.signature=["Tr"];n.TrInverse.updatePosition=function(a){var b=u.csnames[a.args[0]];a.dualMatrix=f.transpose(b.matrix);a.matrix=f.transpose(b.dualMatrix)};n.TransformC={};n.TransformC.kind="C";n.TransformC.signature=["Tr",
"C"];n.TransformC.updatePosition=function(a){var b=u.csnames[a.args[0]].dualMatrix,b=f.productMM(f.productMM(b,u.csnames[a.args[1]].matrix),f.transpose(b)),b=f.normalizeMax(b);a.matrix=v.withUsage(b,"Conic")};n.TransformArc={};n.TransformArc.kind="C";n.TransformArc.signature=["Tr","C"];n.TransformArc.updatePosition=function(a){var b=u.csnames[a.args[0]].matrix,c=u.csnames[a.args[1]],d=c.viaPoint,e=c.endPoint,c=f.normalizeMax(f.productMV(b,c.startPoint)),d=f.normalizeMax(f.productMV(b,d)),b=f.normalizeMax(f.productMV(b,
e));a.startPoint=c;a.viaPoint=d;a.endPoint=b;a.isArc=!0;a.matrix=f.normalizeMax(n._helper.ConicBy5(null,c,d,b,f.ii,f.jj));a.matrix=v.withUsage(a.matrix,"Circle")};n.TransformP={};n.TransformP.kind="P";n.TransformP.signature=["Tr","P"];n.TransformP.updatePosition=function(a){a.homog=f.normalizeMax(f.productMV(u.csnames[a.args[0]].matrix,u.csnames[a.args[1]].homog));a.homog=v.withUsage(a.homog,"Point")};n.TransformL={};n.TransformL.kind="L";n.TransformL.signature=["Tr","L"];n.TransformL.updatePosition=
function(a){a.homog=f.normalizeMax(f.productMV(u.csnames[a.args[0]].dualMatrix,u.csnames[a.args[1]].homog));a.homog=v.withUsage(a.homog,"Line")};n.TransformS={};n.TransformS.kind="S";n.TransformS.signature=["Tr","S"];n.TransformS.updatePosition=function(a){var b=u.csnames[a.args[0]],c=u.csnames[a.args[1]];n.Segment.setSegmentPos(a,f.productMV(b.dualMatrix,c.homog),f.productMV(b.matrix,c.startpos),f.productMV(b.matrix,c.endpos))};n.TransformPolygon={};n.TransformPolygon.kind="Poly";n.TransformPolygon.signature=
["Tr","Poly"];n.TransformPolygon.updatePosition=function(a){var b=u.csnames[a.args[0]].matrix;a.vertices=f.turnIntoCSList(u.csnames[a.args[1]].vertices.value.map(function(a){a=f.normalizeMax(f.productMV(b,a));return a=v.withUsage(a,"Point")}))};n._helper.pointReflection=function(a,b){return f.normalizeMax(f.sub(f.scalmult(m.realmult(2,b.value[2]),a),f.scalmult(a.value[2],b)))};n._helper.conicOtherIntersection=function(a,b,c){var d=f.productMV(a,c);a=f.scalproduct(c,d);d=f.scalproduct(b,d);d=m.realmult(-2,
d);b=f.scalmult(a,b);c=f.scalmult(d,c);c=f.add(b,c);return c=f.normalizeMax(c)};n.Dist={};n.Dist.kind="V";n.Dist.signature=["P","P"];n.Dist.updatePosition=function(a){var b=u.csnames[a.args[1]].homog;a.value=f.abs(f.sub(f.normalizeZ(u.csnames[a.args[0]].homog),f.normalizeZ(b)))};n.Angle={};n.Angle.kind="V";n.Angle.signature=["L","L","P"];n.Angle.initialize=function(a){void 0===a.angle&&(a.angle=.5*Math.PI);Va(m._helper.input(a.angle))};n.Angle.updatePosition=function(a){var b=u.csnames[a.args[1]].homog,
c=u.csnames[a.args[2]].homog,d=f.cross(u.csnames[a.args[0]].homog,f.linfty),b=f.cross(b,f.linfty),c=f.crossratio3(d,b,f.ii,f.jj,c),c=m.mult(m.complex(0,.5),m.log(c)),d=(wb().value.real-c.value.real)/Math.PI,b=Math.round(d);!eb&&.01<Math.abs(b-d)&&Ub();c=m.complex(b*Math.PI+c.value.real,c.value.imag);Va(c);a.value=v.withUsage(c,"Angle")};n.Angle.stateSize=2;n.Text={};n.Text.kind="Text";n.Text.signature="**";n.Text.isMovable=!0;n.Text.updatePosition=Ka;n.Text.initialize=function(a){a.text=String(a.text);
a.pos&&(a.homog=n._helper.initializePoint(a));a.dock&&(a.dock.offset=a.dock.offset&&2===a.dock.offset.length?f.realVector([+a.dock.offset[0],+a.dock.offset[1]]):f.realVector([0,0]))};n.Text.getParamForInput=function(a,b,c){return n.Free.getParamForInput(a,b,c)};n.Text.getParamFromState=function(a){return a.homog};n.Text.putParamToState=function(a,b){a.homog=b};n.Calculation={};n.Calculation.kind="Text";n.Calculation.signature="**";n.Calculation.isMovable=!0;n.Calculation.updatePosition=Ka;n.Calculation.initialize=
function(a){n.Text.initialize(a);a.calculation=Ma(a.text)};n.Calculation.getText=function(a){return w(A(a.calculation))};n.Calculation.getParamForInput=n.Text.getParamForInput;n.Calculation.getParamFromState=n.Text.getParamFromState;n.Calculation.putParamToState=n.Text.putParamToState;n.Equation={};n.Equation.kind="Text";n.Equation.isMovable=!0;n.Equation.signature="**";n.Equation.updatePosition=Ka;n.Equation.initialize=function(a){n.Text.initialize(a);a.calculation=Ma(a.text)};n.Equation.getText=
function(a){return a.text+" = "+w(A(a.calculation))};n.Equation.getParamForInput=n.Text.getParamForInput;n.Equation.getParamFromState=n.Text.getParamFromState;n.Equation.putParamToState=n.Text.putParamToState;n.Evaluate={};n.Evaluate.kind="Text";n.Evaluate.isMovable=!0;n.Evaluate.signature="**";n.Evaluate.updatePosition=Ka;n.Evaluate.initialize=function(a){n.Text.initialize(a);a.calculation=Ma(a.text)};n.Evaluate.getText=function(a){A(a.calculation);return a.text};n.Evaluate.getParamForInput=n.Text.getParamForInput;
n.Evaluate.getParamFromState=n.Text.getParamFromState;n.Evaluate.putParamToState=n.Text.putParamToState;n.Plot={};n.Plot.kind="Text";n.Plot.isMovable=!0;n.Plot.signature="**";n.Plot.updatePosition=Ka;n.Plot.initialize=function(a){n.Text.initialize(a);a.calculation=Ma("plot(("+a.text+"))")};n.Plot.getText=function(a){A(a.calculation);return a.text};n.Plot.getParamForInput=n.Text.getParamForInput;n.Plot.getParamFromState=n.Text.getParamFromState;n.Plot.putParamToState=n.Text.putParamToState;n.Button=
{};n.Button.kind="Text";n.Button.signature="**";n.Button.isMovable=!0;n.Button.updatePosition=Ka;n.Button.initialize=function(a){var b=document.createElement("button");wc(a,"click",b)};n.Button.getParamForInput=n.Text.getParamForInput;n.Button.getParamFromState=n.Text.getParamFromState;n.Button.putParamToState=n.Text.putParamToState;n.ToggleButton={};n.ToggleButton.kind="Text";n.ToggleButton.signature="**";n.ToggleButton.isMovable=!0;n.ToggleButton.updatePosition=Ka;n.ToggleButton.initialize=function(a){var b;
b=void 0;void 0===b&&(b="CindyJSid");b+=++Ra;var c=document.createElement("input"),d=document.createElement("label");c.setAttribute("id",b);d.setAttribute("for",b);c.setAttribute("type","checkbox");a.pressed&&(c.checked=!0);a.checkbox=c;wc(a,"change",c,d)};n.ToggleButton.getParamForInput=n.Text.getParamForInput;n.ToggleButton.getParamFromState=n.Text.getParamFromState;n.ToggleButton.putParamToState=n.Text.putParamToState;n.EditableText={};n.EditableText.kind="Text";n.EditableText.isMovable=!0;n.EditableText.signature=
[];n.EditableText.updatePosition=Ka;n.EditableText.initialize=function(a){var b=document.createElement("input");b.setAttribute("type","text");b.className="CindyJS-editabletext";Sa(a.fillalpha)||(a.fillalpha=1);a.fillcolor&&(b.style.backgroundColor=y.makeColor(a.fillcolor,a.fillalpha));Sa(a.minwidth)&&(b.style.width=a.minwidth-3+"px");"string"===typeof a.text&&(b.value=a.text);b.addEventListener("keydown",function(a){13===a.keyCode&&b.blur()});wc(a,"change",b)};n.EditableText.getText=function(a){return!1};
n.EditableText.getParamForInput=n.Text.getParamForInput;n.EditableText.getParamFromState=n.Text.getParamFromState;n.EditableText.putParamToState=n.Text.putParamToState;n._helper.initializePoint=function(a){var b=0,c=0,d=0;if(a.pos){if("list"===a.pos.ctype&&f.isNumberVector(a.pos))return a.pos;2===a.pos.length&&(b=a.pos[0],c=a.pos[1],d=1);3===a.pos.length&&(b=a.pos[0],c=a.pos[1],d=a.pos[2])}a=f.turnIntoCSList([m._helper.input(b),m._helper.input(c),m._helper.input(d)]);return a=f.normalizeMax(a)};n._helper.initializeLine=
function(a){var b=0,c=0,d=0;if(a.pos){if("list"===a.pos.ctype&&f.isNumberVector(a.pos))return a.pos;3===a.pos.length&&(b=a.pos[0],c=a.pos[1],d=a.pos[2])}a=f.turnIntoCSList([m._helper.input(b),m._helper.input(c),m._helper.input(d)]);return a=f.normalizeMax(a)};n.Poly={};n.Poly.kind="Poly";n.Poly.signature="P*";n.Poly.updatePosition=function(a){a.vertices=f.turnIntoCSList(a.args.map(function(a){return u.csnames[a].homog}))};var od={CircleMFixedr:function(a){a.pinned=!0;a.type="CircleMr";return[a]},
CircleByFixedRadius:function(a){a.pinned=!0;a.type="CircleMr";return[a]},CircleByRadius:function(a){a.type="CircleMr";return[a]},IntersectionConicLine:function(a){a.args=[a.args[1],a.args[0]];a.type="IntersectLC";return[a]},IntersectionCircleCircle:function(a){a.type="IntersectCirCir";return[a]},IntersectionConicConic:function(a){a.type="IntersectConicConic";return[a]},FreePoint:function(a){a.type="Free";return[a]},Orthogonal:function(a){a.type="Perp";return[a]},Parallel:function(a){a.type="Para";
return[a]},Pole:function(a){a.type="PolarOfLine";return[a]},Polar:function(a){a.type="PolarOfPoint";return[a]},Arc:function(a){a.type="ArcBy3";return[a]},EuclideanMid:function(a){a.type="Mid";return[a]},AngularBisector:function(a){a.type="AngleBisector";return[a]},TransformConic:function(a){a.type="TransformC";return[a]},TransformSegment:function(a){a.type="TransformS";return[a]},TrMoebiusSegment:function(a){a.type="TrMoebiusS";return[a]},angleBisector:function(a){var b={name:a.name+"_Intersection",
type:"Meet",args:a.args,visible:!1};a.type="AngleBisector";a.args=[a.args[0],a.args[1],b.name];return[b,a]},Transform:function(a){var b=u.csnames[a.args[1]],b={Tr:"Transform",Mt:"TrMoebius",Rc:"ReflectC"}[u.csnames[a.args[0]].kind]+(b.isArc?"Arc":b.kind);if(n.hasOwnProperty(b))return a.type=b,[a];console.log(b+" not implemented yet");return[]},TrReflection:function(a){var b="TrReflection"+u.csnames[a.args[0]].kind;if(n.hasOwnProperty(b))return a.type=b,[a];console.log(b+" not implemented yet");return[]}},
ge="align alpha angle args arrow arrowposition arrowshape arrowsides arrowsize clip color dashtype drawtrace fillalpha fillcolor filled labeled labelpos name overhang pinned printname radius size text text_fontfamily textbold textitalics textsize tracedim tracelength traceskip tracing type visible".split(" ");qa.saveState=function(){return{geometry:he()}};var ra={},Ed,Hb,Fd,Gd;Ed=[[],[.2],[.075,.225],[44/45,-56/15,32/9],[19372/6561,-25360/2187,64448/6561,-212/729],[9017/3168,-355/33,46732/5247,49/
176,-5103/18656],[35/384,0,500/1113,125/192,-2187/6784,11/84]];Hb=[0,.2,.3,.8,8/9,1,1];Fd=[35/384,0,500/1113,125/192,-2187/6784,11/84,0];Gd=[5179/57600,0,7571/16695,.6140625,-92097/339200,187/2100,.025];var Aa,ca=[],xc=[],hc=!1;ra.tick=function(a){a/=Lb;for(var b=0;b<Lb;b++)ra.tick1(a),Cb+=a,A(ia.simulationstep)};ra.tick1=function(a){for(var b=a,c=0;0<a&&c<.999*a||0>a&&c>.999*a;)b=ra.oneRKStep(b),c+=b,b=Math.min(2*b,a-c),b=Math.max(b,1E-16),ra.restorePosition(),ra.doCollisions(),ra.calculateForces(),
ra.moveToFinalPos();return!0};ra.restorePosition=function(){Aa.forEach(function(a){N[a.type].restorePos(a,9)})};ra.doCollisions=function(){Aa.forEach(function(a){N[a.type].doCollisions(a)})};ra.calculateForces=function(){Aa.forEach(function(a){N[a.type].calculateForces(a)})};ra.moveToFinalPos=function(){Aa.forEach(function(a){N[a.type].move(a)})};ra.oneRKStep=function(a){for(var b=function(a){Aa.forEach(function(b){N[b.type].initRK(b,a);N[b.type].storePosition(b)})},c=function(a){Aa.forEach(function(b){N[b.type].setToTimestep(b,
Hb[a])})},d=function(a){Aa.forEach(function(b){N[b.type].proceedMotion(b,Hb[a],a,Ed[a])})},e=function(){Aa.forEach(function(a){N[a.type].resetForces(a)})},f=function(a){Aa.forEach(function(b){N[b.type].calculateDelta(b,a)})},h=function(b){var c=0;Aa.forEach(function(a){N[a.type].proceedMotion(a,Hb[6],7,Fd);N[a.type].savePos(a,8);N[a.type].proceedMotion(a,Hb[6],7,Gd);N[a.type].savePos(a,9);c+=N[a.type].sqDist(a,8,9)});return c=Math.sqrt(c)/a},k=function(a){Aa.forEach(function(a){N[a.type].recallPosition(a)})},
l=!1;!l;){b(a);for(var m=0;7>m;m++)c(m),d(m),e(),ra.calculateForces(),f(m);h(a)>N.env.errorbound&&a>N.env.lowestdeltat?(a/=N.env.slowdownfactor,k()):l=!0}return a};var N={Mass:{reset:function(a,b){a.vel=[0,0,0];a.pos=[0,0,0,0];a.el=b;"undefined"===typeof a.mass&&(a.mass=1);"undefined"===typeof a.charge&&(a.charge=0);"undefined"===typeof a.friction&&(a.friction=0);a.lnfrict=0;"undefined"===typeof a.limitspeed&&(a.limitspeed=!1);"undefined"===typeof a.fixed&&(a.fixed=!1);"undefined"===typeof a.radius&&
(a.radius=1);a.internalmove=!1;a.fx=0;a.fy=0;a.fz=0;a.vx=a.vx||0;a.vy=a.vy||0;a.vz=a.vz||0;a.mtype=0;a.env=N.env;a.deltat=0;a.mx=0;a.my=0;a.mz=0;a.mvx=0;a.mvy=0;a.mvz=0;a.dx=[0,0,0,0,0,0,0,0,0,0];a.dy=[0,0,0,0,0,0,0,0,0,0];a.dz=[0,0,0,0,0,0,0,0,0,0];a.dvx=[0,0,0,0,0,0,0,0,0,0];a.dvy=[0,0,0,0,0,0,0,0,0,0];a.dvz=[0,0,0,0,0,0,0,0,0,0];a.midx=0;a.midy=0;a.midz=0;a.lx=0;a.ly=0;a.lz=0},resetForces:function(a){a.fx=0;a.fy=0;a.fz=0},getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){var c=D.extractPoint(a.el.homog);
a.x=c.x;a.y=c.y;a.z=0;a.xo=a.x;a.yo=a.y;a.zo=a.z;a.vxo=a.vx;a.vyo=a.vy;a.vzo=a.vz;a.deltat=b;a.fx=0;a.fy=0;a.fz=0},setVelocity:function(a,b,c,d){d||(d=0);a.vx=b;a.vy=c;a.vz=d},move:function(a){a.pos=[a.x,a.y,1];a.internalmove=!0;aa&&U.down&&a.el===aa.mover||Ea(a.el,f.realVector(a.pos),"homog");a.el.sx=a.x;a.el.sy=a.y;a.internalmove=!1},proceedMotion:function(a,b,c,d){if(!a.fixed)for(a.x=a.mx,a.y=a.my,a.z=a.mz,a.vx=a.mvx,a.vy=a.mvy,a.vz=a.mvz,b=0;b<c;b++)a.x+=d[b]*a.dx[b]*a.deltat,a.y+=d[b]*a.dy[b]*
a.deltat,a.z+=d[b]*a.dz[b]*a.deltat,a.vx+=d[b]*a.dvx[b]*a.deltat,a.vy+=d[b]*a.dvy[b]*a.deltat,a.vz+=d[b]*a.dvz[b]*a.deltat},calculateForces:function(a){var b=Math.sqrt(a.vx*a.vx+a.vy*a.vy+a.vz*a.vz);a.lnfrict=-Math.log((1-a.friction)*(1-a.env.friction)*(.1<b&&a.limitSpeed?.1/b:1));a.fx+=-a.vx*a.lnfrict*a.mass;a.fy+=-a.vy*a.lnfrict*a.mass;a.fz+=-a.vz*a.lnfrict*a.mass},calculateDelta:function(a,b){a.dx[b]=a.vx;a.dy[b]=a.vy;a.dz[b]=a.vz;a.dvx[b]=a.fx/a.mass;a.dvy[b]=a.fy/a.mass;a.dvz[b]=a.fz/a.mass},
savePos:function(a,b){a.dx[b]=a.x;a.dy[b]=a.y;a.dz[b]=a.z;a.dvx[b]=a.vx;a.dvy[b]=a.vy;a.dvz[b]=a.vz},restorePos:function(a,b){a.fixed||(a.x=a.dx[b],a.y=a.dy[b],a.z=a.dz[b],a.vx=a.dvx[b],a.vy=a.dvy[b],a.vz=a.dvz[b])},sqDist:function(a,b,c){var d=(a.dx[b]-a.dx[c])*(a.dx[b]-a.dx[c]),d=d+(a.dy[b]-a.dy[c])*(a.dy[b]-a.dy[c]),d=d+(a.dz[b]-a.dz[c])*(a.dz[b]-a.dz[c]),d=d+(a.dvx[b]-a.dvx[c])*(a.dvx[b]-a.dvx[c]),d=d+(a.dvy[b]-a.dvy[c])*(a.dvy[b]-a.dvy[c]);return d+=(a.dvz[b]-a.dvz[c])*(a.dvz[b]-a.dvz[c])},kineticEnergy:function(a){return.5*
a.mass*(a.vx*a.vx+a.vy*a.vy+a.vz*a.vz)},storePosition:function(a){a.mx=a.x;a.my=a.y;a.mz=a.z;a.mvx=a.vx;a.mvy=a.vy;a.mvz=a.vz},recallPosition:function(a){a.fixed||(a.x=a.mx,a.y=a.my,a.z=a.mz,a.vx=a.mvx,a.vy=a.mvy,a.vz=a.mvz)},doCollisions:function(a){}},Sun:{reset:function(a,b){a.vel=[0,0,0];a.pos=[0,0,0,0];a.el=b;"undefined"===typeof a.mass&&(a.mass=10);"undefined"===typeof a.friction&&(a.friction=0);a.charge=0;a.x=0;a.y=0;a.z=0},resetForces:function(a){},getBlock:!1,setToTimestep:function(a,b,c){},
initRK:function(a,b){var c=D.extractPoint(a.el.homog);a.x=c.x;a.y=c.y;a.z=0},setVelocity:function(a,b,c,d){},move:function(a){},proceedMotion:function(a,b,c,d){},calculateDelta:function(a,b){},calculateForces:function(a){for(var b=a.x,c=a.y,d=a.z,e=0;e<ca.length;e++){var f=ca[e],h=f.behavior.x,k=f.behavior.y,l=f.behavior.z,m=Math.sqrt((b-h)*(b-h)+(c-k)*(c-k)+(d-l)*(d-l)),k=(c-k)*a.mass*f.behavior.mass/(m*m*m),l=(d-l)*a.mass*f.behavior.mass/(m*m*m);f.behavior.fx+=(b-h)*a.mass*f.behavior.mass/(m*m*
m)*f.behavior.mass;f.behavior.fy+=k*f.behavior.mass;f.behavior.fz+=l*f.behavior.mass}},savePos:function(a,b){},restorePos:function(a,b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},storePosition:function(a){},recallPosition:function(a){},doCollisions:function(a){}},Velocity:{reset:function(a){var b=u.csnames[a.geo[1]];console.log(b);var c=D.extractPoint(b.homog);a=D.extractPoint(u.csnames[a.geo[2]].homog);b=b.behavior;N[b.type].setVelocity(b,a.x-c.x,a.y-c.y,0)},resetForces:function(a){},
getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){},setVelocity:function(a,b,c,d){},move:function(a){var b=u.csnames[a.geo[2]];if(!aa||!U.down||b!==aa.mover){var c=u.csnames[a.geo[1]];a=D.extractPoint(c.homog);c=c.behavior;a=f.realVector([a.x+c.vx,a.y+c.vy,1]);Ea(b,a,"homog")}},proceedMotion:function(a,b,c,d){},calculateForces:function(a){},calculateDelta:function(a,b){},savePos:function(a,b){},restorePos:function(a,b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},
storePosition:function(a){},recallPosition:function(a){},doCollisions:function(a){}},Gravity:{reset:function(a,b){a.vel=[0,0,0];a.pos=[0,0,0,0];a.el=b;"undefined"===typeof a.strength&&(a.strength=1);a.namea=b.args[0];a.nameb=b.args[1];a.ma=u.csnames[a.namea];a.mb=u.csnames[a.nameb]},resetForces:function(a){},getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){},setVelocity:function(a,b,c,d){},move:function(a){},proceedMotion:function(a,b,c,d){},calculateDelta:function(a,b){},calculateForces:function(a){var b=
D.extractPoint(a.ma.homog),c=D.extractPoint(a.mb.homog),d=(c.x-b.x)*a.strength;a=(c.y-b.y)*a.strength;for(b=0;b<ca.length;b++)c=ca[b],c.behavior.fx+=d*c.behavior.mass,c.behavior.fy+=a*c.behavior.mass,c.behavior.fz+=0*c.behavior.mass},savePos:function(a,b){},restorePos:function(a,b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},storePosition:function(a){},recallPosition:function(a){},doCollisions:function(a){}},Spring:{reset:function(a,b){a.el=b;"undefined"===typeof a.strength&&(a.strength=
1);"undefined"===typeof a.amplitude&&(a.amplitude=0);"undefined"===typeof a.phase&&(a.phase=0);"undefined"===typeof a.speed&&(a.speed=1);"undefined"===typeof a.l0&&(a.l0=0);"undefined"===typeof a.stype&&(a.stype=1);"undefined"===typeof a.readOnInit&&(a.readOnInit=!1);a.namea=b.args[0];a.nameb=b.args[1];a.ma=u.csnames[a.namea];a.mb=u.csnames[a.nameb];var c=D.extractPoint(a.ma.homog),d=D.extractPoint(a.mb.homog);a.l0=Math.sqrt((c.x-d.x)*(c.x-d.x)+(c.y-d.y)*(c.y-d.y));a.env=N.env},resetForces:function(a){},
getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){},setVelocity:function(a,b,c,d){},move:function(a){},proceedMotion:function(a,b,c,d){},calculateForces:function(a){var b,c,d,e;!a.ma.behavior||aa&&U.down&&a.ma===aa.mover?(c=D.extractPoint(a.ma.homog),b=c.x,d=c.y):(b=a.ma.behavior.x,d=a.ma.behavior.y);!a.mb.behavior||aa&&U.down&&a.mb===aa.mover?(e=D.extractPoint(a.mb.homog),c=e.x,e=e.y):(c=a.mb.behavior.x,e=a.mb.behavior.y);var f=Math.sqrt((b-c)*(b-c)+(d-e)*(d-e)),h=a.l0,k=a.stype;1===
k&&(h=0);var l=0;if(2===k||3===k)l=a.ma.behavior.mass*a.mb.behavior.mass*a.strength;2===k&&(l=-l);var m,n;if(0===f||0!==k&&1!==k)if(a.ma.behavior&&a.mb.behavior&&0!==f){if(f*=f*f,2===k||3===k)m=(b-c)*l/f,n=(d-e)*l/f}else m=n=0;else m=-(b-c)*a.strength*(f-h)/f*a.env.springstrength,n=-(d-e)*a.strength*(f-h)/f*a.env.springstrength;a.ma.behavior&&(a.ma.behavior.fx+=m,a.ma.behavior.fy+=n);a.mb.behavior&&(a.mb.behavior.fx-=m,a.mb.behavior.fy-=n)},calculateDelta:function(a,b){},savePos:function(a,b){},restorePos:function(a,
b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},storePosition:function(a){},recallPosition:function(a){},doCollisions:function(a){}},det:function(a,b,c,d,e,f){return c*f-e*d+e*b-a*f+a*d-c*b},Bouncer:{reset:function(a,b){a.el=b;"undefined"===typeof a.xdamp&&(a.xdamp=0);"undefined"===typeof a.ydamp&&(a.ydamp=0);"undefined"===typeof a.motorchanger&&(a.motorchanger=!0);a.namea=b.args[0];a.nameb=b.args[1];a.ma=u.csnames[a.namea];a.mb=u.csnames[a.nameb];var c=D.extractPoint(a.ma.homog),
d=D.extractPoint(a.mb.homog);a.x1o=1.01*c.x-.01*d.x;a.y1o=1.01*c.y-.01*d.y;a.x2o=1.01*d.x-.01*c.x;a.y2o=1.01*d.y-.01*c.y;a.env=N.env},resetForces:function(a){},getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){a.deltat=b},setVelocity:function(a,b,c,d){},move:function(a){},proceedMotion:function(a,b,c,d){},calculateForces:function(a){},calculateDelta:function(a,b){},savePos:function(a,b){},restorePos:function(a,b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},storePosition:function(a){},
recallPosition:function(a){},doCollisions:function(a){for(var b=D.extractPoint(a.ma.homog),c=D.extractPoint(a.mb.homog),d=b.x,b=b.y,e=c.x,c=c.y,f=a.x1o,h=a.y1o,k=a.x2o,l=a.y2o,n=Math.sqrt((d-e)*(d-e)+(b-c)*(b-c)),q=(d-e)/n,n=(b-c)/n,r=0;r<ca.length;r++){var t=ca[r],u=t.behavior.xo,v=t.behavior.yo,w=t.behavior.x,x=t.behavior.y,y=m.mult(m.complex(f,h),m.complex(e,c)),z=m.mult(m.complex(k,l),m.complex(d,b)),y=m.sub(y,z),z=m.mult(m.complex(u,v),m.complex(d,b)),y=m.add(y,z),z=m.mult(m.complex(u,v),m.complex(e,
c)),y=m.sub(y,z),z=m.sub(m.complex(f,h),m.complex(k,l)),y=m.div(y,z);0>N.det(d,b,e,c,w,x)*N.det(d,b,e,c,y.value.real,y.value.imag)&&0>N.det(d,b,w,x,y.value.real,y.value.imag)*N.det(e,c,w,x,y.value.real,y.value.imag)&&(v=t.behavior.mvx+a.deltat*(-y.value.real+t.behavior.xo),w=t.behavior.mvy+a.deltat*(-y.value.imag+t.behavior.yo),u=q*v+n*w,v=n*v-q*w,t.behavior.x=y.value.real,t.behavior.y=y.value.imag,t.behavior.vx=q*u*(1-a.xdamp),t.behavior.vy=n*u*(1-a.xdamp),t.behavior.vx+=-n*v*(1-a.ydamp),t.behavior.vy+=
q*v*(1-a.ydamp))}a.x1o=d;a.y1o=b;a.x2o=e;a.y2o=c}},Environment:{init:function(a){"undefined"===typeof a.gravity&&(a.gravity=0);"undefined"===typeof a.friction&&(a.friction=0);"undefined"===typeof a.springstrength&&(a.springstrength=1);"undefined"!==typeof a.accuracy&&(Lb=a.accuracy);"undefined"!==typeof a.deltat&&oa(a.deltat/.6);"undefined"===typeof a.charges&&(a.charges=!1);"undefined"===typeof a.balls&&(a.balls=!1);"undefined"===typeof a.newton&&(a.newton=!1);"undefined"===typeof a.ballInteractionBoosting&&
(a.ballInteractionBoosting=1);N.env=a;a.errorbound=.001;a.lowestdeltat=1E-7;a.slowdownfactor=2},reset:function(a){},resetForces:function(a){},getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){},setVelocity:function(a,b,c,d){},move:function(a){},proceedMotion:function(a,b,c,d){},calculateForces:function(a){var b,c,d,e,f,h,k,l,m,n;if(a.newton)for(b=0;b<ca.length-1;b++)for(c=ca[b],d=c.behavior.x,e=c.behavior.y,f=b+1;f<ca.length;f++)h=ca[f],k=h.behavior.x,l=h.behavior.y,n=Math.sqrt((d-
k)*(d-k)+(e-l)*(e-l)),k=(d-k)*c.behavior.mass*h.behavior.mass/(n*n*n),l=(e-l)*c.behavior.mass*h.behavior.mass/(n*n*n),c.behavior.fx-=k,c.behavior.fy-=l,h.behavior.fx+=k,h.behavior.fy+=l;if(a.charges)for(b=0;b<ca.length-1;b++)for(c=ca[b],d=c.behavior.x,e=c.behavior.y,f=b+1;f<ca.length;f++)h=ca[f],k=h.behavior.x,l=h.behavior.y,n=Math.sqrt((d-k)*(d-k)+(e-l)*(e-l)),k=(d-k)*c.behavior.charge*h.behavior.charge/(n*n*n),l=(e-l)*c.behavior.charge*h.behavior.charge/(n*n*n),c.behavior.fx+=k,c.behavior.fy+=l,
h.behavior.fx-=k,h.behavior.fy-=l;if(a.balls)for(b=0;b<ca.length-1;b++)if(c=ca[b],0!==c.behavior.radius)for(d=c.behavior.x,e=c.behavior.y,f=b+1;f<ca.length;f++)h=ca[f],0!==h.behavior.radius&&(k=h.behavior.x,l=h.behavior.y,m=c.behavior.radius+h.behavior.radius,n=Math.sqrt((d-k)*(d-k)+(e-l)*(e-l)),0===a.ballInteractionBoosting?(k=(d-k)/(n*n*n)*(n>m?0:(n-m)*(n-m)),l=(e-l)/(n*n*n)*(n>m?0:(n-m)*(n-m))):1===a.ballInteractionBoosting?(k=(d-k)/(n*n*n*n)*(n>m?0:(n-m)*(n-m)),l=(e-l)/(n*n*n*n)*(n>m?0:(n-m)*
(n-m))):(k=(d-k)/(n*n*n*n*n)*(n>m?0:(n-m)*(n-m)),l=(e-l)/(n*n*n*n*n)*(n>m?0:(n-m)*(n-m))),c.behavior.fx+=k,c.behavior.fy+=l,h.behavior.fx-=k,h.behavior.fy-=l);for(b=0;b<ca.length;b++)c=ca[b],c.behavior.fx+=0,c.behavior.fy+=-a.gravity*c.behavior.mass,c.behavior.fz+=0},calculateDelta:function(a,b){},savePos:function(a,b){},restorePos:function(a,b){},sqDist:function(a,b,c){return 0},kineticEnergy:function(a){},storePosition:function(a){},recallPosition:function(a){},doCollisions:function(a){}}};return qa};
return H}(),createCindy=CindyJS;"undefined"!==typeof process&&"undefined"!==typeof module&&"undefined"!==typeof module.exports&&"undefined"===typeof window&&(module.exports=CindyJS);
//# sourceMappingURL=Cindy.js.map