2013-06-26 22:42:24 -04:00
/ * !
2015-08-21 10:59:35 -04:00
* Paper . js v0 . 9.24 - The Swiss Army Knife of Vector Graphics Scripting .
2013-06-26 22:42:24 -04:00
* http : //paperjs.org/
*
2014-03-13 12:49:37 -04:00
* Copyright ( c ) 2011 - 2014 , Juerg Lehni & Jonathan Puckey
* http : //scratchdisk.com/ & http://jonathanpuckey.com/
2013-06-26 22:42:24 -04:00
*
* Distributed under the MIT license . See LICENSE file for details .
*
* All rights reserved .
*
2015-08-21 10:59:35 -04:00
* Date : Fri Aug 21 16 : 39 : 41 2015 + 0200
2013-06-26 22:42:24 -04:00
*
* * *
*
2014-03-13 12:49:37 -04:00
* Straps . js - Class inheritance library with support for bean - style accessors
2013-06-26 22:42:24 -04:00
*
* Copyright ( c ) 2006 - 2013 Juerg Lehni
2014-03-13 12:49:37 -04:00
* http : //scratchdisk.com/
2013-06-26 22:42:24 -04:00
*
* Distributed under the MIT license .
*
* * *
*
2014-03-13 12:49:37 -04:00
* Acorn . js
2013-06-26 22:42:24 -04:00
* http : //marijnhaverbeke.nl/acorn/
*
* Acorn is a tiny , fast JavaScript parser written in JavaScript ,
* created by Marijn Haverbeke and released under an MIT license .
*
* /
2015-08-21 10:59:35 -04:00
var paper = new function ( t ) { var e = new function ( ) { function n ( t , n , i , r , a ) { function o ( s , o ) { o = o || ( o = u ( n , s ) ) && ( o . get ? o : o . value ) , "string" == typeof o && "#" === o [ 0 ] && ( o = t [ o . substring ( 1 ) ] || o ) ; var l , d = "function" == typeof o , f = o , _ = a || d && ! o . base ? o && o . get ? s in t : t [ s ] : null ; a && _ || ( d && _ && ( o . base = _ ) , d && r !== ! 1 && ( l = s . match ( /^([gs]et|is)(([A-Z])(.*))$/ ) ) && ( h [ l [ 3 ] . toLowerCase ( ) + l [ 4 ] ] = l [ 2 ] ) , f && ! d && f . get && "function" == typeof f . get && e . isPlainObject ( f ) || ( f = { value : f , writable : ! 0 } ) , ( u ( t , s ) || { configurable : ! 0 } ) . configurable && ( f . configurable = ! 0 , f . enumerable = i ) , c ( t , s , f ) ) } var h = { } ; if ( n ) { for ( var l in n ) n . hasOwnProperty ( l ) && ! s . test ( l ) && o ( l ) ; for ( var l in h ) { var d = h [ l ] , f = t [ "set" + d ] , _ = t [ "get" + d ] || f && t [ "is" + d ] ; ! _ || r !== ! 0 && 0 !== _ . length || o ( l , { get : _ , set : f } ) } } return t } function i ( t , e , n ) { return t && ( "length" in t && ! t . getLength && "number" == typeof t . length ? a : o ) . call ( t , e , n = n || t ) , n } function r ( t , e , n ) { for ( var i in e ) ! e . hasOwnProperty ( i ) || n && n [ i ] || ( t [ i ] = e [ i ] ) ; return t } var s = /^(statics|enumerable|beans|preserve)$/ , a = [ ] . forEach || function ( t , e ) { for ( var n = 0 , i = this . length ; i > n ; n ++ ) t . call ( e , this [ n ] , n , this ) } , o = function ( t , e ) { for ( var n in this ) this . hasOwnProperty ( n ) && t . call ( e , this [ n ] , n , this ) } , h = Object . create || function ( t ) { return { _ _proto _ _ : t } } , u = Object . getOwnPropertyDescriptor || function ( t , e ) { var n = t . _ _lookupGetter _ _ && t . _ _lookupGetter _ _ ( e ) ; return n ? { get : n , set : t . _ _lookupSetter _ _ ( e ) , enumerable : ! 0 , configurable : ! 0 } : t . hasOwnProperty ( e ) ? { value : t [ e ] , enumerable : ! 0 , configurable : ! 0 , writable : ! 0 } : null } , l = Object . defineProperty || function ( t , e , n ) { return ( n . get || n . set ) && t . _ _defineGetter _ _ ? ( n . get && t . _ _defineGetter _ _ ( e , n . get ) , n . set && t . _ _defineSetter _ _ ( e , n . set ) ) : t [ e ] = n . value , t } , c = function ( t , e , n ) { return delete t [ e ] , l ( t , e , n ) } ; return n ( function ( ) { for ( var t = 0 , e = arguments . length ; e > t ; t ++ ) r ( this , arguments [ t ] ) } , { inject : function ( t ) { if ( t ) { var e = t . statics === ! 0 ? t : t . statics , i = t . beans , r = t . preserve ; e !== t && n ( this . prototype , t , t . enumerable , i , r ) , n ( this , e , ! 0 , i , r ) } for ( var s = 1 , a = arguments . length ; a > s ; s ++ ) this . inject ( arguments [ s ] ) ; return this } , extend : function ( ) { for ( var t , e , i = this , r = 0 , s = arguments . length ; s > r && ! ( t = arguments [ r ] . initialize ) ; r ++ ) ; return t = t || function ( ) { i . apply ( this , arguments ) } , e = t . prototype = h ( this . prototype ) , c ( e , "constructor" , { value : t , writable : ! 0 , configurable : ! 0 } ) , n ( t , this , ! 0 ) , arguments . length && this . inject . apply ( t , arguments ) , t . base = i , t } } , ! 0 ) . inject ( { inject : function ( ) { for ( var t = 0 , e = arguments . length ; e > t ; t ++ ) { var i = arguments [ t ] ; i && n ( this , i , i . enumerable , i . beans , i . preserve ) } return this } , extend : function ( ) { var t = h ( this ) ; return t . inject . apply ( t , arguments ) } , each : function ( t , e ) { return i ( this , t , e ) } , set : function ( t ) { return r ( this , t ) } , clone : function ( ) { return new this . constructor ( this ) } , statics : { each : i , create : h , define : c , describe : u , set : r , clone : function ( t ) { return r ( new t . constructor , t ) } , isPlainObject : function ( t ) { var n = null != t && t . constructor ; return n && ( n === Object || n === e || "Object" === n . name ) } , pick : function ( e , n ) { return e !== t ? e : n } } } ) } ; "undefined" != typeof module && ( module . exports = e ) , e . inject ( { toString : function ( ) { return null != this . _id ? ( this . _class || "Object" ) + ( this . _name ? " '" + this . _name + "'" : " @" + this . _id ) : "{ " + e . each ( this , function ( t , e ) { if ( ! /^_/ . test ( e ) ) { var n = typeof t ; this . push ( e + ": " + ( "number" === n ? s . instance . number ( t ) : "string" === n ? "'" + t + "'" : t ) ) } } , [ ] ) . join ( ", " ) + " }" } , getClassName : function ( ) { return this . _class || "" } , exportJSON : function ( t ) { return e . exportJSON ( this , t ) } , toJSON : function ( ) { return e . serialize ( this ) } , _set : function ( n , i , r ) { if ( n && ( r || e . isPlainObject ( n ) ) ) { for ( var s = Object . keys ( n . _filtering || n ) , a = 0 , o = s . length ; o > a ; a ++ ) { var h = s [ a ] ; if ( ! i || ! i [ h ] ) { var u = n [ h ] ; u !== t && ( this [ h ] = u ) } } return ! 0 } } , statics : { exports : { enumerable : ! 0 } , extend : function et ( ) { var t = et . base . apply ( this , arguments ) , n = t . prototype . _class ; return n && ! e . exports [ n ] && ( e . exports [ n ] = t ) , t } , equals : function ( t , n ) { if ( t === n ) return ! 0 ; if ( t && t . equals ) return t . equals ( n ) ; if ( n && n . equals ) return n . equals ( t ) ; if ( t && n && "object" == typeof t && "object" == typeof n ) { if ( Array . isArray ( t ) && Array . isArray ( n ) ) { var i = t . length ; if ( i !== n . length ) return ! 1 ; for ( ; i -- ; ) if ( ! e . equals ( t [ i ] , n [ i ] ) ) return ! 1 } else { var r = Object . keys ( t ) , i = r . length ; if ( i !== Object . keys ( n ) . length ) return ! 1 ; for ( ; i -- ; ) { var s = r [ i ] ; if ( ! n . hasOwnProperty ( s ) || ! e . equals ( t [ s ] , n [ s ] ) ) re
return new _ ( o * e + u * n , o * i + u * r , h * e + l * n , h * i + l * r , s + c * e + d * n , a + c * i + d * r ) } , isIdentity : function ( ) { return 1 === this . _a && 0 === this . _c && 0 === this . _b && 1 === this . _d && 0 === this . _tx && 0 === this . _ty } , orNullIfIdentity : function ( ) { return this . isIdentity ( ) ? null : this } , isInvertible : function ( ) { return ! ! this . _getDeterminant ( ) } , isSingular : function ( ) { return ! this . _getDeterminant ( ) } , transform : function ( t , e , n ) { return arguments . length < 3 ? this . _transformPoint ( h . read ( arguments ) ) : this . _transformCoordinates ( t , e , n ) } , _transformPoint : function ( t , e , n ) { var i = t . x , r = t . y ; return e || ( e = new h ) , e . set ( i * this . _a + r * this . _b + this . _tx , i * this . _c + r * this . _d + this . _ty , n ) } , _transformCoordinates : function ( t , e , n ) { for ( var i = 0 , r = 0 , s = 2 * n ; s > i ; ) { var a = t [ i ++ ] , o = t [ i ++ ] ; e [ r ++ ] = a * this . _a + o * this . _b + this . _tx , e [ r ++ ] = a * this . _c + o * this . _d + this . _ty } return e } , _transformCorners : function ( t ) { var e = t . x , n = t . y , i = e + t . width , r = n + t . height , s = [ e , n , i , n , i , r , e , r ] ; return this . _transformCoordinates ( s , s , 4 ) } , _transformBounds : function ( t , e , n ) { for ( var i = this . _transformCorners ( t ) , r = i . slice ( 0 , 2 ) , s = i . slice ( ) , a = 2 ; 8 > a ; a ++ ) { var o = i [ a ] , h = 1 & a ; o < r [ h ] ? r [ h ] = o : o > s [ h ] && ( s [ h ] = o ) } return e || ( e = new d ) , e . set ( r [ 0 ] , r [ 1 ] , s [ 0 ] - r [ 0 ] , s [ 1 ] - r [ 1 ] , n ) } , inverseTransform : function ( ) { return this . _inverseTransform ( h . read ( arguments ) ) } , _getDeterminant : function ( ) { var t = this . _a * this . _d - this . _b * this . _c ; return isFinite ( t ) && ! a . isZero ( t ) && isFinite ( this . _tx ) && isFinite ( this . _ty ) ? t : null } , _inverseTransform : function ( t , e , n ) { var i = this . _getDeterminant ( ) ; if ( ! i ) return null ; var r = t . x - this . _tx , s = t . y - this . _ty ; return e || ( e = new h ) , e . set ( ( r * this . _d - s * this . _b ) / i , ( s * this . _a - r * this . _c ) / i , n ) } , decompose : function ( ) { var t = this . _a , e = this . _b , n = this . _c , i = this . _d ; if ( a . isZero ( t * i - e * n ) ) return null ; var r = Math . sqrt ( t * t + e * e ) ; t /= r , e /= r ; var s = t * n + e * i ; n -= t * s , i -= e * s ; var o = Math . sqrt ( n * n + i * i ) ; return n /= o , i /= o , s /= o , e * n > t * i && ( t = - t , e = - e , s = - s , r = - r ) , { scaling : new h ( r , o ) , rotation : 180 * - Math . atan2 ( e , t ) / Math . PI , shearing : s } } , getValues : function ( ) { return [ this . _a , this . _c , this . _b , this . _d , this . _tx , this . _ty ] } , getTranslation : function ( ) { return new h ( this . _tx , this . _ty ) } , getScaling : function ( ) { return ( this . decompose ( ) || { } ) . scaling } , getRotation : function ( ) { return ( this . decompose ( ) || { } ) . rotation } , inverted : function ( ) { var t = this . _getDeterminant ( ) ; return t && new _ ( this . _d / t , - this . _c / t , - this . _b / t , this . _a / t , ( this . _b * this . _ty - this . _d * this . _tx ) / t , ( this . _c * this . _tx - this . _a * this . _ty ) / t ) } , shiftless : function ( ) { return new _ ( this . _a , this . _c , this . _b , this . _d , 0 , 0 ) } , applyToContext : function ( t ) { t . transform ( this . _a , this . _c , this . _b , this . _d , this . _tx , this . _ty ) } } , e . each ( [ "a" , "c" , "b" , "d" , "tx" , "ty" ] , function ( t ) { var n = e . capitalize ( t ) , i = "_" + t ; this [ "get" + n ] = function ( ) { return this [ i ] } , this [ "set" + n ] = function ( t ) { this [ i ] = t , this . _changed ( ) } } , { } ) ) , g = e . extend ( { _class : "Line" , initialize : function ( t , e , n , i , r ) { var s = ! 1 ; arguments . length >= 4 ? ( this . _px = t , this . _py = e , this . _vx = n , this . _vy = i , s = r ) : ( this . _px = t . x , this . _py = t . y , this . _vx = e . x , this . _vy = e . y , s = n ) , s || ( this . _vx -= this . _px , this . _vy -= this . _py ) } , getPoint : function ( ) { return new h ( this . _px , this . _py ) } , getVector : function ( ) { return new h ( this . _vx , this . _vy ) } , getLength : function ( ) { return this . getVector ( ) . getLength ( ) } , intersect : function ( t , e ) { return g . intersect ( this . _px , this . _py , this . _vx , this . _vy , t . _px , t . _py , t . _vx , t . _vy , ! 0 , e ) } , getSide : function ( t ) { return g . getSide ( this . _px , this . _py , this . _vx , this . _vy , t . x , t . y , ! 0 ) } , getDistance : function ( t ) { return Math . abs ( g . getSignedDistance ( this . _px , this . _py , this . _vx , this . _vy , t . x , t . y , ! 0 ) ) } , statics : { intersect : function ( t , e , n , i , r , s , o , u , l , c ) { l || ( n -= t , i -= e , o -= r , u -= s ) ; var d = n * u - i * o ; if ( ! a . isZero ( d ) ) { var f = t - r , _ = e - s , g = ( o * _ - u * f ) / d , p = ( n * _ - i * f ) / d ; if ( c || g >= 0 && 1 >= g && p >= 0 && 1 >= p ) return new h ( t + g * n , e + g * i ) } } , getSide : function ( t , e , n , i , r , s , a ) { a || ( n -= t , i -= e ) ; var o = r - t , h = s - e , u = o * i - h * n ; return 0 === u && ( u = o * n + h * i , u > 0 && ( o -= n , h -= i , u = o * n + h * i , 0 > u && ( u = 0 ) ) ) , 0 > u ? - 1 : u > 0 ? 1 : 0 } , getSignedDistance : function ( t , e , n , i , r , s , o ) { return o || ( n -= t , i -= e ) , a . isZero ( n ) ? i >= 0 ? t - r : r - t : a . isZero ( i ) ? n >= 0 ? s - e : e - s : ( n * ( s - e ) - i * ( r - t ) ) / Math . sqrt ( n * n + i * i ) } } } ) , p = r . extend ( { _class : "Project" , _list : "projects" , _reference : "project" , initialize : function ( t ) { r . call ( this , ! 0 ) , this . layers = [ ] , this . _activeLayer = null , this . symbols = [ ] , this . _currentStyle = new R ( null , null , this ) , this . _view = V . create ( this ,
} , initialize : function ( t ) { this . _initialize ( t ) } , _equals : function ( t ) { return this . _type === t . _type && this . _size . equals ( t . _size ) && e . equals ( this . _radius , t . _radius ) } , clone : function ( t ) { var e = new x ( m . NO _INSERT ) ; return e . setType ( this . _type ) , e . setSize ( this . _size ) , e . setRadius ( this . _radius ) , this . _clone ( e , t ) } , getType : function ( ) { return this . _type } , setType : function ( t ) { this . _type = t } , getShape : "#getType" , setShape : "#setType" , getSize : function ( ) { var t = this . _size ; return new c ( t . width , t . height , this , "setSize" ) } , setSize : function ( ) { var t = l . read ( arguments ) ; if ( this . _size ) { if ( ! this . _size . equals ( t ) ) { var e = this . _type , n = t . width , i = t . height ; if ( "rectangle" === e ) { var r = l . min ( this . _radius , t . divide ( 2 ) ) ; this . _radius . set ( r . width , r . height ) } else "circle" === e ? ( n = i = ( n + i ) / 2 , this . _radius = n / 2 ) : "ellipse" === e && this . _radius . set ( n / 2 , i / 2 ) ; this . _size . set ( n , i ) , this . _changed ( 9 ) } } else this . _size = t . clone ( ) } , getRadius : function ( ) { var t = this . _radius ; return "circle" === this . _type ? t : new c ( t . width , t . height , this , "setRadius" ) } , setRadius : function ( t ) { var e = this . _type ; if ( "circle" === e ) { if ( t === this . _radius ) return ; var n = 2 * t ; this . _radius = t , this . _size . set ( n , n ) } else if ( t = l . read ( arguments ) , this . _radius ) { if ( this . _radius . equals ( t ) ) return ; if ( this . _radius . set ( t . width , t . height ) , "rectangle" === e ) { var n = l . max ( this . _size , t . multiply ( 2 ) ) ; this . _size . set ( n . width , n . height ) } else "ellipse" === e && this . _size . set ( 2 * t . width , 2 * t . height ) } else this . _radius = t . clone ( ) ; this . _changed ( 9 ) } , isEmpty : function ( ) { return ! 1 } , toPath : function ( t ) { var n = this . _clone ( new ( A [ e . capitalize ( this . _type ) ] ) ( { center : new h , size : this . _size , radius : this . _radius , insert : ! 1 } ) , t ) ; return paper . settings . applyMatrix && n . setApplyMatrix ( ! 0 ) , n } , _draw : function ( t , e , n ) { var i = this . _style , r = i . hasFill ( ) , s = i . hasStroke ( ) , a = e . dontFinish || e . clip , o = ! n ; if ( r || s || a ) { var h = this . _type , u = this . _radius , l = "circle" === h ; if ( e . dontStart || t . beginPath ( ) , o && l ) t . arc ( 0 , 0 , u , 0 , 2 * Math . PI , ! 0 ) ; else { var c = l ? u : u . width , d = l ? u : u . height , f = this . _size , _ = f . width , g = f . height ; if ( o && "rectangle" === h && 0 === c && 0 === d ) t . rect ( - _ / 2 , - g / 2 , _ , g ) ; else { var p = _ / 2 , v = g / 2 , m = . 44771525016920644 , y = c * m , w = d * m , x = [ - p , - v + d , - p , - v + w , - p + y , - v , - p + c , - v , p - c , - v , p - y , - v , p , - v + w , p , - v + d , p , v - d , p , v - w , p - y , v , p - c , v , - p + c , v , - p + y , v , - p , v - w , - p , v - d ] ; n && n . transform ( x , x , 32 ) , t . moveTo ( x [ 0 ] , x [ 1 ] ) , t . bezierCurveTo ( x [ 2 ] , x [ 3 ] , x [ 4 ] , x [ 5 ] , x [ 6 ] , x [ 7 ] ) , p !== c && t . lineTo ( x [ 8 ] , x [ 9 ] ) , t . bezierCurveTo ( x [ 10 ] , x [ 11 ] , x [ 12 ] , x [ 13 ] , x [ 14 ] , x [ 15 ] ) , v !== d && t . lineTo ( x [ 16 ] , x [ 17 ] ) , t . bezierCurveTo ( x [ 18 ] , x [ 19 ] , x [ 20 ] , x [ 21 ] , x [ 22 ] , x [ 23 ] ) , p !== c && t . lineTo ( x [ 24 ] , x [ 25 ] ) , t . bezierCurveTo ( x [ 26 ] , x [ 27 ] , x [ 28 ] , x [ 29 ] , x [ 30 ] , x [ 31 ] ) } } t . closePath ( ) } a || ! r && ! s || ( this . _setStyles ( t ) , r && ( t . fill ( i . getWindingRule ( ) ) , t . shadowColor = "rgba(0,0,0,0)" ) , s && t . stroke ( ) ) } , _canComposite : function ( ) { return ! ( this . hasFill ( ) && this . hasStroke ( ) ) } , _getBounds : function ( t , e ) { var n = new d ( this . _size ) . setCenter ( 0 , 0 ) ; return "getBounds" !== t && this . hasStroke ( ) && ( n = n . expand ( this . getStrokeWidth ( ) ) ) , e ? e . _transformBounds ( n ) : n } } , new function ( ) { function t ( t , e , n ) { var i = t . _radius ; if ( ! i . isZero ( ) ) for ( var r = t . _size . divide ( 2 ) , s = 0 ; 4 > s ; s ++ ) { var a = new h ( 1 & s ? 1 : - 1 , s > 1 ? 1 : - 1 ) , o = a . multiply ( r ) , u = o . subtract ( a . multiply ( i ) ) , l = new d ( o , u ) ; if ( ( n ? l . expand ( n ) : l ) . contains ( e ) ) return u } } function e ( t , e ) { var n = t . getAngleInRadians ( ) , i = 2 * e . width , r = 2 * e . height , s = i * Math . sin ( n ) , a = r * Math . cos ( n ) ; return i * r / ( 2 * Math . sqrt ( s * s + a * a ) ) } return { _contains : function n ( e ) { if ( "rectangle" === this . _type ) { var i = t ( this , e ) ; return i ? e . subtract ( i ) . divide ( this . _radius ) . getLength ( ) <= 1 : n . base . call ( this , e ) } return e . divide ( this . size ) . getLength ( ) <= . 5 } , _hitTestSelf : function i ( n , r ) { var s = ! 1 ; if ( this . hasStroke ( ) ) { var a = this . _type , o = this . _radius , h = this . getStrokeWidth ( ) + 2 * r . tolerance ; if ( "rectangle" === a ) { var u = t ( this , n , h ) ; if ( u ) { var l = n . subtract ( u ) ; s = 2 * Math . abs ( l . getLength ( ) - e ( l , o ) ) <= h } else { var c = new d ( this . _size ) . setCenter ( 0 , 0 ) , f = c . expand ( h ) , _ = c . expand ( - h ) ; s = f . _containsPoint ( n ) && ! _ . _containsPoint ( n ) } } else "ellipse" === a && ( o = e ( n , o ) ) , s = 2 * Math . abs ( n . getLength ( ) - o ) <= h } return s ? new S ( "stroke" , this ) : i . base . apply ( this , arguments ) } } } , { statics : new function ( ) { function t ( t , n , i , r , s ) { var a = new x ( e . getNamed ( s ) ) ; return a . _type = t , a . _size = i , a . _radius = r , a . translate ( n ) } return { Circle : function ( ) { var n = h . readNamed ( arguments , "center" ) , i = e . readNamed ( argumen
var e = t + "At" ; this [ t ] = function ( ) { var t = this . getParameter ( ) , n = this . getCurve ( ) ; return null != t && n && n [ e ] ( t , ! 0 ) } } } , { } ) ) , z = m . extend ( { _class : "PathItem" , initialize : function ( ) { } , getIntersections : function ( e , n , i ) { this === e && ( e = null ) ; var r = [ ] , s = this . getCurves ( ) , a = e ? e . getCurves ( ) : s , o = this . _matrix . orNullIfIdentity ( ) , h = e ? ( n || e . _matrix ) . orNullIfIdentity ( ) : o , u = s . length , l = e ? a . length : u , c = [ ] , d = 1e-6 , f = 1 - d ; if ( e && ! this . getBounds ( o ) . touches ( e . getBounds ( h ) ) ) return [ ] ; for ( var _ = 0 ; l > _ ; _ ++ ) c [ _ ] = a [ _ ] . getValues ( h ) ; for ( var _ = 0 ; u > _ ; _ ++ ) { var p = s [ _ ] , v = e ? p . getValues ( o ) : c [ _ ] ; if ( ! e ) { var m = p . getSegment1 ( ) , y = p . getSegment2 ( ) , w = m . _handleOut , x = y . _handleIn ; if ( new g ( m . _point . subtract ( w ) , w . multiply ( 2 ) , ! 0 ) . intersect ( new g ( y . _point . subtract ( x ) , x . multiply ( 2 ) , ! 0 ) , ! 1 ) ) { var b = M . subdivide ( v ) ; M . getIntersections ( b [ 0 ] , b [ 1 ] , p , p , r , function ( e ) { return e . _parameter <= f ? ( e . _parameter /= 2 , e . _parameter2 = . 5 + e . _parameter2 / 2 , ! 0 ) : t } ) } } for ( var C = e ? 0 : _ + 1 ; l > C ; C ++ ) M . getIntersections ( v , c [ C ] , p , a [ C ] , r , ! e && ( C === _ + 1 || C === l - 1 && 0 === _ ) && function ( t ) { var e = t . _parameter ; return e >= d && f >= e } ) } return M . filterIntersections ( r , i ) } , _asPathItem : function ( ) { return this } , setPathData : function ( t ) { function e ( t , e ) { var n = + i [ t ] ; return o && ( n += u [ e ] ) , n } function n ( t ) { return new h ( e ( t , "x" ) , e ( t + 1 , "y" ) ) } var i , r , s , a = t . match ( /[mlhvcsqtaz][^mlhvcsqtaz]*/gi ) , o = ! 1 , u = new h , c = new h ; this . clear ( ) ; for ( var d = 0 , f = a && a . length ; f > d ; d ++ ) { var _ = a [ d ] , g = _ [ 0 ] , p = g . toLowerCase ( ) ; i = _ . match ( /[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/g ) ; var v = i && i . length ; switch ( o = g === p , "z" !== r || /[mz]/ . test ( p ) || this . moveTo ( u = c ) , p ) { case "m" : case "l" : for ( var m = "m" === p , y = 0 ; v > y ; y += 2 ) this [ 0 === y && m ? "moveTo" : "lineTo" ] ( u = n ( y ) ) ; s = u , m && ( c = u ) ; break ; case "h" : case "v" : for ( var w = "h" === p ? "x" : "y" , y = 0 ; v > y ; y ++ ) u [ w ] = e ( y , w ) , this . lineTo ( u ) ; s = u ; break ; case "c" : for ( var y = 0 ; v > y ; y += 6 ) this . cubicCurveTo ( n ( y ) , s = n ( y + 2 ) , u = n ( y + 4 ) ) ; break ; case "s" : for ( var y = 0 ; v > y ; y += 4 ) this . cubicCurveTo ( /[cs]/ . test ( r ) ? u . multiply ( 2 ) . subtract ( s ) : u , s = n ( y ) , u = n ( y + 2 ) ) , r = p ; break ; case "q" : for ( var y = 0 ; v > y ; y += 4 ) this . quadraticCurveTo ( s = n ( y ) , u = n ( y + 2 ) ) ; break ; case "t" : for ( var y = 0 ; v > y ; y += 2 ) this . quadraticCurveTo ( s = /[qt]/ . test ( r ) ? u . multiply ( 2 ) . subtract ( s ) : u , u = n ( y ) ) , r = p ; break ; case "a" : for ( var y = 0 ; v > y ; y += 7 ) this . arcTo ( u = n ( y + 5 ) , new l ( + i [ y ] , + i [ y + 1 ] ) , + i [ y + 2 ] , + i [ y + 4 ] , + i [ y + 3 ] ) ; break ; case "z" : this . closePath ( ! 0 ) } r = p } } , _canComposite : function ( ) { return ! ( this . hasFill ( ) && this . hasStroke ( ) ) } , _contains : function ( t ) { var e = this . _getWinding ( t , ! 1 , ! 0 ) ; return ! ! ( "evenodd" === this . getWindingRule ( ) ? 1 & e : e ) } } ) , A = z . extend ( { _class : "Path" , _serializeFields : { segments : [ ] , closed : ! 1 } , initialize : function ( e ) { this . _closed = ! 1 , this . _segments = [ ] , this . _version = 0 ; var n = Array . isArray ( e ) ? "object" == typeof e [ 0 ] ? e : arguments : ! e || e . size !== t || e . x === t && e . point === t ? null : arguments ; n && n . length > 0 ? this . setSegments ( n ) : ( this . _curves = t , this . _selectedSegmentState = 0 , n || "string" != typeof e || ( this . setPathData ( e ) , e = null ) ) , this . _initialize ( ! n && e ) } , _equals : function ( t ) { return this . _closed === t . _closed && e . equals ( this . _segments , t . _segments ) } , clone : function ( e ) { var n = new A ( m . NO _INSERT ) ; return n . setSegments ( this . _segments ) , n . _closed = this . _closed , this . _clockwise !== t && ( n . _clockwise = this . _clockwise ) , this . _clone ( n , e ) } , _changed : function pt ( e ) { if ( pt . base . call ( this , e ) , 8 & e ) { var n = this . _parent ; if ( n && ( n . _currentPath = t ) , this . _length = this . _clockwise = t , 16 & e ) this . _version ++ ; else if ( this . _curves ) for ( var i = 0 , r = this . _curves . length ; r > i ; i ++ ) this . _curves [ i ] . _changed ( ) ; this . _monoCurves = t } else 32 & e && ( this . _bounds = t ) } , getStyle : function ( ) { var t = this . _parent ; return ( t instanceof O ? t : this ) . _style } , getSegments : function ( ) { return this . _segments } , setSegments : function ( e ) { var n = this . isFullySelected ( ) ; this . _segments . length = 0 , this . _selectedSegmentState = 0 , this . _curves = t , e && e . length > 0 && this . _add ( P . readAll ( e ) ) , n && this . setFullySelected ( ! 0 ) } , getFirstSegment : function ( ) { return this . _segments [ 0 ] } , getLastSegment : function ( ) { return this . _segments [ this . _segments . length - 1 ] } , getCurves : function ( ) { var t = this . _curves , e = this . _segments ; if ( ! t ) { var n = this . _countCurves ( ) ; t = this . _curves = Array ( n ) ; for ( var i = 0 ; n > i ; i ++ ) t [ i ] = new M ( this , e [ i ] , e [ i + 1 ] || e [ 0 ] ) } return t } , getFirstCurve : function ( ) { return this . getCurves ( ) [ 0 ] } , getLastCurve : function ( ) { var t = this . getCurves ( ) ; return t [ t . length - 1 ] } , isCl
return 1 === t } } ; return { _getWinding : function ( t , e , i ) { return n ( t , this . _getMonoCurves ( ) , e , i ) } , unite : function ( e ) { return t ( this , e , "unite" ) } , intersect : function ( e ) { return t ( this , e , "intersect" ) } , subtract : function ( e ) { return t ( this , e , "subtract" ) } , exclude : function ( e ) { return t ( this , e , "exclude" ) } , divide : function ( t ) { return new y ( [ this . subtract ( t ) , this . intersect ( t ) ] ) } } } ) , A . inject ( { _getMonoCurves : function ( ) { function t ( t ) { var e = t [ 1 ] , r = t [ 7 ] , s = { values : t , winding : e === r ? 0 : e > r ? - 1 : 1 , previous : n , next : null } ; n && ( n . next = s ) , i . push ( s ) , n = s } function e ( e ) { if ( 0 !== M . getLength ( e ) ) { var n = e [ 1 ] , i = e [ 3 ] , r = e [ 5 ] , s = e [ 7 ] ; if ( M . isLinear ( e ) ) t ( e ) ; else { var o = 3 * ( i - r ) - n + s , h = 2 * ( n + r ) - 4 * i , u = i - n , l = 1e-6 , c = [ ] , d = a . solveQuadratic ( o , h , u , c , l , 1 - l ) ; if ( 0 === d ) t ( e ) ; else { c . sort ( ) ; var f = c [ 0 ] , _ = M . subdivide ( e , f ) ; t ( _ [ 0 ] ) , d > 1 && ( f = ( c [ 1 ] - f ) / ( 1 - f ) , _ = M . subdivide ( _ [ 1 ] , f ) , t ( _ [ 0 ] ) ) , t ( _ [ 1 ] ) } } } } var n , i = this . _monoCurves ; if ( ! i ) { i = this . _monoCurves = [ ] ; for ( var r = this . getCurves ( ) , s = this . _segments , o = 0 , h = r . length ; h > o ; o ++ ) e ( r [ o ] . getValues ( ) ) ; if ( ! this . _closed && s . length > 1 ) { var u = s [ s . length - 1 ] . _point , l = s [ 0 ] . _point , c = u . _x , d = u . _y , f = l . _x , _ = l . _y ; e ( [ c , d , c , d , f , _ , f , _ ] ) } if ( i . length > 0 ) { var g = i [ 0 ] , p = i [ i . length - 1 ] ; g . previous = p , p . next = g } } return i } , getInteriorPoint : function ( ) { var t = this . getBounds ( ) , e = t . getCenter ( ! 0 ) ; if ( ! this . contains ( e ) ) { for ( var n = this . _getMonoCurves ( ) , i = [ ] , r = e . y , s = [ ] , a = 0 , o = n . length ; o > a ; a ++ ) { var h = n [ a ] . values ; if ( ( 1 === n [ a ] . winding && r >= h [ 1 ] && r <= h [ 7 ] || r >= h [ 7 ] && r <= h [ 1 ] ) && M . solveCubic ( h , 1 , r , i , 0 , 1 ) > 0 ) for ( var u = i . length - 1 ; u >= 0 ; u -- ) s . push ( M . getPoint ( h , i [ u ] ) . x ) ; if ( s . length > 1 ) break } e . x = ( s [ 0 ] + s [ 1 ] ) / 2 } return e } , reorient : function ( ) { return this . setClockwise ( ! 0 ) , this } } ) , O . inject ( { _getMonoCurves : function ( ) { for ( var t = this . _children , e = [ ] , n = 0 , i = t . length ; i > n ; n ++ ) e . push . apply ( e , t [ n ] . _getMonoCurves ( ) ) ; return e } , reorient : function ( ) { var t = this . removeChildren ( ) . sort ( function ( t , e ) { return e . getBounds ( ) . getArea ( ) - t . getBounds ( ) . getArea ( ) } ) ; if ( t . length > 0 ) { this . addChildren ( t ) ; for ( var e = t [ 0 ] . isClockwise ( ) , n = 1 , i = t . length ; i > n ; n ++ ) { for ( var r = t [ n ] . getInteriorPoint ( ) , s = 0 , a = n - 1 ; a >= 0 ; a -- ) t [ a ] . contains ( r ) && s ++ ; t [ n ] . setClockwise ( s % 2 === 0 && e ) } } return this } } ) ; var T = e . extend ( { _class : "PathIterator" , initialize : function ( t , e , n , i ) { function r ( t , e ) { var n = M . getValues ( t , e , i ) ; o . push ( n ) , s ( n , t . _index , 0 , 1 ) } function s ( t , e , i , r ) { if ( r - i > l && ! M . isFlatEnough ( t , n || . 25 ) ) { var a = M . subdivide ( t ) , o = ( i + r ) / 2 ; s ( a [ 0 ] , e , i , o ) , s ( a [ 1 ] , e , o , r ) } else { var c = t [ 6 ] - t [ 0 ] , d = t [ 7 ] - t [ 1 ] , f = Math . sqrt ( c * c + d * d ) ; f > 1e-6 && ( u += f , h . push ( { offset : u , value : r , index : e } ) ) } } for ( var a , o = [ ] , h = [ ] , u = 0 , l = 1 / ( e || 32 ) , c = t . _segments , d = c [ 0 ] , f = 1 , _ = c . length ; _ > f ; f ++ ) a = c [ f ] , r ( d , a ) , d = a ; t . _closed && r ( a , c [ 0 ] ) , this . curves = o , this . parts = h , this . length = u , this . index = 0 } , getParameterAt : function ( t ) { for ( var e , n = this . index ; e = n , ! ( 0 == n || this . parts [ -- n ] . offset < t ) ; ) ; for ( var i = this . parts . length ; i > e ; e ++ ) { var r = this . parts [ e ] ; if ( r . offset >= t ) { this . index = e ; var s = this . parts [ e - 1 ] , a = s && s . index == r . index ? s . value : 0 , o = s ? s . offset : 0 ; return { value : a + ( r . value - a ) * ( t - o ) / ( r . offset - o ) , index : r . index } } } var r = this . parts [ this . parts . length - 1 ] ; return { value : 1 , index : r . index } } , drawPart : function ( t , e , n ) { e = this . getParameterAt ( e ) , n = this . getParameterAt ( n ) ; for ( var i = e . index ; i <= n . index ; i ++ ) { var r = M . getPart ( this . curves [ i ] , i == e . index ? e . value : 0 , i == n . index ? n . value : 1 ) ; i == e . index && t . moveTo ( r [ 0 ] , r [ 1 ] ) , t . bezierCurveTo . apply ( t , r . slice ( 2 ) ) } } } , e . each ( M . evaluateMethods , function ( t ) { this [ t + "At" ] = function ( e , n ) { var i = this . getParameterAt ( e ) ; return M [ t ] ( this . curves [ i . index ] , i . value , n ) } } , { } ) ) , L = e . extend ( { initialize : function ( t , e ) { for ( var n , i = this . points = [ ] , r = t . _segments , s = 0 , a = r . length ; a > s ; s ++ ) { var o = r [ s ] . point . clone ( ) ; n && n . equals ( o ) || ( i . push ( o ) , n = o ) } t . _closed && ( this . closed = ! 0 , i . unshift ( i [ i . length - 1 ] ) , i . push ( i [ 1 ] ) ) , this . error = e } , fit : function ( ) { var t = this . points , e = t . length , n = this . segments = e > 0 ? [ new P ( t [ 0 ] ) ] : [ ] ; return e > 1 && this . fitCubic ( 0 , e - 1 , t [ 1 ] . subtract ( t [ 0 ] ) . normalize ( ) , t [ e - 2 ] . subtract ( t [ e - 1 ] ) . normalize ( ) ) , this . closed && ( n . shift ( ) , n . pop ( ) ) , n } , fitCubic : function ( e , n , i , r ) { if ( n - e == 1 ) { var s = this . points [ e ] , a = this . points [ n ] , o = s . getDistance ( a ) / 3 ; return this . addCurve ( [ s , s . add ( i . normalize ( o ) ) , a . add ( r . normalize ( o ) ) , a ] ) , t } for ( var h , u = this . chordLengthParameterize ( e , n ) , l = Math . max ( this . error , this . error * this . error ) , c = ! 0 , d = 0 ; 4
p && p . update ( ) ) } var n , i , r = { 8 : "backspace" , 9 : "tab" , 13 : "enter" , 16 : "shift" , 17 : "control" , 18 : "option" , 19 : "pause" , 20 : "caps-lock" , 27 : "escape" , 32 : "space" , 35 : "end" , 36 : "home" , 37 : "left" , 38 : "up" , 39 : "right" , 40 : "down" , 46 : "delete" , 91 : "command" , 93 : "command" , 224 : "command" } , s = { 9 : ! 0 , 13 : ! 0 , 32 : ! 0 } , a = new e ( { shift : ! 1 , control : ! 1 , option : ! 1 , command : ! 1 , capsLock : ! 1 , space : ! 1 } ) , o = { } , h = { } ; return q . add ( document , { keydown : function ( e ) { var n = e . which || e . keyCode ; n in r || a . command ? t ( ! 0 , n , n in s || a . command ? n : 0 , e ) : i = n } , keypress : function ( e ) { null != i && ( t ( ! 0 , i , e . which || e . keyCode , e ) , i = null ) } , keyup : function ( e ) { var n = e . which || e . keyCode ; n in o && t ( ! 1 , n , o [ n ] , e ) } } ) , q . add ( window , { blur : function ( e ) { for ( var n in o ) t ( ! 1 , n , o [ n ] , e ) } } ) , { modifiers : a , isDown : function ( t ) { return ! ! h [ t ] } } } , G = H . extend ( { _class : "MouseEvent" , initialize : function ( t , e , n , i , r ) { H . call ( this , e ) , this . type = t , this . point = n , this . target = i , this . delta = r } , toString : function ( ) { return "{ type: '" + this . type + "', point: " + this . point + ", target: " + this . target + ( this . delta ? ", delta: " + this . delta : "" ) + ", modifiers: " + this . getModifiers ( ) + " }" } } ) , $ = H . extend ( { _class : "ToolEvent" , _item : null , initialize : function ( t , e , n ) { this . tool = t , this . type = e , this . event = n } , _choosePoint : function ( t , e ) { return t ? t : e ? e . clone ( ) : null } , getPoint : function ( ) { return this . _choosePoint ( this . _point , this . tool . _point ) } , setPoint : function ( t ) { this . _point = t } , getLastPoint : function ( ) { return this . _choosePoint ( this . _lastPoint , this . tool . _lastPoint ) } , setLastPoint : function ( t ) { this . _lastPoint = t } , getDownPoint : function ( ) { return this . _choosePoint ( this . _downPoint , this . tool . _downPoint ) } , setDownPoint : function ( t ) { this . _downPoint = t } , getMiddlePoint : function ( ) { return ! this . _middlePoint && this . tool . _lastPoint ? this . tool . _point . add ( this . tool . _lastPoint ) . divide ( 2 ) : this . _middlePoint } , setMiddlePoint : function ( t ) { this . _middlePoint = t } , getDelta : function ( ) { return ! this . _delta && this . tool . _lastPoint ? this . tool . _point . subtract ( this . tool . _lastPoint ) : this . _delta } , setDelta : function ( t ) { this . _delta = t } , getCount : function ( ) { return /^mouse(down|up)$/ . test ( this . type ) ? this . tool . _downCount : this . tool . _count } , setCount : function ( t ) { this . tool [ /^mouse(down|up)$/ . test ( this . type ) ? "downCount" : "count" ] = t } , getItem : function ( ) { if ( ! this . _item ) { var t = this . tool . _scope . project . hitTest ( this . getPoint ( ) ) ; if ( t ) { for ( var e = t . item , n = e . _parent ; /^(Group|CompoundPath)$/ . test ( n . _class ) ; ) e = n , n = n . _parent ; this . _item = e } } return this . _item } , setItem : function ( t ) { this . _item = t } , toString : function ( ) { return "{ type: " + this . type + ", point: " + this . getPoint ( ) + ", count: " + this . getCount ( ) + ", modifiers: " + this . getModifiers ( ) + " }" } } ) , X = r . extend ( { _class : "Tool" , _list : "tools" , _reference : "tool" , _events : [ "onActivate" , "onDeactivate" , "onEditOptions" , "onMouseDown" , "onMouseUp" , "onMouseDrag" , "onMouseMove" , "onKeyDown" , "onKeyUp" ] , initialize : function ( t ) { r . call ( this ) , this . _firstMove = ! 0 , this . _count = 0 , this . _downCount = 0 , this . _set ( t ) } , getMinDistance : function ( ) { return this . _minDistance } , setMinDistance : function ( t ) { this . _minDistance = t , null != t && null != this . _maxDistance && t > this . _maxDistance && ( this . _maxDistance = t ) } , getMaxDistance : function ( ) { return this . _maxDistance } , setMaxDistance : function ( t ) { this . _maxDistance = t , null != this . _minDistance && null != t && t < this . _minDistance && ( this . _minDistance = t ) } , getFixedDistance : function ( ) { return this . _minDistance == this . _maxDistance ? this . _minDistance : null } , setFixedDistance : function ( t ) { this . _minDistance = t , this . _maxDistance = t } , _updateEvent : function ( t , e , n , i , r , s , a ) { if ( ! r ) { if ( null != n || null != i ) { var o = null != n ? n : 0 , h = e . subtract ( this . _point ) , u = h . getLength ( ) ; if ( o > u ) return ! 1 ; if ( null != i && 0 != i ) if ( u > i ) e = this . _point . add ( h . normalize ( i ) ) ; else if ( a ) return ! 1 } if ( s && e . equals ( this . _point ) ) return ! 1 } switch ( this . _lastPoint = r && "mousemove" == t ? e : this . _point , this . _point = e , t ) { case "mousedown" : this . _lastPoint = this . _downPoint , this . _downPoint = this . _point , this . _downCount ++ ; break ; case "mouseup" : this . _lastPoint = this . _downPoint } return this . _count = r ? 0 : this . _count + 1 , ! 0 } , _fireEvent : function ( t , e ) { var n = paper . project . _removeSets ; if ( n ) { "mouseup" === t && ( n . mousedrag = null ) ; var i = n [ t ] ; if ( i ) { for ( var r in i ) { var s = i [ r ] ; for ( var a in n ) { var o = n [ a ] ; o && o != i && delete o [ s . _id ] } s . remove ( ) } n [ t ] = null } } return this . responds ( t ) && this . emit ( t ,
-- Pt ; u ( ) , y ( ) } function O ( ) { this . type = null , this . start = mt , this . end = null } function T ( ) { this . start = wt , this . end = null , null !== _t && ( this . source = _t ) } function L ( ) { var t = new O ; return ct . locations && ( t . loc = new T ) , ct . ranges && ( t . range = [ mt , 0 ] ) , t } function E ( t ) { var e = new O ; return e . start = t . start , ct . locations && ( e . loc = new T , e . loc . start = t . loc . start ) , ct . ranges && ( e . range = [ t . range [ 0 ] , 0 ] ) , e } function N ( t , e ) { return t . type = e , t . end = It , ct . locations && ( t . loc . end = zt ) , ct . ranges && ( t . range [ 1 ] = It ) , t } function j ( t ) { return ct . ecmaVersion >= 5 && "ExpressionStatement" === t . type && "Literal" === t . expression . type && "use strict" === t . expression . value } function B ( t ) { return bt === t ? ( z ( ) , ! 0 ) : void 0 } function D ( ) { return ! ct . strictSemicolons && ( bt === Dt || bt === _e || Xe . test ( dt . slice ( It , mt ) ) ) } function R ( ) { B ( me ) || D ( ) || q ( ) } function F ( t ) { bt === t ? z ( ) : q ( ) } function q ( ) { n ( mt , "Unexpected token" ) } function V ( t ) { "Identifier" !== t . type && "MemberExpression" !== t . type && n ( t . start , "Assigning to rvalue" ) , Tt && "Identifier" === t . type && Ve ( t . name ) && n ( t . start , "Assigning to " + t . name + " in strict mode" ) } function Z ( t ) { Mt = It = vt , ct . locations && ( zt = new r ) , At = Tt = null , Ot = [ ] , y ( ) ; var e = t || L ( ) , n = ! 0 ; for ( t || ( e . body = [ ] ) ; bt !== Dt ; ) { var i = H ( ) ; e . body . push ( i ) , n && j ( i ) && A ( ! 0 ) , n = ! 1 } return N ( e , "Program" ) } function H ( ) { ( bt === be || bt === Se && "/=" == Ct ) && y ( ! 0 ) ; var t = bt , e = L ( ) ; switch ( t ) { case Rt : case Vt : z ( ) ; var i = t === Rt ; B ( me ) || D ( ) ? e . label = null : bt !== Bt ? q ( ) : ( e . label = lt ( ) , R ( ) ) ; for ( var r = 0 ; r < Ot . length ; ++ r ) { var s = Ot [ r ] ; if ( null == e . label || s . name === e . label . name ) { if ( null != s . kind && ( i || "loop" === s . kind ) ) break ; if ( e . label && i ) break } } return r === Ot . length && n ( e . start , "Unsyntactic " + t . keyword ) , N ( e , i ? "BreakStatement" : "ContinueStatement" ) ; case Zt : return z ( ) , R ( ) , N ( e , "DebuggerStatement" ) ; case Ut : return z ( ) , Ot . push ( Qe ) , e . body = H ( ) , Ot . pop ( ) , F ( ne ) , e . test = U ( ) , R ( ) , N ( e , "DoWhileStatement" ) ; case $t : if ( z ( ) , Ot . push ( Qe ) , F ( ge ) , bt === me ) return G ( e , null ) ; if ( bt === ee ) { var a = L ( ) ; return z ( ) , X ( a , ! 0 ) , N ( a , "VariableDeclaration" ) , 1 === a . declarations . length && B ( ue ) ? $ ( e , a ) : G ( e , a ) } var a = J ( ! 1 , ! 0 ) ; return B ( ue ) ? ( V ( a ) , $ ( e , a ) ) : G ( e , a ) ; case Xt : return z ( ) , ht ( e , ! 0 ) ; case Jt : return z ( ) , e . test = U ( ) , e . consequent = H ( ) , e . alternate = B ( Wt ) ? H ( ) : null , N ( e , "IfStatement" ) ; case Yt : return At || n ( mt , "'return' outside of function" ) , z ( ) , B ( me ) || D ( ) ? e . argument = null : ( e . argument = J ( ) , R ( ) ) , N ( e , "ReturnStatement" ) ; case Kt : z ( ) , e . discriminant = U ( ) , e . cases = [ ] , F ( fe ) , Ot . push ( tn ) ; for ( var o , h ; bt != _e ; ) if ( bt === Ft || bt === Ht ) { var u = bt === Ft ; o && N ( o , "SwitchCase" ) , e . cases . push ( o = L ( ) ) , o . consequent = [ ] , z ( ) , u ? o . test = J ( ) : ( h && n ( Mt , "Multiple default clauses" ) , h = ! 0 , o . test = null ) , F ( ye ) } else o || q ( ) , o . consequent . push ( H ( ) ) ; return o && N ( o , "SwitchCase" ) , z ( ) , Ot . pop ( ) , N ( e , "SwitchStatement" ) ; case Qt : return z ( ) , Xe . test ( dt . slice ( It , mt ) ) && n ( It , "Illegal newline after throw" ) , e . argument = J ( ) , R ( ) , N ( e , "ThrowStatement" ) ; case te : if ( z ( ) , e . block = W ( ) , e . handler = null , bt === qt ) { var l = L ( ) ; z ( ) , F ( ge ) , l . param = lt ( ) , Tt && Ve ( l . param . name ) && n ( l . param . start , "Binding " + l . param . name + " in strict mode" ) , F ( pe ) , l . guard = null , l . body = W ( ) , e . handler = N ( l , "CatchClause" ) } return e . guardedHandlers = Lt , e . finalizer = B ( Gt ) ? W ( ) : null , e . handler || e . finalizer || n ( e . start , "Missing catch or finally clause" ) , N ( e , "TryStatement" ) ; case ee : return z ( ) , X ( e ) , R ( ) , N ( e , "VariableDeclaration" ) ; case ne : return z ( ) , e . test = U ( ) , Ot . push ( Qe ) , e . body = H ( ) , Ot . pop ( ) , N ( e , "WhileStatement" ) ; case ie : return Tt && n ( mt , "'with' in strict mode" ) , z ( ) , e . object = U ( ) , e . body = H ( ) , N ( e , "WithStatement" ) ; case fe : return W ( ) ; case me : return z ( ) , N ( e , "EmptyStatement" ) ; default : var c = Ct , d = J ( ) ; if ( t === Bt && "Identifier" === d . type && B ( ye ) ) { for ( var r = 0 ; r < Ot . length ; ++ r ) Ot [ r ] . name === c && n ( d . start , "Label '" + c + "' is already declared" ) ; var f = bt . isLoop ? "loop" : bt === Kt ? "switch" : null ; return Ot . push ( { name : c , kind : f } ) , e . body = H ( ) , Ot . pop ( ) , e . label = d , N ( e , "LabeledStatement" ) } return e . expression = d , R ( ) , N ( e , "ExpressionStatement" ) } } function U ( ) { F ( ge ) ; var t = J ( ) ; return F ( pe ) , t } function W ( t ) { var e , n = L ( ) , i = ! 0 , r = ! 1 ; for ( n . body = [ ] , F ( fe ) ; ! B ( _e ) ; ) { var s = H ( ) ; n . body . push ( s ) , i && t && j ( s ) && ( e = r , A ( r = ! 0 ) ) , i = ! 1 } return r && ! e && A ( ! 1 ) , N ( n , "BlockStatement" ) } function G ( t , e ) { return t . init = e , F ( me ) , t . test = bt === me ? null : J ( ) , F ( me ) , t . update = bt === pe ? null : J ( ) , F ( pe ) , t . body = H ( ) , Ot . pop ( ) , N ( t , "ForStatement" ) } function $ ( t , e ) { return t . left = e , t . right = J