2013-06-26 22:42:24 -04:00
/ * !
2013-07-21 19:51:52 -04:00
* Paper . js v0 . 9.9 - The Swiss Army Knife of Vector Graphics Scripting .
2013-06-26 22:42:24 -04:00
* http : //paperjs.org/
*
* Copyright ( c ) 2011 - 2013 , Juerg Lehni & Jonathan Puckey
* http : //lehni.org/ & http://jonathanpuckey.com/
*
* Distributed under the MIT license . See LICENSE file for details .
*
* All rights reserved .
*
2013-07-21 19:51:52 -04:00
* Date : Sun Jul 21 16 : 44 : 30 2013 - 0700
2013-06-26 22:42:24 -04:00
*
* * *
*
* straps . js - Class inheritance library with support for bean - style accessors
*
* Copyright ( c ) 2006 - 2013 Juerg Lehni
* http : //lehni.org/
*
* Distributed under the MIT license .
*
* * *
*
* acorn . js
* http : //marijnhaverbeke.nl/acorn/
*
* Acorn is a tiny , fast JavaScript parser written in JavaScript ,
* created by Marijn Haverbeke and released under an MIT license .
*
* /
2013-07-21 19:51:52 -04:00
var paper = new function ( ) { var t = new function ( ) { function e ( t , e , n , i , s , a ) { function h ( i , r , a , h ) { var r = r || ( r = d ( e , i ) ) && ( r . get ? r : r . value ) ; "string" == typeof r && "#" === r [ 0 ] && ( r = t [ r . substring ( 1 ) ] || r ) ; var c , l = "function" == typeof r , f = r , g = s || l ? r && r . get ? i in t : t [ i ] : null ; ! ( a || void 0 !== r && e . hasOwnProperty ( i ) ) || s && g || ( l && g && ( r . base = g ) , l && u && 0 === r . length && ( c = i . match ( /^(get|is)(([A-Z])(.*))$/ ) ) && u . push ( [ c [ 3 ] . toLowerCase ( ) + c [ 4 ] , c [ 2 ] ] ) , f && ! l && f . get || ( f = { value : f , writable : ! 0 } ) , ( d ( t , i ) || { configurable : ! 0 } ) . configurable && ( f . configurable = ! 0 , f . enumerable = n ) , _ ( t , i , f ) ) , ! h || ! l || s && h [ i ] || ( h [ i ] = function ( e ) { return e && t [ i ] . apply ( e , o . call ( arguments , 1 ) ) } ) } var u ; if ( e ) { u = [ ] ; for ( var c in e ) e . hasOwnProperty ( c ) && ! r . test ( c ) && h ( c , null , ! 0 , a ) ; h ( "toString" ) , h ( "valueOf" ) ; for ( var l = 0 , f = u && u . length ; f > l ; l ++ ) try { var g = u [ l ] , p = g [ 1 ] ; h ( g [ 0 ] , { get : t [ "get" + p ] || t [ "is" + p ] , set : t [ "set" + p ] } , ! 0 ) } catch ( v ) { } } return t } function n ( e , n , i , r ) { try { e && ( r || void 0 === r && c ( e ) ? h : u ) . call ( e , n , i = i || e ) } catch ( s ) { if ( s !== t . stop ) throw s } return i } function i ( t ) { return n ( t , function ( t , e ) { this [ e ] = t } , new t . constructor ) } var r = /^(statics|generics|preserve|enumerable|prototype|toString|valueOf)$/ , s = Object . prototype . toString , a = Array . prototype , o = a . slice , h = a . forEach || function ( t , e ) { for ( var n = 0 , i = this . length ; i > n ; n ++ ) t . call ( e , this [ n ] , n , this ) } , u = function ( t , e ) { for ( var n in this ) this . hasOwnProperty ( n ) && t . call ( e , this [ n ] , n , this ) } , c = Array . isArray = Array . isArray || function ( t ) { return "[object Array]" === s . call ( t ) } , l = Object . create || function ( t ) { return { _ _proto _ _ : t } } , d = 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 } , f = 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 } , _ = function ( t , e , n ) { return delete t [ e ] , f ( t , e , n ) } ; return e ( function ( ) { } , { inject : function ( t ) { if ( t ) { var n = this . prototype , i = Object . getPrototypeOf ( n ) . constructor , r = t . statics === ! 0 ? t : t . statics ; r != t && e ( n , t , t . enumerable , i && i . prototype , t . preserve , t . generics && this ) , e ( this , r , ! 0 , i , t . preserve ) } for ( var s = 1 , a = arguments . length ; a > s ; s ++ ) this . inject ( arguments [ s ] ) ; return this } , extend : function ( ) { for ( var t , n = this , i = 0 , r = arguments . length ; r > i && ! ( t = arguments [ i ] . initialize ) ; i ++ ) ; return t = t || function ( ) { n . apply ( this , arguments ) } , t . prototype = l ( this . prototype ) , _ ( t . prototype , "constructor" , { value : t , writable : ! 0 , configurable : ! 0 } ) , e ( t , this , ! 0 ) , arguments . length ? this . inject . apply ( t , arguments ) : t } } , ! 0 ) . inject ( { inject : function ( ) { for ( var t = 0 , n = arguments . length ; n > t ; t ++ ) e ( this , arguments [ t ] , arguments [ t ] . enumerable ) ; return this } , extend : function ( ) { var t = l ( this ) ; return t . inject . apply ( t , arguments ) } , each : function ( t , e ) { return n ( this , t , e ) } , clone : function ( ) { return i ( this ) } , statics : { each : n , clone : i , define : _ , describe : d , create : function ( t ) { return l ( t . prototype ) } , isPlainObject : function ( e ) { var n = null != e && e . constructor ; return n && ( n === Object || n === t || "Object" === n . name ) } , check : function ( t ) { return ! ( ! t && 0 !== t ) } , pick : function ( ) { for ( var t = 0 , e = arguments . length ; e > t ; t ++ ) if ( void 0 !== arguments [ t ] ) return arguments [ t ] ; return null } , stop : { } } } ) } ; "undefined" != typeof module && ( module . exports = t ) , t . inject ( { generics : ! 0 , clone : function ( ) { return new this . constructor ( this ) } , toString : function ( ) { return null != this . _id ? ( this . _class || "Object" ) + ( this . _name ? " '" + this . _name + "'" : " @" + this . _id ) : "{ " + t . 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 ( ", " ) + " }" } , exportJSON : function ( e ) { return t . exportJSON ( this , e ) } , toJSON : function ( ) { return t . serialize ( this ) } , _set : function ( e , n ) { if ( e && t . isPlainObject ( e ) ) { for ( var i in e ) ! ( e . hasOwnProperty ( i ) && i in this ) || n && n [ i ] || ( this [ i ] = e [ i ] ) ; return ! 0 } } , statics : { exports : { } , extend : function ee ( ) { var e = ee . base . apply ( this , arguments ) , n = e . prototype . _class ; return n && ! t . exports [ n ] && ( t . exports [ n ] = e ) , e } , equals : function ( e , n ) { function i ( t , e ) { for ( var n in t ) if ( t . hasOwnProperty ( n ) && void 0 === e [ n ] ) return ! 1 ; return ! 0 } if ( e === n ) return ! 0 ; if ( e && e . equals ) return e .
} , getTranslation : function ( ) { return new o ( 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 ) } } , new function ( ) { return t . each ( { scaleX : "_a" , scaleY : "_d" , translateX : "_tx" , translateY : "_ty" , shearX : "_b" , shearY : "_c" } , function ( e , n ) { n = t . capitalize ( n ) , this [ "get" + n ] = function ( ) { return this [ e ] } , this [ "set" + n ] = function ( t ) { this [ e ] = t } } , { } ) } ) , g = t . 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 o ( this . _px , this . _py ) } , getVector : function ( ) { return new o ( 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 , h , u , c , l ) { c || ( n -= t , i -= e , h -= r , u -= s ) ; var d = u * n - h * i ; if ( ! a . isZero ( d ) ) { var f = t - r , _ = e - s , g = ( h * _ - u * f ) / d , p = ( n * _ - i * f ) / d ; if ( ( l || g >= 0 && 1 >= g ) && ( l || p >= 0 && 1 >= p ) ) return new o ( 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 , a ) { a || ( n -= t , i -= e ) ; var o = i / n , h = e - o * t ; return ( s - o * r - h ) / Math . sqrt ( o * o + 1 ) } } } ) , p = r . extend ( { _class : "Project" , _list : "projects" , _reference : "project" , initialize : function ( t ) { r . call ( this , ! 0 ) , this . layers = [ ] , this . symbols = [ ] , this . _currentStyle = new F , this . activeLayer = new w , t && ( this . view = t instanceof V ? t : V . create ( t ) ) , this . _selectedItems = { } , this . _selectedItemCount = 0 , this . _drawCount = 0 , this . options = { } } , _serialize : function ( e , n ) { return t . serialize ( this . layers , e , ! 0 , n ) } , clear : function ( ) { for ( var t = this . layers . length - 1 ; t >= 0 ; t -- ) this . layers [ t ] . remove ( ) ; this . symbols = [ ] } , remove : function se ( ) { return se . base . call ( this ) ? ( this . view && this . view . remove ( ) , ! 0 ) : ! 1 } , getCurrentStyle : function ( ) { return this . _currentStyle } , setCurrentStyle : function ( t ) { this . _currentStyle . initialize ( t ) } , getIndex : function ( ) { return this . _index } , getSelectedItems : function ( ) { var t = [ ] ; for ( var e in this . _selectedItems ) { var n = this . _selectedItems [ e ] ; n . _drawCount === this . _drawCount && t . push ( n ) } return t } , _updateSelection : function ( t ) { t . _selected ? ( this . _selectedItemCount ++ , this . _selectedItems [ t . _id ] = t , t . isInserted ( ) && ( t . _drawCount = this . _drawCount ) ) : ( this . _selectedItemCount -- , delete this . _selectedItems [ t . _id ] ) } , selectAll : function ( ) { for ( var t = 0 , e = this . layers . length ; e > t ; t ++ ) this . layers [ t ] . setSelected ( ! 0 ) } , deselectAll : function ( ) { for ( var t in this . _selectedItems ) this . _selectedItems [ t ] . setSelected ( ! 1 ) } , hitTest : function ( e , n ) { e = o . read ( arguments ) , n = S . getOptions ( t . read ( arguments ) ) ; for ( var i = this . layers . length - 1 ; i >= 0 ; i -- ) { var r = this . layers [ i ] . hitTest ( e , n ) ; if ( r ) return r } return null } , importJSON : function ( e ) { return this . activate ( ) , t . importJSON ( e ) } , draw : function ( e , n ) { this . _drawCount ++ , e . save ( ) , n . applyToContext ( e ) ; for ( var i = t . merge ( { offset : new o ( 0 , 0 ) , transforms : [ n ] } ) , r = 0 , s = this . layers . length ; s > r ; r ++ ) this . layers [ r ] . draw ( e , i ) ; if ( e . restore ( ) , this . _selectedItemCount > 0 ) { e . save ( ) , e . strokeWidth = 1 ; for ( var a in this . _selectedItems ) { var h = this . _selectedItems [ a ] ; if ( h . _drawCount === this . _drawCount && ( h . _drawSelected || h . _boundsSelected ) ) { var u = h . getSelectedColor ( ) || h . getLayer ( ) . getSelectedColor ( ) ; e . strokeStyle = e . fillStyle = u ? u . toCanvasStyle ( e ) : "#009dec" ; var c = h . _globalMatrix ; if ( h . _drawSelected && h . _drawSelected ( e , c ) , h . _boundsSelected ) { var l = c . _transformCorners ( h . _getBounds ( "getBounds" ) ) ; e . be
} , _setSelected : function ( t , e ) { var n = this . _path , e = ! ! e , i = this . _selectionState || 0 , r = [ ! ! ( 4 & i ) , ! ! ( 1 & i ) , ! ! ( 2 & i ) ] ; if ( t == this . _point ) { if ( e ) r [ 1 ] = r [ 2 ] = ! 1 ; else { var s = this . getPrevious ( ) , a = this . getNext ( ) ; r [ 1 ] = s && ( s . _point . isSelected ( ) || s . _handleOut . isSelected ( ) ) , r [ 2 ] = a && ( a . _point . isSelected ( ) || a . _handleIn . isSelected ( ) ) } r [ 0 ] = e } else { var o = t == this . _handleIn ? 1 : 2 ; r [ o ] != e && ( e && ( r [ 0 ] = ! 1 ) , r [ o ] = e ) } this . _selectionState = ( r [ 0 ] ? 4 : 0 ) | ( r [ 1 ] ? 1 : 0 ) | ( r [ 2 ] ? 2 : 0 ) , n && i != this . _selectionState && ( n . _updateSelection ( this , i , this . _selectionState ) , n . _changed ( 33 ) ) } , isSelected : function ( ) { return this . _isSelected ( this . _point ) } , setSelected : function ( t ) { this . _setSelected ( this . _point , t ) } , getIndex : function ( ) { return void 0 !== this . _index ? this . _index : null } , getPath : function ( ) { return this . _path || null } , getCurve : function ( ) { var t = this . _path , e = this . _index ; return t ? ( t . _closed || e != t . _segments . length - 1 || e -- , t . getCurves ( ) [ e ] || null ) : null } , getLocation : function ( ) { var t = this . getCurve ( ) ; return t ? new z ( t , t . getNext ( ) ? 0 : 1 ) : null } , getNext : function ( ) { var t = this . _path && this . _path . _segments ; return t && ( t [ this . _index + 1 ] || this . _path . _closed && t [ 0 ] ) || null } , getPrevious : function ( ) { var t = this . _path && this . _path . _segments ; return t && ( t [ this . _index - 1 ] || this . _path . _closed && t [ t . length - 1 ] ) || null } , reverse : function ( ) { return new k ( this . _point , this . _handleOut , this . _handleIn ) } , remove : function ( ) { return this . _path ? ! ! this . _path . removeSegment ( this . _index ) : ! 1 } , clone : function ( ) { return new k ( this . _point , this . _handleIn , this . _handleOut ) } , equals : function ( t ) { return t === this || t && this . _point . equals ( t . _point ) && this . _handleIn . equals ( t . _handleIn ) && this . _handleOut . equals ( t . _handleOut ) || ! 1 } , toString : function ( ) { var t = [ "point: " + this . _point ] ; return this . _handleIn . isZero ( ) || t . push ( "handleIn: " + this . _handleIn ) , this . _handleOut . isZero ( ) || t . push ( "handleOut: " + this . _handleOut ) , "{ " + t . join ( ", " ) + " }" } , _transformCoordinates : function ( t , e , n ) { var i = this . _point , r = n && this . _handleIn . isZero ( ) ? null : this . _handleIn , s = n && this . _handleOut . isZero ( ) ? null : this . _handleOut , a = i . _x , o = i . _y , h = 2 ; return e [ 0 ] = a , e [ 1 ] = o , r && ( e [ h ++ ] = r . _x + a , e [ h ++ ] = r . _y + o ) , s && ( e [ h ++ ] = s . _x + a , e [ h ++ ] = s . _y + o ) , t && ( t . _transformCoordinates ( e , 0 , e , 0 , h / 2 ) , a = e [ 0 ] , o = e [ 1 ] , n ? ( i . _x = a , i . _y = o , h = 2 , r && ( r . _x = e [ h ++ ] - a , r . _y = e [ h ++ ] - o ) , s && ( s . _x = e [ h ++ ] - a , s . _y = e [ h ++ ] - o ) ) : ( r || ( e [ h ++ ] = a , e [ h ++ ] = o ) , s || ( e [ h ++ ] = a , e [ h ++ ] = o ) ) ) , e } } ) , P = o . extend ( { initialize : function ( t , e ) { var n , i , r ; t ? void 0 !== ( n = t [ 0 ] ) ? i = t [ 1 ] : ( void 0 === ( n = t . x ) && ( t = o . read ( arguments ) , n = t . x ) , i = t . y , r = t . selected ) : n = i = 0 , this . _x = n , this . _y = i , this . _owner = e , r && this . setSelected ( ! 0 ) } , set : function ( t , e ) { return this . _x = t , this . _y = e , this . _owner . _changed ( this ) , this } , getX : function ( ) { return this . _x } , setX : function ( t ) { this . _x = t , this . _owner . _changed ( this ) } , getY : function ( ) { return this . _y } , setY : function ( t ) { this . _y = t , this . _owner . _changed ( this ) } , isZero : function ( ) { return a . isZero ( this . _x ) && a . isZero ( this . _y ) } , setSelected : function ( t ) { this . _owner . _setSelected ( this , t ) } , isSelected : function ( ) { return this . _owner . _isSelected ( this ) } } ) , M = t . extend ( { _class : "Curve" , initialize : function ( t , e , n , i , r , s , a , o ) { var h = arguments . length ; if ( 3 === h ) this . _path = t , this . _segment1 = e , this . _segment2 = n ; else if ( 0 === h ) this . _segment1 = new k , this . _segment2 = new k ; else if ( 1 === h ) this . _segment1 = new k ( t . segment1 ) , this . _segment2 = new k ( t . segment2 ) ; else if ( 2 === h ) this . _segment1 = new k ( t ) , this . _segment2 = new k ( e ) ; else { var u , c , l , d ; 4 === h ? ( u = t , c = e , l = n , d = i ) : 8 === h && ( u = [ t , e ] , d = [ a , o ] , c = [ n - t , i - e ] , l = [ r - a , s - o ] ) , this . _segment1 = new k ( u , null , c ) , this . _segment2 = new k ( d , l , null ) } } , _changed : function ( ) { delete this . _length , delete this . _bounds } , getPoint1 : function ( ) { return this . _segment1 . _point } , setPoint1 : function ( t ) { t = o . read ( arguments ) , this . _segment1 . _point . set ( t . x , t . y ) } , getPoint2 : function ( ) { return this . _segment2 . _point } , setPoint2 : function ( t ) { t = o . read ( arguments ) , this . _segment2 . _point . set ( t . x , t . y ) } , getHandle1 : function ( ) { return this . _segment1 . _handleOut } , setHandle1 : function ( t ) { t = o . read ( arguments ) , this . _segment1 . _handleOut . set ( t . x , t . y ) } , getHandle2 : function ( ) { return this . _segment2 . _handleIn } , setHandle2 : function ( t ) { t = o . read ( arguments ) , this . _segment2 . _handleIn . set ( t . x , t . y ) } , getSegment1 : function ( ) { return this . _segment1 } , getSegment2 : function ( ) { return this . _segment2 } , getPat
if ( "boolean" == typeof u ) { n = h , i = u ; var c = a . add ( n ) . divide ( 2 ) , r = c . add ( c . subtract ( a ) . rotate ( i ? - 90 : 90 ) ) } else r = h , n = o . read ( arguments ) ; var l = new g ( a . add ( r ) . divide ( 2 ) , r . subtract ( a ) . rotate ( 90 ) , ! 0 ) , d = new g ( r . add ( n ) . divide ( 2 ) , n . subtract ( r ) . rotate ( 90 ) , ! 0 ) , f = l . intersect ( d , ! 0 ) , _ = new g ( a , n ) , p = _ . getSide ( r ) ; if ( ! f ) { if ( ! p ) return this . lineTo ( n ) ; throw Error ( "Cannot put an arc through the given points: " + [ a , r , n ] ) } var v = a . subtract ( f ) , m = v . getDirectedAngle ( n . subtract ( f ) ) , y = _ . getSide ( f ) ; 0 == y ? m = p * Math . abs ( m ) : p == y && ( m -= 360 * ( 0 > m ? - 1 : 1 ) ) ; for ( var w = Math . abs ( m ) , x = w >= 360 ? 4 : Math . ceil ( w / 90 ) , b = m / x , C = b * Math . PI / 360 , S = 4 / 3 * Math . sin ( C ) / ( 1 + Math . cos ( C ) ) , P = [ ] , M = 0 ; x >= M ; M ++ ) { var z = x > M ? f . add ( v ) : n , I = x > M ? v . rotate ( 90 ) . multiply ( S ) : null ; 0 == M ? s . setHandleOut ( I ) : P . push ( new k ( z , v . rotate ( - 90 ) . multiply ( S ) , I ) ) , v = v . rotate ( b ) } this . _add ( P ) } , lineBy : function ( t ) { t = o . read ( arguments ) ; var n = e ( this ) ; this . lineTo ( n . _point . add ( t ) ) } , curveBy : function ( t , n , i ) { t = o . read ( t ) , n = o . read ( n ) ; var r = e ( this ) . _point ; this . curveTo ( r . add ( t ) , r . add ( n ) , i ) } , arcBy : function ( t , n ) { t = o . read ( t ) , n = o . read ( n ) ; var i = e ( this ) . _point ; this . arcTo ( i . add ( t ) , i . add ( n ) ) } , closePath : function ( ) { var t = this . getFirstSegment ( ) , e = this . getLastSegment ( ) ; t . _point . equals ( e . _point ) && ( t . setHandleIn ( e . _handleIn ) , e . remove ( ) ) , this . setClosed ( ! 0 ) } } } , { _getBounds : function ( t , e ) { return A [ t ] ( this . _segments , this . _closed , this . getStyle ( ) , e ) } , statics : { isClockwise : function ( t ) { function e ( t , e ) { s && ( r += ( n - t ) * ( e + i ) ) , n = t , i = e , s = ! 0 } for ( var n , i , r = 0 , s = ! 1 , a = 0 , o = t . length ; o > a ; a ++ ) { var h = t [ a ] , u = t [ o > a + 1 ? a + 1 : 0 ] , c = h . _point , l = h . _handleOut , d = u . _handleIn , f = u . _point ; e ( c . _x , c . _y ) , e ( c . _x + l . _x , c . _y + l . _y ) , e ( f . _x + d . _x , f . _y + d . _y ) , e ( f . _x , f . _y ) } return r > 0 } , getBounds : function ( t , e , n , i , r ) { function s ( t ) { t . _transformCoordinates ( i , o , ! 1 ) ; for ( var e = 0 ; 2 > e ; e ++ ) M . _addBounds ( h [ e ] , h [ e + 4 ] , o [ e + 2 ] , o [ e ] , e , r ? r [ e ] : 0 , u , c , l ) ; var n = h ; h = o , o = n } var a = t [ 0 ] ; if ( ! a ) return new d ; for ( var o = Array ( 6 ) , h = a . _transformCoordinates ( i , Array ( 6 ) , ! 1 ) , u = h . slice ( 0 , 2 ) , c = u . slice ( ) , l = Array ( 2 ) , f = 1 , _ = t . length ; _ > f ; f ++ ) s ( t [ f ] ) ; return e && s ( a ) , new d ( u [ 0 ] , u [ 1 ] , c [ 0 ] - u [ 0 ] , c [ 1 ] - u [ 1 ] ) } , getStrokeBounds : function ( t , e , n , i ) { function r ( t , e ) { if ( ! e ) return [ t , t ] ; var n = e . shiftless ( ) , i = n . transform ( new o ( t , 0 ) ) , r = n . transform ( new o ( 0 , t ) ) , s = i . getAngleInRadians ( ) , a = i . getLength ( ) , h = r . getLength ( ) , u = Math . sin ( s ) , c = Math . cos ( s ) , l = Math . tan ( s ) , d = - Math . atan ( h * l / a ) , f = Math . atan ( h / ( l * a ) ) ; return [ Math . abs ( a * Math . cos ( d ) * c - h * Math . sin ( d ) * u ) , Math . abs ( h * Math . sin ( f ) * c + a * Math . cos ( f ) * u ) ] } function s ( t ) { _ = _ . include ( i ? i . _transformPoint ( t , t ) : t ) } function a ( t , e ) { "round" === e || ! t . _handleIn . isZero ( ) && ! t . _handleOut . isZero ( ) ? _ = _ . unite ( m . setCenter ( i ? i . _transformPoint ( t . _point ) : t . _point ) ) : A . _addSquareJoin ( t , e , l , v , s ) } function h ( t , e ) { switch ( e ) { case "round" : a ( t , e ) ; break ; case "butt" : case "square" : A . _addSquareCap ( t , e , l , s ) } } if ( ! n . getStrokeColor ( ) || ! n . getStrokeWidth ( ) ) return A . getBounds ( t , e , n , i ) ; for ( var c = t . length - ( e ? 0 : 1 ) , l = n . getStrokeWidth ( ) / 2 , f = r ( l , i ) , _ = A . getBounds ( t , e , n , i , f ) , g = n . getStrokeJoin ( ) , p = n . getStrokeCap ( ) , v = l * n . getMiterLimit ( ) , m = new d ( new u ( f ) . multiply ( 2 ) ) , y = 1 ; c > y ; y ++ ) a ( t [ y ] , g ) ; return e ? a ( t [ 0 ] , g ) : ( h ( t [ 0 ] , p ) , h ( t [ t . length - 1 ] , p ) ) , _ } , _addSquareJoin : function ( t , e , n , i , r , s ) { var a = t . getCurve ( ) , h = a . getPrevious ( ) , u = a . getPointAt ( 0 , ! 0 ) , c = h . getNormalAt ( 1 , ! 0 ) , l = a . getNormalAt ( 0 , ! 0 ) , d = c . getDirectedAngle ( l ) < 0 ? - n : n ; if ( c . setLength ( d ) , l . setLength ( d ) , s && ( r ( u ) , r ( u . add ( c ) ) ) , "miter" === e ) { var f = new g ( u . add ( c ) , new o ( - c . y , c . x ) , ! 0 ) . intersect ( new g ( u . add ( l ) , new o ( - l . y , l . x ) , ! 0 ) , ! 0 ) ; if ( f && u . getDistance ( f ) <= i && ( r ( f ) , ! s ) ) return } s || r ( u . add ( c ) ) , r ( u . add ( l ) ) } , _addSquareCap : function ( t , e , n , i , r ) { var s = t . _point , a = t . getLocation ( ) , o = a . getNormal ( ) . normalize ( n ) ; r && ( i ( s . subtract ( o ) ) , i ( s . add ( o ) ) ) , "square" === e && ( s = s . add ( o . rotate ( 0 == a . getParameter ( ) ? - 90 : 90 ) ) ) , i ( s . add ( o ) ) , i ( s . subtract ( o ) ) } , getHandleBounds : function ( t , e , n , i , r , s ) { var a = Array ( 6 ) , o = 1 / 0 , h = - o , u = o , c = h ; r = r / 2 || 0 , s = s / 2 || 0 ; for ( var l = 0 , f = t . length ; f > l ; l ++ ) { var _ = t [ l ] ; _ . _transformCoordinates ( i , a , ! 1 ) ; for ( var g = 0 ; 6 > g ; g += 2 ) { var p = 0 == g ? s : r , v = a [ g ] , m = a [ g + 1 ] , y = v - p , w = v + p , x = m - p , b = m + p ; o > y && ( o = y ) , w > h && ( h = w ) , u > x && ( u = x ) , b > c && ( c = b ) } } return new d ( o , u , h - o , c - u ) } , getRoughBounds : function ( t , e , n , i ) { var r = n . getStrokeColor ( ) ? n . getStrokeWidth ( ) : 0 , s = r ; return r > 0 && ( "miter" === n . getStrokeJoin ( ) && ( s = r * n . getMiterLimit ( ) ) , " square
} , stop : function ( t ) { q . stopPropagation ( t ) , q . preventDefault ( t ) } } ; q . requestAnimationFrame = new function ( ) { var t = "equestAnimationFrame" , e = window [ "r" + t ] || window [ "webkitR" + t ] || window [ "mozR" + t ] || window [ "oR" + t ] || window [ "msR" + t ] ; e && e ( function ( t ) { null == t && ( e = null ) } ) ; var i , r = [ ] , s = ! 0 ; return q . add ( window , { focus : function ( ) { s = ! 0 } , blur : function ( ) { s = ! 1 } } ) , function ( t , a ) { return e ? e ( t , a ) : ( r . push ( [ t , a ] ) , i || ( i = setInterval ( function ( ) { for ( var t = r . length - 1 ; t >= 0 ; t -- ) { var e = r [ t ] , i = e [ 0 ] , a = e [ 1 ] ; ( ! a || ( "true" == n . getAttribute ( a , "keepalive" ) || s ) && R . isInView ( a ) ) && ( r . splice ( t , 1 ) , i ( Date . now ( ) ) ) } } , 1e3 / 60 ) ) , void 0 ) } } ; var V = t . extend ( e , { _class : "View" , initialize : function Se ( t ) { this . _scope = paper , this . _project = paper . project , this . _element = t ; var e ; if ( this . _id = t . getAttribute ( "id" ) , null == this . _id && t . setAttribute ( "id" , this . _id = "view-" + Se . _id ++ ) , q . add ( t , this . _viewHandlers ) , n . hasAttribute ( t , "resize" ) ) { var i = R . getOffset ( t , ! 0 ) , r = this ; e = R . getViewportBounds ( t ) . getSize ( ) . subtract ( i ) , this . _windowHandlers = { resize : function ( ) { R . isInvisible ( t ) || ( i = R . getOffset ( t , ! 0 ) ) , r . setViewSize ( R . getViewportBounds ( t ) . getSize ( ) . subtract ( i ) ) } } , q . add ( window , this . _windowHandlers ) } else e = new u ( parseInt ( t . getAttribute ( "width" ) , 10 ) , parseInt ( t . getAttribute ( "height" ) , 10 ) ) , e . isNaN ( ) && ( e = R . getSize ( t ) ) ; if ( t . width = e . width , t . height = e . height , n . hasAttribute ( t , "stats" ) && "undefined" != typeof Stats ) { this . _stats = new Stats ; var s = this . _stats . domElement , a = s . style , i = R . getOffset ( t ) ; a . position = "absolute" , a . left = i . x + "px" , a . top = i . y + "px" , document . body . appendChild ( s ) } Se . _views . push ( this ) , Se . _viewsById [ this . _id ] = this , this . _viewSize = new c ( e . width , e . height , this , "setViewSize" ) , this . _matrix = new _ , this . _zoom = 1 , Se . _focused || ( Se . _focused = this ) , this . _frameItems = { } , this . _frameItemCount = 0 } , remove : function ( ) { return this . _project ? ( V . _focused == this && ( V . _focused = null ) , V . _views . splice ( V . _views . indexOf ( this ) , 1 ) , delete V . _viewsById [ this . _id ] , this . _project . view == this && ( this . _project . view = null ) , q . remove ( this . _element , this . _viewHandlers ) , q . remove ( window , this . _windowHandlers ) , this . _element = this . _project = null , this . detach ( "frame" ) , this . _frameItems = { } , ! 0 ) : ! 1 } , _events : { onFrame : { install : function ( ) { this . _requested || ( this . _animate = ! 0 , this . _requestFrame ( ) ) } , uninstall : function ( ) { this . _animate = ! 1 } } , onResize : { } } , _animate : ! 1 , _time : 0 , _count : 0 , _requestFrame : function ( ) { var t = this ; q . requestAnimationFrame ( function ( ) { t . _requested = ! 1 , t . _animate && ( t . _requestFrame ( ) , t . _handleFrame ( ) ) } , this . _element ) , this . _requested = ! 0 } , _handleFrame : function ( ) { paper = this . _scope ; var e = Date . now ( ) / 1e3 , n = this . _before ? e - this . _before : 0 ; this . _before = e , this . _handlingFrame = ! 0 , this . fire ( "frame" , t . merge ( { delta : n , time : this . _time += n , count : this . _count ++ } ) ) , this . _stats && this . _stats . update ( ) , this . _handlingFrame = ! 1 , this . draw ( ! 0 ) } , _animateItem : function ( t , e ) { var n = this . _frameItems ; e ? ( n [ t . _id ] = { item : t , time : 0 , count : 0 } , 1 === ++ this . _frameItemCount && this . attach ( "frame" , this . _handleFrameItems ) ) : ( delete n [ t . _id ] , 0 === -- this . _frameItemCount && this . detach ( "frame" , this . _handleFrameItems ) ) } , _handleFrameItems : function ( e ) { for ( var n in this . _frameItems ) { var i = this . _frameItems [ n ] ; i . item . fire ( "frame" , t . merge ( e , { time : i . time += e . delta , count : i . count ++ } ) ) } } , _redraw : function ( ) { this . _project . _needsRedraw = ! 0 , this . _handlingFrame || ( this . _animate ? this . _handleFrame ( ) : this . draw ( ) ) } , _transform : function ( t ) { this . _matrix . concatenate ( t ) , this . _bounds = null , this . _inverse = null , this . _redraw ( ) } , getElement : function ( ) { return this . _element } , getViewSize : function ( ) { return this . _viewSize } , setViewSize : function ( t ) { t = u . read ( arguments ) ; var e = t . subtract ( this . _viewSize ) ; e . isZero ( ) || ( this . _element . width = t . width , this . _element . height = t . height , this . _viewSize . set ( t . width , t . height , ! 0 ) , this . _bounds = null , this . fire ( "resize" , { size : t , delta : e } ) , this . _redraw ( ) ) } , getBounds : function ( ) { return this . _bounds || ( this . _bounds = this . _getInverse ( ) . _transformBounds ( new d ( new o , this . _viewSize ) ) ) , this . _bounds } , getSize : function ( ) { return this . getBounds ( ) . getSize ( arguments [ 0 ] ) } , getCenter : function ( ) { return this . getBounds ( ) . getCenter ( arguments [ 0 ] ) } , setCenter : function ( t ) { t = o . read ( arguments ) , this . scrollBy ( t . subtract ( this . getCenter ( ) ) ) } , getZoom : function ( ) { return this . _zoom } , setZoom : function ( t )
} function i ( n , i ) { for ( var r = e ( n . range [ 0 ] ) , a = e ( n . range [ 1 ] ) , o = 0 , h = s . length - 1 ; h >= 0 ; h -- ) if ( r > s [ h ] [ 0 ] ) { o = h + 1 ; break } s . splice ( o , 0 , [ r , i . length - a + r ] ) , t = t . substring ( 0 , r ) + i + t . substring ( a ) } function r ( t ) { if ( t && ( "MemberExpression" !== t . type || ! t . computed ) ) { for ( var e in t ) if ( "range" !== e ) { var s = t [ e ] ; if ( Array . isArray ( s ) ) for ( var a = 0 , o = s . length ; o > a ; a ++ ) r ( s [ a ] ) ; else s && "object" == typeof s && r ( s ) } switch ( t && t . type ) { case "BinaryExpression" : if ( t . operator in binaryOperators && "Literal" !== t . left . type ) { var h = n ( t . left ) , u = n ( t . right ) ; i ( t , "_$_(" + h + ', "' + t . operator + '", ' + u + ")" ) } break ; case "AssignmentExpression" : if ( /^.=$/ . test ( t . operator ) && "Literal" !== t . left . type ) { var h = n ( t . left ) , u = n ( t . right ) ; i ( t , h + " = _$_(" + h + ', "' + t . operator [ 0 ] + '", ' + u + ")" ) } break ; case "UpdateExpression" : if ( ! t . prefix ) { var c = n ( t . argument ) ; i ( t , c + " = _$_(" + c + ', "' + t . operator [ 0 ] + '", 1)' ) } break ; case "UnaryExpression" : if ( t . operator in unaryOperators && "Literal" !== t . argument . type ) { var c = n ( t . argument ) ; i ( t , '$_("' + t . operator + '", ' + c + ")" ) } } } } var s = [ ] ; return r ( scope . acorn . parse ( t , { ranges : ! 0 } ) ) , t } function evaluate ( code , scope ) { paper = scope ; var view = scope . project && scope . project . view , res ; with ( scope ) ! function ( ) { var onActivate , onDeactivate , onEditOptions , onMouseDown , onMouseUp , onMouseDrag , onMouseMove , onKeyDown , onKeyUp , onFrame , onResize ; res = eval ( compile ( code ) ) , /on(?:Key|Mouse)(?:Up|Down|Move|Drag)/ . test ( code ) && Base . each ( paper . Tool . prototype . _events , function ( key ) { var value = eval ( key ) ; value && ( scope . getTool ( ) [ key ] = value ) } ) , view && ( view . setOnResize ( onResize ) , view . fire ( "resize" , { size : view . size , delta : new Point } ) , view . setOnFrame ( onFrame ) , view . draw ( ) ) } . call ( scope ) ; return res } function request ( t , e ) { var n = new ( window . ActiveXObject || XMLHttpRequest ) ( "Microsoft.XMLHTTP" ) ; return n . open ( "GET" , t , ! 0 ) , n . overrideMimeType && n . overrideMimeType ( "text/plain" ) , n . onreadystatechange = function ( ) { return 4 === n . readyState ? evaluate ( n . responseText , e ) : void 0 } , n . send ( null ) } function load ( ) { for ( var t = document . getElementsByTagName ( "script" ) , e = 0 , n = t . length ; n > e ; e ++ ) { var i = t [ e ] ; if ( /^text\/(?:x-|)paperscript$/ . test ( i . type ) && ! i . getAttribute ( "data-paper-ignore" ) ) { var r = PaperScope . getAttribute ( i , "canvas" ) , s = PaperScope . get ( r ) || new PaperScope ( i ) . setup ( r ) ; i . src ? request ( i . src , s ) : evaluate ( i . innerHTML , s ) , i . setAttribute ( "data-paper-ignore" , ! 0 ) } } } var Base = paper . Base , PaperScope = paper . PaperScope , exports , define , scope = this ; ! function ( t , e ) { return "object" == typeof exports && "object" == typeof module ? e ( exports ) : "function" == typeof define && define . amd ? define ( [ "exports" ] , e ) : ( e ( t . acorn || ( t . acorn = { } ) ) , void 0 ) } ( this , function ( t ) { "use strict" ; function e ( t ) { le = t || { } ; for ( var e in ge ) Object . prototype . hasOwnProperty . call ( le , e ) || ( le [ e ] = ge [ e ] ) ; _e = le . sourceFile || null } function n ( t , e ) { var n = pe ( de , t ) ; e += " (" + n . line + ":" + n . column + ")" ; var i = new SyntaxError ( e ) ; throw i . pos = t , i . loc = n , i . raisedAt = ve , i } function i ( t ) { function e ( t ) { if ( 1 == t . length ) return n += "return str === " + JSON . stringify ( t [ 0 ] ) + ";" ; n += "switch(str){" ; for ( var e = 0 ; e < t . length ; ++ e ) n += "case " + JSON . stringify ( t [ e ] ) + ":" ; n += "return true}return false;" } t = t . split ( " " ) ; var n = "" , i = [ ] ; t : for ( var r = 0 ; r < t . length ; ++ r ) { for ( var s = 0 ; s < i . length ; ++ s ) if ( i [ s ] [ 0 ] . length == t [ r ] . length ) { i [ s ] . push ( t [ r ] ) ; continue t } i . push ( [ t [ r ] ] ) } if ( i . length > 3 ) { i . sort ( function ( t , e ) { return e . length - t . length } ) , n += "switch(str.length){" ; for ( var r = 0 ; r < i . length ; ++ r ) { var a = i [ r ] ; n += "case " + a [ 0 ] . length + ":" , e ( a ) } n += "}" } else e ( t ) ; return Function ( "str" , n ) } function r ( ) { this . line = ke , this . column = ve - Pe } function s ( ) { ke = 1 , ve = Pe = 0 , Se = ! 0 , u ( ) } function a ( t , e ) { ye = ve , le . locations && ( xe = new r ) , be = t , u ( ) , Ce = e , Se = t . beforeExpr } function o ( ) { var t = le . onComment && le . locations && new r , e = ve , i = de . indexOf ( "*/" , ve += 2 ) ; if ( - 1 === i && n ( ve - 2 , "Unterminated comment" ) , ve = i + 2 , le . locations ) { Yn . lastIndex = e ; for ( var s ; ( s = Yn . exec ( de ) ) && s . index < ve ; ) ++ ke , Pe = s . index + s [ 0 ] . length } le . onComment && le . onComment ( ! 0 , de . slice ( e + 2 , i ) , e , ve , t , le . locations && new r ) } function h ( ) { for ( var t = ve , e = le . onComment && le . locations && new r , n = de . charCodeAt ( ve += 2 ) ; fe > ve && 10 !== n && 13 !== n && 8232 !== n && 8329 !== n ; ) ++ ve , n = de . charCodeAt ( ve ) ; le . onComment && le . onComment ( ! 1 , de . slice ( t + 2 , ve ) , t , ve , e , le . locations && new r ) } function u ( ) { for ( ; fe > ve ; ) { var t = de . charCodeAt ( ve ) ; if ( 32 === t ) ++ ve ; else if ( 13 === t ) {