var Class=function(properties){var klass=function(){for(var p in this){if(this[p])this[p]._proto_=this;}
if(arguments[0]!='noinit'&&this.initialize)return this.initialize.apply(this,arguments);};klass.extend=this.extend;klass.implement=this.implement;klass.prototype=properties;return klass;};Class.empty=function(){};Class.create=function(properties){return new Class(properties);};Class.prototype={extend:function(properties){var pr0t0typ3=new this('noinit');for(var property in properties){var previous=pr0t0typ3[property];var current=properties[property];if(previous&&previous!=current)current=previous.parentize(current)||current;pr0t0typ3[property]=current;}
return new Class(pr0t0typ3);},implement:function(properties){for(var property in properties)this.prototype[property]=properties[property];}};Object.Native=function(){for(var i=0;i<arguments.length;i++)arguments[i].extend=Class.prototype.implement;};new Object.Native(Function,Array,String,Number);Function.extend({parentize:function(current){var previous=this;return function(){this.parent=previous;return current.apply(this,arguments);};}});