| 
					
				 | 
			
			
				@@ -399,16 +399,39 @@ fn: function (anArray){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function $TrappedProcessor(){return smalltalk.TrappedProcessor||(typeof TrappedProcessor=="undefined"?nil:TrappedProcessor)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-var $1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var $2,$3,$1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $1=self._new_(_st(anArray)._collect_((function(each){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.withContext(function($ctx2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$2=_st(each)._isString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if(smalltalk.assert($2)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return _st($TrappedProcessor())._perform_(each); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var selector,args; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector=""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args=[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st(each)._withIndexDo_((function(element,index){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx3) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$3=_st(index)._odd(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if(smalltalk.assert($3)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector=_st(selector).__comma(element); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx3.sendIdx[","]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return selector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector=_st(selector).__comma(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st(args)._add_(element); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx3) {$ctx3.fillBlock({element:element,index:index},$ctx2,4)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st($TrappedProcessor())._perform_withArguments_(selector,args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return $1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }, function($ctx1) {$ctx1.fill(self,"newFromProcessorSpecs:",{anArray:anArray},smalltalk.TrappedDataChain.klass)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 args: ["anArray"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-source: "newFromProcessorSpecs: anArray\x0a\x09^self new: (anArray collect: [ :each | TrappedProcessor perform: each ])", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-messageSends: ["new:", "collect:", "perform:"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "newFromProcessorSpecs: anArray\x0a\x09^self new: (anArray collect: [ :each | each isString\x0a\x09\x09ifTrue: [ TrappedProcessor perform: each ]\x0a\x09\x09ifFalse: [\x0a\x09\x09\x09| selector args |\x0a\x09\x09\x09selector := ''.\x0a\x09\x09\x09args := #().\x0a\x09\x09\x09each withIndexDo: [ :element :index | index odd\x0a\x09\x09\x09\x09ifTrue: [ selector := selector, element ]\x0a\x09\x09\x09\x09ifFalse: [ selector := selector, ':'. args add: element ] ].\x0a\x09\x09\x09TrappedProcessor perform: selector withArguments: args ] ])", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["new:", "collect:", "ifTrue:ifFalse:", "isString", "perform:", "withIndexDo:", "odd", ",", "add:", "perform:withArguments:"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 referencedClasses: ["TrappedProcessor"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.TrappedDataChain.klass); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -579,6 +602,25 @@ referencedClasses: ["TrappedProcessorWhenSubmitted"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.TrappedProcessor.klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "widget:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+category: 'factory', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (aString){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function $TrappedProcessorWidget(){return smalltalk.TrappedProcessorWidget||(typeof TrappedProcessorWidget=="undefined"?nil:TrappedProcessorWidget)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var $1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$1=_st($TrappedProcessorWidget())._new_(aString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return $1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx1) {$ctx1.fill(self,"widget:",{aString:aString},smalltalk.TrappedProcessor.klass)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args: ["aString"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "widget: aString\x0a\x09^TrappedProcessorWidget new: aString", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["new:"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: ["TrappedProcessorWidget"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.TrappedProcessor.klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.addClass('TrappedProcessorBlackboard', smalltalk.TrappedProcessor, [], 'Trapped-Frontend'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.TrappedProcessorBlackboard.comment="I am used internally to fetch data from blackboard\x0aor write it back."; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -800,6 +842,104 @@ smalltalk.TrappedProcessorWhenSubmitted); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addClass('TrappedStoppingProcessor', smalltalk.TrappedProcessor, [], 'Trapped-Frontend'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.TrappedStoppingProcessor.comment="I do not proceed in toView: nor in toModel:\x0a\x0aI am therefore only interesting for my side-effects from install step."; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "toModel:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+category: 'data transformation', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (aDataCarrier){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return self}, function($ctx1) {$ctx1.fill(self,"toModel:",{aDataCarrier:aDataCarrier},smalltalk.TrappedStoppingProcessor)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args: ["aDataCarrier"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "toModel: aDataCarrier\x0a\x09\x22stop\x22", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.TrappedStoppingProcessor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "toView:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+category: 'data transformation', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (aDataCarrier){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier},smalltalk.TrappedStoppingProcessor)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args: ["aDataCarrier"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "toView: aDataCarrier\x0a\x09\x22stop\x22", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.TrappedStoppingProcessor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addClass('TrappedProcessorWidget', smalltalk.TrappedStoppingProcessor, ['viewName'], 'Trapped-Frontend'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.TrappedProcessorWidget.comment="When installed, I insert a widget instance of the class specified when creating me."; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "installToView:toModel:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+category: 'installation', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (aDataCarrier,anotherDataCarrier){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var $1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$1=_st(anotherDataCarrier)._target(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx1.sendIdx["target"]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st($1)._do_((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st(_st(aDataCarrier)._target())._with_(_st(_st(_st($Smalltalk())._current())._at_(self["@viewName"]))._new()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return self}, function($ctx1) {$ctx1.fill(self,"installToView:toModel:",{aDataCarrier:aDataCarrier,anotherDataCarrier:anotherDataCarrier},smalltalk.TrappedProcessorWidget)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args: ["aDataCarrier", "anotherDataCarrier"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "installToView: aDataCarrier toModel: anotherDataCarrier\x0a\x09anotherDataCarrier target do: [ aDataCarrier target with: (Smalltalk current at: viewName) new ]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["do:", "target", "with:", "new", "at:", "current"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: ["Smalltalk"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.TrappedProcessorWidget); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "viewName:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+category: 'accessing', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (aString){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+self["@viewName"]=aString; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return self}, function($ctx1) {$ctx1.fill(self,"viewName:",{aString:aString},smalltalk.TrappedProcessorWidget)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args: ["aString"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "viewName: aString\x0a\x09viewName := aString", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.TrappedProcessorWidget); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "new:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+category: 'instance creation', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (aString){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var $2,$3,$1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$2=self._new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st($2)._viewName_(aString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$3=_st($2)._yourself(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$1=$3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return $1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx1) {$ctx1.fill(self,"new:",{aString:aString},smalltalk.TrappedProcessorWidget.klass)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args: ["aString"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "new: aString\x0a\x09^self new\x0a\x09\x09viewName: aString;\x0a\x09\x09yourself", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["viewName:", "new", "yourself"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.TrappedProcessorWidget.klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.addClass('TrappedSingleton', smalltalk.Object, [], 'Trapped-Frontend'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.method({ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -926,6 +1066,39 @@ referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.Trapped); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "injectToJQuery:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+category: 'action', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (aJQuery){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function $Trapped(){return smalltalk.Trapped||(typeof Trapped=="undefined"?nil:Trapped)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function $HTMLCanvas(){return smalltalk.HTMLCanvas||(typeof HTMLCanvas=="undefined"?nil:HTMLCanvas)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st(_st(aJQuery)._find_("[data-trap]"))._each_((function(index,elem){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var jq,parsed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+jq=_st(elem)._asJQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+jq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+parsed=_st($Trapped())._parse_(_st(jq)._attr_("data-trap")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+parsed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st(parsed)._do_((function(rule){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx3) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st(_st(_st($HTMLCanvas())._onJQuery_(jq))._root())._trap_processors_(_st(rule)._first(),_st(rule)._at_ifAbsent_((2),(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx4) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx4) {$ctx4.fillBlock({},$ctx3,3)})}))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx3) {$ctx3.fillBlock({rule:rule},$ctx2,2)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st(jq)._removeAttr_("data-trap"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx2) {$ctx2.fillBlock({index:index,elem:elem,jq:jq,parsed:parsed},$ctx1,1)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return self}, function($ctx1) {$ctx1.fill(self,"injectToJQuery:",{aJQuery:aJQuery},smalltalk.Trapped)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args: ["aJQuery"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "injectToJQuery: aJQuery\x0a\x09(aJQuery find: '[data-trap]') each: [ :index :elem |\x0a\x09\x09| jq parsed |\x0a\x09\x09jq := elem asJQuery.\x0a\x09\x09parsed := Trapped parse: (jq attr: 'data-trap').\x0a\x09\x09parsed do: [ :rule |\x0a\x09\x09\x09(HTMLCanvas onJQuery: jq) root trap: rule first processors: (rule at: 2 ifAbsent: [#()]) ].\x0a\x09\x09jq removeAttr: 'data-trap' ]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["each:", "find:", "asJQuery", "parse:", "attr:", "do:", "trap:processors:", "root", "onJQuery:", "first", "at:ifAbsent:", "removeAttr:"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: ["Trapped", "HTMLCanvas"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.Trapped); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 selector: "register:", 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -964,54 +1137,17 @@ selector: "start:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 category: 'action', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fn: function (args){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function $Trapped(){return smalltalk.Trapped||(typeof Trapped=="undefined"?nil:Trapped)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-var $1,$2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 _st(args)._do_((function(each){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.withContext(function($ctx2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return self._register_(each); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$1="[data-trap]"._asJQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$ctx1.sendIdx["asJQuery"]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-_st($1)._each_((function(index,elem){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-var trap,jq,viewName,modelName,tokens,path; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return smalltalk.withContext(function($ctx2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-jq=_st(elem)._asJQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-jq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-trap=_st(jq)._attr_("data-trap"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-trap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-tokens=_st(trap)._tokenize_(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$ctx2.sendIdx["tokenize:"]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-tokens; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$2=_st(_st(tokens)._size()).__eq((1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if(smalltalk.assert($2)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-tokens=_st(["TrappedDumbView"]).__comma(tokens); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$ctx2.sendIdx[","]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-tokens; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-viewName=_st(tokens)._first(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$ctx2.sendIdx["first"]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-viewName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-tokens=_st(_st(_st(tokens)._second())._tokenize_(" "))._select_((function(each){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return smalltalk.withContext(function($ctx3) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return _st(each)._notEmpty(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,4)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-tokens; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-modelName=_st(tokens)._first(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-modelName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-path=_st($Trapped())._parse_(_st(tokens)._allButFirst()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-path; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return _st(_st([modelName]).__comma(path))._trapDescend_((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return smalltalk.withContext(function($ctx3) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return _st(_st(_st(_st($Smalltalk())._current())._at_(viewName))._new())._appendToJQuery_(jq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}, function($ctx3) {$ctx3.fillBlock({},$ctx2,5)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}, function($ctx2) {$ctx2.fillBlock({index:index,elem:elem,trap:trap,jq:jq,viewName:viewName,modelName:modelName,tokens:tokens,path:path},$ctx1,2)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+self._injectToJQuery_("body"._asJQuery()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return self}, function($ctx1) {$ctx1.fill(self,"start:",{args:args},smalltalk.Trapped)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 args: ["args"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-source: "start: args\x0a    args do: [ :each | self register: each ].\x0a\x09'[data-trap]' asJQuery each: [ :index :elem |\x0a    \x09| trap jq viewName modelName tokens path |\x0a        jq := elem asJQuery.\x0a        trap := jq attr: 'data-trap'.\x0a        tokens := trap tokenize: ':'.\x0a        tokens size = 1 ifTrue: [ tokens := { 'TrappedDumbView' }, tokens ].\x0a        viewName := tokens first.\x0a        tokens := (tokens second tokenize: ' ') select: [ :each | each notEmpty ].\x0a        modelName := tokens first.\x0a        path := Trapped parse: tokens allButFirst.\x0a        { modelName }, path trapDescend: [(Smalltalk current at: viewName) new appendToJQuery: jq].\x0a    ]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-messageSends: ["do:", "register:", "each:", "asJQuery", "attr:", "tokenize:", "ifTrue:", "=", "size", ",", "first", "select:", "second", "notEmpty", "parse:", "allButFirst", "trapDescend:", "appendToJQuery:", "new", "at:", "current"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-referencedClasses: ["Trapped", "Smalltalk"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "start: args\x0a\x09args do: [ :each | self register: each ].\x0a\x09self injectToJQuery: 'body' asJQuery", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["do:", "register:", "injectToJQuery:", "asJQuery"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.Trapped); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1074,33 +1210,102 @@ smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 selector: "parse:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 category: 'accessing', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fn: function (anArray){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (aString){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-var $2,$3,$1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$1=_st(anArray)._collect_((function(each){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-var asNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var $2,$3,$4,$5,$7,$6,$8,$9,$10,$1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$2=_st(aString)._tokenize_("."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx1.sendIdx["tokenize:"]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$1=_st($2)._collect_((function(rule){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.withContext(function($ctx2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-asNum=_st(each)._asNumber(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$3=_st(rule)._tokenize_(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx2.sendIdx["tokenize:"]=2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st($3)._collect_((function(message){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var result,stack,anArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx3) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+anArray=_st(message)._tokenize_(" "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+anArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+result=[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+stack=[result]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+stack; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st(anArray)._do_((function(each){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var asNum,inner,close; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx4) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+close=(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+close; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+inner=each; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+inner; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx5) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$4=_st(inner)._notEmpty(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx5.sendIdx["notEmpty"]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st($4)._and_((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx6) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st(_st(inner)._first()).__eq("("); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx6.sendIdx["="]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx6) {$ctx6.fillBlock({},$ctx5,5)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx5.sendIdx["and:"]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx5) {$ctx5.fillBlock({},$ctx4,4)})}))._whileTrue_((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx5) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+inner=_st(inner)._allButFirst(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+inner; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$5=stack; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$7=_st(stack)._last(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx5.sendIdx["last"]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$6=_st($7)._add_([]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx5.sendIdx["add:"]=2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st($5)._add_($6); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx5.sendIdx["add:"]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx5) {$ctx5.fillBlock({},$ctx4,6)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx4.sendIdx["whileTrue:"]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx5) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st(_st(inner)._notEmpty())._and_((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx6) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$8=_st(inner)._last(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx6.sendIdx["last"]=2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st($8).__eq(")"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx6.sendIdx["="]=2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx6) {$ctx6.fillBlock({},$ctx5,8)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx5) {$ctx5.fillBlock({},$ctx4,7)})}))._whileTrue_((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx5) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+inner=_st(inner)._allButLast(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+inner; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+close=_st(close).__plus((1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return close; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx5) {$ctx5.fillBlock({},$ctx4,9)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+asNum=_st(_st(inner)._ifEmpty_((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx5) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return "NaN"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx5) {$ctx5.fillBlock({},$ctx4,10)})})))._asNumber(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 asNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$2=_st(asNum).__eq(asNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$ctx2.sendIdx["="]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if(smalltalk.assert($2)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return asNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$3=_st(_st(each)._first()).__eq("#"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if(smalltalk.assert($3)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return [_st(each)._allButFirst()]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$9=_st(asNum).__eq(asNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if(smalltalk.assert($9)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$10=_st(stack)._last(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx4.sendIdx["last"]=3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st($10)._add_(asNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx4.sendIdx["add:"]=3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return each; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st(inner)._ifNotEmpty_((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx5) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st(_st(stack)._last())._add_(inner); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx5) {$ctx5.fillBlock({},$ctx4,13)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}, function($ctx2) {$ctx2.fillBlock({each:each,asNum:asNum},$ctx1,1)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st(close)._timesRepeat_((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx5) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st(stack)._removeLast(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx5) {$ctx5.fillBlock({},$ctx4,14)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx4) {$ctx4.fillBlock({each:each,asNum:asNum,inner:inner,close:close},$ctx3,3)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx3) {$ctx3.fillBlock({message:message,result:result,stack:stack,anArray:anArray},$ctx2,2)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx2) {$ctx2.fillBlock({rule:rule},$ctx1,1)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ctx1.sendIdx["collect:"]=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return $1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}, function($ctx1) {$ctx1.fill(self,"parse:",{anArray:anArray},smalltalk.Trapped.klass)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-args: ["anArray"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-source: "parse: anArray\x0a\x09^anArray collect: [ :each |\x0a    \x09| asNum |\x0a       \x09asNum := each asNumber.\x0a        asNum = asNum ifTrue: [ asNum ] ifFalse: [\x0a\x09\x09\x09each first = '#' ifTrue: [ { each allButFirst } ] ifFalse: [ each ]]]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-messageSends: ["collect:", "asNumber", "ifTrue:ifFalse:", "=", "first", "allButFirst"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx1) {$ctx1.fill(self,"parse:",{aString:aString},smalltalk.Trapped.klass)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args: ["aString"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "parse: aString\x0a\x09^ (aString tokenize: '.') collect: [ :rule |\x0a\x09\x09(rule tokenize: ':') collect: [ :message |\x0a\x09\x09\x09| result stack anArray |\x0a\x09\x09\x09anArray := message tokenize: ' '.\x0a\x09\x09\x09result := #().\x0a\x09\x09\x09stack := { result }.\x0a\x09\x09\x09anArray do: [ :each |\x0a    \x09\x09\x09| asNum inner close |\x0a\x09\x09\x09\x09close := 0.\x0a\x09\x09\x09\x09inner := each.\x0a\x09\x09\x09\x09[ inner notEmpty and: [ inner first = '(' ]] whileTrue: [ inner := inner allButFirst. stack add: (stack last add: #()) ].\x0a\x09\x09\x09\x09[ inner notEmpty and: [ inner last = ')' ]] whileTrue: [ inner := inner allButLast. close := close + 1 ].\x0a\x09\x09       \x09asNum := (inner ifEmpty: [ 'NaN' ]) asNumber.\x0a        \x09\x09asNum = asNum ifTrue: [ stack last add: asNum ] ifFalse: [\x0a\x09\x09\x09\x09\x09inner ifNotEmpty: [ stack last add: inner ] ].\x0a\x09\x09\x09\x09close timesRepeat: [ stack removeLast ] ].\x0a\x09\x09\x09result ] ]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["collect:", "tokenize:", "do:", "whileTrue:", "and:", "notEmpty", "=", "first", "allButFirst", "add:", "last", "allButLast", "+", "asNumber", "ifEmpty:", "ifTrue:ifFalse:", "ifNotEmpty:", "timesRepeat:", "removeLast"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.Trapped.klass); 
			 |