(function(global_object) { "use strict"; // @note // A few conventions for the documentation of this file: // 1. Always use "//" (in contrast with "/**/") // 2. The syntax used is Yardoc (yardoc.org), which is intended for Ruby (se below) // 3. `@param` and `@return` types should be preceded by `JS.` when referring to // JavaScript constructors (e.g. `JS.Function`) otherwise Ruby is assumed. // 4. `nil` and `null` being unambiguous refer to the respective // objects/values in Ruby and JavaScript // 5. This is still WIP :) so please give feedback and suggestions on how // to improve or for alternative solutions // // The way the code is digested before going through Yardoc is a secret kept // in the docs repo (https://github.com/opal/docs/tree/master). var console; // Detect the global object if (typeof(globalThis) !== 'undefined') { global_object = globalThis; } else if (typeof(global) !== 'undefined') { global_object = global; } else if (typeof(window) !== 'undefined') { global_object = window; } // Setup a dummy console object if missing if (global_object.console == null) { global_object.console = {}; } if (typeof(global_object.console) === 'object') { console = global_object.console; } else { console = {}; } if (!('log' in console)) { console.log = function () {}; } if (!('warn' in console)) { console.warn = console.log; } if (typeof(global_object.Opal) !== 'undefined') { console.warn('Opal already loaded. Loading twice can cause troubles, please fix your setup.'); return global_object.Opal; } var nil; // The actual class for BasicObject var BasicObject; // The actual Object class. // The leading underscore is to avoid confusion with window.Object() var _Object; // The actual Module class var Module; // The actual Class class var Class; // The Opal.Opal class (helpers etc.) var _Opal; // The Kernel module var Kernel; // The Opal object that is exposed globally var Opal = global_object.Opal = {}; // This is a useful reference to global object inside ruby files Opal.global = global_object; // Configure runtime behavior with regards to require and unsupported features Opal.config = { missing_require_severity: 'error', // error, warning, ignore unsupported_features_severity: 'warning', // error, warning, ignore experimental_features_severity: 'warning',// warning, ignore enable_stack_trace: true // true, false }; // Minify common function calls var $call = Function.prototype.call; var $bind = Function.prototype.bind; var $has_own = Object.hasOwn || $call.bind(Object.prototype.hasOwnProperty); var $set_proto = Object.setPrototypeOf; var $slice = $call.bind(Array.prototype.slice); var $splice = $call.bind(Array.prototype.splice); // Nil object id is always 4 var nil_id = 4; // Generates even sequential numbers greater than 4 // (nil_id) to serve as unique ids for ruby objects var unique_id = nil_id; // Return next unique id function $uid() { unique_id += 2; return unique_id; }; Opal.uid = $uid; // Retrieve or assign the id of an object Opal.id = function(obj) { if (obj.$$is_number) return (obj * 2)+1; if (obj.$$id == null) { $prop(obj, '$$id', $uid()); } return obj.$$id; }; // Globals table var $gvars = Opal.gvars = {}; // Exit function, this should be replaced by platform specific implementation // (See nodejs and chrome for examples) Opal.exit = function(status) { if ($gvars.DEBUG) console.log('Exited with status '+status); }; // keeps track of exceptions for $! Opal.exceptions = []; // @private // Pops an exception from the stack and updates `$!`. Opal.pop_exception = function(rescued_exception) { var exception = Opal.exceptions.pop(); if (exception === rescued_exception) { // Current $! is raised in the rescue block, so we don't update it } else if (exception) { $gvars["!"] = exception; } else { $gvars["!"] = nil; } }; // A helper function for raising things, that gracefully degrades if necessary // functionality is not yet loaded. function $raise(klass, message) { // Raise Exception, so we can know that something wrong is going on. if (!klass) klass = Opal.Exception || Error; if (Kernel && Kernel.$raise) { if (arguments.length > 2) { Kernel.$raise(klass.$new.apply(klass, $slice(arguments, 1))); } else { Kernel.$raise(klass, message); } } else if (!klass.$new) { throw new klass(message); } else { throw klass.$new(message); } } // Reuse the same object for performance/memory sake var prop_options = { value: undefined, enumerable: false, configurable: true, writable: true }; function $prop(object, name, initialValue) { if (typeof(object) === "string") { // Special case for: // s = "string" // def s.m; end // String class is the only class that: // + compiles to JS primitive // + allows method definition directly on instances // numbers, true, false and null do not support it. object[name] = initialValue; } else { prop_options.value = initialValue; Object.defineProperty(object, name, prop_options); } } Opal.prop = $prop; // @deprecated Opal.defineProperty = Opal.prop; Opal.slice = $slice; // Helpers // ----- var $truthy = Opal.truthy = function(val) { return false !== val && nil !== val && undefined !== val && null !== val && (!(val instanceof Boolean) || true === val.valueOf()); }; Opal.falsy = function(val) { return !$truthy(val); }; Opal.type_error = function(object, type, method, coerced) { object = object.$$class; if (coerced && method) { coerced = coerced.$$class; $raise(Opal.TypeError, "can't convert " + object + " into " + type + " (" + object + "#" + method + " gives " + coerced + ")" ) } else { $raise(Opal.TypeError, "no implicit conversion of " + object + " into " + type ) } }; Opal.coerce_to = function(object, type, method, args) { var body; if (method === 'to_int' && type === Opal.Integer && object.$$is_number) return object < 0 ? Math.ceil(object) : Math.floor(object); if (method === 'to_str' && type === Opal.String && object.$$is_string) return object; if (Opal.is_a(object, type)) return object; // Fast path for the most common situation if (object['$respond_to?'].$$pristine && object.$method_missing.$$pristine) { body = object[$jsid(method)]; if (body == null || body.$$stub) Opal.type_error(object, type); return body.apply(object, args); } if (!object['$respond_to?'](method)) { Opal.type_error(object, type); } if (args == null) args = []; return Opal.send(object, method, args); } Opal.respond_to = function(obj, jsid, include_all) { if (obj == null || !obj.$$class) return false; include_all = !!include_all; var body = obj[jsid]; if (obj['$respond_to?'].$$pristine) { if (typeof(body) === "function" && !body.$$stub) { return true; } if (!obj['$respond_to_missing?'].$$pristine) { return Opal.send(obj, obj['$respond_to_missing?'], [jsid.substr(1), include_all]); } } else { return Opal.send(obj, obj['$respond_to?'], [jsid.substr(1), include_all]); } } // TracePoint support // ------------------ // // Support for `TracePoint.trace(:class) do ... end` Opal.trace_class = false; Opal.tracers_for_class = []; function invoke_tracers_for_class(klass_or_module) { var i, ii, tracer; for(i = 0, ii = Opal.tracers_for_class.length; i < ii; i++) { tracer = Opal.tracers_for_class[i]; tracer.trace_object = klass_or_module; tracer.block.$call(tracer); } } function handle_autoload(cref, name) { if (!cref.$$autoload[name].loaded) { cref.$$autoload[name].loaded = true; try { Opal.Kernel.$require(cref.$$autoload[name].path); } catch (e) { cref.$$autoload[name].exception = e; throw e; } cref.$$autoload[name].required = true; if (cref.$$const[name] != null) { cref.$$autoload[name].success = true; return cref.$$const[name]; } } else if (cref.$$autoload[name].loaded && !cref.$$autoload[name].required) { if (cref.$$autoload[name].exception) { throw cref.$$autoload[name].exception; } } } // Constants // --------- // // For future reference: // - The Rails autoloading guide (http://guides.rubyonrails.org/v5.0/autoloading_and_reloading_constants.html) // - @ConradIrwin's 2012 post on “Everything you ever wanted to know about constant lookup in Ruby” (http://cirw.in/blog/constant-lookup.html) // // Legend of MRI concepts/names: // - constant reference (cref): the module/class that acts as a namespace // - nesting: the namespaces wrapping the current scope, e.g. nesting inside // `module A; module B::C; end; end` is `[B::C, A]` // Get the constant in the scope of the current cref function const_get_name(cref, name) { if (cref) { if (cref.$$const[name] != null) { return cref.$$const[name]; } if (cref.$$autoload && cref.$$autoload[name]) { return handle_autoload(cref, name); } } } // Walk up the nesting array looking for the constant function const_lookup_nesting(nesting, name) { var i, ii, constant; if (nesting.length === 0) return; // If the nesting is not empty the constant is looked up in its elements // and in order. The ancestors of those elements are ignored. for (i = 0, ii = nesting.length; i < ii; i++) { constant = nesting[i].$$const[name]; if (constant != null) { return constant; } else if (nesting[i].$$autoload && nesting[i].$$autoload[name]) { return handle_autoload(nesting[i], name); } } } // Walk up the ancestors chain looking for the constant function const_lookup_ancestors(cref, name) { var i, ii, ancestors; if (cref == null) return; ancestors = $ancestors(cref); for (i = 0, ii = ancestors.length; i < ii; i++) { if (ancestors[i].$$const && $has_own(ancestors[i].$$const, name)) { return ancestors[i].$$const[name]; } else if (ancestors[i].$$autoload && ancestors[i].$$autoload[name]) { return handle_autoload(ancestors[i], name); } } } // Walk up Object's ancestors chain looking for the constant, // but only if cref is missing or a module. function const_lookup_Object(cref, name) { if (cref == null || cref.$$is_module) { return const_lookup_ancestors(_Object, name); } } // Call const_missing if nothing else worked function const_missing(cref, name) { return (cref || _Object).$const_missing(name); } // Look for the constant just in the current cref or call `#const_missing` Opal.const_get_local = function(cref, name, skip_missing) { var result; if (cref == null) return; if (cref === '::') cref = _Object; if (!cref.$$is_module && !cref.$$is_class) { $raise(Opal.TypeError, cref.toString() + " is not a class/module"); } result = const_get_name(cref, name); return result != null || skip_missing ? result : const_missing(cref, name); }; // Look for the constant relative to a cref or call `#const_missing` (when the // constant is prefixed by `::`). Opal.const_get_qualified = function(cref, name, skip_missing) { var result, cache, cached, current_version = Opal.const_cache_version; if (name == null) { // A shortpath for calls like ::String => $$$("String") result = const_get_name(_Object, cref); if (result != null) return result; return Opal.const_get_qualified(_Object, cref, skip_missing); } if (cref == null) return; if (cref === '::') cref = _Object; if (!cref.$$is_module && !cref.$$is_class) { $raise(Opal.TypeError, cref.toString() + " is not a class/module"); } if ((cache = cref.$$const_cache) == null) { $prop(cref, '$$const_cache', Object.create(null)); cache = cref.$$const_cache; } cached = cache[name]; if (cached == null || cached[0] !== current_version) { ((result = const_get_name(cref, name)) != null) || ((result = const_lookup_ancestors(cref, name)) != null); cache[name] = [current_version, result]; } else { result = cached[1]; } return result != null || skip_missing ? result : const_missing(cref, name); }; // Initialize the top level constant cache generation counter Opal.const_cache_version = 1; // Look for the constant in the open using the current nesting and the nearest // cref ancestors or call `#const_missing` (when the constant has no :: prefix). Opal.const_get_relative = function(nesting, name, skip_missing) { var cref = nesting[0], result, current_version = Opal.const_cache_version, cache, cached; if ((cache = nesting.$$const_cache) == null) { $prop(nesting, '$$const_cache', Object.create(null)); cache = nesting.$$const_cache; } cached = cache[name]; if (cached == null || cached[0] !== current_version) { ((result = const_get_name(cref, name)) != null) || ((result = const_lookup_nesting(nesting, name)) != null) || ((result = const_lookup_ancestors(cref, name)) != null) || ((result = const_lookup_Object(cref, name)) != null); cache[name] = [current_version, result]; } else { result = cached[1]; } return result != null || skip_missing ? result : const_missing(cref, name); }; // Register the constant on a cref and opportunistically set the name of // unnamed classes/modules. function $const_set(cref, name, value) { var new_const = true; if (cref == null || cref === '::') cref = _Object; if (value.$$is_a_module) { if (value.$$name == null || value.$$name === nil) value.$$name = name; if (value.$$base_module == null) value.$$base_module = cref; } cref.$$const = (cref.$$const || Object.create(null)); if (name in cref.$$const || ("$$autoload" in cref && name in cref.$$autoload)) { new_const = false; } cref.$$const[name] = value; // Add a short helper to navigate constants manually. // @example // Opal.$$.Regexp.$$.IGNORECASE cref.$$ = cref.$$const; Opal.const_cache_version++; // Expose top level constants onto the Opal object if (cref === _Object) Opal[name] = value; // Name new class directly onto current scope (Opal.Foo.Baz = klass) $prop(cref, name, value); if (new_const && cref.$const_added && !cref.$const_added.$$pristine) { cref.$const_added(name); } return value; }; Opal.const_set = $const_set; // Get all the constants reachable from a given cref, by default will include // inherited constants. Opal.constants = function(cref, inherit) { if (inherit == null) inherit = true; var module, modules = [cref], i, ii, constants = {}, constant; if (inherit) modules = modules.concat($ancestors(cref)); if (inherit && cref.$$is_module) modules = modules.concat([Opal.Object]).concat($ancestors(Opal.Object)); for (i = 0, ii = modules.length; i < ii; i++) { module = modules[i]; // Do not show Objects constants unless we're querying Object itself if (cref !== _Object && module == _Object) break; for (constant in module.$$const) { constants[constant] = true; } if (module.$$autoload) { for (constant in module.$$autoload) { constants[constant] = true; } } } return Object.keys(constants); }; // Remove a constant from a cref. Opal.const_remove = function(cref, name) { Opal.const_cache_version++; if (cref.$$const[name] != null) { var old = cref.$$const[name]; delete cref.$$const[name]; return old; } if (cref.$$autoload && cref.$$autoload[name]) { delete cref.$$autoload[name]; return nil; } $raise(Opal.NameError, "constant "+cref+"::"+cref.$name()+" not defined"); }; // Generates a function that is a curried const_get_relative. Opal.const_get_relative_factory = function(nesting) { return function(name, skip_missing) { return Opal.$$(nesting, name, skip_missing); } } // Setup some shortcuts to reduce compiled size Opal.$$ = Opal.const_get_relative; Opal.$$$ = Opal.const_get_qualified; Opal.$r = Opal.const_get_relative_factory; function descends_from_bridged_class(klass) { if (klass == null) return false; if (klass.$$bridge) return klass; if (klass.$$super) return descends_from_bridged_class(klass.$$super); return false; } // Modules & Classes // ----------------- // A `class Foo; end` expression in ruby is compiled to call this runtime // method which either returns an existing class of the given name, or creates // a new class in the given `base` scope. // // If a constant with the given name exists, then we check to make sure that // it is a class and also that the superclasses match. If either of these // fail, then we raise a `TypeError`. Note, `superclass` may be null if one // was not specified in the ruby code. // // We pass a constructor to this method of the form `function ClassName() {}` // simply so that classes show up with nicely formatted names inside debuggers // in the web browser (or node/sprockets). // // The `scope` is the current `self` value where the class is being created // from. We use this to get the scope for where the class should be created. // If `scope` is an object (not a class/module), we simple get its class and // use that as the scope instead. // // @param scope [Object] where the class is being created // @param superclass [Class,null] superclass of the new class (may be null) // @param singleton [Boolean,null] a true value denotes we want to allocate // a singleton // // @return new [Class] or existing ruby class // function $allocate_class(name, superclass, singleton) { var klass, bridged_descendant; if (bridged_descendant = descends_from_bridged_class(superclass)) { // Inheritance from bridged classes requires // calling original JS constructors klass = function() { var self = new ($bind.apply(bridged_descendant.$$constructor, $prepend(null, arguments)))(); // and replacing a __proto__ manually $set_proto(self, klass.$$prototype); return self; } } else { klass = function(){}; } if (name && name !== nil) { $prop(klass, 'displayName', '::'+name); } $prop(klass, '$$name', name); $prop(klass, '$$constructor', klass); $prop(klass, '$$prototype', klass.prototype); $prop(klass, '$$const', {}); $prop(klass, '$$is_class', true); $prop(klass, '$$is_a_module', true); $prop(klass, '$$super', superclass); $prop(klass, '$$cvars', {}); $prop(klass, '$$own_included_modules', []); $prop(klass, '$$own_prepended_modules', []); $prop(klass, '$$ancestors', []); $prop(klass, '$$ancestors_cache_version', null); $prop(klass, '$$subclasses', []); $prop(klass, '$$cloned_from', []); $prop(klass.$$prototype, '$$class', klass); // By default if there are no singleton class methods // __proto__ is Class.prototype // Later singleton methods generate a singleton_class // and inject it into ancestors chain if (Opal.Class) { $set_proto(klass, Opal.Class.prototype); } if (superclass != null) { $set_proto(klass.$$prototype, superclass.$$prototype); if (singleton !== true) { // Let's not forbid GC from cleaning up our // subclasses. if (typeof WeakRef !== 'undefined') { // First, let's clean up our array from empty objects. var i, subclass, rebuilt_subclasses = []; for (i = 0; i < superclass.$$subclasses.length; i++) { subclass = superclass.$$subclasses[i]; if (subclass.deref() !== undefined) { rebuilt_subclasses.push(subclass); } } // Now, let's add our class. rebuilt_subclasses.push(new WeakRef(klass)); superclass.$$subclasses = rebuilt_subclasses; } else { superclass.$$subclasses.push(klass); } } if (superclass.$$meta) { // If superclass has metaclass then we have explicitely inherit it. Opal.build_class_singleton_class(klass); } } return klass; }; Opal.allocate_class = $allocate_class; function find_existing_class(scope, name) { // Try to find the class in the current scope var klass = const_get_name(scope, name); // If the class exists in the scope, then we must use that if (klass) { // Make sure the existing constant is a class, or raise error if (!klass.$$is_class) { $raise(Opal.TypeError, name + " is not a class"); } return klass; } } function ensureSuperclassMatch(klass, superclass) { if (klass.$$super !== superclass) { $raise(Opal.TypeError, "superclass mismatch for class " + klass.$$name); } } Opal.klass = function(scope, superclass, name) { var bridged; if (scope == null || scope == '::') { // Global scope scope = _Object; } else if (!scope.$$is_class && !scope.$$is_module) { // Scope is an object, use its class scope = scope.$$class; } // If the superclass is not an Opal-generated class then we're bridging a native JS class if ( superclass != null && (!superclass.hasOwnProperty || ( superclass.hasOwnProperty && !superclass.hasOwnProperty('$$is_class') )) ) { if (superclass.constructor && superclass.constructor.name == "Function") { bridged = superclass; superclass = _Object; } else { $raise(Opal.TypeError, "superclass must be a Class (" + ( (superclass.constructor && (superclass.constructor.name || superclass.constructor.$$name)) || typeof(superclass) ) + " given)"); } } var klass = find_existing_class(scope, name); if (klass != null) { if (superclass) { // Make sure existing class has same superclass ensureSuperclassMatch(klass, superclass); } } else { // Class doesn't exist, create a new one with given superclass... // Not specifying a superclass means we can assume it to be Object if (superclass == null) { superclass = _Object; } // Create the class object (instance of Class) klass = $allocate_class(name, superclass); $const_set(scope, name, klass); // Call .inherited() hook with new class on the superclass if (superclass.$inherited) { superclass.$inherited(klass); } if (bridged) { Opal.bridge(bridged, klass); } } if (Opal.trace_class) { invoke_tracers_for_class(klass); } return klass; }; // Define new module (or return existing module). The given `scope` is basically // the current `self` value the `module` statement was defined in. If this is // a ruby module or class, then it is used, otherwise if the scope is a ruby // object then that objects real ruby class is used (e.g. if the scope is the // main object, then the top level `Object` class is used as the scope). // // If a module of the given name is already defined in the scope, then that // instance is just returned. // // If there is a class of the given name in the scope, then an error is // generated instead (cannot have a class and module of same name in same scope). // // Otherwise, a new module is created in the scope with the given name, and that // new instance is returned back (to be referenced at runtime). // // @param scope [Module, Class] class or module this definition is inside // @param id [String] the name of the new (or existing) module // // @return [Module] function $allocate_module(name) { var constructor = function(){}; var module = constructor; if (name) $prop(constructor, 'displayName', name+'.constructor'); $prop(module, '$$name', name); $prop(module, '$$prototype', constructor.prototype); $prop(module, '$$const', {}); $prop(module, '$$is_module', true); $prop(module, '$$is_a_module', true); $prop(module, '$$cvars', {}); $prop(module, '$$iclasses', []); $prop(module, '$$own_included_modules', []); $prop(module, '$$own_prepended_modules', []); $prop(module, '$$ancestors', [module]); $prop(module, '$$ancestors_cache_version', null); $prop(module, '$$cloned_from', []); $set_proto(module, Opal.Module.prototype); return module; }; Opal.allocate_module = $allocate_module; function find_existing_module(scope, name) { var module = const_get_name(scope, name); if (module == null && scope === _Object) module = const_lookup_ancestors(_Object, name); if (module) { if (!module.$$is_module && module !== _Object) { $raise(Opal.TypeError, name + " is not a module"); } } return module; } Opal.module = function(scope, name) { var module; if (scope == null || scope == '::') { // Global scope scope = _Object; } else if (!scope.$$is_class && !scope.$$is_module) { // Scope is an object, use its class scope = scope.$$class; } module = find_existing_module(scope, name); if (module == null) { // Module doesnt exist, create a new one... module = $allocate_module(name); $const_set(scope, name, module); } if (Opal.trace_class) { invoke_tracers_for_class(module); } return module; }; // Return the singleton class for the passed object. // // If the given object alredy has a singleton class, then it will be stored on // the object as the `$$meta` property. If this exists, then it is simply // returned back. // // Otherwise, a new singleton object for the class or object is created, set on // the object at `$$meta` for future use, and then returned. // // @param object [Object] the ruby object // @return [Class] the singleton class for object Opal.get_singleton_class = function(object) { if (object.$$is_number) { $raise(Opal.TypeError, "can't define singleton"); } if (object.$$meta) { return object.$$meta; } if (object.hasOwnProperty('$$is_class')) { return Opal.build_class_singleton_class(object); } else if (object.hasOwnProperty('$$is_module')) { return Opal.build_module_singleton_class(object); } else { return Opal.build_object_singleton_class(object); } }; // helper to set $$meta on klass, module or instance function set_meta(obj, meta) { if (obj.hasOwnProperty('$$meta')) { obj.$$meta = meta; } else { $prop(obj, '$$meta', meta); } if (obj.$$frozen) { // If a object is frozen (sealed), freeze $$meta too. // No need to inject $$meta.$$prototype in the prototype chain, // as $$meta cannot be modified anyway. obj.$$meta.$freeze(); } else { $set_proto(obj, meta.$$prototype); } }; // Build the singleton class for an existing class. Class object are built // with their singleton class already in the prototype chain and inheriting // from their superclass object (up to `Class` itself). // // NOTE: Actually in MRI a class' singleton class inherits from its // superclass' singleton class which in turn inherits from Class. // // @param klass [Class] // @return [Class] Opal.build_class_singleton_class = function(klass) { if (klass.$$meta) { return klass.$$meta; } // The singleton_class superclass is the singleton_class of its superclass; // but BasicObject has no superclass (its `$$super` is null), thus we // fallback on `Class`. var superclass = klass === BasicObject ? Class : Opal.get_singleton_class(klass.$$super); var meta = $allocate_class(null, superclass, true); $prop(meta, '$$is_singleton', true); $prop(meta, '$$singleton_of', klass); set_meta(klass, meta); // Restoring ClassName.class $prop(klass, '$$class', Opal.Class); return meta; }; Opal.build_module_singleton_class = function(mod) { if (mod.$$meta) { return mod.$$meta; } var meta = $allocate_class(null, Opal.Module, true); $prop(meta, '$$is_singleton', true); $prop(meta, '$$singleton_of', mod); set_meta(mod, meta); // Restoring ModuleName.class $prop(mod, '$$class', Opal.Module); return meta; }; // Build the singleton class for a Ruby (non class) Object. // // @param object [Object] // @return [Class] Opal.build_object_singleton_class = function(object) { var superclass = object.$$class, klass = $allocate_class(nil, superclass, true); $prop(klass, '$$is_singleton', true); $prop(klass, '$$singleton_of', object); delete klass.$$prototype.$$class; set_meta(object, klass); return klass; }; Opal.is_method = function(prop) { return (prop[0] === '$' && prop[1] !== '$'); }; Opal.instance_methods = function(mod) { var processed = Object.create(null), results = [], ancestors = $ancestors(mod); for (var i = 0, l = ancestors.length; i < l; i++) { var ancestor = ancestors[i], proto = ancestor.$$prototype; if (proto.hasOwnProperty('$$dummy')) { proto = proto.$$define_methods_on; } var props = Object.getOwnPropertyNames(proto); for (var j = 0, ll = props.length; j < ll; j++) { var prop = props[j]; if (processed[prop]) { continue; } if (Opal.is_method(prop)) { var method = proto[prop]; if (!method.$$stub) { var method_name = prop.slice(1); results.push(method_name); } } processed[prop] = true; } } return results; }; Opal.own_instance_methods = function(mod) { var results = [], proto = mod.$$prototype; if (proto.hasOwnProperty('$$dummy')) { proto = proto.$$define_methods_on; } var props = Object.getOwnPropertyNames(proto); for (var i = 0, length = props.length; i < length; i++) { var prop = props[i]; if (Opal.is_method(prop)) { var method = proto[prop]; if (!method.$$stub) { var method_name = prop.slice(1); results.push(method_name); } } } return results; }; Opal.methods = function(obj) { return Opal.instance_methods(obj.$$meta || obj.$$class); }; Opal.own_methods = function(obj) { return obj.$$meta ? Opal.own_instance_methods(obj.$$meta) : []; }; Opal.receiver_methods = function(obj) { var mod = Opal.get_singleton_class(obj); var singleton_methods = Opal.own_instance_methods(mod); var instance_methods = Opal.own_instance_methods(mod.$$super); return singleton_methods.concat(instance_methods); }; // Returns an object containing all pairs of names/values // for all class variables defined in provided +module+ // and its ancestors. // // @param module [Module] // @return [Object] Opal.class_variables = function(module) { var ancestors = $ancestors(module), i, length = ancestors.length, result = {}; for (i = length - 1; i >= 0; i--) { var ancestor = ancestors[i]; for (var cvar in ancestor.$$cvars) { result[cvar] = ancestor.$$cvars[cvar]; } } return result; }; // Sets class variable with specified +name+ to +value+ // in provided +module+ // // @param module [Module] // @param name [String] // @param value [Object] Opal.class_variable_set = function(module, name, value) { var ancestors = $ancestors(module), i, length = ancestors.length; for (i = length - 2; i >= 0; i--) { var ancestor = ancestors[i]; if ($has_own(ancestor.$$cvars, name)) { ancestor.$$cvars[name] = value; return value; } } module.$$cvars[name] = value; return value; }; // Gets class variable with specified +name+ from provided +module+ // // @param module [Module] // @param name [String] Opal.class_variable_get = function(module, name, tolerant) { if ($has_own(module.$$cvars, name)) return module.$$cvars[name]; var ancestors = $ancestors(module), i, length = ancestors.length; for (i = 0; i < length; i++) { var ancestor = ancestors[i]; if ($has_own(ancestor.$$cvars, name)) { return ancestor.$$cvars[name]; } } if (!tolerant) $raise(Opal.NameError, 'uninitialized class variable '+name+' in '+module.$name()); return nil; } function isRoot(proto) { return proto.hasOwnProperty('$$iclass') && proto.hasOwnProperty('$$root'); } function own_included_modules(module) { var result = [], mod, proto = Object.getPrototypeOf(module.$$prototype); while (proto) { if (proto.hasOwnProperty('$$class')) { // superclass break; } mod = protoToModule(proto); if (mod) { result.push(mod); } proto = Object.getPrototypeOf(proto); } return result; } function own_prepended_modules(module) { var result = [], mod, proto = Object.getPrototypeOf(module.$$prototype); if (module.$$prototype.hasOwnProperty('$$dummy')) { while (proto) { if (proto === module.$$prototype.$$define_methods_on) { break; } mod = protoToModule(proto); if (mod) { result.push(mod); } proto = Object.getPrototypeOf(proto); } } return result; } // The actual inclusion of a module into a class. // // ## Class `$$parent` and `iclass` // // To handle `super` calls, every class has a `$$parent`. This parent is // used to resolve the next class for a super call. A normal class would // have this point to its superclass. However, if a class includes a module // then this would need to take into account the module. The module would // also have to then point its `$$parent` to the actual superclass. We // cannot modify modules like this, because it might be included in more // then one class. To fix this, we actually insert an `iclass` as the class' // `$$parent` which can then point to the superclass. The `iclass` acts as // a proxy to the actual module, so the `super` chain can then search it for // the required method. // // @param module [Module] the module to include // @param includer [Module] the target class to include module into // @return [null] Opal.append_features = function(module, includer) { var module_ancestors = $ancestors(module); var iclasses = []; if (module_ancestors.indexOf(includer) !== -1) { $raise(Opal.ArgumentError, 'cyclic include detected'); } for (var i = 0, length = module_ancestors.length; i < length; i++) { var ancestor = module_ancestors[i], iclass = create_iclass(ancestor); $prop(iclass, '$$included', true); iclasses.push(iclass); } var includer_ancestors = $ancestors(includer), chain = chain_iclasses(iclasses), start_chain_after, end_chain_on; if (includer_ancestors.indexOf(module) === -1) { // first time include // includer -> chain.first -> ...chain... -> chain.last -> includer.parent start_chain_after = includer.$$prototype; end_chain_on = Object.getPrototypeOf(includer.$$prototype); } else { // The module has been already included, // we don't need to put it into the ancestors chain again, // but this module may have new included modules. // If it's true we need to copy them. // // The simplest way is to replace ancestors chain from // parent // | // `module` iclass (has a $$root flag) // | // ...previos chain of module.included_modules ... // | // "next ancestor" (has a $$root flag or is a real class) // // to // parent // | // `module` iclass (has a $$root flag) // | // ...regenerated chain of module.included_modules // | // "next ancestor" (has a $$root flag or is a real class) // // because there are no intermediate classes between `parent` and `next ancestor`. // It doesn't break any prototypes of other objects as we don't change class references. var parent = includer.$$prototype, module_iclass = Object.getPrototypeOf(parent); while (module_iclass != null) { if (module_iclass.$$module === module && isRoot(module_iclass)) { break; } parent = module_iclass; module_iclass = Object.getPrototypeOf(module_iclass); } if (module_iclass) { // module has been directly included var next_ancestor = Object.getPrototypeOf(module_iclass); // skip non-root iclasses (that were recursively included) while (next_ancestor.hasOwnProperty('$$iclass') && !isRoot(next_ancestor)) { next_ancestor = Object.getPrototypeOf(next_ancestor); } start_chain_after = parent; end_chain_on = next_ancestor; } else { // module has not been directly included but was in ancestor chain because it was included by another module // include it directly start_chain_after = includer.$$prototype; end_chain_on = Object.getPrototypeOf(includer.$$prototype); } } $set_proto(start_chain_after, chain.first); $set_proto(chain.last, end_chain_on); // recalculate own_included_modules cache includer.$$own_included_modules = own_included_modules(includer); Opal.const_cache_version++; }; Opal.prepend_features = function(module, prepender) { // Here we change the ancestors chain from // // prepender // | // parent // // to: // // dummy(prepender) // | // iclass(module) // | // iclass(prepender) // | // parent var module_ancestors = $ancestors(module); var iclasses = []; if (module_ancestors.indexOf(prepender) !== -1) { $raise(Opal.ArgumentError, 'cyclic prepend detected'); } for (var i = 0, length = module_ancestors.length; i < length; i++) { var ancestor = module_ancestors[i], iclass = create_iclass(ancestor); $prop(iclass, '$$prepended', true); iclasses.push(iclass); } var chain = chain_iclasses(iclasses), dummy_prepender = prepender.$$prototype, previous_parent = Object.getPrototypeOf(dummy_prepender), prepender_iclass, start_chain_after, end_chain_on; if (dummy_prepender.hasOwnProperty('$$dummy')) { // The module already has some prepended modules // which means that we don't need to make it "dummy" prepender_iclass = dummy_prepender.$$define_methods_on; } else { // Making the module "dummy" prepender_iclass = create_dummy_iclass(prepender); flush_methods_in(prepender); $prop(dummy_prepender, '$$dummy', true); $prop(dummy_prepender, '$$define_methods_on', prepender_iclass); // Converting // dummy(prepender) -> previous_parent // to // dummy(prepender) -> iclass(prepender) -> previous_parent $set_proto(dummy_prepender, prepender_iclass); $set_proto(prepender_iclass, previous_parent); } var prepender_ancestors = $ancestors(prepender); if (prepender_ancestors.indexOf(module) === -1) { // first time prepend start_chain_after = dummy_prepender; // next $$root or prepender_iclass or non-$$iclass end_chain_on = Object.getPrototypeOf(dummy_prepender); while (end_chain_on != null) { if ( end_chain_on.hasOwnProperty('$$root') || end_chain_on === prepender_iclass || !end_chain_on.hasOwnProperty('$$iclass') ) { break; } end_chain_on = Object.getPrototypeOf(end_chain_on); } } else { $raise(Opal.RuntimeError, "Prepending a module multiple times is not supported"); } $set_proto(start_chain_after, chain.first); $set_proto(chain.last, end_chain_on); // recalculate own_prepended_modules cache prepender.$$own_prepended_modules = own_prepended_modules(prepender); Opal.const_cache_version++; }; function flush_methods_in(module) { var proto = module.$$prototype, props = Object.getOwnPropertyNames(proto); for (var i = 0; i < props.length; i++) { var prop = props[i]; if (Opal.is_method(prop)) { delete proto[prop]; } } } function create_iclass(module) { var iclass = create_dummy_iclass(module); if (module.$$is_module) { module.$$iclasses.push(iclass); } return iclass; } // Dummy iclass doesn't receive updates when the module gets a new method. function create_dummy_iclass(module) { var iclass = {}, proto = module.$$prototype; if (proto.hasOwnProperty('$$dummy')) { proto = proto.$$define_methods_on; } var props = Object.getOwnPropertyNames(proto), length = props.length, i; for (i = 0; i < length; i++) { var prop = props[i]; $prop(iclass, prop, proto[prop]); } $prop(iclass, '$$iclass', true); $prop(iclass, '$$module', module); return iclass; } function chain_iclasses(iclasses) { var length = iclasses.length, first = iclasses[0]; $prop(first, '$$root', true); if (length === 1) { return { first: first, last: first }; } var previous = first; for (var i = 1; i < length; i++) { var current = iclasses[i]; $set_proto(previous, current); previous = current; } return { first: iclasses[0], last: iclasses[length - 1] }; } // For performance, some core Ruby classes are toll-free bridged to their // native JavaScript counterparts (e.g. a Ruby Array is a JavaScript Array). // // This method is used to setup a native constructor (e.g. Array), to have // its prototype act like a normal Ruby class. Firstly, a new Ruby class is // created using the native constructor so that its prototype is set as the // target for the new class. Note: all bridged classes are set to inherit // from Object. // // Example: // // Opal.bridge(self, Function); // // @param klass [Class] the Ruby class to bridge // @param constructor [JS.Function] native JavaScript constructor to use // @return [Class] returns the passed Ruby class // Opal.bridge = function(native_klass, klass) { if (native_klass.hasOwnProperty('$$bridge')) { $raise(Opal.ArgumentError, "already bridged"); } // constructor is a JS function with a prototype chain like: // - constructor // - super // // What we need to do is to inject our class (with its prototype chain) // between constructor and super. For example, after injecting ::Object // into JS String we get: // // - constructor (window.String) // - Opal.Object // - Opal.Kernel // - Opal.BasicObject // - super (window.Object) // - null // $prop(native_klass, '$$bridge', klass); $set_proto(native_klass.prototype, (klass.$$super || Opal.Object).$$prototype); $prop(klass, '$$prototype', native_klass.prototype); $prop(klass.$$prototype, '$$class', klass); $prop(klass, '$$constructor', native_klass); $prop(klass, '$$bridge', true); }; function protoToModule(proto) { if (proto.hasOwnProperty('$$dummy')) { return; } else if (proto.hasOwnProperty('$$iclass')) { return proto.$$module; } else if (proto.hasOwnProperty('$$class')) { return proto.$$class; } } function own_ancestors(module) { return module.$$own_prepended_modules.concat([module]).concat(module.$$own_included_modules); } // The Array of ancestors for a given module/class function $ancestors(module) { if (!module) { return []; } if (module.$$ancestors_cache_version === Opal.const_cache_version) { return module.$$ancestors; } var result = [], i, mods, length; for (i = 0, mods = own_ancestors(module), length = mods.length; i < length; i++) { result.push(mods[i]); } if (module.$$super) { for (i = 0, mods = $ancestors(module.$$super), length = mods.length; i < length; i++) { result.push(mods[i]); } } module.$$ancestors_cache_version = Opal.const_cache_version; module.$$ancestors = result; return result; }; Opal.ancestors = $ancestors; Opal.included_modules = function(module) { var result = [], mod = null, proto = Object.getPrototypeOf(module.$$prototype); for (; proto && Object.getPrototypeOf(proto); proto = Object.getPrototypeOf(proto)) { mod = protoToModule(proto); if (mod && mod.$$is_module && proto.$$iclass && proto.$$included) { result.push(mod); } } return result; }; // Method Missing // -------------- // Methods stubs are used to facilitate method_missing in opal. A stub is a // placeholder function which just calls `method_missing` on the receiver. // If no method with the given name is actually defined on an object, then it // is obvious to say that the stub will be called instead, and then in turn // method_missing will be called. // // When a file in ruby gets compiled to javascript, it includes a call to // this function which adds stubs for every method name in the compiled file. // It should then be safe to assume that method_missing will work for any // method call detected. // // Method stubs are added to the BasicObject prototype, which every other // ruby object inherits, so all objects should handle method missing. A stub // is only added if the given property name (method name) is not already // defined. // // Note: all ruby methods have a `$` prefix in javascript, so all stubs will // have this prefix as well (to make this method more performant). // // Opal.add_stubs("foo,bar,baz="); // // All stub functions will have a private `$$stub` property set to true so // that other internal methods can detect if a method is just a stub or not. // `Kernel#respond_to?` uses this property to detect a methods presence. // // @param stubs [Array] an array of method stubs to add // @return [undefined] Opal.add_stubs = function(stubs) { var proto = Opal.BasicObject.$$prototype; var stub, existing_method; stubs = stubs.split(','); for (var i = 0, length = stubs.length; i < length; i++) { stub = $jsid(stubs[i]), existing_method = proto[stub]; if (existing_method == null || existing_method.$$stub) { Opal.add_stub_for(proto, stub); } } }; // Add a method_missing stub function to the given prototype for the // given name. // // @param prototype [Prototype] the target prototype // @param stub [String] stub name to add (e.g. "$foo") // @return [undefined] Opal.add_stub_for = function(prototype, stub) { // Opal.stub_for(stub) is the method_missing_stub $prop(prototype, stub, Opal.stub_for(stub)); }; // Generate the method_missing stub for a given method name. // // @param method_name [String] The js-name of the method to stub (e.g. "$foo") // @return [undefined] Opal.stub_for = function(method_name) { function method_missing_stub() { // Copy any given block onto the method_missing dispatcher this.$method_missing.$$p = method_missing_stub.$$p; // Set block property to null ready for the next call (stop false-positives) method_missing_stub.$$p = null; // call method missing with correct args (remove '$' prefix on method name) return this.$method_missing.apply(this, $prepend(method_name.slice(1), arguments)); }; method_missing_stub.$$stub = true; return method_missing_stub; }; // Methods // ------- // Arity count error dispatcher for methods // // @param actual [Fixnum] number of arguments given to method // @param expected [Fixnum] expected number of arguments // @param object [Object] owner of the method +meth+ // @param meth [String] method name that got wrong number of arguments // @raise [ArgumentError] Opal.ac = function(actual, expected, object, meth) { var inspect = ''; if (object.$$is_a_module) { inspect += object.$$name + '.'; } else { inspect += object.$$class.$$name + '#'; } inspect += meth; $raise(Opal.ArgumentError, '[' + inspect + '] wrong number of arguments (given ' + actual + ', expected ' + expected + ')'); }; // Arity count error dispatcher for blocks // // @param actual [Fixnum] number of arguments given to block // @param expected [Fixnum] expected number of arguments // @param context [Object] context of the block definition // @raise [ArgumentError] Opal.block_ac = function(actual, expected, context) { var inspect = "`block in " + context + "'"; $raise(Opal.ArgumentError, inspect + ': wrong number of arguments (given ' + actual + ', expected ' + expected + ')'); }; function get_ancestors(obj) { if (obj.hasOwnProperty('$$meta') && obj.$$meta !== null) { return $ancestors(obj.$$meta); } else { return $ancestors(obj.$$class); } }; // Super dispatcher Opal.find_super = function(obj, mid, current_func, defcheck, allow_stubs) { var jsid = $jsid(mid), ancestors, ancestor, super_method, method_owner, current_index = -1, i; ancestors = get_ancestors(obj); method_owner = current_func.$$owner; for (i = 0; i < ancestors.length; i++) { ancestor = ancestors[i]; if (ancestor === method_owner || ancestor.$$cloned_from.indexOf(method_owner) !== -1) { current_index = i; break; } } for (i = current_index + 1; i < ancestors.length; i++) { ancestor = ancestors[i]; var proto = ancestor.$$prototype; if (proto.hasOwnProperty('$$dummy')) { proto = proto.$$define_methods_on; } if (proto.hasOwnProperty(jsid)) { super_method = proto[jsid]; break; } } if (!defcheck && super_method && super_method.$$stub && obj.$method_missing.$$pristine) { // method_missing hasn't been explicitly defined $raise(Opal.NoMethodError, 'super: no superclass method `'+mid+"' for "+obj, mid); } return (super_method.$$stub && !allow_stubs) ? null : super_method; }; // Iter dispatcher for super in a block Opal.find_block_super = function(obj, jsid, current_func, defcheck, implicit) { var call_jsid = jsid; if (!current_func) { $raise(Opal.RuntimeError, "super called outside of method"); } if (implicit && current_func.$$define_meth) { $raise(Opal.RuntimeError, "implicit argument passing of super from method defined by define_method() is not supported. " + "Specify all arguments explicitly" ); } if (current_func.$$def) { call_jsid = current_func.$$jsid; } return Opal.find_super(obj, call_jsid, current_func, defcheck); }; // @deprecated Opal.find_super_dispatcher = Opal.find_super; // @deprecated Opal.find_iter_super_dispatcher = Opal.find_block_super; function call_lambda(block, arg, ret) { try { block(arg); } catch (e) { if (e === ret) { return ret.$v; } throw e; } } // handles yield calls for 1 yielded arg Opal.yield1 = function(block, arg) { if (typeof(block) !== "function") { $raise(Opal.LocalJumpError, "no block given"); } var has_mlhs = block.$$has_top_level_mlhs_arg, has_trailing_comma = block.$$has_trailing_comma_in_args, is_returning_lambda = block.$$is_lambda && block.$$ret; if (block.length > 1 || ((has_mlhs || has_trailing_comma) && block.length === 1)) { arg = Opal.to_ary(arg); } if ((block.length > 1 || (has_trailing_comma && block.length === 1)) && arg.$$is_array) { if (is_returning_lambda) { return call_lambda(block.apply.bind(block, null), arg, block.$$ret); } return block.apply(null, arg); } else { if (is_returning_lambda) { return call_lambda(block, arg, block.$$ret); } return block(arg); } }; // handles yield for > 1 yielded arg Opal.yieldX = function(block, args) { if (typeof(block) !== "function") { $raise(Opal.LocalJumpError, "no block given"); } if (block.length > 1 && args.length === 1) { if (args[0].$$is_array) { args = args[0]; } } if (block.$$is_lambda && block.$$ret) { return call_lambda(block.apply.bind(block, null), args, block.$$ret); } return block.apply(null, args); }; // Finds the corresponding exception match in candidates. Each candidate can // be a value, or an array of values. Returns null if not found. Opal.rescue = function(exception, candidates) { for (var i = 0; i < candidates.length; i++) { var candidate = candidates[i]; if (candidate.$$is_array) { var result = Opal.rescue(exception, candidate); if (result) { return result; } } else if (candidate === Opal.JS.Error || candidate['$==='](exception)) { return candidate; } } return null; }; Opal.is_a = function(object, klass) { if (klass != null && object.$$meta === klass || object.$$class === klass) { return true; } if (object.$$is_number && klass.$$is_number_class) { return (klass.$$is_integer_class) ? (object % 1) === 0 : true; } var ancestors = $ancestors(object.$$is_class ? Opal.get_singleton_class(object) : (object.$$meta || object.$$class)); return ancestors.indexOf(klass) !== -1; }; // Helpers for extracting kwsplats // Used for: { **h } Opal.to_hash = function(value) { if (value.$$is_hash) { return value; } else if (value['$respond_to?']('to_hash', true)) { var hash = value.$to_hash(); if (hash.$$is_hash) { return hash; } else { $raise(Opal.TypeError, "Can't convert " + value.$$class + " to Hash (" + value.$$class + "#to_hash gives " + hash.$$class + ")"); } } else { $raise(Opal.TypeError, "no implicit conversion of " + value.$$class + " into Hash"); } }; // Helpers for implementing multiple assignment // Our code for extracting the values and assigning them only works if the // return value is a JS array. // So if we get an Array subclass, extract the wrapped JS array from it // Used for: a, b = something (no splat) Opal.to_ary = function(value) { if (value.$$is_array) { return value; } else if (value['$respond_to?']('to_ary', true)) { var ary = value.$to_ary(); if (ary === nil) { return [value]; } else if (ary.$$is_array) { return ary; } else { $raise(Opal.TypeError, "Can't convert " + value.$$class + " to Array (" + value.$$class + "#to_ary gives " + ary.$$class + ")"); } } else { return [value]; } }; // Used for: a, b = *something (with splat) Opal.to_a = function(value) { if (value.$$is_array) { // A splatted array must be copied return value.slice(); } else if (value['$respond_to?']('to_a', true)) { var ary = value.$to_a(); if (ary === nil) { return [value]; } else if (ary.$$is_array) { return ary; } else { $raise(Opal.TypeError, "Can't convert " + value.$$class + " to Array (" + value.$$class + "#to_a gives " + ary.$$class + ")"); } } else { return [value]; } }; // Used for extracting keyword arguments from arguments passed to // JS function. // // @param parameters [Array] // @return [Hash] or undefined // Opal.extract_kwargs = function(parameters) { var kwargs = parameters[parameters.length - 1]; if (kwargs != null && Opal.respond_to(kwargs, '$to_hash', true)) { $splice(parameters, parameters.length - 1); return kwargs; } }; // Used to get a list of rest keyword arguments. Method takes the given // keyword args, i.e. the hash literal passed to the method containing all // keyword arguments passed to method, as well as the used args which are // the names of required and optional arguments defined. This method then // just returns all key/value pairs which have not been used, in a new // hash literal. // // @param given_args [Hash] all kwargs given to method // @param used_args [Object] all keys used as named kwargs // @return [Hash] // Opal.kwrestargs = function(given_args, used_args) { var map = new Map(); Opal.hash_each(given_args, false, function(key, value) { if (!used_args[key]) { Opal.hash_put(map, key, value); } return [false, false]; }); return map; }; function apply_blockopts(block, blockopts) { if (typeof(blockopts) === 'number') { block.$$arity = blockopts; } else if (typeof(blockopts) === 'object') { Object.assign(block, blockopts); } } // Optimization for a costly operation of prepending '$' to method names var jsid_cache = new Map(); function $jsid(name) { var jsid = jsid_cache.get(name); if (!jsid) { jsid = '$' + name; jsid_cache.set(name, jsid); } return jsid; } Opal.jsid = $jsid; function $prepend(first, second) { if (!second.$$is_array) second = $slice(second); return [first].concat(second); } // Calls passed method on a ruby object with arguments and block: // // Can take a method or a method name. // // 1. When method name gets passed it invokes it by its name // and calls 'method_missing' when object doesn't have this method. // Used internally by Opal to invoke method that takes a block or a splat. // 2. When method (i.e. method body) gets passed, it doesn't trigger 'method_missing' // because it doesn't know the name of the actual method. // Used internally by Opal to invoke 'super'. // // @example // var my_array = [1, 2, 3, 4] // Opal.send(my_array, 'length') # => 4 // Opal.send(my_array, my_array.$length) # => 4 // // Opal.send(my_array, 'reverse!') # => [4, 3, 2, 1] // Opal.send(my_array, my_array['$reverse!']') # => [4, 3, 2, 1] // // @param recv [Object] ruby object // @param method [Function, String] method body or name of the method // @param args [Array] arguments that will be passed to the method call // @param block [Function] ruby block // @param blockopts [Object, Number] optional properties to set on the block // @return [Object] returning value of the method call Opal.send = function(recv, method, args, block, blockopts) { var body; if (typeof(method) === 'function') { body = method; method = null; } else if (typeof(method) === 'string') { body = recv[$jsid(method)]; } else { $raise(Opal.NameError, "Passed method should be a string or a function"); } return Opal.send2(recv, body, method, args, block, blockopts); }; Opal.send2 = function(recv, body, method, args, block, blockopts) { if (body == null && method != null && recv.$method_missing) { body = recv.$method_missing; args = $prepend(method, args); } apply_blockopts(block, blockopts); if (typeof block === 'function') body.$$p = block; return body.apply(recv, args); }; Opal.refined_send = function(refinement_groups, recv, method, args, block, blockopts) { var i, j, k, ancestors, ancestor, refinements, refinement, refine_modules, refine_module, body; ancestors = get_ancestors(recv); // For all ancestors that there are, starting from the closest to the furthest... for (i = 0; i < ancestors.length; i++) { ancestor = Opal.id(ancestors[i]); // For all refinement groups there are, starting from the closest scope to the furthest... for (j = 0; j < refinement_groups.length; j++) { refinements = refinement_groups[j]; // For all refinements there are, starting from the last `using` call to the furthest... for (k = refinements.length - 1; k >= 0; k--) { refinement = refinements[k]; if (typeof refinement.$$refine_modules === 'undefined') continue; // A single module being given as an argument of the `using` call contains multiple // refinement modules refine_modules = refinement.$$refine_modules; // Does this module refine a given call for a given ancestor module? if (typeof refine_modules[ancestor] === 'undefined') continue; refine_module = refine_modules[ancestor]; // Does this module define a method we want to call? if (typeof refine_module.$$prototype[$jsid(method)] !== 'undefined') { body = refine_module.$$prototype[$jsid(method)]; return Opal.send2(recv, body, method, args, block, blockopts); } } } } return Opal.send(recv, method, args, block, blockopts); }; Opal.lambda = function(block, blockopts) { block.$$is_lambda = true; apply_blockopts(block, blockopts); return block; }; // Used to define methods on an object. This is a helper method, used by the // compiled source to define methods on special case objects when the compiler // can not determine the destination object, or the object is a Module // instance. This can get called by `Module#define_method` as well. // // ## Modules // // Any method defined on a module will come through this runtime helper. // The method is added to the module body, and the owner of the method is // set to be the module itself. This is used later when choosing which // method should show on a class if more than 1 included modules define // the same method. Finally, if the module is in `module_function` mode, // then the method is also defined onto the module itself. // // ## Classes // // This helper will only be called for classes when a method is being // defined indirectly; either through `Module#define_method`, or by a // literal `def` method inside an `instance_eval` or `class_eval` body. In // either case, the method is simply added to the class' prototype. A special // exception exists for `BasicObject` and `Object`. These two classes are // special because they are used in toll-free bridged classes. In each of // these two cases, extra work is required to define the methods on toll-free // bridged class' prototypes as well. // // ## Objects // // If a simple ruby object is the object, then the method is simply just // defined on the object as a singleton method. This would be the case when // a method is defined inside an `instance_eval` block. // // @param obj [Object, Class] the actual obj to define method for // @param jsid [String] the JavaScript friendly method name (e.g. '$foo') // @param body [JS.Function] the literal JavaScript function used as method // @param blockopts [Object, Number] optional properties to set on the body // @return [null] // Opal.def = function(obj, jsid, body, blockopts) { apply_blockopts(body, blockopts); // Special case for a method definition in the // top-level namespace if (obj === Opal.top) { return Opal.defn(Opal.Object, jsid, body); } // if instance_eval is invoked on a module/class, it sets inst_eval_mod else if (!obj.$$eval && obj.$$is_a_module) { return Opal.defn(obj, jsid, body); } else { return Opal.defs(obj, jsid, body); } }; // Define method on a module or class (see Opal.def). Opal.defn = function(module, jsid, body) { $deny_frozen_access(module); body.displayName = jsid; body.$$owner = module; var name = jsid.substr(1); var proto = module.$$prototype; if (proto.hasOwnProperty('$$dummy')) { proto = proto.$$define_methods_on; } $prop(proto, jsid, body); if (module.$$is_module) { if (module.$$module_function) { Opal.defs(module, jsid, body) } for (var i = 0, iclasses = module.$$iclasses, length = iclasses.length; i < length; i++) { var iclass = iclasses[i]; $prop(iclass, jsid, body); } } var singleton_of = module.$$singleton_of; if (module.$method_added && !module.$method_added.$$stub && !singleton_of) { module.$method_added(name); } else if (singleton_of && singleton_of.$singleton_method_added && !singleton_of.$singleton_method_added.$$stub) { singleton_of.$singleton_method_added(name); } return name; }; // Define a singleton method on the given object (see Opal.def). Opal.defs = function(obj, jsid, body, blockopts) { apply_blockopts(body, blockopts); if (obj.$$is_string || obj.$$is_number) { $raise(Opal.TypeError, "can't define singleton"); } return Opal.defn(Opal.get_singleton_class(obj), jsid, body); }; // Since JavaScript has no concept of modules, we create proxy classes // called `iclasses` that store copies of methods loaded. We need to // update them if we remove a method. function remove_method_from_iclasses(obj, jsid) { if (obj.$$is_module) { for (var i = 0, iclasses = obj.$$iclasses, length = iclasses.length; i < length; i++) { var iclass = iclasses[i]; delete iclass[jsid]; } } } // Called from #remove_method. Opal.rdef = function(obj, jsid) { if (!$has_own(obj.$$prototype, jsid)) { $raise(Opal.NameError, "method '" + jsid.substr(1) + "' not defined in " + obj.$name()); } delete obj.$$prototype[jsid]; remove_method_from_iclasses(obj, jsid); if (obj.$$is_singleton) { if (obj.$$prototype.$singleton_method_removed && !obj.$$prototype.$singleton_method_removed.$$stub) { obj.$$prototype.$singleton_method_removed(jsid.substr(1)); } } else { if (obj.$method_removed && !obj.$method_removed.$$stub) { obj.$method_removed(jsid.substr(1)); } } }; // Called from #undef_method. Opal.udef = function(obj, jsid) { if (!obj.$$prototype[jsid] || obj.$$prototype[jsid].$$stub) { $raise(Opal.NameError, "method '" + jsid.substr(1) + "' not defined in " + obj.$name()); } Opal.add_stub_for(obj.$$prototype, jsid); remove_method_from_iclasses(obj, jsid); if (obj.$$is_singleton) { if (obj.$$prototype.$singleton_method_undefined && !obj.$$prototype.$singleton_method_undefined.$$stub) { obj.$$prototype.$singleton_method_undefined(jsid.substr(1)); } } else { if (obj.$method_undefined && !obj.$method_undefined.$$stub) { obj.$method_undefined(jsid.substr(1)); } } }; function is_method_body(body) { return (typeof(body) === "function" && !body.$$stub); } Opal.alias = function(obj, name, old) { var id = $jsid(name), old_id = $jsid(old), body, alias; // Aliasing on main means aliasing on Object... if (typeof obj.$$prototype === 'undefined') { obj = Opal.Object; } body = obj.$$prototype[old_id]; // When running inside #instance_eval the alias refers to class methods. if (obj.$$eval) { return Opal.alias(Opal.get_singleton_class(obj), name, old); } if (!is_method_body(body)) { var ancestor = obj.$$super; while (typeof(body) !== "function" && ancestor) { body = ancestor[old_id]; ancestor = ancestor.$$super; } if (!is_method_body(body) && obj.$$is_module) { // try to look into Object body = Opal.Object.$$prototype[old_id] } if (!is_method_body(body)) { $raise(Opal.NameError, "undefined method `" + old + "' for class `" + obj.$name() + "'") } } // If the body is itself an alias use the original body // to keep the max depth at 1. if (body.$$alias_of) body = body.$$alias_of; // We need a wrapper because otherwise properties // would be overwritten on the original body. alias = Opal.wrap_method_body(body); // Try to make the browser pick the right name alias.displayName = name; alias.$$alias_of = body; alias.$$alias_name = name; Opal.defn(obj, id, alias); return obj; }; Opal.wrap_method_body = function(body) { var wrapped = function() { var block = wrapped.$$p; wrapped.$$p = null; return Opal.send(this, body, arguments, block); }; // Assign the 'length' value with defineProperty because // in strict mode the property is not writable. // It doesn't work in older browsers (like Chrome 38), where // an exception is thrown breaking Opal altogether. try { Object.defineProperty(wrapped, 'length', { value: body.length }); } catch (e) {} wrapped.$$arity = body.$$arity == null ? body.length : body.$$arity; wrapped.$$parameters = body.$$parameters; wrapped.$$source_location = body.$$source_location; return wrapped; }; Opal.alias_gvar = function(new_name, old_name) { Object.defineProperty($gvars, new_name, { configurable: true, enumerable: true, get: function() { return $gvars[old_name]; }, set: function(new_value) { $gvars[old_name] = new_value; } }); return nil; } Opal.alias_native = function(obj, name, native_name) { var id = $jsid(name), body = obj.$$prototype[native_name]; if (typeof(body) !== "function" || body.$$stub) { $raise(Opal.NameError, "undefined native method `" + native_name + "' for class `" + obj.$name() + "'") } Opal.defn(obj, id, body); return obj; }; // Hashes // ------ Opal.hash_init = function (_hash) { console.warn("DEPRECATION: Opal.hash_init is deprecated and is now a no-op."); } Opal.hash_clone = function(from_hash, to_hash) { to_hash.$$none = from_hash.$$none; to_hash.$$proc = from_hash.$$proc; return Opal.hash_each(from_hash, to_hash, function(key, value) { Opal.hash_put(to_hash, key, value); return [false, to_hash]; }); }; Opal.hash_put = function(hash, key, value) { var type = typeof key; if (type === "string" || type === "symbol" || type === "number" || type === "boolean" || type === "bigint") { hash.set(key, value) } else if (key.$$is_string) { hash.set(key.valueOf(), value); } else { if (!hash.$$keys) hash.$$keys = new Map(); var key_hash = key.$$is_string ? key.valueOf() : (hash.$$by_identity ? Opal.id(key) : key.$hash()), keys = hash.$$keys; if (!keys.has(key_hash)) { keys.set(key_hash, [key]); hash.set(key, value); return; } var objects = keys.get(key_hash), object; for (var i=0; i= 0; for (var i = 0, ii = parts.length; i < ii; i++) { part = parts[i]; if (part instanceof RegExp) { if (part.ignoreCase !== ignoreCase) Opal.Kernel.$warn( "ignore case doesn't match for " + part.source.$inspect(), new Map([['uplevel', 1]]) ) part = part.source; } if (part === '') part = '(?:' + part + ')'; parts[i] = part; } if (flags) { return new RegExp(parts.join(''), flags); } else { return new RegExp(parts.join('')); } }; // Require system // -------------- Opal.modules = {}; Opal.loaded_features = ['corelib/runtime']; Opal.current_dir = '.'; Opal.require_table = {'corelib/runtime': true}; Opal.normalize = function(path) { var parts, part, new_parts = [], SEPARATOR = '/'; if (Opal.current_dir !== '.') { path = Opal.current_dir.replace(/\/*$/, '/') + path; } path = path.replace(/^\.\//, ''); path = path.replace(/\.(rb|opal|js)$/, ''); parts = path.split(SEPARATOR); for (var i = 0, ii = parts.length; i < ii; i++) { part = parts[i]; if (part === '') continue; (part === '..') ? new_parts.pop() : new_parts.push(part) } return new_parts.join(SEPARATOR); }; Opal.loaded = function(paths) { var i, l, path; for (i = 0, l = paths.length; i < l; i++) { path = Opal.normalize(paths[i]); if (Opal.require_table[path]) { continue; } Opal.loaded_features.push(path); Opal.require_table[path] = true; } }; Opal.load_normalized = function(path) { Opal.loaded([path]); var module = Opal.modules[path]; if (module) { var retval = module(Opal); if (typeof Promise !== 'undefined' && retval instanceof Promise) { // A special case of require having an async top: // We will need to await it. return retval.then($return_val(true)); } } else { var severity = Opal.config.missing_require_severity; var message = 'cannot load such file -- ' + path; if (severity === "error") { $raise(Opal.LoadError, message); } else if (severity === "warning") { console.warn('WARNING: LoadError: ' + message); } } return true; }; Opal.load = function(path) { path = Opal.normalize(path); return Opal.load_normalized(path); }; Opal.require = function(path) { path = Opal.normalize(path); if (Opal.require_table[path]) { return false; } return Opal.load_normalized(path); }; // Strings // ------- Opal.encodings = Object.create(null); // Sets the encoding on a string, will treat string literals as frozen strings // raising a FrozenError. // // @param str [String] the string on which the encoding should be set // @param name [String] the canonical name of the encoding // @param type [String] possible values are either `"encoding"`, `"internal_encoding"`, or `undefined Opal.set_encoding = function(str, name, type) { if (typeof type === "undefined") type = "encoding"; if (typeof str === 'string' || str.$$frozen === true) $raise(Opal.FrozenError, "can't modify frozen String"); var encoding = Opal.find_encoding(name); if (encoding === str[type]) { return str; } str[type] = encoding; return str; }; // Fetches the encoding for the given name or raises ArgumentError. Opal.find_encoding = function(name) { var register = Opal.encodings; var encoding = register[name] || register[name.toUpperCase()]; if (!encoding) $raise(Opal.ArgumentError, "unknown encoding name - " + name); return encoding; } // @returns a String object with the encoding set from a string literal Opal.enc = function(str, name) { var dup = new String(str); dup = Opal.set_encoding(dup, name); dup.internal_encoding = dup.encoding; return dup } // @returns a String object with the internal encoding set to Binary Opal.binary = function(str) { var dup = new String(str); return Opal.set_encoding(dup, "binary", "internal_encoding"); } Opal.last_promise = null; Opal.promise_unhandled_exception = false; // Run a block of code, but if it returns a Promise, don't run the next // one, but queue it. Opal.queue = function(proc) { if (Opal.last_promise) { // The async path is taken only if anything before returned a // Promise(V2). Opal.last_promise = Opal.last_promise.then(function() { if (!Opal.promise_unhandled_exception) return proc(Opal); })['catch'](function(error) { if (Opal.respond_to(error, '$full_message')) { error = error.$full_message(); } console.error(error); // Abort further execution Opal.promise_unhandled_exception = true; Opal.exit(1); }); return Opal.last_promise; } else { var ret = proc(Opal); if (typeof Promise === 'function' && typeof ret === 'object' && ret instanceof Promise) { Opal.last_promise = ret; } return ret; } } // Operator helpers // ---------------- function are_both_numbers(l,r) { return typeof(l) === 'number' && typeof(r) === 'number' } Opal.rb_plus = function(l,r) { return are_both_numbers(l,r) ? l + r : l['$+'](r); } Opal.rb_minus = function(l,r) { return are_both_numbers(l,r) ? l - r : l['$-'](r); } Opal.rb_times = function(l,r) { return are_both_numbers(l,r) ? l * r : l['$*'](r); } Opal.rb_divide = function(l,r) { return are_both_numbers(l,r) ? l / r : l['$/'](r); } Opal.rb_lt = function(l,r) { return are_both_numbers(l,r) ? l < r : l['$<'](r); } Opal.rb_gt = function(l,r) { return are_both_numbers(l,r) ? l > r : l['$>'](r); } Opal.rb_le = function(l,r) { return are_both_numbers(l,r) ? l <= r : l['$<='](r); } Opal.rb_ge = function(l,r) { return are_both_numbers(l,r) ? l >= r : l['$>='](r); } // Optimized helpers for calls like $truthy((a)['$==='](b)) -> $eqeqeq(a, b) function are_both_numbers_or_strings(lhs, rhs) { return (typeof lhs === 'number' && typeof rhs === 'number') || (typeof lhs === 'string' && typeof rhs === 'string'); } function $eqeq(lhs, rhs) { return are_both_numbers_or_strings(lhs,rhs) ? lhs === rhs : $truthy((lhs)['$=='](rhs)); }; Opal.eqeq = $eqeq; Opal.eqeqeq = function(lhs, rhs) { return are_both_numbers_or_strings(lhs,rhs) ? lhs === rhs : $truthy((lhs)['$==='](rhs)); }; Opal.neqeq = function(lhs, rhs) { return are_both_numbers_or_strings(lhs,rhs) ? lhs !== rhs : $truthy((lhs)['$!='](rhs)); }; Opal.not = function(arg) { if (undefined === arg || null === arg || false === arg || nil === arg) return true; if (true === arg || arg['$!'].$$pristine) return false; return $truthy(arg['$!']()); } // Shortcuts - optimized function generators for simple kinds of functions function $return_val(arg) { return function() { return arg; } } Opal.return_val = $return_val; Opal.return_self = function() { return this; } Opal.return_ivar = function(ivar) { return function() { if (this[ivar] == null) { return nil; } return this[ivar]; } } Opal.assign_ivar = function(ivar) { return function(val) { $deny_frozen_access(this); return this[ivar] = val; } } Opal.assign_ivar_val = function(ivar, static_val) { return function() { $deny_frozen_access(this); return this[ivar] = static_val; } } // Primitives for handling parameters Opal.ensure_kwargs = function(kwargs) { if (kwargs == null) { return new Map(); } else if (kwargs.$$is_hash) { return kwargs; } else { $raise(Opal.ArgumentError, 'expected kwargs'); } } Opal.get_kwarg = function(kwargs, key) { var kwarg = Opal.hash_get(kwargs, key); if (kwarg === undefined) { $raise(Opal.ArgumentError, 'missing keyword: '+key); } return kwarg; } // Arrays of size > 32 elements that contain only strings, // symbols, integers and nils are compiled as a self-extracting // string. Opal.large_array_unpack = function(str) { var array = str.split(","), length = array.length, i; for (i = 0; i < length; i++) { switch(array[i][0]) { case undefined: array[i] = nil break; case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': array[i] = +array[i]; } } return array; } // Opal32-checksum algorithm for #hash // ----------------------------------- Opal.opal32_init = $return_val(0x4f70616c); function $opal32_ror(n, d) { return (n << d)|(n >>> (32 - d)); }; Opal.opal32_add = function(hash, next) { hash ^= next; hash = $opal32_ror(hash, 1); return hash; }; // Initialization // -------------- Opal.BasicObject = BasicObject = $allocate_class('BasicObject', null); Opal.Object = _Object = $allocate_class('Object', Opal.BasicObject); Opal.Module = Module = $allocate_class('Module', Opal.Object); Opal.Class = Class = $allocate_class('Class', Opal.Module); Opal.Opal = _Opal = $allocate_module('Opal'); Opal.Kernel = Kernel = $allocate_module('Kernel'); $set_proto(Opal.BasicObject, Opal.Class.$$prototype); $set_proto(Opal.Object, Opal.Class.$$prototype); $set_proto(Opal.Module, Opal.Class.$$prototype); $set_proto(Opal.Class, Opal.Class.$$prototype); // BasicObject can reach itself, avoid const_set to skip the $$base_module logic BasicObject.$$const.BasicObject = BasicObject; // Assign basic constants $const_set(_Object, "BasicObject", BasicObject); $const_set(_Object, "Object", _Object); $const_set(_Object, "Module", Module); $const_set(_Object, "Class", Class); $const_set(_Object, "Opal", _Opal); $const_set(_Object, "Kernel", Kernel); // Fix booted classes to have correct .class value BasicObject.$$class = Class; _Object.$$class = Class; Module.$$class = Class; Class.$$class = Class; _Opal.$$class = Module; Kernel.$$class = Module; // Forward .toString() to #to_s $prop(_Object.$$prototype, 'toString', function() { var to_s = this.$to_s(); if (to_s.$$is_string && typeof(to_s) === 'object') { // a string created using new String('string') return to_s.valueOf(); } else { return to_s; } }); // Make Kernel#require immediately available as it's needed to require all the // other corelib files. $prop(_Object.$$prototype, '$require', Opal.require); // Instantiate the main object Opal.top = new _Object(); Opal.top.$to_s = Opal.top.$inspect = $return_val('main'); Opal.top.$define_method = top_define_method; // Foward calls to define_method on the top object to Object function top_define_method() { var block = top_define_method.$$p; top_define_method.$$p = null; return Opal.send(_Object, 'define_method', arguments, block) }; // Nil Opal.NilClass = $allocate_class('NilClass', Opal.Object); $const_set(_Object, 'NilClass', Opal.NilClass); nil = Opal.nil = new Opal.NilClass(); nil.$$id = nil_id; nil.call = nil.apply = function() { $raise(Opal.LocalJumpError, 'no block given'); }; nil.$$frozen = true; nil.$$comparable = false; Object.seal(nil); Opal.thrower = function(type) { var thrower = { $thrower_type: type, $throw: function(value, called_from_lambda) { if (value == null) value = nil; if (this.is_orphan && !called_from_lambda) { $raise(Opal.LocalJumpError, 'unexpected ' + type, value, type.$to_sym()); } this.$v = value; throw this; }, is_orphan: false } return thrower; }; // Define a "$@" global variable, which would compute and return a backtrace on demand. Object.defineProperty($gvars, "@", { enumerable: true, configurable: true, get: function() { if ($truthy($gvars["!"])) return $gvars["!"].$backtrace(); return nil; }, set: function(bt) { if ($truthy($gvars["!"])) $gvars["!"].$set_backtrace(bt); else $raise(Opal.ArgumentError, "$! not set"); } }); Opal.t_eval_return = Opal.thrower("return"); TypeError.$$super = Error; // If enable-file-source-embed compiler option is enabled, each module loaded will add its // sources to this object Opal.file_sources = {}; }).call(this); Opal.loaded(["corelib/runtime.js"]); Opal.modules["corelib/helpers"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $type_error = Opal.type_error, $coerce_to = Opal.coerce_to, $module = Opal.module, $defs = Opal.defs, $slice = Opal.slice, $eqeqeq = Opal.eqeqeq, $Kernel = Opal.Kernel, $truthy = Opal.truthy, $Opal = Opal.Opal, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('===,raise,respond_to?,nil?,__send__,<=>,class,coerce_to!,new,to_s,__id__'); return (function($base) { var self = $module($base, 'Opal'); $defs(self, '$bridge', function $$bridge(constructor, klass) { return Opal.bridge(constructor, klass); }); $defs(self, '$coerce_to!', function $Opal_coerce_to$excl$1(object, type, method, $a) { var $post_args, args, coerced = nil; $post_args = $slice(arguments, 3); args = $post_args; coerced = $coerce_to(object, type, method, args); if (!$eqeqeq(type, coerced)) { $Kernel.$raise($type_error(object, type, method, coerced)) }; return coerced; }, -4); $defs(self, '$coerce_to?', function $Opal_coerce_to$ques$2(object, type, method, $a) { var $post_args, args, coerced = nil; $post_args = $slice(arguments, 3); args = $post_args; if (!$truthy(object['$respond_to?'](method))) { return nil }; coerced = $coerce_to(object, type, method, args); if ($truthy(coerced['$nil?']())) { return nil }; if (!$eqeqeq(type, coerced)) { $Kernel.$raise($type_error(object, type, method, coerced)) }; return coerced; }, -4); $defs(self, '$try_convert', function $$try_convert(object, type, method) { if ($eqeqeq(type, object)) { return object }; if ($truthy(object['$respond_to?'](method))) { return object.$__send__(method) } else { return nil }; }); $defs(self, '$compare', function $$compare(a, b) { var compare = nil; compare = a['$<=>'](b); if ($truthy(compare === nil)) { $Kernel.$raise($$$('ArgumentError'), "comparison of " + (a.$class()) + " with " + (b.$class()) + " failed") }; return compare; }); $defs(self, '$destructure', function $$destructure(args) { if (args.length == 1) { return args[0]; } else if (args.$$is_array) { return args; } else { var args_ary = new Array(args.length); for(var i = 0, l = args_ary.length; i < l; i++) { args_ary[i] = args[i]; } return args_ary; } }); $defs(self, '$respond_to?', function $Opal_respond_to$ques$3(obj, method, include_all) { if (include_all == null) include_all = false; if (obj == null || !obj.$$class) { return false; } ; return obj['$respond_to?'](method, include_all); }, -3); $defs(self, '$instance_variable_name!', function $Opal_instance_variable_name$excl$4(name) { name = $Opal['$coerce_to!'](name, $$$('String'), "to_str"); if (!$truthy(/^@[a-zA-Z_][a-zA-Z0-9_]*?$/.test(name))) { $Kernel.$raise($$$('NameError').$new("'" + (name) + "' is not allowed as an instance variable name", name)) }; return name; }); $defs(self, '$class_variable_name!', function $Opal_class_variable_name$excl$5(name) { name = $Opal['$coerce_to!'](name, $$$('String'), "to_str"); if ($truthy(name.length < 3 || name.slice(0,2) !== '@@')) { $Kernel.$raise($$$('NameError').$new("`" + (name) + "' is not allowed as a class variable name", name)) }; return name; }); $defs(self, '$const_name?', function $Opal_const_name$ques$6(const_name) { if (typeof const_name !== 'string') { (const_name = $Opal['$coerce_to!'](const_name, $$$('String'), "to_str")) } return const_name[0] === const_name[0].toUpperCase() }); $defs(self, '$const_name!', function $Opal_const_name$excl$7(const_name) { var $a, self = this; if ($truthy((($a = $$$('::', 'String', 'skip_raise')) ? 'constant' : nil))) { const_name = $Opal['$coerce_to!'](const_name, $$$('String'), "to_str") }; if (!const_name || const_name[0] != const_name[0].toUpperCase()) { self.$raise($$$('NameError'), "wrong constant name " + (const_name)) } ; return const_name; }); $defs(self, '$pristine', function $$pristine(owner_class, $a) { var $post_args, method_names; $post_args = $slice(arguments, 1); method_names = $post_args; var method_name, method; for (var i = method_names.length - 1; i >= 0; i--) { method_name = method_names[i]; method = owner_class.$$prototype[Opal.jsid(method_name)]; if (method && !method.$$stub) { method.$$pristine = true; } } ; return nil; }, -2); var inspect_stack = []; return $defs(self, '$inspect', function $$inspect(value) { var e = nil; ; var pushed = false; return (function() { try { try { if (value === null) { // JS null value return 'null'; } else if (value === undefined) { // JS undefined value return 'undefined'; } else if (typeof value.$$class === 'undefined') { // JS object / other value that is not bridged return Object.prototype.toString.apply(value); } else if (typeof value.$inspect !== 'function' || value.$inspect.$$stub) { // BasicObject and friends return "#<" + (value.$$class) + ":0x" + (value.$__id__().$to_s(16)) + ">" } else if (inspect_stack.indexOf(value.$__id__()) !== -1) { // inspect recursing inside inspect to find out about the // same object return "#<" + (value.$$class) + ":0x" + (value.$__id__().$to_s(16)) + ">" } else { // anything supporting Opal inspect_stack.push(value.$__id__()); pushed = true; return value.$inspect(); } ; return nil; } catch ($err) { if (Opal.rescue($err, [$$$('Exception')])) {(e = $err) try { return "#<" + (value.$$class) + ":0x" + (value.$__id__().$to_s(16)) + ">" } finally { Opal.pop_exception($err); } } else { throw $err; } } } finally { if (pushed) inspect_stack.pop() }; })();; }, -1); })('::') }; Opal.modules["corelib/module"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $truthy = Opal.truthy, $coerce_to = Opal.coerce_to, $const_set = Opal.const_set, $Object = Opal.Object, $return_ivar = Opal.return_ivar, $assign_ivar = Opal.assign_ivar, $ivar = Opal.ivar, $deny_frozen_access = Opal.deny_frozen_access, $freeze = Opal.freeze, $prop = Opal.prop, $jsid = Opal.jsid, $each_ivar = Opal.each_ivar, $klass = Opal.klass, $Opal = Opal.Opal, $Kernel = Opal.Kernel, $defs = Opal.defs, $send = Opal.send, $def = Opal.def, $eqeqeq = Opal.eqeqeq, $Module = Opal.Module, $rb_lt = Opal.rb_lt, $rb_gt = Opal.rb_gt, $slice = Opal.slice, $to_a = Opal.to_a, $return_val = Opal.return_val, $eqeq = Opal.eqeq, $not = Opal.not, $rb_le = Opal.rb_le, $range = Opal.range, $send2 = Opal.send2, $find_super = Opal.find_super, $alias = Opal.alias, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('try_convert,raise,class,module_eval,to_proc,===,equal?,<,>,nil?,attr_reader,attr_writer,warn,attr_accessor,const_name?,class_variable_name!,pristine,const_name!,=~,new,inject,split,const_get,==,start_with?,!~,owner,!,<=,frozen?,append_features,included,name,cover?,size,merge,compile,proc,any?,prepend_features,prepended,to_s,__id__,constants,include?,copy_class_variables,copy_constants,copy_singleton_methods,class_exec,module_exec,inspect'); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Module'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); function ensure_symbol_or_string(name) { if (name.$$is_string) { return name; }; var converted_name = $Opal.$try_convert(name, $$$('String'), "to_str"); if (converted_name.$$is_string) { return converted_name; } else if (converted_name === nil) { $Kernel.$raise($$$('TypeError'), "" + (name) + " is not a symbol nor a string") } else { $Kernel.$raise($$$('TypeError'), "can't convert " + ((name).$class()) + " to String (" + ((name).$class()) + "#to_str gives " + ((converted_name).$class())) } } ; $defs(self, '$allocate', function $$allocate() { var self = this; var module = Opal.allocate_module(nil, function(){}); // Link the prototype of Module subclasses if (self !== Opal.Module) Object.setPrototypeOf(module, self.$$prototype); return module; }); $def(self, '$initialize', function $$initialize() { var block = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; ; if ((block !== nil)) { return $send(self, 'module_eval', [], block.$to_proc()) } else { return nil }; }); $def(self, '$===', function $Module_$eq_eq_eq$1(object) { var self = this; if ($truthy(object == null)) { return false }; return Opal.is_a(object, self);; }); $def(self, '$<', function $Module_$lt$2(other) { var self = this; if (!$eqeqeq($Module, other)) { $Kernel.$raise($$$('TypeError'), "compared with non class/module") }; var working = self, ancestors, i, length; if (working === other) { return false; } for (i = 0, ancestors = Opal.ancestors(self), length = ancestors.length; i < length; i++) { if (ancestors[i] === other) { return true; } } for (i = 0, ancestors = Opal.ancestors(other), length = ancestors.length; i < length; i++) { if (ancestors[i] === self) { return false; } } return nil; ; }); $def(self, '$<=', function $Module_$lt_eq$3(other) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$equal?'](other)))) { return $ret_or_1 } else { return $rb_lt(self, other) } }); $def(self, '$>', function $Module_$gt$4(other) { var self = this; if (!$eqeqeq($Module, other)) { $Kernel.$raise($$$('TypeError'), "compared with non class/module") }; return $rb_lt(other, self); }); $def(self, '$>=', function $Module_$gt_eq$5(other) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$equal?'](other)))) { return $ret_or_1 } else { return $rb_gt(self, other) } }); $def(self, '$<=>', function $Module_$lt_eq_gt$6(other) { var self = this, lt = nil; if (self === other) { return 0; } ; if (!$eqeqeq($Module, other)) { return nil }; lt = $rb_lt(self, other); if ($truthy(lt['$nil?']())) { return nil }; if ($truthy(lt)) { return -1 } else { return 1 }; }); $def(self, '$alias_method', function $$alias_method(newname, oldname) { var self = this; $deny_frozen_access(self); newname = $coerce_to(newname, $$$('String'), 'to_str'); oldname = $coerce_to(oldname, $$$('String'), 'to_str'); Opal.alias(self, newname, oldname); return self; }); $def(self, '$alias_native', function $$alias_native(mid, jsid) { var self = this; if (jsid == null) jsid = mid; $deny_frozen_access(self); Opal.alias_native(self, mid, jsid); return self; }, -2); $def(self, '$ancestors', function $$ancestors() { var self = this; return Opal.ancestors(self); }); $def(self, '$append_features', function $$append_features(includer) { var self = this; $deny_frozen_access(includer); Opal.append_features(self, includer); return self; }); $def(self, '$attr_accessor', function $$attr_accessor($a) { var $post_args, names, self = this; $post_args = $slice(arguments); names = $post_args; $send(self, 'attr_reader', $to_a(names)); return $send(self, 'attr_writer', $to_a(names)); }, -1); $def(self, '$attr', function $$attr($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; if (args.length == 2 && (args[1] === true || args[1] === false)) { self.$warn("optional boolean argument is obsoleted", (new Map([["uplevel", 1]]))) args[1] ? self.$attr_accessor(args[0]) : self.$attr_reader(args[0]); return nil; } ; return $send(self, 'attr_reader', $to_a(args)); }, -1); $def(self, '$attr_reader', function $$attr_reader($a) { var $post_args, names, self = this; $post_args = $slice(arguments); names = $post_args; $deny_frozen_access(self); var proto = self.$$prototype; for (var i = names.length - 1; i >= 0; i--) { var name = names[i], id = $jsid(name), ivar = $ivar(name); var body = $return_ivar(ivar); // initialize the instance variable as nil Opal.prop(proto, ivar, nil); body.$$parameters = []; body.$$arity = 0; Opal.defn(self, id, body); } ; return nil; }, -1); $def(self, '$attr_writer', function $$attr_writer($a) { var $post_args, names, self = this; $post_args = $slice(arguments); names = $post_args; $deny_frozen_access(self); var proto = self.$$prototype; for (var i = names.length - 1; i >= 0; i--) { var name = names[i], id = $jsid(name + '='), ivar = $ivar(name); var body = $assign_ivar(ivar) body.$$parameters = [['req']]; body.$$arity = 1; // initialize the instance variable as nil Opal.prop(proto, ivar, nil); Opal.defn(self, id, body); } ; return nil; }, -1); $def(self, '$autoload', function $$autoload(const$, path) { var self = this; $deny_frozen_access(self); if (!$$('Opal')['$const_name?'](const$)) { $Kernel.$raise($$$('NameError'), "autoload must be constant name: " + (const$)) } if (path == "") { $Kernel.$raise($$$('ArgumentError'), "empty file name") } if (!self.$$const.hasOwnProperty(const$)) { if (!self.$$autoload) { self.$$autoload = {}; } Opal.const_cache_version++; self.$$autoload[const$] = { path: path, loaded: false, required: false, success: false, exception: false }; if (self.$const_added && !self.$const_added.$$pristine) { self.$const_added(const$); } } return nil; }); $def(self, '$autoload?', function $Module_autoload$ques$7(const$) { var self = this; if (self.$$autoload && self.$$autoload[const$] && !self.$$autoload[const$].required && !self.$$autoload[const$].success) { return self.$$autoload[const$].path; } var ancestors = self.$ancestors(); for (var i = 0, length = ancestors.length; i < length; i++) { if (ancestors[i].$$autoload && ancestors[i].$$autoload[const$] && !ancestors[i].$$autoload[const$].required && !ancestors[i].$$autoload[const$].success) { return ancestors[i].$$autoload[const$].path; } } return nil; }); $def(self, '$class_variables', function $$class_variables() { var self = this; return Object.keys(Opal.class_variables(self)); }); $def(self, '$class_variable_get', function $$class_variable_get(name) { var self = this; name = $Opal['$class_variable_name!'](name); return Opal.class_variable_get(self, name, false);; }); $def(self, '$class_variable_set', function $$class_variable_set(name, value) { var self = this; $deny_frozen_access(self); name = $Opal['$class_variable_name!'](name); return Opal.class_variable_set(self, name, value);; }); $def(self, '$class_variable_defined?', function $Module_class_variable_defined$ques$8(name) { var self = this; name = $Opal['$class_variable_name!'](name); return Opal.class_variables(self).hasOwnProperty(name);; }); $def(self, '$const_added', $return_val(nil)); $Opal.$pristine(self, "const_added"); $def(self, '$remove_class_variable', function $$remove_class_variable(name) { var self = this; $deny_frozen_access(self); name = $Opal['$class_variable_name!'](name); if (Opal.hasOwnProperty.call(self.$$cvars, name)) { var value = self.$$cvars[name]; delete self.$$cvars[name]; return value; } else { $Kernel.$raise($$$('NameError'), "cannot remove " + (name) + " for " + (self)) } ; }); $def(self, '$constants', function $$constants(inherit) { var self = this; if (inherit == null) inherit = true; return Opal.constants(self, inherit);; }, -1); $defs(self, '$constants', function $$constants(inherit) { var self = this; ; if (inherit == null) { var nesting = (self.$$nesting || []).concat($Object), constant, constants = {}, i, ii; for(i = 0, ii = nesting.length; i < ii; i++) { for (constant in nesting[i].$$const) { constants[constant] = true; } } return Object.keys(constants); } else { return Opal.constants(self, inherit) } ; }, -1); $defs(self, '$nesting', function $$nesting() { var self = this; return self.$$nesting || []; }); $def(self, '$const_defined?', function $Module_const_defined$ques$9(name, inherit) { var self = this; if (inherit == null) inherit = true; name = $$('Opal')['$const_name!'](name); if (!$truthy(name['$=~']($$$($Opal, 'CONST_NAME_REGEXP')))) { $Kernel.$raise($$$('NameError').$new("wrong constant name " + (name), name)) }; var module, modules = [self], module_constants, i, ii; // Add up ancestors if inherit is true if (inherit) { modules = modules.concat(Opal.ancestors(self)); // Add Object's ancestors if it's a module – modules have no ancestors otherwise if (self.$$is_module) { modules = modules.concat([$Object]).concat(Opal.ancestors($Object)); } } for (i = 0, ii = modules.length; i < ii; i++) { module = modules[i]; if (module.$$const[name] != null) { return true; } if ( module.$$autoload && module.$$autoload[name] && !module.$$autoload[name].required && !module.$$autoload[name].success ) { return true; } } return false; ; }, -2); $def(self, '$const_get', function $$const_get(name, inherit) { var self = this; if (inherit == null) inherit = true; name = $$('Opal')['$const_name!'](name); if (name.indexOf('::') === 0 && name !== '::'){ name = name.slice(2); } ; if ($truthy(name.indexOf('::') != -1 && name != '::')) { return $send(name.$split("::"), 'inject', [self], function $$10(o, c){ if (o == null) o = nil; if (c == null) c = nil; return o.$const_get(c);}) }; if (!$truthy(name['$=~']($$$($Opal, 'CONST_NAME_REGEXP')))) { $Kernel.$raise($$$('NameError').$new("wrong constant name " + (name), name)) }; if (inherit) { return Opal.$$([self], name); } else { return Opal.const_get_local(self, name); } ; }, -2); $def(self, '$const_missing', function $$const_missing(name) { var self = this, full_const_name = nil; full_const_name = ($eqeq(self, $Object) ? (name) : ("" + (self) + "::" + (name))); return $Kernel.$raise($$$('NameError').$new("uninitialized constant " + (full_const_name), name)); }); $def(self, '$const_set', function $$const_set(name, value) { var self = this; $deny_frozen_access(self); name = $Opal['$const_name!'](name); if (($truthy(name['$!~']($$$($Opal, 'CONST_NAME_REGEXP'))) || ($truthy(name['$start_with?']("::"))))) { $Kernel.$raise($$$('NameError').$new("wrong constant name " + (name), name)) }; $const_set(self, name, value); return value; }); $def(self, '$public_constant', $return_val(nil)); $def(self, '$define_method', function $$define_method(name, method) { var block = $$define_method.$$p || nil, self = this, $ret_or_1 = nil, owner = nil, message = nil; $$define_method.$$p = null; ; ; $deny_frozen_access(self); if (method === undefined && block === nil) $Kernel.$raise($$$('ArgumentError'), "tried to create a Proc object without a block") name = ensure_symbol_or_string(name); ; if ($truthy(method !== undefined)) { block = ($eqeqeq($$$('Proc'), ($ret_or_1 = method)) ? (method) : ($eqeqeq($$$('Method'), $ret_or_1) ? (method.$to_proc().$$unbound) : ($eqeqeq($$$('UnboundMethod'), $ret_or_1) ? (Opal.wrap_method_body(method.$$method)) : ($Kernel.$raise($$$('TypeError'), "wrong argument type " + (method.$class()) + " (expected Proc/Method/UnboundMethod)"))))); if ($truthy(!method.$$is_proc)) { owner = method.$owner(); if (($truthy(owner.$$is_class) && ($not($rb_le(self, owner))))) { message = ($truthy(owner.$$is_singleton) ? ("can't bind singleton method to a different class") : ("bind argument must be a subclass of " + (owner))); $Kernel.$raise($$$('TypeError'), message); }; }; }; if (typeof(Proxy) !== 'undefined') { var meta = Object.create(null) block.$$proxy_target = block block = new Proxy(block, { apply: function(target, self, args) { var old_name = target.$$jsid, old_lambda = target.$$is_lambda; target.$$jsid = name; target.$$is_lambda = true; try { return target.apply(self, args); } catch(e) { if (e === target.$$brk || e === target.$$ret) return e.$v; throw e; } finally { target.$$jsid = old_name; target.$$is_lambda = old_lambda; } } }) } block.$$jsid = name; block.$$s = null; block.$$def = block; block.$$define_meth = true; return Opal.defn(self, $jsid(name), block); ; }, -2); $def(self, '$freeze', function $$freeze() { var self = this; if ($truthy(self['$frozen?']())) { return self }; if (!self.hasOwnProperty('$$base_module')) { $prop(self, '$$base_module', null); } return $freeze(self); ; }); $def(self, '$remove_method', function $$remove_method($a) { var $post_args, names, self = this; $post_args = $slice(arguments); names = $post_args; for (var i = 0; i < names.length; i++) { var name = ensure_symbol_or_string(names[i]); $deny_frozen_access(self); Opal.rdef(self, "$" + name); } ; return self; }, -1); $def(self, '$singleton_class?', function $Module_singleton_class$ques$11() { var self = this; return !!self.$$is_singleton; }); $def(self, '$include', function $$include($a) { var $post_args, mods, self = this; $post_args = $slice(arguments); mods = $post_args; for (var i = mods.length - 1; i >= 0; i--) { var mod = mods[i]; if (!mod.$$is_module) { $Kernel.$raise($$$('TypeError'), "wrong argument type " + ((mod).$class()) + " (expected Module)"); } (mod).$append_features(self); (mod).$included(self); } ; return self; }, -1); $def(self, '$included_modules', function $$included_modules() { var self = this; return Opal.included_modules(self); }); $def(self, '$include?', function $Module_include$ques$12(mod) { var self = this; if (!mod.$$is_module) { $Kernel.$raise($$$('TypeError'), "wrong argument type " + ((mod).$class()) + " (expected Module)"); } var i, ii, mod2, ancestors = Opal.ancestors(self); for (i = 0, ii = ancestors.length; i < ii; i++) { mod2 = ancestors[i]; if (mod2 === mod && mod2 !== self) { return true; } } return false; }); $def(self, '$instance_method', function $$instance_method(name) { var self = this; var meth = self.$$prototype[$jsid(name)]; if (!meth || meth.$$stub) { $Kernel.$raise($$$('NameError').$new("undefined method `" + (name) + "' for class `" + (self.$name()) + "'", name)); } return $$$('UnboundMethod').$new(self, meth.$$owner || self, meth, name); }); $def(self, '$instance_methods', function $$instance_methods(include_super) { var self = this; if (include_super == null) include_super = true; if ($truthy(include_super)) { return Opal.instance_methods(self); } else { return Opal.own_instance_methods(self); } ; }, -1); $def(self, '$included', $return_val(nil)); $def(self, '$extended', $return_val(nil)); $def(self, '$extend_object', function $$extend_object(object) { $deny_frozen_access(object); return nil; }); $def(self, '$method_added', function $$method_added($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return nil; }, -1); $def(self, '$method_removed', function $$method_removed($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return nil; }, -1); $def(self, '$method_undefined', function $$method_undefined($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return nil; }, -1); $def(self, '$module_eval', function $$module_eval($a) { var block = $$module_eval.$$p || nil, $post_args, args, $b, self = this, string = nil, file = nil, _lineno = nil, default_eval_options = nil, $ret_or_1 = nil, compiling_options = nil, compiled = nil; $$module_eval.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if (($truthy(block['$nil?']()) && ($truthy(!!Opal.compile)))) { if (!$truthy($range(1, 3, false)['$cover?'](args.$size()))) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (0 for 1..3)") }; $b = [].concat($to_a(args)), (string = ($b[0] == null ? nil : $b[0])), (file = ($b[1] == null ? nil : $b[1])), (_lineno = ($b[2] == null ? nil : $b[2])), $b; default_eval_options = (new Map([["file", ($truthy(($ret_or_1 = file)) ? ($ret_or_1) : ("(eval)"))], ["eval", true]])); compiling_options = (new Map([['arity_check', false]])).$merge(default_eval_options); compiled = $Opal.$compile(string, compiling_options); block = $send($Kernel, 'proc', [], function $$13(){var self = $$13.$$s == null ? this : $$13.$$s; return new Function("Opal,self", "return " + compiled)(Opal, self);}, {$$s: self}); } else if ($truthy(args['$any?']())) { $Kernel.$raise($$$('ArgumentError'), "" + ("wrong number of arguments (" + (args.$size()) + " for 0)") + "\n\n NOTE:If you want to enable passing a String argument please add \"require 'opal-parser'\" to your script\n") }; var old = block.$$s, result; block.$$s = null; result = block.apply(self, [self]); block.$$s = old; return result; ; }, -1); $def(self, '$module_exec', function $$module_exec($a) { var block = $$module_exec.$$p || nil, $post_args, args, self = this; $$module_exec.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if (block === nil) { $Kernel.$raise($$$('LocalJumpError'), "no block given") } var block_self = block.$$s, result; block.$$s = null; result = block.apply(self, args); block.$$s = block_self; return result; ; }, -1); $def(self, '$method_defined?', function $Module_method_defined$ques$14(method) { var self = this; var body = self.$$prototype[$jsid(method)]; return (!!body) && !body.$$stub; }); $def(self, '$module_function', function $$module_function($a) { var $post_args, methods, self = this; $post_args = $slice(arguments); methods = $post_args; $deny_frozen_access(self); if (methods.length === 0) { self.$$module_function = true; return nil; } else { for (var i = 0, length = methods.length; i < length; i++) { var meth = methods[i], id = $jsid(meth), func = self.$$prototype[id]; Opal.defs(self, id, func); } return methods.length === 1 ? methods[0] : methods; } return self; ; }, -1); $def(self, '$name', function $$name() { var self = this; if (self.$$full_name) { return self.$$full_name; } var result = [], base = self; while (base) { // Give up if any of the ancestors is unnamed if (base.$$name === nil || base.$$name == null) return nil; result.unshift(base.$$name); base = base.$$base_module; if (base === $Object) { break; } } if (result.length === 0) { return nil; } return self.$$full_name = result.join('::'); }); $def(self, '$prepend', function $$prepend($a) { var $post_args, mods, self = this; $post_args = $slice(arguments); mods = $post_args; if (mods.length === 0) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (given 0, expected 1+)") } for (var i = mods.length - 1; i >= 0; i--) { var mod = mods[i]; if (!mod.$$is_module) { $Kernel.$raise($$$('TypeError'), "wrong argument type " + ((mod).$class()) + " (expected Module)"); } (mod).$prepend_features(self); (mod).$prepended(self); } ; return self; }, -1); $def(self, '$prepend_features', function $$prepend_features(prepender) { var self = this; $deny_frozen_access(prepender); if (!self.$$is_module) { $Kernel.$raise($$$('TypeError'), "wrong argument type " + (self.$class()) + " (expected Module)"); } Opal.prepend_features(self, prepender) ; return self; }); $def(self, '$prepended', $return_val(nil)); $def(self, '$remove_const', function $$remove_const(name) { var self = this; $deny_frozen_access(self); return Opal.const_remove(self, name);; }); $def(self, '$to_s', function $$to_s() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = Opal.Module.$name.call(self)))) { return $ret_or_1 } else { return "#<" + (self.$$is_module ? 'Module' : 'Class') + ":0x" + (self.$__id__().$to_s(16)) + ">" } }); $def(self, '$undef_method', function $$undef_method($a) { var $post_args, names, self = this; $post_args = $slice(arguments); names = $post_args; for (var i = 0; i < names.length; i++) { var name = ensure_symbol_or_string(names[i]); $deny_frozen_access(self); Opal.udef(self, "$" + name); } ; return self; }, -1); $def(self, '$instance_variables', function $$instance_variables() { var self = this, consts = nil; consts = (Opal.Module.$$nesting = $nesting, self.$constants()); var result = []; $each_ivar(self, function(name) { if (name !== 'constructor' && !consts['$include?'](name)) { result.push('@' + name); } }); return result; ; }); function copyInstanceMethods(from, to) { var i, method_names = Opal.own_instance_methods(from); for (i = 0; i < method_names.length; i++) { var name = method_names[i], jsid = $jsid(name), body = from.$$prototype[jsid], wrapped = Opal.wrap_method_body(body); wrapped.$$jsid = name; Opal.defn(to, jsid, wrapped); } } function copyIncludedModules(from, to) { var modules = from.$$own_included_modules; for (var i = modules.length - 1; i >= 0; i--) { Opal.append_features(modules[i], to); } } function copyPrependedModules(from, to) { var modules = from.$$own_prepended_modules; for (var i = modules.length - 1; i >= 0; i--) { Opal.prepend_features(modules[i], to); } } ; $def(self, '$initialize_copy', function $$initialize_copy(other) { var self = this; copyInstanceMethods(other, self); copyIncludedModules(other, self); copyPrependedModules(other, self); self.$$cloned_from = other.$$cloned_from.concat(other); ; self.$copy_class_variables(other); return self.$copy_constants(other); }); $def(self, '$initialize_dup', function $$initialize_dup(other) { var $yield = $$initialize_dup.$$p || nil, self = this; $$initialize_dup.$$p = null; $send2(self, $find_super(self, 'initialize_dup', $$initialize_dup, false, true), 'initialize_dup', [other], $yield); return self.$copy_singleton_methods(other); }); $def(self, '$copy_class_variables', function $$copy_class_variables(other) { var self = this; for (var name in other.$$cvars) { self.$$cvars[name] = other.$$cvars[name]; } }); $def(self, '$copy_constants', function $$copy_constants(other) { var self = this; var name, other_constants = other.$$const; for (name in other_constants) { $const_set(self, name, other_constants[name]); } }); $def(self, '$refine', function $$refine(klass) { var block = $$refine.$$p || nil, $a, self = this, refinement_module = nil, m = nil, klass_id = nil; $$refine.$$p = null; ; $a = [self, nil, nil], (refinement_module = $a[0]), (m = $a[1]), (klass_id = $a[2]), $a; klass_id = Opal.id(klass); if (typeof self.$$refine_modules === "undefined") { self.$$refine_modules = Object.create(null); } if (typeof self.$$refine_modules[klass_id] === "undefined") { m = self.$$refine_modules[klass_id] = $$$('Refinement').$new(); } else { m = self.$$refine_modules[klass_id]; } m.refinement_module = refinement_module m.refined_class = klass ; $send(m, 'class_exec', [], block.$to_proc()); return m; }); $def(self, '$refinements', function $$refinements() { var self = this; var refine_modules = self.$$refine_modules, hash = (new Map());; if (typeof refine_modules === "undefined") return hash; for (var id in refine_modules) { hash['$[]='](refine_modules[id].refined_class, refine_modules[id]); } return hash; }); $def(self, '$using', function $$using(mod) { return $Kernel.$raise("Module#using is not permitted in methods") }); $alias(self, "class_eval", "module_eval"); $alias(self, "class_exec", "module_exec"); return $alias(self, "inspect", "to_s"); })('::', null, $nesting); return (function($base, $super) { var self = $klass($base, $super, 'Refinement'); var $proto = self.$$prototype; $proto.refinement_module = $proto.refined_class = nil; self.$attr_reader("refined_class"); return $def(self, '$inspect', function $$inspect() { var $yield = $$inspect.$$p || nil, self = this; $$inspect.$$p = null; if ($truthy(self.refinement_module)) { return "#" } else { return $send2(self, $find_super(self, 'inspect', $$inspect, false, true), 'inspect', [], $yield) } }); })('::', $Module); }; Opal.modules["corelib/class"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $send = Opal.send, $defs = Opal.defs, $def = Opal.def, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $eqeq = Opal.eqeq, $truthy = Opal.truthy, $rb_plus = Opal.rb_plus, $return_val = Opal.return_val, $slice = Opal.slice, $send2 = Opal.send2, $find_super = Opal.find_super, $Kernel = Opal.Kernel, $alias = Opal.alias, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,class_eval,to_proc,==,nil?,raise,class,copy_instance_variables,copy_singleton_methods,initialize_clone,frozen?,freeze,initialize_dup,+,subclasses,flatten,map,allocate,name,to_s'); self.$require("corelib/module"); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Class'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs(self, '$new', function $Class_new$1(superclass) { var block = $Class_new$1.$$p || nil; $Class_new$1.$$p = null; ; if (superclass == null) superclass = $$('Object'); if (!superclass.$$is_class) { throw Opal.TypeError.$new("superclass must be a Class"); } var klass = Opal.allocate_class(nil, superclass); superclass.$inherited(klass); ((block !== nil) ? ($send((klass), 'class_eval', [], block.$to_proc())) : nil) return klass; ; }, -1); $def(self, '$allocate', function $$allocate() { var self = this; var obj = new self.$$constructor(); obj.$$id = Opal.uid(); return obj; }); $def(self, '$clone', function $$clone($kwargs) { var freeze, self = this, copy = nil; $kwargs = $ensure_kwargs($kwargs); freeze = $hash_get($kwargs, "freeze");if (freeze == null) freeze = nil; if (!(($truthy(freeze['$nil?']()) || ($eqeq(freeze, true))) || ($eqeq(freeze, false)))) { self.$raise($$('ArgumentError'), "unexpected value for freeze: " + (freeze.$class())) }; copy = Opal.allocate_class(nil, self.$$super); copy.$copy_instance_variables(self); copy.$copy_singleton_methods(self); copy.$initialize_clone(self, (new Map([["freeze", freeze]]))); if (($eqeq(freeze, true) || (($truthy(freeze['$nil?']()) && ($truthy(self['$frozen?']())))))) { copy.$freeze() }; return copy; }, -1); $def(self, '$dup', function $$dup() { var self = this, copy = nil; copy = Opal.allocate_class(nil, self.$$super); copy.$copy_instance_variables(self); copy.$initialize_dup(self); return copy; }); $def(self, '$descendants', function $$descendants() { var self = this; return $rb_plus(self.$subclasses(), $send(self.$subclasses(), 'map', [], "descendants".$to_proc()).$flatten()) }); $def(self, '$inherited', $return_val(nil)); $def(self, '$new', function $Class_new$2($a) { var block = $Class_new$2.$$p || nil, $post_args, args, self = this; $Class_new$2.$$p = null; ; $post_args = $slice(arguments); args = $post_args; var object = self.$allocate(); Opal.send(object, object.$initialize, args, block); return object; ; }, -1); $def(self, '$subclasses', function $$subclasses() { var self = this; if (typeof WeakRef !== 'undefined') { var i, subclass, out = []; for (i = 0; i < self.$$subclasses.length; i++) { subclass = self.$$subclasses[i].deref(); if (subclass !== undefined) { out.push(subclass); } } return out; } else { return self.$$subclasses; } }); $def(self, '$superclass', function $$superclass() { var self = this; return self.$$super || nil; }); $def(self, '$to_s', function $$to_s() { var $yield = $$to_s.$$p || nil, self = this; $$to_s.$$p = null; var singleton_of = self.$$singleton_of; if (singleton_of && singleton_of.$$is_a_module) { return "#"; } else if (singleton_of) { // a singleton class created from an object return "#>"; } return $send2(self, $find_super(self, 'to_s', $$to_s, false, true), 'to_s', [], null); }); $def(self, '$attached_object', function $$attached_object() { var self = this; if (self.$$singleton_of != null) { return self.$$singleton_of; } else { $Kernel.$raise($$$('TypeError'), "`" + (self) + "' is not a singleton class") } }); return $alias(self, "inspect", "to_s"); })('::', null, $nesting); }; Opal.modules["corelib/basic_object"] = function(Opal) {/* Generated by Opal 1.8.2 */ "use strict"; var $klass = Opal.klass, $slice = Opal.slice, $def = Opal.def, $alias = Opal.alias, $return_val = Opal.return_val, $Opal = Opal.Opal, $truthy = Opal.truthy, $range = Opal.range, $Kernel = Opal.Kernel, $to_a = Opal.to_a, $send = Opal.send, $eqeq = Opal.eqeq, $rb_ge = Opal.rb_ge, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('==,raise,inspect,pristine,!,nil?,cover?,size,merge,compile,proc,[],first,>=,length,instance_variable_get,any?,new,caller'); return (function($base, $super) { var self = $klass($base, $super, 'BasicObject'); $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return nil; }, -1); $def(self, '$==', function $BasicObject_$eq_eq$1(other) { var self = this; return self === other; }); $def(self, '$eql?', function $BasicObject_eql$ques$2(other) { var self = this; return self['$=='](other) }); $alias(self, "equal?", "=="); $def(self, '$__id__', function $$__id__() { var self = this; if (self.$$id != null) { return self.$$id; } Opal.prop(self, '$$id', Opal.uid()); return self.$$id; }); $def(self, '$__send__', function $$__send__(symbol, $a) { var block = $$__send__.$$p || nil, $post_args, args, self = this; $$__send__.$$p = null; ; $post_args = $slice(arguments, 1); args = $post_args; if (!symbol.$$is_string) { self.$raise($$$('TypeError'), "" + (self.$inspect()) + " is not a symbol nor a string") } var func = self[Opal.jsid(symbol)]; if (func) { if (block !== nil) { func.$$p = block; } return func.apply(self, args); } if (block !== nil) { self.$method_missing.$$p = block; } return self.$method_missing.apply(self, [symbol].concat(args)); ; }, -2); $def(self, '$!', $return_val(false)); $Opal.$pristine("!"); $def(self, '$!=', function $BasicObject_$not_eq$3(other) { var self = this; return self['$=='](other)['$!']() }); $def(self, '$instance_eval', function $$instance_eval($a) { var block = $$instance_eval.$$p || nil, $post_args, args, $b, self = this, string = nil, file = nil, _lineno = nil, default_eval_options = nil, $ret_or_1 = nil, compiling_options = nil, compiled = nil; $$instance_eval.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if (($truthy(block['$nil?']()) && ($truthy(!!Opal.compile)))) { if (!$truthy($range(1, 3, false)['$cover?'](args.$size()))) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (0 for 1..3)") }; $b = [].concat($to_a(args)), (string = ($b[0] == null ? nil : $b[0])), (file = ($b[1] == null ? nil : $b[1])), (_lineno = ($b[2] == null ? nil : $b[2])), $b; default_eval_options = (new Map([["file", ($truthy(($ret_or_1 = file)) ? ($ret_or_1) : ("(eval)"))], ["eval", true]])); compiling_options = (new Map([['arity_check', false]])).$merge(default_eval_options); compiled = $Opal.$compile(string, compiling_options); block = $send($Kernel, 'proc', [], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; return new Function("Opal,self", "return " + compiled)(Opal, self);}, {$$s: self}); } else if ((($truthy(block['$nil?']()) && ($truthy($rb_ge(args.$length(), 1)))) && ($eqeq(args.$first()['$[]'](0), "@")))) { return self.$instance_variable_get(args.$first()) } else if ($truthy(args['$any?']())) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (args.$size()) + " for 0)") }; var old = block.$$s, result; block.$$s = null; // Need to pass $$eval so that method definitions know if this is // being done on a class/module. Cannot be compiler driven since // send(:instance_eval) needs to work. if (self.$$is_a_module) { self.$$eval = true; try { result = block.call(self, self); } finally { self.$$eval = false; } } else { result = block.call(self, self); } block.$$s = old; return result; ; }, -1); $def(self, '$instance_exec', function $$instance_exec($a) { var block = $$instance_exec.$$p || nil, $post_args, args, self = this; $$instance_exec.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if (!$truthy(block)) { $Kernel.$raise($$$('ArgumentError'), "no block given") }; var block_self = block.$$s, result; block.$$s = null; if (self.$$is_a_module) { self.$$eval = true; try { result = block.apply(self, args); } finally { self.$$eval = false; } } else { result = block.apply(self, args); } block.$$s = block_self; return result; ; }, -1); $def(self, '$singleton_method_added', function $$singleton_method_added($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return nil; }, -1); $def(self, '$singleton_method_removed', function $$singleton_method_removed($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return nil; }, -1); $def(self, '$singleton_method_undefined', function $$singleton_method_undefined($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return nil; }, -1); $def(self, '$method_missing', function $$method_missing(symbol, $a) { var block = $$method_missing.$$p || nil, $post_args, args, self = this, inspect_result = nil; $$method_missing.$$p = null; ; $post_args = $slice(arguments, 1); args = $post_args; inspect_result = $Opal.$inspect(self); return $Kernel.$raise($$$('NoMethodError').$new("undefined method `" + (symbol) + "' for " + (inspect_result), symbol, args), nil, $Kernel.$caller(1)); }, -2); $Opal.$pristine(self, "method_missing"); return $def(self, '$respond_to_missing?', function $BasicObject_respond_to_missing$ques$5(method_name, include_all) { if (include_all == null) include_all = false; return false; }, -2); })('::', null) }; Opal.modules["corelib/kernel"] = function(Opal) {/* Generated by Opal 1.8.2 */ "use strict"; var $truthy = Opal.truthy, $coerce_to = Opal.coerce_to, $respond_to = Opal.respond_to, $Opal = Opal.Opal, $deny_frozen_access = Opal.deny_frozen_access, $freeze = Opal.freeze, $freeze_props = Opal.freeze_props, $jsid = Opal.jsid, $each_ivar = Opal.each_ivar, $module = Opal.module, $return_val = Opal.return_val, $def = Opal.def, $Kernel = Opal.Kernel, $gvars = Opal.gvars, $slice = Opal.slice, $send = Opal.send, $to_a = Opal.to_a, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $eqeq = Opal.eqeq, $rb_plus = Opal.rb_plus, $extract_kwargs = Opal.extract_kwargs, $eqeqeq = Opal.eqeqeq, $return_self = Opal.return_self, $rb_le = Opal.rb_le, $rb_lt = Opal.rb_lt, $Object = Opal.Object, $alias = Opal.alias, $klass = Opal.klass, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('!,=~,==,object_id,raise,new,class,coerce_to?,<<,map,caller,nil?,allocate,copy_instance_variables,copy_singleton_methods,initialize_clone,frozen?,freeze,initialize_copy,define_method,singleton_class,to_proc,initialize_dup,for,empty?,pop,call,append_features,extend_object,extended,gets,__id__,include?,each,instance_variables,instance_variable_get,inspect,+,to_s,instance_variable_name!,respond_to?,to_int,to_i,Integer,coerce_to!,===,enum_for,result,shift,write,format,puts,<=,length,[],print,readline,<,first,split,to_str,exception,rand,respond_to_missing?,pristine,try_convert!,expand_path,join,start_with?,new_seed,srand,tag,value,open,is_a?,__send__,yield_self,include'); (function($base, $parent_nesting) { var self = $module($base, 'Kernel'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$=~', $return_val(false)); $def(self, '$!~', function $Kernel_$excl_tilde$1(obj) { var self = this; return self['$=~'](obj)['$!']() }); $def(self, '$===', function $Kernel_$eq_eq_eq$2(other) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$object_id()['$=='](other.$object_id())))) { return $ret_or_1 } else { return self['$=='](other) } }); $def(self, '$<=>', function $Kernel_$lt_eq_gt$3(other) { var self = this; // set guard for infinite recursion self.$$comparable = true; var x = self['$=='](other); if (x && x !== nil) { return 0; } return nil; }); $def(self, '$method', function $$method(name) { var self = this; var meth = self[$jsid(name)]; if (!meth || meth.$$stub) { $Kernel.$raise($$$('NameError').$new("undefined method `" + (name) + "' for class `" + (self.$class()) + "'", name)); } return $$$('Method').$new(self, meth.$$owner || self.$class(), meth, name); }); $def(self, '$methods', function $$methods(all) { var self = this; if (all == null) all = true; if ($truthy(all)) { return Opal.methods(self); } else { return Opal.own_methods(self); } ; }, -1); $def(self, '$public_methods', function $$public_methods(all) { var self = this; if (all == null) all = true; if ($truthy(all)) { return Opal.methods(self); } else { return Opal.receiver_methods(self); } ; }, -1); $def(self, '$Array', function $$Array(object) { var coerced; if (object === nil) { return []; } if (object.$$is_array) { return object; } coerced = $Opal['$coerce_to?'](object, $$$('Array'), "to_ary"); if (coerced !== nil) { return coerced; } coerced = $Opal['$coerce_to?'](object, $$$('Array'), "to_a"); if (coerced !== nil) { return coerced; } return [object]; }); $def(self, '$at_exit', function $$at_exit() { var block = $$at_exit.$$p || nil, $ret_or_1 = nil; if ($gvars.__at_exit__ == null) $gvars.__at_exit__ = nil; $$at_exit.$$p = null; ; $gvars.__at_exit__ = ($truthy(($ret_or_1 = $gvars.__at_exit__)) ? ($ret_or_1) : ([])); $gvars.__at_exit__['$<<'](block); return block; }); $def(self, '$caller', function $$caller(start, length) { if (start == null) start = 1; if (length == null) length = nil; var stack, result; stack = new Error().$backtrace(); result = []; for (var i = start + 1, ii = stack.length; i < ii; i++) { if (!stack[i].match(/runtime\.js/)) { result.push(stack[i]); } } if (length != nil) result = result.slice(0, length); return result; ; }, -1); $def(self, '$caller_locations', function $$caller_locations($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return $send($send(self, 'caller', $to_a(args)), 'map', [], function $$4(loc){ if (loc == null) loc = nil; return $$$($$$($$$('Thread'), 'Backtrace'), 'Location').$new(loc);}); }, -1); $def(self, '$class', function $Kernel_class$5() { var self = this; return self.$$class; }); $def(self, '$copy_instance_variables', function $$copy_instance_variables(other) { var self = this; var keys = Object.keys(other), i, ii, name; for (i = 0, ii = keys.length; i < ii; i++) { name = keys[i]; if (name.charAt(0) !== '$' && other.hasOwnProperty(name)) { self[name] = other[name]; } } }); $def(self, '$copy_singleton_methods', function $$copy_singleton_methods(other) { var self = this; var i, name, names, length; if (other.hasOwnProperty('$$meta') && other.$$meta !== null) { var other_singleton_class = Opal.get_singleton_class(other); var self_singleton_class = Opal.get_singleton_class(self); names = Object.getOwnPropertyNames(other_singleton_class.$$prototype); for (i = 0, length = names.length; i < length; i++) { name = names[i]; if (Opal.is_method(name)) { self_singleton_class.$$prototype[name] = other_singleton_class.$$prototype[name]; } } self_singleton_class.$$const = Object.assign({}, other_singleton_class.$$const); Object.setPrototypeOf( self_singleton_class.$$prototype, Object.getPrototypeOf(other_singleton_class.$$prototype) ); } for (i = 0, names = Object.getOwnPropertyNames(other), length = names.length; i < length; i++) { name = names[i]; if (name.charAt(0) === '$' && name.charAt(1) !== '$' && other.hasOwnProperty(name)) { self[name] = other[name]; } } }); $def(self, '$clone', function $$clone($kwargs) { var freeze, self = this, copy = nil; $kwargs = $ensure_kwargs($kwargs); freeze = $hash_get($kwargs, "freeze");if (freeze == null) freeze = nil; if (!(($truthy(freeze['$nil?']()) || ($eqeq(freeze, true))) || ($eqeq(freeze, false)))) { self.$raise($$('ArgumentError'), "unexpected value for freeze: " + (freeze.$class())) }; copy = self.$class().$allocate(); copy.$copy_instance_variables(self); copy.$copy_singleton_methods(self); copy.$initialize_clone(self, (new Map([["freeze", freeze]]))); if (($eqeq(freeze, true) || (($truthy(freeze['$nil?']()) && ($truthy(self['$frozen?']())))))) { copy.$freeze() }; return copy; }, -1); $def(self, '$initialize_clone', function $$initialize_clone(other, $kwargs) { var freeze, self = this; $kwargs = $ensure_kwargs($kwargs); freeze = $hash_get($kwargs, "freeze");if (freeze == null) freeze = nil; self.$initialize_copy(other); return self; }, -2); $def(self, '$define_singleton_method', function $$define_singleton_method(name, method) { var block = $$define_singleton_method.$$p || nil, self = this; $$define_singleton_method.$$p = null; ; ; return $send(self.$singleton_class(), 'define_method', [name, method], block.$to_proc()); }, -2); $def(self, '$dup', function $$dup() { var self = this, copy = nil; copy = self.$class().$allocate(); copy.$copy_instance_variables(self); copy.$initialize_dup(self); return copy; }); $def(self, '$initialize_dup', function $$initialize_dup(other) { var self = this; return self.$initialize_copy(other) }); $def(self, '$enum_for', function $$enum_for($a, $b) { var block = $$enum_for.$$p || nil, $post_args, method, args, self = this; $$enum_for.$$p = null; ; $post_args = $slice(arguments); if ($post_args.length > 0) method = $post_args.shift();if (method == null) method = "each"; args = $post_args; return $send($$$('Enumerator'), 'for', [self, method].concat($to_a(args)), block.$to_proc()); }, -1); $def(self, '$equal?', function $Kernel_equal$ques$6(other) { var self = this; return self === other; }); $def(self, '$exit', function $$exit(status) { var $ret_or_1 = nil, block = nil; if ($gvars.__at_exit__ == null) $gvars.__at_exit__ = nil; if (status == null) status = true; $gvars.__at_exit__ = ($truthy(($ret_or_1 = $gvars.__at_exit__)) ? ($ret_or_1) : ([])); while (!($truthy($gvars.__at_exit__['$empty?']()))) { block = $gvars.__at_exit__.$pop(); block.$call(); }; if (status.$$is_boolean) { status = status ? 0 : 1; } else { status = $coerce_to(status, $$$('Integer'), 'to_int') } Opal.exit(status); ; return nil; }, -1); $def(self, '$extend', function $$extend($a) { var $post_args, mods, self = this; $post_args = $slice(arguments); mods = $post_args; if (mods.length == 0) { self.$raise($$$('ArgumentError'), "wrong number of arguments (given 0, expected 1+)") } $deny_frozen_access(self); var singleton = self.$singleton_class(); for (var i = mods.length - 1; i >= 0; i--) { var mod = mods[i]; if (!mod.$$is_module) { $Kernel.$raise($$$('TypeError'), "wrong argument type " + ((mod).$class()) + " (expected Module)"); } (mod).$append_features(singleton); (mod).$extend_object(self); (mod).$extended(self); } ; return self; }, -1); $def(self, '$freeze', function $$freeze() { var self = this; if ($truthy(self['$frozen?']())) { return self }; if (typeof(self) === "object") { $freeze_props(self); return $freeze(self); } return self; ; }); $def(self, '$frozen?', function $Kernel_frozen$ques$7() { var self = this; switch (typeof(self)) { case "string": case "symbol": case "number": case "boolean": return true; case "object": return (self.$$frozen || false); default: return false; } }); $def(self, '$gets', function $$gets($a) { var $post_args, args; if ($gvars.stdin == null) $gvars.stdin = nil; $post_args = $slice(arguments); args = $post_args; return $send($gvars.stdin, 'gets', $to_a(args)); }, -1); $def(self, '$hash', function $$hash() { var self = this; return self.$__id__() }); $def(self, '$initialize_copy', $return_val(nil)); var inspect_stack = []; $def(self, '$inspect', function $$inspect() { var self = this, ivs = nil, id = nil, pushed = nil, e = nil; return (function() { try { try { ivs = ""; id = self.$__id__(); if ($truthy((inspect_stack)['$include?'](id))) { ivs = " ..." } else { (inspect_stack)['$<<'](id); pushed = true; $send(self.$instance_variables(), 'each', [], function $$8(i){var self = $$8.$$s == null ? this : $$8.$$s, ivar = nil, inspect = nil; if (i == null) i = nil; ivar = self.$instance_variable_get(i); inspect = $$('Opal').$inspect(ivar); return (ivs = $rb_plus(ivs, " " + (i) + "=" + (inspect)));}, {$$s: self}); }; return "#<" + (self.$class()) + ":0x" + (id.$to_s(16)) + (ivs) + ">"; } catch ($err) { if (Opal.rescue($err, [$$('StandardError')])) {(e = $err) try { return "#<" + (self.$class()) + ":0x" + (id.$to_s(16)) + ">" } finally { Opal.pop_exception($err); } } else { throw $err; } } } finally { ($truthy(pushed) ? ((inspect_stack).$pop()) : nil) }; })() }); $def(self, '$instance_of?', function $Kernel_instance_of$ques$9(klass) { var self = this; if (!klass.$$is_class && !klass.$$is_module) { $Kernel.$raise($$$('TypeError'), "class or module required"); } return self.$$class === klass; }); $def(self, '$instance_variable_defined?', function $Kernel_instance_variable_defined$ques$10(name) { var self = this; name = $Opal['$instance_variable_name!'](name); return Opal.hasOwnProperty.call(self, name.substr(1));; }); $def(self, '$instance_variable_get', function $$instance_variable_get(name) { var self = this; name = $Opal['$instance_variable_name!'](name); var ivar = self[Opal.ivar(name.substr(1))]; return ivar == null ? nil : ivar; ; }); $def(self, '$instance_variable_set', function $$instance_variable_set(name, value) { var self = this; $deny_frozen_access(self); name = $Opal['$instance_variable_name!'](name); return self[Opal.ivar(name.substr(1))] = value;; }); $def(self, '$remove_instance_variable', function $$remove_instance_variable(name) { var self = this; name = $Opal['$instance_variable_name!'](name); var key = Opal.ivar(name.substr(1)), val; if (self.hasOwnProperty(key)) { val = self[key]; delete self[key]; return val; } ; return $Kernel.$raise($$$('NameError'), "instance variable " + (name) + " not defined"); }); $def(self, '$instance_variables', function $$instance_variables() { var self = this; var result = [], name; $each_ivar(self, function(name) { if (name.substr(-1) === '$') { name = name.slice(0, name.length - 1); } result.push('@' + name); }); return result; }); $def(self, '$Integer', function $$Integer(value, $a, $b) { var $post_args, $kwargs, base, exception; $post_args = $slice(arguments, 1); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); if ($post_args.length > 0) base = $post_args.shift();; exception = $hash_get($kwargs, "exception");if (exception == null) exception = true; var i, str, base_digits; exception = $truthy(exception); if (!value.$$is_string) { if (base !== undefined) { if (exception) { $Kernel.$raise($$$('ArgumentError'), "base specified for non string value") } else { return nil; } } if (value === nil) { if (exception) { $Kernel.$raise($$$('TypeError'), "can't convert nil into Integer") } else { return nil; } } if (value.$$is_number) { if (value === Infinity || value === -Infinity || isNaN(value)) { if (exception) { $Kernel.$raise($$$('FloatDomainError'), value) } else { return nil; } } return Math.floor(value); } if (value['$respond_to?']("to_int")) { i = value.$to_int(); if (Opal.is_a(i, $$$('Integer'))) { return i; } } if (value['$respond_to?']("to_i")) { i = value.$to_i(); if (Opal.is_a(i, $$$('Integer'))) { return i; } } if (exception) { $Kernel.$raise($$$('TypeError'), "can't convert " + (value.$class()) + " into Integer") } else { return nil; } } if (value === "0") { return 0; } if (base === undefined) { base = 0; } else { base = $coerce_to(base, $$$('Integer'), 'to_int'); if (base === 1 || base < 0 || base > 36) { if (exception) { $Kernel.$raise($$$('ArgumentError'), "invalid radix " + (base)) } else { return nil; } } } str = value.toLowerCase(); str = str.replace(/(\d)_(?=\d)/g, '$1'); str = str.replace(/^(\s*[+-]?)(0[bodx]?)/, function (_, head, flag) { switch (flag) { case '0b': if (base === 0 || base === 2) { base = 2; return head; } // no-break case '0': case '0o': if (base === 0 || base === 8) { base = 8; return head; } // no-break case '0d': if (base === 0 || base === 10) { base = 10; return head; } // no-break case '0x': if (base === 0 || base === 16) { base = 16; return head; } // no-break } if (exception) { $Kernel.$raise($$$('ArgumentError'), "invalid value for Integer(): \"" + (value) + "\"") } else { return nil; } }); base = (base === 0 ? 10 : base); base_digits = '0-' + (base <= 10 ? base - 1 : '9a-' + String.fromCharCode(97 + (base - 11))); if (!(new RegExp('^\\s*[+-]?[' + base_digits + ']+\\s*$')).test(str)) { if (exception) { $Kernel.$raise($$$('ArgumentError'), "invalid value for Integer(): \"" + (value) + "\"") } else { return nil; } } i = parseInt(str, base); if (isNaN(i)) { if (exception) { $Kernel.$raise($$$('ArgumentError'), "invalid value for Integer(): \"" + (value) + "\"") } else { return nil; } } return i; ; }, -2); $def(self, '$Float', function $$Float(value, $kwargs) { var exception; $kwargs = $ensure_kwargs($kwargs); exception = $hash_get($kwargs, "exception");if (exception == null) exception = true; var str; exception = $truthy(exception); if (value === nil) { if (exception) { $Kernel.$raise($$$('TypeError'), "can't convert nil into Float") } else { return nil; } } if (value.$$is_string) { str = value.toString(); str = str.replace(/(\d)_(?=\d)/g, '$1'); //Special case for hex strings only: if (/^\s*[-+]?0[xX][0-9a-fA-F]+\s*$/.test(str)) { return $Kernel.$Integer(str); } if (!/^\s*[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\s*$/.test(str)) { if (exception) { $Kernel.$raise($$$('ArgumentError'), "invalid value for Float(): \"" + (value) + "\"") } else { return nil; } } return parseFloat(str); } if (exception) { return $Opal['$coerce_to!'](value, $$$('Float'), "to_f"); } else { return $coerce_to(value, $$$('Float'), 'to_f'); } ; }, -2); $def(self, '$Hash', function $$Hash(arg) { if (($truthy(arg['$nil?']()) || ($eqeq(arg, [])))) { return (new Map()) }; if ($eqeqeq($$$('Hash'), arg)) { return arg }; return $Opal['$coerce_to!'](arg, $$$('Hash'), "to_hash"); }); $def(self, '$is_a?', function $Kernel_is_a$ques$11(klass) { var self = this; if (!klass.$$is_class && !klass.$$is_module) { $Kernel.$raise($$$('TypeError'), "class or module required"); } return Opal.is_a(self, klass); }); $def(self, '$itself', $return_self); $def(self, '$lambda', function $$lambda() { var block = $$lambda.$$p || nil; $$lambda.$$p = null; ; return Opal.lambda(block);; }); $def(self, '$load', function $$load(file) { file = $Opal['$coerce_to!'](file, $$$('String'), "to_str"); return Opal.load(file); }); $def(self, '$loop', function $$loop() { var $yield = $$loop.$$p || nil, self = this, e = nil; $$loop.$$p = null; if (!($yield !== nil)) { return $send(self, 'enum_for', ["loop"], function $$12(){ return $$$($$$('Float'), 'INFINITY')}) }; while ($truthy(true)) { try { Opal.yieldX($yield, []) } catch ($err) { if (Opal.rescue($err, [$$$('StopIteration')])) {(e = $err) try { return e.$result() } finally { Opal.pop_exception($err); } } else { throw $err; } }; }; return self; }); $def(self, '$nil?', $return_val(false)); $def(self, '$printf', function $$printf($a) { var $post_args, args, self = this, io = nil; if ($gvars.stdout == null) $gvars.stdout = nil; $post_args = $slice(arguments); args = $post_args; if ($truthy(args['$empty?']())) { return nil }; io = ($truthy(args[0].$$is_string) ? ($gvars.stdout) : (args.$shift())); io.$write($send(self, 'format', $to_a(args))); return nil; }, -1); $def(self, '$proc', function $$proc() { var block = $$proc.$$p || nil; $$proc.$$p = null; ; if (!$truthy(block)) { $Kernel.$raise($$$('ArgumentError'), "tried to create Proc object without a block") }; block.$$is_lambda = false; return block; }); $def(self, '$puts', function $$puts($a) { var $post_args, strs; if ($gvars.stdout == null) $gvars.stdout = nil; $post_args = $slice(arguments); strs = $post_args; return $send($gvars.stdout, 'puts', $to_a(strs)); }, -1); $def(self, '$p', function $$p($a) { var $post_args, args; $post_args = $slice(arguments); args = $post_args; $send(args, 'each', [], function $$13(obj){ if ($gvars.stdout == null) $gvars.stdout = nil; if (obj == null) obj = nil; return $gvars.stdout.$puts(obj.$inspect());}); if ($truthy($rb_le(args.$length(), 1))) { return args['$[]'](0) } else { return args }; }, -1); $def(self, '$print', function $$print($a) { var $post_args, strs; if ($gvars.stdout == null) $gvars.stdout = nil; $post_args = $slice(arguments); strs = $post_args; return $send($gvars.stdout, 'print', $to_a(strs)); }, -1); $def(self, '$readline', function $$readline($a) { var $post_args, args; if ($gvars.stdin == null) $gvars.stdin = nil; $post_args = $slice(arguments); args = $post_args; return $send($gvars.stdin, 'readline', $to_a(args)); }, -1); $def(self, '$warn', function $$warn($a, $b) { var $post_args, $kwargs, strs, uplevel, $c, $d, self = this, location = nil; if ($gvars.VERBOSE == null) $gvars.VERBOSE = nil; if ($gvars.stderr == null) $gvars.stderr = nil; $post_args = $slice(arguments); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); strs = $post_args; uplevel = $hash_get($kwargs, "uplevel");if (uplevel == null) uplevel = nil; if ($truthy(uplevel)) { uplevel = $Opal['$coerce_to!'](uplevel, $$$('Integer'), "to_str"); if ($truthy($rb_lt(uplevel, 0))) { $Kernel.$raise($$$('ArgumentError'), "negative level (" + (uplevel) + ")") }; location = ($c = ($d = self.$caller($rb_plus(uplevel, 1), 1).$first(), ($d === nil || $d == null) ? nil : $d.$split(":in `")), ($c === nil || $c == null) ? nil : $c.$first()); if ($truthy(location)) { location = "" + (location) + ": " }; strs = $send(strs, 'map', [], function $$14(s){ if (s == null) s = nil; return "" + (location) + "warning: " + (s);}); }; if (($truthy($gvars.VERBOSE['$nil?']()) || ($truthy(strs['$empty?']())))) { return nil } else { return $send($gvars.stderr, 'puts', $to_a(strs)) }; }, -1); $def(self, '$raise', function $$raise(exception, string, backtrace) { if ($gvars["!"] == null) $gvars["!"] = nil; ; if (string == null) string = nil; if (backtrace == null) backtrace = nil; if (exception == null && $gvars["!"] !== nil) { throw $gvars["!"]; } if (exception == null) { exception = $$$('RuntimeError').$new(""); } else if ($respond_to(exception, '$to_str')) { exception = $$$('RuntimeError').$new(exception.$to_str()); } // using respond_to? and not an undefined check to avoid method_missing matching as true else if (exception.$$is_class && $respond_to(exception, '$exception')) { exception = exception.$exception(string); } else if (exception.$$is_exception) { // exception is fine } else { exception = $$$('TypeError').$new("exception class/object expected"); } if (backtrace !== nil) { exception.$set_backtrace(backtrace); } if ($gvars["!"] !== nil) { Opal.exceptions.push($gvars["!"]); } $gvars["!"] = exception; throw exception; ; }, -1); $def(self, '$rand', function $$rand(max) { ; if (max === undefined) { return $$$($$$('Random'), 'DEFAULT').$rand(); } if (max.$$is_number) { if (max < 0) { max = Math.abs(max); } if (max % 1 !== 0) { max = max.$to_i(); } if (max === 0) { max = undefined; } } ; return $$$($$$('Random'), 'DEFAULT').$rand(max); }, -1); $def(self, '$respond_to?', function $Kernel_respond_to$ques$15(name, include_all) { var self = this; if (include_all == null) include_all = false; var body = self[$jsid(name)]; if (typeof(body) === "function" && !body.$$stub) { return true; } if (self['$respond_to_missing?'].$$pristine === true) { return false; } else { return self['$respond_to_missing?'](name, include_all); } ; }, -2); $def(self, '$respond_to_missing?', function $Kernel_respond_to_missing$ques$16(method_name, include_all) { if (include_all == null) include_all = false; return false; }, -2); $Opal.$pristine(self, "respond_to?", "respond_to_missing?"); $def(self, '$require', function $$require(file) { // As Object.require refers to Kernel.require once Kernel has been loaded the String // class may not be available yet, the coercion requires both String and Array to be loaded. if (typeof file !== 'string' && Opal.String && Opal.Array) { (file = $Opal['$coerce_to!'](file, $$$('String'), "to_str")) } return Opal.require(file) }); $def(self, '$require_relative', function $$require_relative(file) { $Opal['$try_convert!'](file, $$$('String'), "to_str"); file = $$$('File').$expand_path($$$('File').$join(Opal.current_file, "..", file)); return Opal.require(file); }); $def(self, '$require_tree', function $$require_tree(path, $kwargs) { var autoload; $kwargs = $ensure_kwargs($kwargs); autoload = $hash_get($kwargs, "autoload");if (autoload == null) autoload = false; var result = []; path = $$$('File').$expand_path(path) path = Opal.normalize(path); if (path === '.') path = ''; for (var name in Opal.modules) { if ((name)['$start_with?'](path)) { if(!autoload) { result.push([name, Opal.require(name)]); } else { result.push([name, true]); // do nothing, delegated to a autoloading } } } return result; ; }, -2); $def(self, '$singleton_class', function $$singleton_class() { var self = this; return Opal.get_singleton_class(self); }); $def(self, '$sleep', function $$sleep(seconds) { if (seconds == null) seconds = nil; if (seconds === nil) { $Kernel.$raise($$$('TypeError'), "can't convert NilClass into time interval") } if (!seconds.$$is_number) { $Kernel.$raise($$$('TypeError'), "can't convert " + (seconds.$class()) + " into time interval") } if (seconds < 0) { $Kernel.$raise($$$('ArgumentError'), "time interval must be positive") } var get_time = Opal.global.performance ? function() {return performance.now()} : function() {return new Date()} var t = get_time(); while (get_time() - t <= seconds * 1000); return Math.round(seconds); ; }, -1); $def(self, '$srand', function $$srand(seed) { if (seed == null) seed = $$('Random').$new_seed(); return $$$('Random').$srand(seed); }, -1); $def(self, '$String', function $$String(str) { var $ret_or_1 = nil; if ($truthy(($ret_or_1 = $Opal['$coerce_to?'](str, $$$('String'), "to_str")))) { return $ret_or_1 } else { return $Opal['$coerce_to!'](str, $$$('String'), "to_s") } }); $def(self, '$tap', function $$tap() { var block = $$tap.$$p || nil, self = this; $$tap.$$p = null; ; Opal.yield1(block, self); return self; }); $def(self, '$to_proc', $return_self); $def(self, '$to_s', function $$to_s() { var self = this; return "#<" + (self.$class()) + ":0x" + (self.$__id__().$to_s(16)) + ">" }); $def(self, '$catch', function $Kernel_catch$17(tag) { var $yield = $Kernel_catch$17.$$p || nil, $ret_or_1 = nil, e = nil; $Kernel_catch$17.$$p = null; if (tag == null) tag = nil; try { tag = ($truthy(($ret_or_1 = tag)) ? ($ret_or_1) : ($Object.$new())); return Opal.yield1($yield, tag);; } catch ($err) { if (Opal.rescue($err, [$$$('UncaughtThrowError')])) {(e = $err) try { if ($eqeq(e.$tag(), tag)) { return e.$value() }; return $Kernel.$raise(); } finally { Opal.pop_exception($err); } } else { throw $err; } }; }, -1); $def(self, '$throw', function $Kernel_throw$18(tag, obj) { if (obj == null) obj = nil; return $Kernel.$raise($$$('UncaughtThrowError').$new(tag, obj)); }, -2); $def(self, '$open', function $$open($a) { var block = $$open.$$p || nil, $post_args, args; $$open.$$p = null; ; $post_args = $slice(arguments); args = $post_args; return $send($$$('File'), 'open', $to_a(args), block.$to_proc()); }, -1); $def(self, '$yield_self', function $$yield_self() { var $yield = $$yield_self.$$p || nil, self = this; $$yield_self.$$p = null; if (!($yield !== nil)) { return $send(self, 'enum_for', ["yield_self"], $return_val(1)) }; return Opal.yield1($yield, self);; }); $alias(self, "fail", "raise"); $alias(self, "kind_of?", "is_a?"); $alias(self, "object_id", "__id__"); $alias(self, "public_send", "__send__"); $alias(self, "send", "__send__"); $alias(self, "then", "yield_self"); return $alias(self, "to_enum", "enum_for"); })('::', $nesting); return (function($base, $super) { var self = $klass($base, $super, 'Object'); delete $Object.$$prototype.$require; return self.$include($Kernel); })('::', null); }; Opal.modules["corelib/main"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $return_val = Opal.return_val, $def = Opal.def, $Object = Opal.Object, $slice = Opal.slice, $Kernel = Opal.Kernel, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('include,raise'); return (function(self, $parent_nesting) { $def(self, '$to_s', $return_val("main")); $def(self, '$include', function $$include(mod) { return $Object.$include(mod) }); $def(self, '$autoload', function $$autoload($a) { var $post_args, args; $post_args = $slice(arguments); args = $post_args; return Opal.Object.$autoload.apply(Opal.Object, args);; }, -1); return $def(self, '$using', function $$using(mod) { return $Kernel.$raise("main.using is permitted only at toplevel") }); })(Opal.get_singleton_class(self), $nesting) }; Opal.modules["corelib/error/errno"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $truthy = Opal.truthy, $rb_plus = Opal.rb_plus, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $klass = Opal.klass, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('+,errno,class,attr_reader'); (function($base, $parent_nesting) { var self = $module($base, 'Errno'); var $nesting = [self].concat($parent_nesting), errors = nil, klass = nil; errors = [["EINVAL", "Invalid argument", 22], ["EEXIST", "File exists", 17], ["EISDIR", "Is a directory", 21], ["EMFILE", "Too many open files", 24], ["ESPIPE", "Illegal seek", 29], ["EACCES", "Permission denied", 13], ["EPERM", "Operation not permitted", 1], ["ENOENT", "No such file or directory", 2], ["ENAMETOOLONG", "File name too long", 36]]; klass = nil; var i; for (i = 0; i < errors.length; i++) { (function() { // Create a closure var class_name = errors[i][0]; var default_message = errors[i][1]; var errno = errors[i][2]; klass = Opal.klass(self, Opal.SystemCallError, class_name); klass.errno = errno; (function(self, $parent_nesting) { return $def(self, '$new', function $new$1(name) { var $yield = $new$1.$$p || nil, self = this, message = nil; $new$1.$$p = null; if (name == null) name = nil; message = default_message; if ($truthy(name)) { message = $rb_plus(message, " - " + (name)) }; return $send2(self, $find_super(self, 'new', $new$1, false, true), 'new', [message], null); }, -1) })(Opal.get_singleton_class(klass), $nesting) })(); } ; })('::', $nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'SystemCallError'); var $nesting = [self].concat($parent_nesting); $def(self, '$errno', function $$errno() { var self = this; return self.$class().$errno() }); return (function(self, $parent_nesting) { return self.$attr_reader("errno") })(Opal.get_singleton_class(self), $nesting); })('::', $$$('StandardError'), $nesting); }; Opal.modules["corelib/error"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $slice = Opal.slice, $gvars = Opal.gvars, $defs = Opal.defs, $send = Opal.send, $to_a = Opal.to_a, $def = Opal.def, $send2 = Opal.send2, $find_super = Opal.find_super, $truthy = Opal.truthy, $Kernel = Opal.Kernel, $not = Opal.not, $rb_plus = Opal.rb_plus, $eqeq = Opal.eqeq, $Object = Opal.Object, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $module = Opal.module, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('new,map,backtrace,clone,to_s,merge,tty?,[],include?,raise,dup,empty?,!,caller,shift,+,class,join,cause,full_message,==,reverse,split,autoload,attr_reader,inspect'); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Exception'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.message = nil; Opal.prop(self.$$prototype, '$$is_exception', true); var stack_trace_limit; Error.stackTraceLimit = 100; $defs(self, '$new', function $Exception_new$1($a) { var $post_args, args, self = this; if ($gvars["!"] == null) $gvars["!"] = nil; $post_args = $slice(arguments); args = $post_args; var message = (args.length > 0) ? args[0] : nil; var error = new self.$$constructor(message); error.name = self.$$name; error.message = message; error.cause = $gvars["!"]; Opal.send(error, error.$initialize, args); // Error.captureStackTrace() will use .name and .toString to build the // first line of the stack trace so it must be called after the error // has been initialized. // https://nodejs.org/dist/latest-v6.x/docs/api/errors.html if (Opal.config.enable_stack_trace && Error.captureStackTrace) { // Passing Kernel.raise will cut the stack trace from that point above Error.captureStackTrace(error, stack_trace_limit); } return error; ; }, -1); stack_trace_limit = self.$new; $defs(self, '$exception', function $$exception($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return $send(self, 'new', $to_a(args)); }, -1); $def(self, '$initialize', function $$initialize($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return self.message = (args.length > 0) ? args[0] : nil;; }, -1); $def(self, '$copy_instance_variables', function $$copy_instance_variables(other) { var $yield = $$copy_instance_variables.$$p || nil, self = this; $$copy_instance_variables.$$p = null; $send2(self, $find_super(self, 'copy_instance_variables', $$copy_instance_variables, false, true), 'copy_instance_variables', [other], $yield); self.message = other.message; self.cause = other.cause; self.stack = other.stack; ; }); // Convert backtrace from any format to Ruby format function correct_backtrace(backtrace) { var new_bt = [], m; for (var i = 0; i < backtrace.length; i++) { var loc = backtrace[i]; if (!loc || !loc.$$is_string) { /* Do nothing */ } /* Chromium format */ else if ((m = loc.match(/^ at (.*?) \((.*?)\)$/))) { new_bt.push(m[2] + ":in `" + m[1] + "'"); } else if ((m = loc.match(/^ at (.*?)$/))) { new_bt.push(m[1] + ":in `undefined'"); } /* Node format */ else if ((m = loc.match(/^ from (.*?)$/))) { new_bt.push(m[1]); } /* Mozilla/Apple format */ else if ((m = loc.match(/^(.*?)@(.*?)$/))) { new_bt.push(m[2] + ':in `' + m[1] + "'"); } } return new_bt; } ; $def(self, '$backtrace', function $$backtrace() { var self = this; if (self.backtrace) { // nil is a valid backtrace return self.backtrace; } var backtrace = self.stack; if (typeof(backtrace) !== 'undefined' && backtrace.$$is_string) { return self.backtrace = correct_backtrace(backtrace.split("\n")); } else if (backtrace) { return self.backtrace = correct_backtrace(backtrace); } return []; }); $def(self, '$backtrace_locations', function $$backtrace_locations() { var $a, self = this; if (self.backtrace_locations) return self.backtrace_locations; self.backtrace_locations = ($a = self.$backtrace(), ($a === nil || $a == null) ? nil : $send($a, 'map', [], function $$2(loc){ if (loc == null) loc = nil; return $$$($$$($$$('Thread'), 'Backtrace'), 'Location').$new(loc);})) return self.backtrace_locations; }); $def(self, '$cause', function $$cause() { var self = this; return self.cause || nil; }); $def(self, '$exception', function $$exception(str) { var self = this; if (str == null) str = nil; if (str === nil || self === str) { return self; } var cloned = self.$clone(); cloned.message = str; if (self.backtrace) cloned.backtrace = self.backtrace.$dup(); cloned.stack = self.stack; cloned.cause = self.cause; return cloned; ; }, -1); $def(self, '$message', function $$message() { var self = this; return self.$to_s() }); $def(self, '$full_message', function $$full_message(kwargs) { var $a, $b, self = this, $ret_or_1 = nil, highlight = nil, order = nil, bold_underline = nil, bold = nil, reset = nil, bt = nil, first = nil, msg = nil; if ($gvars.stderr == null) $gvars.stderr = nil; if (kwargs == null) kwargs = nil; if (!$truthy((($a = $$('Hash', 'skip_raise')) ? 'constant' : nil))) { return "" + (self.message) + "\n" + (self.stack) }; kwargs = (new Map([["highlight", $gvars.stderr['$tty?']()], ["order", "top"]])).$merge(($truthy(($ret_or_1 = kwargs)) ? ($ret_or_1) : ((new Map())))); $b = [kwargs['$[]']("highlight"), kwargs['$[]']("order")], (highlight = $b[0]), (order = $b[1]), $b; if (!$truthy([true, false]['$include?'](highlight))) { $Kernel.$raise($$$('ArgumentError'), "expected true or false as highlight: " + (highlight)) }; if (!$truthy(["top", "bottom"]['$include?'](order))) { $Kernel.$raise($$$('ArgumentError'), "expected :top or :bottom as order: " + (order)) }; if ($truthy(highlight)) { bold_underline = "\u001b[1;4m"; bold = "\u001b[1m"; reset = "\u001b[m"; } else { bold_underline = (bold = (reset = "")) }; bt = self.$backtrace().$dup(); if (($not(bt) || ($truthy(bt['$empty?']())))) { bt = self.$caller() }; first = bt.$shift(); msg = "" + (first) + ": "; msg = $rb_plus(msg, "" + (bold) + (self.$to_s()) + " (" + (bold_underline) + (self.$class()) + (reset) + (bold) + ")" + (reset) + "\n"); msg = $rb_plus(msg, $send(bt, 'map', [], function $$3(loc){ if (loc == null) loc = nil; return "\tfrom " + (loc) + "\n";}).$join()); if ($truthy(self.$cause())) { msg = $rb_plus(msg, self.$cause().$full_message((new Map([["highlight", highlight]])))) }; if ($eqeq(order, "bottom")) { msg = msg.$split("\n").$reverse().$join("\n"); msg = $rb_plus("" + (bold) + "Traceback" + (reset) + " (most recent call last):\n", msg); }; return msg; }, -1); $def(self, '$inspect', function $$inspect() { var self = this, as_str = nil; as_str = self.$to_s(); if ($truthy(as_str['$empty?']())) { return self.$class().$to_s() } else { return "#<" + (self.$class().$to_s()) + ": " + (self.$to_s()) + ">" }; }); $def(self, '$set_backtrace', function $$set_backtrace(backtrace) { var self = this; var valid = true, i, ii; if (backtrace === nil) { self.backtrace = nil; self.stack = ''; } else if (backtrace.$$is_string) { self.backtrace = [backtrace]; self.stack = ' from ' + backtrace; } else { if (backtrace.$$is_array) { for (i = 0, ii = backtrace.length; i < ii; i++) { if (!backtrace[i].$$is_string) { valid = false; break; } } } else { valid = false; } if (valid === false) { $Kernel.$raise($$$('TypeError'), "backtrace must be Array of String") } self.backtrace = backtrace; self.stack = $send((backtrace), 'map', [], function $$4(i){ if (i == null) i = nil; return $rb_plus(" from ", i);}).join("\n"); } return backtrace; }); return $def(self, '$to_s', function $$to_s() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.message)) ? (self.message.$to_s()) : ($ret_or_2))))) { return $ret_or_1 } else { return self.$class().$to_s() } }); })('::', Error, $nesting); $klass('::', $$$('Exception'), 'ScriptError'); $klass('::', $$$('ScriptError'), 'SyntaxError'); $klass('::', $$$('ScriptError'), 'LoadError'); $klass('::', $$$('ScriptError'), 'NotImplementedError'); $klass('::', $$$('Exception'), 'SystemExit'); $klass('::', $$$('Exception'), 'NoMemoryError'); $klass('::', $$$('Exception'), 'SignalException'); $klass('::', $$$('SignalException'), 'Interrupt'); $klass('::', $$$('Exception'), 'SecurityError'); $klass('::', $$$('Exception'), 'SystemStackError'); $klass('::', $$$('Exception'), 'StandardError'); $klass('::', $$$('StandardError'), 'EncodingError'); $klass('::', $$$('StandardError'), 'ZeroDivisionError'); $klass('::', $$$('StandardError'), 'NameError'); $klass('::', $$$('NameError'), 'NoMethodError'); $klass('::', $$$('StandardError'), 'RuntimeError'); $klass('::', $$$('RuntimeError'), 'FrozenError'); $klass('::', $$$('StandardError'), 'LocalJumpError'); $klass('::', $$$('StandardError'), 'TypeError'); $klass('::', $$$('StandardError'), 'ArgumentError'); $klass('::', $$$('ArgumentError'), 'UncaughtThrowError'); $klass('::', $$$('StandardError'), 'IndexError'); $klass('::', $$$('IndexError'), 'StopIteration'); $klass('::', $$$('StopIteration'), 'ClosedQueueError'); $klass('::', $$$('IndexError'), 'KeyError'); $klass('::', $$$('StandardError'), 'RangeError'); $klass('::', $$$('RangeError'), 'FloatDomainError'); $klass('::', $$$('StandardError'), 'IOError'); $klass('::', $$$('IOError'), 'EOFError'); $klass('::', $$$('StandardError'), 'SystemCallError'); $klass('::', $$$('StandardError'), 'RegexpError'); $klass('::', $$$('StandardError'), 'ThreadError'); $klass('::', $$$('StandardError'), 'FiberError'); $Object.$autoload("Errno", "corelib/error/errno"); (function($base, $super) { var self = $klass($base, $super, 'FrozenError'); self.$attr_reader("receiver"); return $def(self, '$initialize', function $$initialize(message, $kwargs) { var receiver, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $kwargs = $ensure_kwargs($kwargs); receiver = $hash_get($kwargs, "receiver");if (receiver == null) receiver = nil; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [message], null); return (self.receiver = receiver); }, -2); })('::', $$$('RuntimeError')); (function($base, $super) { var self = $klass($base, $super, 'UncaughtThrowError'); var $proto = self.$$prototype; $proto.tag = nil; self.$attr_reader("tag", "value"); return $def(self, '$initialize', function $$initialize(tag, value) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; if (value == null) value = nil; self.tag = tag; self.value = value; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', ["uncaught throw " + (self.tag.$inspect())], null); }, -2); })('::', $$$('ArgumentError')); (function($base, $super) { var self = $klass($base, $super, 'NameError'); self.$attr_reader("name"); return $def(self, '$initialize', function $$initialize(message, name) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; if (name == null) name = nil; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [message], null); return (self.name = name); }, -2); })('::', null); (function($base, $super) { var self = $klass($base, $super, 'NoMethodError'); self.$attr_reader("args"); return $def(self, '$initialize', function $$initialize(message, name, args) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; if (name == null) name = nil; if (args == null) args = []; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [message, name], null); return (self.args = args); }, -2); })('::', null); (function($base, $super) { var self = $klass($base, $super, 'StopIteration'); return self.$attr_reader("result") })('::', null); (function($base, $super) { var self = $klass($base, $super, 'KeyError'); var $proto = self.$$prototype; $proto.receiver = $proto.key = nil; $def(self, '$initialize', function $$initialize(message, $kwargs) { var receiver, key, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $kwargs = $ensure_kwargs($kwargs); receiver = $hash_get($kwargs, "receiver");if (receiver == null) receiver = nil; key = $hash_get($kwargs, "key");if (key == null) key = nil; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [message], null); self.receiver = receiver; return (self.key = key); }, -2); $def(self, '$receiver', function $$receiver() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.receiver))) { return $ret_or_1 } else { return $Kernel.$raise($$$('ArgumentError'), "no receiver is available") } }); return $def(self, '$key', function $$key() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.key))) { return $ret_or_1 } else { return $Kernel.$raise($$$('ArgumentError'), "no key is available") } }); })('::', null); (function($base, $super) { var self = $klass($base, $super, 'LocalJumpError'); self.$attr_reader("exit_value", "reason"); return $def(self, '$initialize', function $$initialize(message, exit_value, reason) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; if (exit_value == null) exit_value = nil; if (reason == null) reason = "noreason"; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [message], null); self.exit_value = exit_value; return (self.reason = reason); }, -2); })('::', null); return (function($base, $parent_nesting) { var self = $module($base, 'JS'); var $nesting = [self].concat($parent_nesting); return ($klass($nesting[0], null, 'Error'), nil) })('::', $nesting); }; Opal.modules["corelib/constants"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $const_set = Opal.const_set, nil = Opal.nil, $$$ = Opal.$$$; $const_set('::', 'RUBY_PLATFORM', "opal"); $const_set('::', 'RUBY_ENGINE', "opal"); $const_set('::', 'RUBY_VERSION', "3.2.0"); $const_set('::', 'RUBY_ENGINE_VERSION', "1.8.2"); $const_set('::', 'RUBY_RELEASE_DATE', "2023-11-23"); $const_set('::', 'RUBY_PATCHLEVEL', 0); $const_set('::', 'RUBY_REVISION', "0"); $const_set('::', 'RUBY_COPYRIGHT', "opal - Copyright (C) 2011-2023 Adam Beynon and the Opal contributors"); return $const_set('::', 'RUBY_DESCRIPTION', "opal " + ($$$('RUBY_ENGINE_VERSION')) + " (" + ($$$('RUBY_RELEASE_DATE')) + " revision " + ($$$('RUBY_REVISION')) + ")"); }; Opal.modules["opal/base"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $Object = Opal.Object, nil = Opal.nil; Opal.add_stubs('require'); $Object.$require("corelib/runtime"); $Object.$require("corelib/helpers"); $Object.$require("corelib/module"); $Object.$require("corelib/class"); $Object.$require("corelib/basic_object"); $Object.$require("corelib/kernel"); $Object.$require("corelib/main"); $Object.$require("corelib/error"); return $Object.$require("corelib/constants"); }; Opal.modules["corelib/nil"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $Kernel = Opal.Kernel, $def = Opal.def, $return_val = Opal.return_val, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $NilClass = Opal.NilClass, $slice = Opal.slice, $truthy = Opal.truthy, $rb_gt = Opal.rb_gt, $alias = Opal.alias, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('raise,name,new,>,length,Rational,to_i'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'NilClass'); var $nesting = [self].concat($parent_nesting); self.$$prototype.$$meta = self; (function(self, $parent_nesting) { $def(self, '$allocate', function $$allocate() { var self = this; return $Kernel.$raise($$$('TypeError'), "allocator undefined for " + (self.$name())) }); Opal.udef(self, '$' + "new");; return nil;; })(Opal.get_singleton_class(self), $nesting); $def(self, '$!', $return_val(true)); $def(self, '$&', $return_val(false)); $def(self, '$|', function $NilClass_$$1(other) { return other !== false && other !== nil; }); $def(self, '$^', function $NilClass_$$2(other) { return other !== false && other !== nil; }); $def(self, '$==', function $NilClass_$eq_eq$3(other) { return other === nil; }); $def(self, '$dup', $return_val(nil)); $def(self, '$clone', function $$clone($kwargs) { var freeze; $kwargs = $ensure_kwargs($kwargs); freeze = $hash_get($kwargs, "freeze");if (freeze == null) freeze = true; return nil; }, -1); $def(self, '$inspect', $return_val("nil")); $def(self, '$nil?', $return_val(true)); $def(self, '$singleton_class', function $$singleton_class() { return $NilClass }); $def(self, '$to_a', function $$to_a() { return [] }); $def(self, '$to_h', function $$to_h() { return new Map(); }); $def(self, '$to_i', $return_val(0)); $def(self, '$to_s', $return_val("")); $def(self, '$to_c', function $$to_c() { return $$$('Complex').$new(0, 0) }); $def(self, '$rationalize', function $$rationalize($a) { var $post_args, args; $post_args = $slice(arguments); args = $post_args; if ($truthy($rb_gt(args.$length(), 1))) { $Kernel.$raise($$$('ArgumentError')) }; return $Kernel.$Rational(0, 1); }, -1); $def(self, '$to_r', function $$to_r() { return $Kernel.$Rational(0, 1) }); $def(self, '$instance_variables', function $$instance_variables() { return [] }); return $alias(self, "to_f", "to_i"); })('::', null, $nesting) }; Opal.modules["corelib/boolean"] = function(Opal) {/* Generated by Opal 1.8.2 */ "use strict"; var $klass = Opal.klass, $Kernel = Opal.Kernel, $def = Opal.def, $return_self = Opal.return_self, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $slice = Opal.slice, $truthy = Opal.truthy, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $alias = Opal.alias, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('raise,name,==,to_s,__id__'); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Boolean'); var $nesting = [self].concat($parent_nesting); Opal.prop(self.$$prototype, '$$is_boolean', true); var properties = ['$$class', '$$meta']; for (var i = 0; i < properties.length; i++) { Object.defineProperty(self.$$prototype, properties[i], { configurable: true, enumerable: false, get: function() { return this == true ? Opal.TrueClass : this == false ? Opal.FalseClass : Opal.Boolean; } }); } Object.defineProperty(self.$$prototype, "$$id", { configurable: true, enumerable: false, get: function() { return this == true ? 2 : this == false ? 0 : nil; } }); ; (function(self, $parent_nesting) { $def(self, '$allocate', function $$allocate() { var self = this; return $Kernel.$raise($$$('TypeError'), "allocator undefined for " + (self.$name())) }); Opal.udef(self, '$' + "new");; return nil;; })(Opal.get_singleton_class(self), $nesting); $def(self, '$__id__', function $$__id__() { var self = this; return self.valueOf() ? 2 : 0; }); $def(self, '$!', function $Boolean_$excl$1() { var self = this; return self != true; }); $def(self, '$&', function $Boolean_$$2(other) { var self = this; return (self == true) ? (other !== false && other !== nil) : false; }); $def(self, '$|', function $Boolean_$$3(other) { var self = this; return (self == true) ? true : (other !== false && other !== nil); }); $def(self, '$^', function $Boolean_$$4(other) { var self = this; return (self == true) ? (other === false || other === nil) : (other !== false && other !== nil); }); $def(self, '$==', function $Boolean_$eq_eq$5(other) { var self = this; return (self == true) === other.valueOf(); }); $def(self, '$singleton_class', function $$singleton_class() { var self = this; return self.$$meta; }); $def(self, '$to_s', function $$to_s() { var self = this; return (self == true) ? 'true' : 'false'; }); $def(self, '$dup', $return_self); $def(self, '$clone', function $$clone($kwargs) { var freeze, self = this; $kwargs = $ensure_kwargs($kwargs); freeze = $hash_get($kwargs, "freeze");if (freeze == null) freeze = true; return self; }, -1); $def(self, '$method_missing', function $$method_missing(method, $a) { var block = $$method_missing.$$p || nil, $post_args, args, self = this; $$method_missing.$$p = null; ; $post_args = $slice(arguments, 1); args = $post_args; var body = self.$$class.$$prototype[Opal.jsid(method)]; if (!$truthy(typeof body !== 'undefined' && !body.$$stub)) { $send2(self, $find_super(self, 'method_missing', $$method_missing, false, true), 'method_missing', [method].concat($to_a(args)), block) }; return Opal.send(self, body, args, block); }, -2); $def(self, '$respond_to_missing?', function $Boolean_respond_to_missing$ques$6(method, _include_all) { var self = this; if (_include_all == null) _include_all = false; var body = self.$$class.$$prototype[Opal.jsid(method)]; return typeof body !== 'undefined' && !body.$$stub;; }, -2); $alias(self, "eql?", "=="); $alias(self, "equal?", "=="); $alias(self, "inspect", "to_s"); return $alias(self, "object_id", "__id__"); })('::', Boolean, $nesting); $klass('::', $$$('Boolean'), 'TrueClass'); return ($klass('::', $$$('Boolean'), 'FalseClass'), nil); }; Opal.modules["corelib/comparable"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $truthy = Opal.truthy, $module = Opal.module, $rb_gt = Opal.rb_gt, $rb_lt = Opal.rb_lt, $eqeqeq = Opal.eqeqeq, $Kernel = Opal.Kernel, $def = Opal.def, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('>,<,===,raise,class,<=>,equal?'); return (function($base) { var self = $module($base, 'Comparable'); var $ret_or_1 = nil; function normalize(what) { if (Opal.is_a(what, Opal.Integer)) { return what; } if ($rb_gt(what, 0)) { return 1; } if ($rb_lt(what, 0)) { return -1; } return 0; } function fail_comparison(lhs, rhs) { var class_name; (($eqeqeq(nil, ($ret_or_1 = rhs)) || (($eqeqeq(true, $ret_or_1) || (($eqeqeq(false, $ret_or_1) || (($eqeqeq($$$('Integer'), $ret_or_1) || ($eqeqeq($$$('Float'), $ret_or_1))))))))) ? (class_name = rhs.$inspect()) : (class_name = rhs.$$class)) $Kernel.$raise($$$('ArgumentError'), "comparison of " + ((lhs).$class()) + " with " + (class_name) + " failed") } function cmp_or_fail(lhs, rhs) { var cmp = (lhs)['$<=>'](rhs); if (!$truthy(cmp)) fail_comparison(lhs, rhs); return normalize(cmp); } ; $def(self, '$==', function $Comparable_$eq_eq$1(other) { var self = this, cmp = nil; if ($truthy(self['$equal?'](other))) { return true }; if (self["$<=>"] == Opal.Kernel["$<=>"]) { return false; } // check for infinite recursion if (self.$$comparable) { self.$$comparable = false; return false; } ; if (!$truthy((cmp = self['$<=>'](other)))) { return false }; return normalize(cmp) == 0;; }); $def(self, '$>', function $Comparable_$gt$2(other) { var self = this; return cmp_or_fail(self, other) > 0; }); $def(self, '$>=', function $Comparable_$gt_eq$3(other) { var self = this; return cmp_or_fail(self, other) >= 0; }); $def(self, '$<', function $Comparable_$lt$4(other) { var self = this; return cmp_or_fail(self, other) < 0; }); $def(self, '$<=', function $Comparable_$lt_eq$5(other) { var self = this; return cmp_or_fail(self, other) <= 0; }); $def(self, '$between?', function $Comparable_between$ques$6(min, max) { var self = this; if ($truthy($rb_lt(self, min))) { return false }; if ($truthy($rb_gt(self, max))) { return false }; return true; }); return $def(self, '$clamp', function $$clamp(min, max) { var self = this; if (max == null) max = nil; var c, excl; if (max === nil) { // We are dealing with a new Ruby 2.7 behaviour that we are able to // provide a single Range argument instead of 2 Comparables. if (!Opal.is_a(min, Opal.Range)) { $Kernel.$raise($$$('TypeError'), "wrong argument type " + (min.$class()) + " (expected Range)") } excl = min.excl; max = min.end; min = min.begin; if (max !== nil && excl) { $Kernel.$raise($$$('ArgumentError'), "cannot clamp with an exclusive range") } } if (min !== nil && max !== nil && cmp_or_fail(min, max) > 0) { $Kernel.$raise($$$('ArgumentError'), "min argument must be smaller than max argument") } if (min !== nil) { c = cmp_or_fail(self, min); if (c == 0) return self; if (c < 0) return min; } if (max !== nil) { c = cmp_or_fail(self, max); if (c > 0) return max; } return self; ; }, -2); })('::') }; Opal.modules["corelib/regexp"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $coerce_to = Opal.coerce_to, $prop = Opal.prop, $freeze = Opal.freeze, $klass = Opal.klass, $const_set = Opal.const_set, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $truthy = Opal.truthy, $gvars = Opal.gvars, $slice = Opal.slice, $Kernel = Opal.Kernel, $Opal = Opal.Opal, $alias = Opal.alias, $send = Opal.send, $regexp = Opal.regexp, $rb_plus = Opal.rb_plus, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $rb_ge = Opal.rb_ge, $to_a = Opal.to_a, $eqeqeq = Opal.eqeqeq, $rb_minus = Opal.rb_minus, $return_ivar = Opal.return_ivar, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('nil?,[],raise,escape,options,to_str,new,join,coerce_to!,!,match,coerce_to?,begin,frozen?,uniq,map,scan,source,to_proc,transform_values,group_by,each_with_index,+,last,=~,==,attr_reader,>=,length,is_a?,include?,names,regexp,named_captures,===,captures,-,inspect,empty?,each,to_a'); $klass('::', $$$('StandardError'), 'RegexpError'); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Regexp'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $const_set(self, 'IGNORECASE', 1); $const_set(self, 'EXTENDED', 2); $const_set(self, 'MULTILINE', 4); Opal.prop(self.$$prototype, '$$is_regexp', true); (function(self, $parent_nesting) { var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$allocate', function $$allocate() { var $yield = $$allocate.$$p || nil, self = this, allocated = nil; $$allocate.$$p = null; allocated = $send2(self, $find_super(self, 'allocate', $$allocate, false, true), 'allocate', [], $yield); allocated.uninitialized = true; return allocated; }); $def(self, '$escape', function $$escape(string) { string = $coerce_to(string, $$$('String'), 'to_str'); return Opal.escape_regexp(string); }); $def(self, '$last_match', function $$last_match(n) { if ($gvars["~"] == null) $gvars["~"] = nil; if (n == null) n = nil; if ($truthy(n['$nil?']())) { return $gvars["~"] } else if ($truthy($gvars["~"])) { return $gvars["~"]['$[]'](n) } else { return nil }; }, -1); $def(self, '$union', function $$union($a) { var $post_args, parts, self = this; $post_args = $slice(arguments); parts = $post_args; var is_first_part_array, quoted_validated, part, options, each_part_options; if (parts.length == 0) { return /(?!)/; } // return fast if there's only one element if (parts.length == 1 && parts[0].$$is_regexp) { return parts[0]; } // cover the 2 arrays passed as arguments case is_first_part_array = parts[0].$$is_array; if (parts.length > 1 && is_first_part_array) { $Kernel.$raise($$$('TypeError'), "no implicit conversion of Array into String") } // deal with splat issues (related to https://github.com/opal/opal/issues/858) if (is_first_part_array) { parts = parts[0]; } options = undefined; quoted_validated = []; for (var i=0; i < parts.length; i++) { part = parts[i]; if (part.$$is_string) { quoted_validated.push(self.$escape(part)); } else if (part.$$is_regexp) { each_part_options = (part).$options(); if (options != undefined && options != each_part_options) { $Kernel.$raise($$$('TypeError'), "All expressions must use the same options") } options = each_part_options; quoted_validated.push('('+part.source+')'); } else { quoted_validated.push(self.$escape((part).$to_str())); } } ; return self.$new((quoted_validated).$join("|"), options); }, -1); $def(self, '$new', function $new$1(regexp, options) { ; if (regexp.$$is_regexp) { return new RegExp(regexp); } regexp = $Opal['$coerce_to!'](regexp, $$$('String'), "to_str"); if (regexp.charAt(regexp.length - 1) === '\\' && regexp.charAt(regexp.length - 2) !== '\\') { $Kernel.$raise($$$('RegexpError'), "too short escape sequence: /" + (regexp) + "/") } regexp = regexp.replace('\\A', '^').replace('\\z', '$') if (options === undefined || options['$!']()) { return new RegExp(regexp); } if (options.$$is_number) { var temp = ''; if ($$('IGNORECASE') & options) { temp += 'i'; } if ($$('MULTILINE') & options) { temp += 'm'; } options = temp; } else { options = 'i'; } return new RegExp(regexp, options); ; }, -2); $alias(self, "compile", "new"); return $alias(self, "quote", "escape"); })(Opal.get_singleton_class(self), $nesting); $def(self, '$==', function $Regexp_$eq_eq$2(other) { var self = this; return other instanceof RegExp && self.toString() === other.toString(); }); $def(self, '$===', function $Regexp_$eq_eq_eq$3(string) { var self = this; return self.$match($Opal['$coerce_to?'](string, $$$('String'), "to_str")) !== nil }); $def(self, '$=~', function $Regexp_$eq_tilde$4(string) { var self = this, $ret_or_1 = nil; if ($gvars["~"] == null) $gvars["~"] = nil; if ($truthy(($ret_or_1 = self.$match(string)))) { return $gvars["~"].$begin(0) } else { return $ret_or_1 } }); $def(self, '$freeze', function $$freeze() { var self = this; if ($truthy(self['$frozen?']())) { return self }; if (!self.hasOwnProperty('$$g')) { $prop(self, '$$g', null); } if (!self.hasOwnProperty('$$gm')) { $prop(self, '$$gm', null); } return $freeze(self); ; }); $def(self, '$inspect', function $$inspect() { var self = this; var regexp_format = /^\/(.*)\/([^\/]*)$/; var value = self.toString(); var matches = regexp_format.exec(value); if (matches) { var regexp_pattern = matches[1]; var regexp_flags = matches[2]; var chars = regexp_pattern.split(''); var chars_length = chars.length; var char_escaped = false; var regexp_pattern_escaped = ''; for (var i = 0; i < chars_length; i++) { var current_char = chars[i]; if (!char_escaped && current_char == '/') { regexp_pattern_escaped = regexp_pattern_escaped.concat('\\'); } regexp_pattern_escaped = regexp_pattern_escaped.concat(current_char); if (current_char == '\\') { if (char_escaped) { // does not over escape char_escaped = false; } else { char_escaped = true; } } else { char_escaped = false; } } return '/' + regexp_pattern_escaped + '/' + regexp_flags; } else { return value; } }); $def(self, '$match', function $$match(string, pos) { var block = $$match.$$p || nil, self = this; if ($gvars["~"] == null) $gvars["~"] = nil; $$match.$$p = null; ; ; if (self.uninitialized) { $Kernel.$raise($$$('TypeError'), "uninitialized Regexp") } if (pos === undefined) { if (string === nil) return ($gvars["~"] = nil); var m = self.exec($coerce_to(string, $$$('String'), 'to_str')); if (m) { ($gvars["~"] = $$$('MatchData').$new(self, m)); return block === nil ? $gvars["~"] : Opal.yield1(block, $gvars["~"]); } else { return ($gvars["~"] = nil); } } pos = $coerce_to(pos, $$$('Integer'), 'to_int'); if (string === nil) { return ($gvars["~"] = nil); } string = $coerce_to(string, $$$('String'), 'to_str'); if (pos < 0) { pos += string.length; if (pos < 0) { return ($gvars["~"] = nil); } } // global RegExp maintains state, so not using self/this var md, re = Opal.global_regexp(self); while (true) { md = re.exec(string); if (md === null) { return ($gvars["~"] = nil); } if (md.index >= pos) { ($gvars["~"] = $$$('MatchData').$new(re, md)); return block === nil ? $gvars["~"] : Opal.yield1(block, $gvars["~"]); } re.lastIndex = md.index + 1; } ; }, -2); $def(self, '$match?', function $Regexp_match$ques$5(string, pos) { var self = this; ; if (self.uninitialized) { $Kernel.$raise($$$('TypeError'), "uninitialized Regexp") } if (pos === undefined) { return string === nil ? false : self.test($coerce_to(string, $$$('String'), 'to_str')); } pos = $coerce_to(pos, $$$('Integer'), 'to_int'); if (string === nil) { return false; } string = $coerce_to(string, $$$('String'), 'to_str'); if (pos < 0) { pos += string.length; if (pos < 0) { return false; } } // global RegExp maintains state, so not using self/this var md, re = Opal.global_regexp(self); md = re.exec(string); if (md === null || md.index < pos) { return false; } else { return true; } ; }, -2); $def(self, '$names', function $$names() { var self = this; return $send(self.$source().$scan($regexp(["\\(?<(\\w+)>"]), (new Map([["no_matchdata", true]]))), 'map', [], "first".$to_proc()).$uniq() }); $def(self, '$named_captures', function $$named_captures() { var self = this; return $send($send($send(self.$source().$scan($regexp(["\\(?<(\\w+)>"]), (new Map([["no_matchdata", true]]))), 'map', [], "first".$to_proc()).$each_with_index(), 'group_by', [], "first".$to_proc()), 'transform_values', [], function $$6(i){ if (i == null) i = nil; return $send(i, 'map', [], function $$7(j){ if (j == null) j = nil; return $rb_plus(j.$last(), 1);});}) }); $def(self, '$~', function $Regexp_$$8() { var self = this; if ($gvars._ == null) $gvars._ = nil; return self['$=~']($gvars._) }); $def(self, '$source', function $$source() { var self = this; return self.source; }); $def(self, '$options', function $$options() { var self = this; if (self.uninitialized) { $Kernel.$raise($$$('TypeError'), "uninitialized Regexp") } var result = 0; // should be supported in IE6 according to https://msdn.microsoft.com/en-us/library/7f5z26w4(v=vs.94).aspx if (self.multiline) { result |= $$('MULTILINE'); } if (self.ignoreCase) { result |= $$('IGNORECASE'); } return result; }); $def(self, '$casefold?', function $Regexp_casefold$ques$9() { var self = this; return self.ignoreCase; }); $alias(self, "eql?", "=="); return $alias(self, "to_s", "source"); })('::', RegExp, $nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'MatchData'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.matches = nil; self.$attr_reader("post_match", "pre_match", "regexp", "string"); $def(self, '$initialize', function $$initialize(regexp, match_groups, $kwargs) { var no_matchdata, self = this; $kwargs = $ensure_kwargs($kwargs); no_matchdata = $hash_get($kwargs, "no_matchdata");if (no_matchdata == null) no_matchdata = false; if (!$truthy(no_matchdata)) { $gvars["~"] = self }; self.regexp = regexp; self.begin = match_groups.index; self.string = match_groups.input; self.pre_match = match_groups.input.slice(0, match_groups.index); self.post_match = match_groups.input.slice(match_groups.index + match_groups[0].length); self.matches = []; for (var i = 0, length = match_groups.length; i < length; i++) { var group = match_groups[i]; if (group == null) { self.matches.push(nil); } else { self.matches.push(group); } } ; }, -3); $def(self, '$match', function $$match(idx) { var self = this, match = nil; if ($truthy((match = self['$[]'](idx)))) { return match } else if (($truthy(idx['$is_a?']($$('Integer'))) && ($truthy($rb_ge(idx, self.$length()))))) { return $Kernel.$raise($$$('IndexError'), "index " + (idx) + " out of matches") } else { return nil } }); $def(self, '$match_length', function $$match_length(idx) { var $a, self = this; return ($a = self.$match(idx), ($a === nil || $a == null) ? nil : $a.$length()) }); $def(self, '$[]', function $MatchData_$$$10($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; if (args[0].$$is_string) { if (self.$regexp().$names()['$include?'](args['$[]'](0))['$!']()) { $Kernel.$raise($$$('IndexError'), "undefined group name reference: " + (args['$[]'](0))) } return self.$named_captures()['$[]'](args['$[]'](0)) } else { return $send(self.matches, '[]', $to_a(args)) } ; }, -1); $def(self, '$offset', function $$offset(n) { var self = this; if (n !== 0) { $Kernel.$raise($$$('ArgumentError'), "MatchData#offset only supports 0th element") } return [self.begin, self.begin + self.matches[n].length]; }); $def(self, '$==', function $MatchData_$eq_eq$11(other) { var self = this, $ret_or_1 = nil, $ret_or_2 = nil, $ret_or_3 = nil, $ret_or_4 = nil; if (!$eqeqeq($$$('MatchData'), other)) { return false }; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = ($truthy(($ret_or_3 = ($truthy(($ret_or_4 = self.string == other.string)) ? (self.regexp.toString() == other.regexp.toString()) : ($ret_or_4)))) ? (self.pre_match == other.pre_match) : ($ret_or_3)))) ? (self.post_match == other.post_match) : ($ret_or_2))))) { return self.begin == other.begin; } else { return $ret_or_1 }; }); $def(self, '$begin', function $$begin(n) { var self = this; if (n !== 0) { $Kernel.$raise($$$('ArgumentError'), "MatchData#begin only supports 0th element") } return self.begin; }); $def(self, '$end', function $$end(n) { var self = this; if (n !== 0) { $Kernel.$raise($$$('ArgumentError'), "MatchData#end only supports 0th element") } return self.begin + self.matches[n].length; }); $def(self, '$captures', function $$captures() { var self = this; return self.matches.slice(1) }); $def(self, '$named_captures', function $$named_captures() { var self = this, matches = nil; matches = self.$captures(); return $send(self.$regexp().$named_captures(), 'transform_values', [], function $$12(i){ if (i == null) i = nil; return matches['$[]']($rb_minus(i.$last(), 1));}); }); $def(self, '$names', function $$names() { var self = this; return self.$regexp().$names() }); $def(self, '$inspect', function $$inspect() { var self = this; var str = "#"; }); $def(self, '$length', function $$length() { var self = this; return self.matches.length }); $def(self, '$to_a', $return_ivar("matches")); $def(self, '$to_s', function $$to_s() { var self = this; return self.matches[0] }); $def(self, '$values_at', function $$values_at($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; var i, a, index, values = []; for (i = 0; i < args.length; i++) { if (args[i].$$is_range) { a = (args[i]).$to_a(); a.unshift(i, 1); Array.prototype.splice.apply(args, a); } index = $Opal['$coerce_to!'](args[i], $$$('Integer'), "to_int"); if (index < 0) { index += self.matches.length; if (index < 0) { values.push(nil); continue; } } values.push(self.matches[index]); } return values; ; }, -1); $alias(self, "eql?", "=="); return $alias(self, "size", "length"); })($nesting[0], null, $nesting); }; Opal.modules["corelib/string"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $coerce_to = Opal.coerce_to, $respond_to = Opal.respond_to, $global_multiline_regexp = Opal.global_multiline_regexp, $prop = Opal.prop, $opal32_init = Opal.opal32_init, $opal32_add = Opal.opal32_add, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $Opal = Opal.Opal, $defs = Opal.defs, $slice = Opal.slice, $send = Opal.send, $to_a = Opal.to_a, $extract_kwargs = Opal.extract_kwargs, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $eqeqeq = Opal.eqeqeq, $Kernel = Opal.Kernel, $truthy = Opal.truthy, $gvars = Opal.gvars, $rb_divide = Opal.rb_divide, $rb_plus = Opal.rb_plus, $eqeq = Opal.eqeq, $alias = Opal.alias, $const_set = Opal.const_set, self = Opal.top, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,coerce_to?,initialize,===,format,raise,respond_to?,to_s,to_str,<=>,==,=~,new,force_encoding,casecmp,empty?,ljust,ceil,/,+,rjust,floor,coerce_to!,nil?,class,copy_singleton_methods,initialize_clone,initialize_dup,enum_for,chomp,[],to_i,length,each_line,to_proc,to_a,match,match?,captures,proc,succ,escape,include?,upcase,unicode_normalize,dup,__id__,next,intern,pristine'); self.$require("corelib/comparable"); self.$require("corelib/regexp"); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'String'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$include($$$('Comparable')); Opal.prop(self.$$prototype, '$$is_string', true); var string_id_map = new Map(); ; (function() { 'use strict'; ($def(self, '$__id__', function $$__id__() { var $yield = $$__id__.$$p || nil, self = this; $$__id__.$$p = null; if (typeof self === 'object') { return $send2(self, $find_super(self, '__id__', $$__id__, false, true), '__id__', [], $yield) } if (string_id_map.has(self)) { return string_id_map.get(self); } var id = Opal.uid(); string_id_map.set(self, id); return id; }), $def(self, '$hash', function $$hash() { var self = this; var hash = $opal32_init(), i, length = self.length; hash = $opal32_add(hash, 0x5); hash = $opal32_add(hash, length); for (i = 0; i < length; i++) { hash = $opal32_add(hash, self.charCodeAt(i)); } return hash; })) })(); ; $defs(self, '$try_convert', function $$try_convert(what) { return $Opal['$coerce_to?'](what, $$$('String'), "to_str") }); $defs(self, '$new', function $String_new$1($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; var str = args[0] || ""; var opts = args[args.length-1]; str = $coerce_to(str, $$$('String'), 'to_str'); if (opts && opts.$$is_hash) { if (opts.has('encoding')) str = str.$force_encoding(opts.get('encoding').value); } str = new self.$$constructor(str); if (!str.$initialize.$$pristine) $send((str), 'initialize', $to_a(args)); return str; ; }, -1); $def(self, '$initialize', function $$initialize($a, $b) { var $post_args, $kwargs, str, encoding, capacity; $post_args = $slice(arguments); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); if ($post_args.length > 0) str = $post_args.shift();; encoding = $hash_get($kwargs, "encoding");if (encoding == null) encoding = nil; capacity = $hash_get($kwargs, "capacity");if (capacity == null) capacity = nil; return nil; }, -1); $def(self, '$%', function $String_$percent$2(data) { var self = this; if ($eqeqeq($$$('Array'), data)) { return $send(self, 'format', [self].concat($to_a(data))) } else { return self.$format(self, data) } }); $def(self, '$*', function $String_$$3(count) { var self = this; count = $coerce_to(count, $$$('Integer'), 'to_int'); if (count < 0) { $Kernel.$raise($$$('ArgumentError'), "negative argument") } if (count === 0) { return ''; } var result = '', string = self.toString(); // All credit for the bit-twiddling magic code below goes to Mozilla // polyfill implementation of String.prototype.repeat() posted here: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat if (string.length * count >= 1 << 28) { $Kernel.$raise($$$('RangeError'), "multiply count must not overflow maximum string size") } for (;;) { if ((count & 1) === 1) { result += string; } count >>>= 1; if (count === 0) { break; } string += string; } return result; }); $def(self, '$+', function $String_$plus$4(other) { var self = this; other = $coerce_to(other, $$$('String'), 'to_str'); if (other == "" && self.$$class === Opal.String) return self; if (self == "" && other.$$class === Opal.String) return other; var out = self + other; if (self.encoding === out.encoding && other.encoding === out.encoding) return out; if (self.encoding.name === "UTF-8" || other.encoding.name === "UTF-8") return out; return Opal.enc(out, self.encoding); ; }); $def(self, '$<=>', function $String_$lt_eq_gt$5(other) { var self = this; if ($truthy(other['$respond_to?']("to_str"))) { other = other.$to_str().$to_s(); return self > other ? 1 : (self < other ? -1 : 0);; } else { var cmp = other['$<=>'](self); if (cmp === nil) { return nil; } else { return cmp > 0 ? -1 : (cmp < 0 ? 1 : 0); } } }); $def(self, '$==', function $String_$eq_eq$6(other) { var self = this; if (other.$$is_string) { return self.toString() === other.toString(); } if ($respond_to(other, '$to_str')) { return other['$=='](self); } return false; }); $def(self, '$=~', function $String_$eq_tilde$7(other) { var self = this; if (other.$$is_string) { $Kernel.$raise($$$('TypeError'), "type mismatch: String given"); } return other['$=~'](self); }); $def(self, '$[]', function $String_$$$8(index, length) { var self = this; ; var size = self.length, exclude, range; if (index.$$is_range) { exclude = index.excl; range = index; length = index.end === nil ? -1 : $coerce_to(index.end, $$$('Integer'), 'to_int'); index = index.begin === nil ? 0 : $coerce_to(index.begin, $$$('Integer'), 'to_int'); if (Math.abs(index) > size) { return nil; } if (index < 0) { index += size; } if (length < 0) { length += size; } if (!exclude || range.end === nil) { length += 1; } length = length - index; if (length < 0) { length = 0; } return self.substr(index, length); } if (index.$$is_string) { if (length != null) { $Kernel.$raise($$$('TypeError')) } return self.indexOf(index) !== -1 ? index : nil; } if (index.$$is_regexp) { var match = self.match(index); if (match === null) { ($gvars["~"] = nil) return nil; } ($gvars["~"] = $$$('MatchData').$new(index, match)) if (length == null) { return match[0]; } length = $coerce_to(length, $$$('Integer'), 'to_int'); if (length < 0 && -length < match.length) { return match[length += match.length]; } if (length >= 0 && length < match.length) { return match[length]; } return nil; } index = $coerce_to(index, $$$('Integer'), 'to_int'); if (index < 0) { index += size; } if (length == null) { if (index >= size || index < 0) { return nil; } return self.substr(index, 1); } length = $coerce_to(length, $$$('Integer'), 'to_int'); if (length < 0) { return nil; } if (index > size || index < 0) { return nil; } return self.substr(index, length); ; }, -2); $def(self, '$b', function $$b() { var self = this; return (new String(self)).$force_encoding("binary") }); $def(self, '$capitalize', function $$capitalize() { var self = this; return self.charAt(0).toUpperCase() + self.substr(1).toLowerCase(); }); $def(self, '$casecmp', function $$casecmp(other) { var self = this; if (!$truthy(other['$respond_to?']("to_str"))) { return nil }; other = ($coerce_to(other, $$$('String'), 'to_str')).$to_s(); var ascii_only = /^[\x00-\x7F]*$/; if (ascii_only.test(self) && ascii_only.test(other)) { self = self.toLowerCase(); other = other.toLowerCase(); } ; return self['$<=>'](other); }); $def(self, '$casecmp?', function $String_casecmp$ques$9(other) { var self = this; var cmp = self.$casecmp(other); if (cmp === nil) { return nil; } else { return cmp === 0; } }); $def(self, '$center', function $$center(width, padstr) { var self = this; if (padstr == null) padstr = " "; width = $coerce_to(width, $$$('Integer'), 'to_int'); padstr = ($coerce_to(padstr, $$$('String'), 'to_str')).$to_s(); if ($truthy(padstr['$empty?']())) { $Kernel.$raise($$$('ArgumentError'), "zero width padding") }; if ($truthy(width <= self.length)) { return self }; var ljustified = self.$ljust($rb_divide($rb_plus(width, self.length), 2).$ceil(), padstr), rjustified = self.$rjust($rb_divide($rb_plus(width, self.length), 2).$floor(), padstr); return rjustified + ljustified.slice(self.length); ; }, -2); $def(self, '$chomp', function $$chomp(separator) { var self = this; if ($gvars["/"] == null) $gvars["/"] = nil; if (separator == null) separator = $gvars["/"]; if ($truthy(separator === nil || self.length === 0)) { return self }; separator = $Opal['$coerce_to!'](separator, $$$('String'), "to_str").$to_s(); var result; if (separator === "\n") { result = self.replace(/\r?\n?$/, ''); } else if (separator === "") { result = self.replace(/(\r?\n)+$/, ''); } else if (self.length >= separator.length) { var tail = self.substr(self.length - separator.length, separator.length); if (tail === separator) { result = self.substr(0, self.length - separator.length); } } if (result != null) { return result; } ; return self; }, -1); $def(self, '$chop', function $$chop() { var self = this; var length = self.length, result; if (length <= 1) { result = ""; } else if (self.charAt(length - 1) === "\n" && self.charAt(length - 2) === "\r") { result = self.substr(0, length - 2); } else { result = self.substr(0, length - 1); } return result; }); $def(self, '$chr', function $$chr() { var self = this; return self.charAt(0); }); $def(self, '$clone', function $$clone($kwargs) { var freeze, self = this, copy = nil; $kwargs = $ensure_kwargs($kwargs); freeze = $hash_get($kwargs, "freeze");if (freeze == null) freeze = nil; if (!(($truthy(freeze['$nil?']()) || ($eqeq(freeze, true))) || ($eqeq(freeze, false)))) { self.$raise($$('ArgumentError'), "unexpected value for freeze: " + (freeze.$class())) }; copy = new String(self); copy.$copy_singleton_methods(self); copy.$initialize_clone(self, (new Map([["freeze", freeze]]))); if ($eqeq(freeze, true)) { if (!copy.$$frozen) { copy.$$frozen = true; } } else if ($truthy(freeze['$nil?']())) { if (self.$$frozen) { copy.$$frozen = true; } }; return copy; }, -1); $def(self, '$dup', function $$dup() { var self = this, copy = nil; copy = new String(self); copy.$initialize_dup(self); return copy; }); $def(self, '$count', function $$count($a) { var $post_args, sets, self = this; $post_args = $slice(arguments); sets = $post_args; if (sets.length === 0) { $Kernel.$raise($$$('ArgumentError'), "ArgumentError: wrong number of arguments (0 for 1+)") } var char_class = char_class_from_char_sets(sets); if (char_class === null) { return 0; } return self.length - self.replace(new RegExp(char_class, 'g'), '').length; ; }, -1); $def(self, '$delete', function $String_delete$10($a) { var $post_args, sets, self = this; $post_args = $slice(arguments); sets = $post_args; if (sets.length === 0) { $Kernel.$raise($$$('ArgumentError'), "ArgumentError: wrong number of arguments (0 for 1+)") } var char_class = char_class_from_char_sets(sets); if (char_class === null) { return self; } return self.replace(new RegExp(char_class, 'g'), ''); ; }, -1); $def(self, '$delete_prefix', function $$delete_prefix(prefix) { var self = this; if (!prefix.$$is_string) { prefix = $coerce_to(prefix, $$$('String'), 'to_str'); } if (self.slice(0, prefix.length) === prefix) { return self.slice(prefix.length); } else { return self; } }); $def(self, '$delete_suffix', function $$delete_suffix(suffix) { var self = this; if (!suffix.$$is_string) { suffix = $coerce_to(suffix, $$$('String'), 'to_str'); } if (self.slice(self.length - suffix.length) === suffix) { return self.slice(0, self.length - suffix.length); } else { return self; } }); $def(self, '$downcase', function $$downcase() { var self = this; return self.toLowerCase(); }); $def(self, '$each_line', function $$each_line($a, $b) { var block = $$each_line.$$p || nil, $post_args, $kwargs, separator, chomp, self = this; if ($gvars["/"] == null) $gvars["/"] = nil; $$each_line.$$p = null; ; $post_args = $slice(arguments); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); if ($post_args.length > 0) separator = $post_args.shift();if (separator == null) separator = $gvars["/"]; chomp = $hash_get($kwargs, "chomp");if (chomp == null) chomp = false; if (!(block !== nil)) { return self.$enum_for("each_line", separator, (new Map([["chomp", chomp]]))) }; if (separator === nil) { Opal.yield1(block, self); return self; } separator = $coerce_to(separator, $$$('String'), 'to_str'); var a, i, n, length, chomped, trailing, splitted, value; if (separator.length === 0) { for (a = self.split(/((?:\r?\n){2})(?:(?:\r?\n)*)/), i = 0, n = a.length; i < n; i += 2) { if (a[i] || a[i + 1]) { value = (a[i] || "") + (a[i + 1] || ""); if (chomp) { value = (value).$chomp("\n"); } Opal.yield1(block, value); } } return self; } chomped = self.$chomp(separator); trailing = self.length != chomped.length; splitted = chomped.split(separator); for (i = 0, length = splitted.length; i < length; i++) { value = splitted[i]; if (i < length - 1 || trailing) { value += separator; } if (chomp) { value = (value).$chomp(separator); } Opal.yield1(block, value); } ; return self; }, -1); $def(self, '$empty?', function $String_empty$ques$11() { var self = this; return self.length === 0; }); $def(self, '$end_with?', function $String_end_with$ques$12($a) { var $post_args, suffixes, self = this; $post_args = $slice(arguments); suffixes = $post_args; for (var i = 0, length = suffixes.length; i < length; i++) { var suffix = $coerce_to(suffixes[i], $$$('String'), 'to_str').$to_s(); if (self.length >= suffix.length && self.substr(self.length - suffix.length, suffix.length) == suffix) { return true; } } ; return false; }, -1); $def(self, '$gsub', function $$gsub(pattern, replacement) { var block = $$gsub.$$p || nil, self = this; $$gsub.$$p = null; ; ; if (replacement === undefined && block === nil) { return self.$enum_for("gsub", pattern); } var result = '', match_data = nil, index = 0, match, _replacement; if (pattern.$$is_regexp) { pattern = $global_multiline_regexp(pattern); } else { pattern = $coerce_to(pattern, $$$('String'), 'to_str'); pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gm'); } var lastIndex; while (true) { match = pattern.exec(self); if (match === null) { ($gvars["~"] = nil) result += self.slice(index); break; } match_data = $$$('MatchData').$new(pattern, match); if (replacement === undefined) { lastIndex = pattern.lastIndex; _replacement = block(match[0]); pattern.lastIndex = lastIndex; // save and restore lastIndex } else if (replacement.$$is_hash) { _replacement = (replacement)['$[]'](match[0]).$to_s(); } else { if (!replacement.$$is_string) { replacement = $coerce_to(replacement, $$$('String'), 'to_str'); } _replacement = replacement.replace(/([\\]+)([0-9+&`'])/g, function (original, slashes, command) { if (slashes.length % 2 === 0) { return original; } switch (command) { case "+": for (var i = match.length - 1; i > 0; i--) { if (match[i] !== undefined) { return slashes.slice(1) + match[i]; } } return ''; case "&": return slashes.slice(1) + match[0]; case "`": return slashes.slice(1) + self.slice(0, match.index); case "'": return slashes.slice(1) + self.slice(match.index + match[0].length); default: return slashes.slice(1) + (match[command] || ''); } }).replace(/\\\\/g, '\\'); } if (pattern.lastIndex === match.index) { result += (self.slice(index, match.index) + _replacement + (self[match.index] || "")); pattern.lastIndex += 1; } else { result += (self.slice(index, match.index) + _replacement) } index = pattern.lastIndex; } ($gvars["~"] = match_data) return result; ; }, -2); $def(self, '$hex', function $$hex() { var self = this; return self.$to_i(16) }); $def(self, '$include?', function $String_include$ques$13(other) { var self = this; if (!other.$$is_string) { other = $coerce_to(other, $$$('String'), 'to_str'); } return self.indexOf(other) !== -1; }); $def(self, '$index', function $$index(search, offset) { var self = this; ; var index, match, regex; if (offset === undefined) { offset = 0; } else { offset = $coerce_to(offset, $$$('Integer'), 'to_int'); if (offset < 0) { offset += self.length; if (offset < 0) { return nil; } } } if (search.$$is_regexp) { regex = $global_multiline_regexp(search); while (true) { match = regex.exec(self); if (match === null) { ($gvars["~"] = nil); index = -1; break; } if (match.index >= offset) { ($gvars["~"] = $$$('MatchData').$new(regex, match)) index = match.index; break; } regex.lastIndex = match.index + 1; } } else { search = $coerce_to(search, $$$('String'), 'to_str'); if (search.length === 0 && offset > self.length) { index = -1; } else { index = self.indexOf(search, offset); } } return index === -1 ? nil : index; ; }, -2); $def(self, '$inspect', function $$inspect() { var self = this; /* eslint-disable no-misleading-character-class */ var escapable = /[\\\"\x00-\x1f\u007F-\u009F\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, meta = { '\u0007': '\\a', '\u001b': '\\e', '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '\v': '\\v', '"' : '\\"', '\\': '\\\\' }, escaped = self.replace(escapable, function (chr) { if (meta[chr]) return meta[chr]; chr = chr.charCodeAt(0); if (chr <= 0xff && (self.encoding["$binary?"]() || self.internal_encoding["$binary?"]())) { return '\\x' + ('00' + chr.toString(16).toUpperCase()).slice(-2); } else { return '\\u' + ('0000' + chr.toString(16).toUpperCase()).slice(-4); } }); return '"' + escaped.replace(/\#[\$\@\{]/g, '\\$&') + '"'; /* eslint-enable no-misleading-character-class */ }); $def(self, '$intern', function $$intern() { var self = this; return self.toString(); }); $def(self, '$length', function $$length() { var self = this; return self.length; }); $alias(self, "size", "length"); $def(self, '$lines', function $$lines($a, $b) { var block = $$lines.$$p || nil, $post_args, $kwargs, separator, chomp, self = this, e = nil; if ($gvars["/"] == null) $gvars["/"] = nil; $$lines.$$p = null; ; $post_args = $slice(arguments); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); if ($post_args.length > 0) separator = $post_args.shift();if (separator == null) separator = $gvars["/"]; chomp = $hash_get($kwargs, "chomp");if (chomp == null) chomp = false; e = $send(self, 'each_line', [separator, (new Map([["chomp", chomp]]))], block.$to_proc()); if ($truthy(block)) { return self } else { return e.$to_a() }; }, -1); $def(self, '$ljust', function $$ljust(width, padstr) { var self = this; if (padstr == null) padstr = " "; width = $coerce_to(width, $$$('Integer'), 'to_int'); padstr = ($coerce_to(padstr, $$$('String'), 'to_str')).$to_s(); if ($truthy(padstr['$empty?']())) { $Kernel.$raise($$$('ArgumentError'), "zero width padding") }; if ($truthy(width <= self.length)) { return self }; var index = -1, result = ""; width -= self.length; while (++index < width) { result += padstr; } return self + result.slice(0, width); ; }, -2); $def(self, '$lstrip', function $$lstrip() { var self = this; return self.replace(/^[\x00\x09\x0a-\x0d\x20]*/, ''); }); $def(self, '$ascii_only?', function $String_ascii_only$ques$14() { var self = this; if (!self.encoding.ascii) return false; return /^[\x00-\x7F]*$/.test(self); }); $def(self, '$match', function $$match(pattern, pos) { var block = $$match.$$p || nil, self = this; $$match.$$p = null; ; ; if (($eqeqeq($$('String'), pattern) || ($truthy(pattern['$respond_to?']("to_str"))))) { pattern = $$$('Regexp').$new(pattern.$to_str()) }; if (!$eqeqeq($$$('Regexp'), pattern)) { $Kernel.$raise($$$('TypeError'), "wrong argument type " + (pattern.$class()) + " (expected Regexp)") }; return $send(pattern, 'match', [self, pos], block.$to_proc()); }, -2); $def(self, '$match?', function $String_match$ques$15(pattern, pos) { var self = this; ; if (($eqeqeq($$('String'), pattern) || ($truthy(pattern['$respond_to?']("to_str"))))) { pattern = $$$('Regexp').$new(pattern.$to_str()) }; if (!$eqeqeq($$$('Regexp'), pattern)) { $Kernel.$raise($$$('TypeError'), "wrong argument type " + (pattern.$class()) + " (expected Regexp)") }; return pattern['$match?'](self, pos); }, -2); $def(self, '$next', function $$next() { var self = this; var i = self.length; if (i === 0) { return ''; } var result = self; var first_alphanum_char_index = self.search(/[a-zA-Z0-9]/); var carry = false; var code; while (i--) { code = self.charCodeAt(i); if ((code >= 48 && code <= 57) || (code >= 65 && code <= 90) || (code >= 97 && code <= 122)) { switch (code) { case 57: carry = true; code = 48; break; case 90: carry = true; code = 65; break; case 122: carry = true; code = 97; break; default: carry = false; code += 1; } } else { if (first_alphanum_char_index === -1) { if (code === 255) { carry = true; code = 0; } else { carry = false; code += 1; } } else { carry = true; } } result = result.slice(0, i) + String.fromCharCode(code) + result.slice(i + 1); if (carry && (i === 0 || i === first_alphanum_char_index)) { switch (code) { case 65: break; case 97: break; default: code += 1; } if (i === 0) { result = String.fromCharCode(code) + result; } else { result = result.slice(0, i) + String.fromCharCode(code) + result.slice(i); } carry = false; } if (!carry) { break; } } return result; }); $def(self, '$oct', function $$oct() { var self = this; var result, string = self, radix = 8; if (/^\s*_/.test(string)) { return 0; } string = string.replace(/^(\s*[+-]?)(0[bodx]?)(.+)$/i, function (original, head, flag, tail) { switch (tail.charAt(0)) { case '+': case '-': return original; case '0': if (tail.charAt(1) === 'x' && flag === '0x') { return original; } } switch (flag) { case '0b': radix = 2; break; case '0': case '0o': radix = 8; break; case '0d': radix = 10; break; case '0x': radix = 16; break; } return head + tail; }); result = parseInt(string.replace(/_(?!_)/g, ''), radix); return isNaN(result) ? 0 : result; }); $def(self, '$ord', function $$ord() { var self = this; if (typeof self.codePointAt === "function") { return self.codePointAt(0); } else { return self.charCodeAt(0); } }); $def(self, '$partition', function $$partition(sep) { var self = this; var i, m; if (sep.$$is_regexp) { m = sep.exec(self); if (m === null) { i = -1; } else { $$$('MatchData').$new(sep, m); sep = m[0]; i = m.index; } } else { sep = $coerce_to(sep, $$$('String'), 'to_str'); i = self.indexOf(sep); } if (i === -1) { return [self, '', '']; } return [ self.slice(0, i), self.slice(i, i + sep.length), self.slice(i + sep.length) ]; }); $def(self, '$reverse', function $$reverse() { var self = this; return self.split('').reverse().join(''); }); $def(self, '$rindex', function $$rindex(search, offset) { var self = this; ; var i, m, r, _m; if (offset === undefined) { offset = self.length; } else { offset = $coerce_to(offset, $$$('Integer'), 'to_int'); if (offset < 0) { offset += self.length; if (offset < 0) { return nil; } } } if (search.$$is_regexp) { m = null; r = $global_multiline_regexp(search); while (true) { _m = r.exec(self); if (_m === null || _m.index > offset) { break; } m = _m; r.lastIndex = m.index + 1; } if (m === null) { ($gvars["~"] = nil) i = -1; } else { $$$('MatchData').$new(r, m); i = m.index; } } else { search = $coerce_to(search, $$$('String'), 'to_str'); i = self.lastIndexOf(search, offset); } return i === -1 ? nil : i; ; }, -2); $def(self, '$rjust', function $$rjust(width, padstr) { var self = this; if (padstr == null) padstr = " "; width = $coerce_to(width, $$$('Integer'), 'to_int'); padstr = ($coerce_to(padstr, $$$('String'), 'to_str')).$to_s(); if ($truthy(padstr['$empty?']())) { $Kernel.$raise($$$('ArgumentError'), "zero width padding") }; if ($truthy(width <= self.length)) { return self }; var chars = Math.floor(width - self.length), patterns = Math.floor(chars / padstr.length), result = Array(patterns + 1).join(padstr), remaining = chars - result.length; return result + padstr.slice(0, remaining) + self; ; }, -2); $def(self, '$rpartition', function $$rpartition(sep) { var self = this; var i, m, r, _m; if (sep.$$is_regexp) { m = null; r = $global_multiline_regexp(sep); while (true) { _m = r.exec(self); if (_m === null) { break; } m = _m; r.lastIndex = m.index + 1; } if (m === null) { i = -1; } else { $$$('MatchData').$new(r, m); sep = m[0]; i = m.index; } } else { sep = $coerce_to(sep, $$$('String'), 'to_str'); i = self.lastIndexOf(sep); } if (i === -1) { return ['', '', self]; } return [ self.slice(0, i), self.slice(i, i + sep.length), self.slice(i + sep.length) ]; }); $def(self, '$rstrip', function $$rstrip() { var self = this; return self.replace(/[\x00\x09\x0a-\x0d\x20]*$/, ''); }); $def(self, '$scan', function $$scan(pattern, $kwargs) { var block = $$scan.$$p || nil, no_matchdata, self = this; $$scan.$$p = null; ; $kwargs = $ensure_kwargs($kwargs); no_matchdata = $hash_get($kwargs, "no_matchdata");if (no_matchdata == null) no_matchdata = false; var result = [], match_data = nil, match; if (pattern.$$is_regexp) { pattern = $global_multiline_regexp(pattern); } else { pattern = $coerce_to(pattern, $$$('String'), 'to_str'); pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gm'); } while ((match = pattern.exec(self)) != null) { match_data = $$$('MatchData').$new(pattern, match, (new Map([["no_matchdata", no_matchdata]]))); if (block === nil) { match.length == 1 ? result.push(match[0]) : result.push((match_data).$captures()); } else { match.length == 1 ? Opal.yield1(block, match[0]) : Opal.yield1(block, (match_data).$captures()); } if (pattern.lastIndex === match.index) { pattern.lastIndex += 1; } } if (!no_matchdata) ($gvars["~"] = match_data); return (block !== nil ? self : result); ; }, -2); $def(self, '$singleton_class', function $$singleton_class() { var self = this; return Opal.get_singleton_class(self); }); $def(self, '$split', function $$split(pattern, limit) { var self = this, $ret_or_1 = nil; if ($gvars[";"] == null) $gvars[";"] = nil; ; ; if (self.length === 0) { return []; } if (limit === undefined) { limit = 0; } else { limit = $Opal['$coerce_to!'](limit, $$$('Integer'), "to_int"); if (limit === 1) { return [self]; } } if (pattern === undefined || pattern === nil) { pattern = ($truthy(($ret_or_1 = $gvars[";"])) ? ($ret_or_1) : (" ")); } var result = [], string = self.toString(), index = 0, match, match_count = 0, valid_result_length = 0, i, max; if (pattern.$$is_regexp) { pattern = $global_multiline_regexp(pattern); } else { pattern = $coerce_to(pattern, $$$('String'), 'to_str').$to_s(); if (pattern === ' ') { pattern = /\s+/gm; string = string.replace(/^\s+/, ''); } } result = string.split(pattern); if (result.length === 1 && result[0] === string) { return [result[0]]; } while ((i = result.indexOf(undefined)) !== -1) { result.splice(i, 1); } if (limit === 0) { while (result[result.length - 1] === '') { result.pop(); } return result; } if (!pattern.$$is_regexp) { pattern = Opal.escape_regexp(pattern) pattern = new RegExp(pattern, 'gm'); } match = pattern.exec(string); if (limit < 0) { if (match !== null && match[0] === '' && pattern.source.indexOf('(?=') === -1) { for (i = 0, max = match.length; i < max; i++) { result.push(''); } } return result; } if (match !== null && match[0] === '') { valid_result_length = (match.length - 1) * (limit - 1) + limit result.splice(valid_result_length - 1, result.length - 1, result.slice(valid_result_length - 1).join('')); return result; } if (limit >= result.length) { return result; } while (match !== null) { match_count++; index = pattern.lastIndex; valid_result_length += match.length if (match_count + 1 === limit) { break; } match = pattern.exec(string); } result.splice(valid_result_length, result.length - 1, string.slice(index)); return result; ; }, -1); $def(self, '$squeeze', function $$squeeze($a) { var $post_args, sets, self = this; $post_args = $slice(arguments); sets = $post_args; if (sets.length === 0) { return self.replace(/(.)\1+/g, '$1'); } var char_class = char_class_from_char_sets(sets); if (char_class === null) { return self; } return self.replace(new RegExp('(' + char_class + ')\\1+', 'g'), '$1'); ; }, -1); $def(self, '$start_with?', function $String_start_with$ques$16($a) { var $post_args, prefixes, self = this; $post_args = $slice(arguments); prefixes = $post_args; for (var i = 0, length = prefixes.length; i < length; i++) { if (prefixes[i].$$is_regexp) { var regexp = prefixes[i]; var match = regexp.exec(self); if (match != null && match.index === 0) { ($gvars["~"] = $$$('MatchData').$new(regexp, match)); return true; } else { ($gvars["~"] = nil) } } else { var prefix = $coerce_to(prefixes[i], $$$('String'), 'to_str').$to_s(); if (self.length >= prefix.length && self.startsWith(prefix)) { return true; } } } return false; ; }, -1); $def(self, '$strip', function $$strip() { var self = this; return self.replace(/^[\x00\x09\x0a-\x0d\x20]*|[\x00\x09\x0a-\x0d\x20]*$/g, ''); }); $def(self, '$sub', function $$sub(pattern, replacement) { var block = $$sub.$$p || nil, self = this; $$sub.$$p = null; ; ; if (!pattern.$$is_regexp) { pattern = $coerce_to(pattern, $$$('String'), 'to_str'); pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); } var result, match = pattern.exec(self); if (match === null) { ($gvars["~"] = nil) result = self.toString(); } else { $$$('MatchData').$new(pattern, match) if (replacement === undefined) { if (block === nil) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (1 for 2)") } result = self.slice(0, match.index) + block(match[0]) + self.slice(match.index + match[0].length); } else if (replacement.$$is_hash) { result = self.slice(0, match.index) + (replacement)['$[]'](match[0]).$to_s() + self.slice(match.index + match[0].length); } else { replacement = $coerce_to(replacement, $$$('String'), 'to_str'); replacement = replacement.replace(/([\\]+)([0-9+&`'])/g, function (original, slashes, command) { if (slashes.length % 2 === 0) { return original; } switch (command) { case "+": for (var i = match.length - 1; i > 0; i--) { if (match[i] !== undefined) { return slashes.slice(1) + match[i]; } } return ''; case "&": return slashes.slice(1) + match[0]; case "`": return slashes.slice(1) + self.slice(0, match.index); case "'": return slashes.slice(1) + self.slice(match.index + match[0].length); default: return slashes.slice(1) + (match[command] || ''); } }).replace(/\\\\/g, '\\'); result = self.slice(0, match.index) + replacement + self.slice(match.index + match[0].length); } } return result; ; }, -2); $def(self, '$sum', function $$sum(n) { var self = this; if (n == null) n = 16; n = $coerce_to(n, $$$('Integer'), 'to_int'); var result = 0, length = self.length, i = 0; for (; i < length; i++) { result += self.charCodeAt(i); } if (n <= 0) { return result; } return result & (Math.pow(2, n) - 1); ; }, -1); $def(self, '$swapcase', function $$swapcase() { var self = this; var str = self.replace(/([a-z]+)|([A-Z]+)/g, function($0,$1,$2) { return $1 ? $0.toUpperCase() : $0.toLowerCase(); }); return str; }); $def(self, '$to_f', function $$to_f() { var self = this; if (self.charAt(0) === '_') { return 0; } var result = parseFloat(self.replace(/_/g, '')); if (isNaN(result) || result == Infinity || result == -Infinity) { return 0; } else { return result; } }); $def(self, '$to_i', function $$to_i(base) { var self = this; if (base == null) base = 10; var result, string = self.toLowerCase(), radix = $coerce_to(base, $$$('Integer'), 'to_int'); if (radix === 1 || radix < 0 || radix > 36) { $Kernel.$raise($$$('ArgumentError'), "invalid radix " + (radix)) } if (/^\s*_/.test(string)) { return 0; } string = string.replace(/^(\s*[+-]?)(0[bodx]?)(.+)$/, function (original, head, flag, tail) { switch (tail.charAt(0)) { case '+': case '-': return original; case '0': if (tail.charAt(1) === 'x' && flag === '0x' && (radix === 0 || radix === 16)) { return original; } } switch (flag) { case '0b': if (radix === 0 || radix === 2) { radix = 2; return head + tail; } break; case '0': case '0o': if (radix === 0 || radix === 8) { radix = 8; return head + tail; } break; case '0d': if (radix === 0 || radix === 10) { radix = 10; return head + tail; } break; case '0x': if (radix === 0 || radix === 16) { radix = 16; return head + tail; } break; } return original }); result = parseInt(string.replace(/_(?!_)/g, ''), radix); return isNaN(result) ? 0 : result; ; }, -1); $def(self, '$to_proc', function $$to_proc() { var $yield = $$to_proc.$$p || nil, self = this, method_name = nil, jsid = nil, proc = nil; $$to_proc.$$p = null; method_name = self.valueOf(); jsid = Opal.jsid(method_name); proc = $send($Kernel, 'proc', [], function $$17($a){var block = $$17.$$p || nil, $post_args, args; $$17.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if (args.length === 0) { $Kernel.$raise($$$('ArgumentError'), "no receiver given") } var recv = args[0]; if (recv == null) recv = nil; var body = recv[jsid]; if (!body) { body = recv.$method_missing; args[0] = method_name; } else { args = args.slice(1); } if (typeof block === 'function') { body.$$p = block; } if (args.length === 0) { return body.call(recv); } else { return body.apply(recv, args); } ;}, -1); proc.$$source_location = nil; return proc; }); $def(self, '$to_s', function $$to_s() { var self = this; return self.toString(); }); $def(self, '$tr', function $$tr(from, to) { var self = this; from = $coerce_to(from, $$$('String'), 'to_str').$to_s(); to = $coerce_to(to, $$$('String'), 'to_str').$to_s(); if (from.length == 0 || from === to) { return self; } var i, in_range, c, ch, start, end, length; var subs = {}; var from_chars = from.split(''); var from_length = from_chars.length; var to_chars = to.split(''); var to_length = to_chars.length; var inverse = false; var global_sub = null; if (from_chars[0] === '^' && from_chars.length > 1) { inverse = true; from_chars.shift(); global_sub = to_chars[to_length - 1] from_length -= 1; } var from_chars_expanded = []; var last_from = null; in_range = false; for (i = 0; i < from_length; i++) { ch = from_chars[i]; if (last_from == null) { last_from = ch; from_chars_expanded.push(ch); } else if (ch === '-') { if (last_from === '-') { from_chars_expanded.push('-'); from_chars_expanded.push('-'); } else if (i == from_length - 1) { from_chars_expanded.push('-'); } else { in_range = true; } } else if (in_range) { start = last_from.charCodeAt(0); end = ch.charCodeAt(0); if (start > end) { $Kernel.$raise($$$('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") } for (c = start + 1; c < end; c++) { from_chars_expanded.push(String.fromCharCode(c)); } from_chars_expanded.push(ch); in_range = null; last_from = null; } else { from_chars_expanded.push(ch); } } from_chars = from_chars_expanded; from_length = from_chars.length; if (inverse) { for (i = 0; i < from_length; i++) { subs[from_chars[i]] = true; } } else { if (to_length > 0) { var to_chars_expanded = []; var last_to = null; in_range = false; for (i = 0; i < to_length; i++) { ch = to_chars[i]; if (last_to == null) { last_to = ch; to_chars_expanded.push(ch); } else if (ch === '-') { if (last_to === '-') { to_chars_expanded.push('-'); to_chars_expanded.push('-'); } else if (i == to_length - 1) { to_chars_expanded.push('-'); } else { in_range = true; } } else if (in_range) { start = last_to.charCodeAt(0); end = ch.charCodeAt(0); if (start > end) { $Kernel.$raise($$$('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") } for (c = start + 1; c < end; c++) { to_chars_expanded.push(String.fromCharCode(c)); } to_chars_expanded.push(ch); in_range = null; last_to = null; } else { to_chars_expanded.push(ch); } } to_chars = to_chars_expanded; to_length = to_chars.length; } var length_diff = from_length - to_length; if (length_diff > 0) { var pad_char = (to_length > 0 ? to_chars[to_length - 1] : ''); for (i = 0; i < length_diff; i++) { to_chars.push(pad_char); } } for (i = 0; i < from_length; i++) { subs[from_chars[i]] = to_chars[i]; } } var new_str = '' for (i = 0, length = self.length; i < length; i++) { ch = self.charAt(i); var sub = subs[ch]; if (inverse) { new_str += (sub == null ? global_sub : ch); } else { new_str += (sub != null ? sub : ch); } } return new_str; }); $def(self, '$tr_s', function $$tr_s(from, to) { var self = this; from = $coerce_to(from, $$$('String'), 'to_str').$to_s(); to = $coerce_to(to, $$$('String'), 'to_str').$to_s(); if (from.length == 0) { return self; } var i, in_range, c, ch, start, end, length; var subs = {}; var from_chars = from.split(''); var from_length = from_chars.length; var to_chars = to.split(''); var to_length = to_chars.length; var inverse = false; var global_sub = null; if (from_chars[0] === '^' && from_chars.length > 1) { inverse = true; from_chars.shift(); global_sub = to_chars[to_length - 1] from_length -= 1; } var from_chars_expanded = []; var last_from = null; in_range = false; for (i = 0; i < from_length; i++) { ch = from_chars[i]; if (last_from == null) { last_from = ch; from_chars_expanded.push(ch); } else if (ch === '-') { if (last_from === '-') { from_chars_expanded.push('-'); from_chars_expanded.push('-'); } else if (i == from_length - 1) { from_chars_expanded.push('-'); } else { in_range = true; } } else if (in_range) { start = last_from.charCodeAt(0); end = ch.charCodeAt(0); if (start > end) { $Kernel.$raise($$$('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") } for (c = start + 1; c < end; c++) { from_chars_expanded.push(String.fromCharCode(c)); } from_chars_expanded.push(ch); in_range = null; last_from = null; } else { from_chars_expanded.push(ch); } } from_chars = from_chars_expanded; from_length = from_chars.length; if (inverse) { for (i = 0; i < from_length; i++) { subs[from_chars[i]] = true; } } else { if (to_length > 0) { var to_chars_expanded = []; var last_to = null; in_range = false; for (i = 0; i < to_length; i++) { ch = to_chars[i]; if (last_from == null) { last_from = ch; to_chars_expanded.push(ch); } else if (ch === '-') { if (last_to === '-') { to_chars_expanded.push('-'); to_chars_expanded.push('-'); } else if (i == to_length - 1) { to_chars_expanded.push('-'); } else { in_range = true; } } else if (in_range) { start = last_from.charCodeAt(0); end = ch.charCodeAt(0); if (start > end) { $Kernel.$raise($$$('ArgumentError'), "invalid range \"" + (String.fromCharCode(start)) + "-" + (String.fromCharCode(end)) + "\" in string transliteration") } for (c = start + 1; c < end; c++) { to_chars_expanded.push(String.fromCharCode(c)); } to_chars_expanded.push(ch); in_range = null; last_from = null; } else { to_chars_expanded.push(ch); } } to_chars = to_chars_expanded; to_length = to_chars.length; } var length_diff = from_length - to_length; if (length_diff > 0) { var pad_char = (to_length > 0 ? to_chars[to_length - 1] : ''); for (i = 0; i < length_diff; i++) { to_chars.push(pad_char); } } for (i = 0; i < from_length; i++) { subs[from_chars[i]] = to_chars[i]; } } var new_str = '' var last_substitute = null for (i = 0, length = self.length; i < length; i++) { ch = self.charAt(i); var sub = subs[ch] if (inverse) { if (sub == null) { if (last_substitute == null) { new_str += global_sub; last_substitute = true; } } else { new_str += ch; last_substitute = null; } } else { if (sub != null) { if (last_substitute == null || last_substitute !== sub) { new_str += sub; last_substitute = sub; } } else { new_str += ch; last_substitute = null; } } } return new_str; }); $def(self, '$upcase', function $$upcase() { var self = this; return self.toUpperCase(); }); $def(self, '$upto', function $$upto(stop, excl) { var block = $$upto.$$p || nil, self = this; $$upto.$$p = null; ; if (excl == null) excl = false; if (!(block !== nil)) { return self.$enum_for("upto", stop, excl) }; var a, b, s = self.toString(); stop = $coerce_to(stop, $$$('String'), 'to_str'); if (s.length === 1 && stop.length === 1) { a = s.charCodeAt(0); b = stop.charCodeAt(0); while (a <= b) { if (excl && a === b) { break; } block(String.fromCharCode(a)); a += 1; } } else if (parseInt(s, 10).toString() === s && parseInt(stop, 10).toString() === stop) { a = parseInt(s, 10); b = parseInt(stop, 10); while (a <= b) { if (excl && a === b) { break; } block(a.toString()); a += 1; } } else { while (s.length <= stop.length && s <= stop) { if (excl && s === stop) { break; } block(s); s = (s).$succ(); } } return self; ; }, -2); function char_class_from_char_sets(sets) { function explode_sequences_in_character_set(set) { var result = '', i, len = set.length, curr_char, skip_next_dash, char_code_from, char_code_upto, char_code; for (i = 0; i < len; i++) { curr_char = set.charAt(i); if (curr_char === '-' && i > 0 && i < (len - 1) && !skip_next_dash) { char_code_from = set.charCodeAt(i - 1); char_code_upto = set.charCodeAt(i + 1); if (char_code_from > char_code_upto) { $Kernel.$raise($$$('ArgumentError'), "invalid range \"" + (char_code_from) + "-" + (char_code_upto) + "\" in string transliteration") } for (char_code = char_code_from + 1; char_code < char_code_upto + 1; char_code++) { result += String.fromCharCode(char_code); } skip_next_dash = true; i++; } else { skip_next_dash = (curr_char === '\\'); result += curr_char; } } return result; } function intersection(setA, setB) { if (setA.length === 0) { return setB; } var result = '', i, len = setA.length, chr; for (i = 0; i < len; i++) { chr = setA.charAt(i); if (setB.indexOf(chr) !== -1) { result += chr; } } return result; } var i, len, set, neg, chr, tmp, pos_intersection = '', neg_intersection = ''; for (i = 0, len = sets.length; i < len; i++) { set = $coerce_to(sets[i], $$$('String'), 'to_str'); neg = (set.charAt(0) === '^' && set.length > 1); set = explode_sequences_in_character_set(neg ? set.slice(1) : set); if (neg) { neg_intersection = intersection(neg_intersection, set); } else { pos_intersection = intersection(pos_intersection, set); } } if (pos_intersection.length > 0 && neg_intersection.length > 0) { tmp = ''; for (i = 0, len = pos_intersection.length; i < len; i++) { chr = pos_intersection.charAt(i); if (neg_intersection.indexOf(chr) === -1) { tmp += chr; } } pos_intersection = tmp; neg_intersection = ''; } if (pos_intersection.length > 0) { return '[' + $$$('Regexp').$escape(pos_intersection) + ']'; } if (neg_intersection.length > 0) { return '[^' + $$$('Regexp').$escape(neg_intersection) + ']'; } return null; } ; $def(self, '$instance_variables', function $$instance_variables() { return [] }); $defs(self, '$_load', function $$_load($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return $send(self, 'new', $to_a(args)); }, -1); $def(self, '$unicode_normalize', function $$unicode_normalize(form) { var self = this; if (form == null) form = "nfc"; if (!$truthy(["nfc", "nfd", "nfkc", "nfkd"]['$include?'](form))) { $Kernel.$raise($$$('ArgumentError'), "Invalid normalization form " + (form)) }; return self.normalize(form.$upcase()); }, -1); $def(self, '$unicode_normalized?', function $String_unicode_normalized$ques$18(form) { var self = this; if (form == null) form = "nfc"; return self.$unicode_normalize(form)['$=='](self); }, -1); $def(self, '$unpack', function $$unpack(format) { return $Kernel.$raise("To use String#unpack, you must first require 'corelib/string/unpack'.") }); $def(self, '$unpack1', function $$unpack1(format) { return $Kernel.$raise("To use String#unpack1, you must first require 'corelib/string/unpack'.") }); $def(self, '$freeze', function $$freeze() { var self = this; if (typeof self === 'string') { return self; } $prop(self, "$$frozen", true); return self; }); $def(self, '$-@', function $String_$minus$$19() { var self = this; if (typeof self === 'string') return self; if (self.$$frozen) return self; if (self.encoding.name == 'UTF-8' && self.internal_encoding.name == 'UTF-8') return self.toString(); return self.$dup().$freeze(); }); $def(self, '$frozen?', function $String_frozen$ques$20() { var self = this; return typeof self === 'string' || self.$$frozen === true; }); $alias(self, "+@", "dup"); $alias(self, "===", "=="); $alias(self, "byteslice", "[]"); $alias(self, "eql?", "=="); $alias(self, "equal?", "==="); $alias(self, "object_id", "__id__"); $alias(self, "slice", "[]"); $alias(self, "succ", "next"); $alias(self, "to_str", "to_s"); $alias(self, "to_sym", "intern"); return $Opal.$pristine(self, "initialize"); })('::', String, $nesting); return $const_set($nesting[0], 'Symbol', $$('String')); }; Opal.modules["corelib/enumerable"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $truthy = Opal.truthy, $coerce_to = Opal.coerce_to, $yield1 = Opal.yield1, $yieldX = Opal.yieldX, $deny_frozen_access = Opal.deny_frozen_access, $module = Opal.module, $send = Opal.send, $slice = Opal.slice, $to_a = Opal.to_a, $Opal = Opal.Opal, $thrower = Opal.thrower, $def = Opal.def, $Kernel = Opal.Kernel, $return_val = Opal.return_val, $rb_gt = Opal.rb_gt, $rb_times = Opal.rb_times, $rb_lt = Opal.rb_lt, $eqeq = Opal.eqeq, $rb_plus = Opal.rb_plus, $rb_minus = Opal.rb_minus, $rb_divide = Opal.rb_divide, $rb_le = Opal.rb_le, $lambda = Opal.lambda, $not = Opal.not, $alias = Opal.alias, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('each,public_send,destructure,to_enum,enumerator_size,new,yield,raise,slice_when,!,enum_for,flatten,map,to_proc,compact,to_a,warn,proc,==,nil?,respond_to?,coerce_to!,>,*,try_convert,<,+,-,ceil,/,size,select,__send__,length,<=,[],push,<<,[]=,===,inspect,<=>,first,reverse,sort,take,sort_by,compare,call,dup,sort!,map!,include?,-@,key?,values,transform_values,group_by,fetch,to_h,coerce_to?,class,zip,detect,find_all,collect_concat,collect,inject,entries'); return (function($base, $parent_nesting) { var self = $module($base, 'Enumerable'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); function comparableForPattern(value) { if (value.length === 0) { value = [nil]; } if (value.length > 1) { value = [value]; } return value; } ; $def(self, '$all?', function $Enumerable_all$ques$1(pattern) {try { var $t_return = $thrower('return'); var block = $Enumerable_all$ques$1.$$p || nil, self = this; $Enumerable_all$ques$1.$$p = null; ; ; if ($truthy(pattern !== undefined)) { $send(self, 'each', [], function $$2($a){var $post_args, value, comparable = nil; $post_args = $slice(arguments); value = $post_args; comparable = comparableForPattern(value); if ($truthy($send(pattern, 'public_send', ["==="].concat($to_a(comparable))))) { return nil } else { $t_return.$throw(false, $$2.$$is_lambda) };}, {$$arity: -1, $$ret: $t_return}) } else if ((block !== nil)) { $send(self, 'each', [], function $$3($a){var $post_args, value; $post_args = $slice(arguments); value = $post_args; if ($truthy(Opal.yieldX(block, $to_a(value)))) { return nil } else { $t_return.$throw(false, $$3.$$is_lambda) };}, {$$arity: -1, $$ret: $t_return}) } else { $send(self, 'each', [], function $$4($a){var $post_args, value; $post_args = $slice(arguments); value = $post_args; if ($truthy($Opal.$destructure(value))) { return nil } else { $t_return.$throw(false, $$4.$$is_lambda) };}, {$$arity: -1, $$ret: $t_return}) }; return true;} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }, -1); $def(self, '$any?', function $Enumerable_any$ques$5(pattern) {try { var $t_return = $thrower('return'); var block = $Enumerable_any$ques$5.$$p || nil, self = this; $Enumerable_any$ques$5.$$p = null; ; ; if ($truthy(pattern !== undefined)) { $send(self, 'each', [], function $$6($a){var $post_args, value, comparable = nil; $post_args = $slice(arguments); value = $post_args; comparable = comparableForPattern(value); if ($truthy($send(pattern, 'public_send', ["==="].concat($to_a(comparable))))) { $t_return.$throw(true, $$6.$$is_lambda) } else { return nil };}, {$$arity: -1, $$ret: $t_return}) } else if ((block !== nil)) { $send(self, 'each', [], function $$7($a){var $post_args, value; $post_args = $slice(arguments); value = $post_args; if ($truthy(Opal.yieldX(block, $to_a(value)))) { $t_return.$throw(true, $$7.$$is_lambda) } else { return nil };}, {$$arity: -1, $$ret: $t_return}) } else { $send(self, 'each', [], function $$8($a){var $post_args, value; $post_args = $slice(arguments); value = $post_args; if ($truthy($Opal.$destructure(value))) { $t_return.$throw(true, $$8.$$is_lambda) } else { return nil };}, {$$arity: -1, $$ret: $t_return}) }; return false;} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }, -1); $def(self, '$chunk', function $$chunk() { var block = $$chunk.$$p || nil, self = this; $$chunk.$$p = null; ; if (!(block !== nil)) { return $send(self, 'to_enum', ["chunk"], function $$9(){var self = $$9.$$s == null ? this : $$9.$$s; return self.$enumerator_size()}, {$$s: self}) }; return $send($$$('Enumerator'), 'new', [], function $$10(yielder){var self = $$10.$$s == null ? this : $$10.$$s; if (yielder == null) yielder = nil; var previous = nil, accumulate = []; function releaseAccumulate() { if (accumulate.length > 0) { yielder.$yield(previous, accumulate) } } self.$each.$$p = function(value) { var key = $yield1(block, value); if (key === nil) { releaseAccumulate(); accumulate = []; previous = nil; } else { if (previous === nil || previous === key) { accumulate.push(value); } else { releaseAccumulate(); accumulate = [value]; } previous = key; } } self.$each(); releaseAccumulate(); ;}, {$$s: self}); }); $def(self, '$chunk_while', function $$chunk_while() { var block = $$chunk_while.$$p || nil, self = this; $$chunk_while.$$p = null; ; if (!(block !== nil)) { $Kernel.$raise($$$('ArgumentError'), "no block given") }; return $send(self, 'slice_when', [], function $$11(before, after){ if (before == null) before = nil; if (after == null) after = nil; return Opal.yieldX(block, [before, after])['$!']();}); }); $def(self, '$collect', function $$collect() { var block = $$collect.$$p || nil, self = this; $$collect.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["collect"], function $$12(){var self = $$12.$$s == null ? this : $$12.$$s; return self.$enumerator_size()}, {$$s: self}) }; var result = []; self.$each.$$p = function() { var value = $yieldX(block, arguments); result.push(value); }; self.$each(); return result; ; }); $def(self, '$collect_concat', function $$collect_concat() { var block = $$collect_concat.$$p || nil, self = this; $$collect_concat.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["collect_concat"], function $$13(){var self = $$13.$$s == null ? this : $$13.$$s; return self.$enumerator_size()}, {$$s: self}) }; return $send(self, 'map', [], block.$to_proc()).$flatten(1); }); $def(self, '$compact', function $$compact() { var self = this; return self.$to_a().$compact() }); $def(self, '$count', function $$count(object) { var block = $$count.$$p || nil, self = this, result = nil; $$count.$$p = null; ; ; result = 0; if (object != null && block !== nil) { self.$warn("warning: given block not used") } ; if ($truthy(object != null)) { block = $send($Kernel, 'proc', [], function $$14($a){var $post_args, args; $post_args = $slice(arguments); args = $post_args; return $Opal.$destructure(args)['$=='](object);}, -1) } else if ($truthy(block['$nil?']())) { block = $send($Kernel, 'proc', [], $return_val(true)) }; $send(self, 'each', [], function $$15($a){var $post_args, args; $post_args = $slice(arguments); args = $post_args; if ($truthy($yieldX(block, args))) { return result++; } else { return nil };}, -1); return result; }, -1); $def(self, '$cycle', function $$cycle(n) { var block = $$cycle.$$p || nil, self = this; $$cycle.$$p = null; ; if (n == null) n = nil; if (!(block !== nil)) { return $send(self, 'enum_for', ["cycle", n], function $$16(){var self = $$16.$$s == null ? this : $$16.$$s; if ($truthy(n['$nil?']())) { if ($truthy(self['$respond_to?']("size"))) { return $$$($$$('Float'), 'INFINITY') } else { return nil } } else { n = $Opal['$coerce_to!'](n, $$$('Integer'), "to_int"); if ($truthy($rb_gt(n, 0))) { return $rb_times(self.$enumerator_size(), n) } else { return 0 }; }}, {$$s: self}) }; if (!$truthy(n['$nil?']())) { n = $Opal['$coerce_to!'](n, $$$('Integer'), "to_int"); if ($truthy(n <= 0)) { return nil }; }; var all = [], i, length, value; self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = $yield1(block, param); all.push(param); } self.$each(); if (all.length === 0) { return nil; } if (n === nil) { while (true) { for (i = 0, length = all.length; i < length; i++) { value = $yield1(block, all[i]); } } } else { while (n > 1) { for (i = 0, length = all.length; i < length; i++) { value = $yield1(block, all[i]); } n--; } } ; }, -1); $def(self, '$detect', function $$detect(ifnone) {try { var $t_return = $thrower('return'); var block = $$detect.$$p || nil, self = this; $$detect.$$p = null; ; ; if (!(block !== nil)) { return self.$enum_for("detect", ifnone) }; $send(self, 'each', [], function $$17($a){var $post_args, args, value = nil; $post_args = $slice(arguments); args = $post_args; value = $Opal.$destructure(args); if ($truthy(Opal.yield1(block, value))) { $t_return.$throw(value, $$17.$$is_lambda) } else { return nil };}, {$$arity: -1, $$ret: $t_return}); if (ifnone !== undefined) { if (typeof(ifnone) === 'function') { return ifnone(); } else { return ifnone; } } ; return nil;} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }, -1); $def(self, '$drop', function $$drop(number) { var self = this; number = $coerce_to(number, $$$('Integer'), 'to_int'); if ($truthy(number < 0)) { $Kernel.$raise($$$('ArgumentError'), "attempt to drop negative size") }; var result = [], current = 0; self.$each.$$p = function() { if (number <= current) { result.push($Opal.$destructure(arguments)); } current++; }; self.$each() return result; ; }); $def(self, '$drop_while', function $$drop_while() { var block = $$drop_while.$$p || nil, self = this; $$drop_while.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("drop_while") }; var result = [], dropping = true; self.$each.$$p = function() { var param = $Opal.$destructure(arguments); if (dropping) { var value = $yield1(block, param); if (!$truthy(value)) { dropping = false; result.push(param); } } else { result.push(param); } }; self.$each(); return result; ; }); $def(self, '$each_cons', function $$each_cons(n) { var block = $$each_cons.$$p || nil, self = this; $$each_cons.$$p = null; ; if ($truthy(arguments.length != 1)) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 1)") }; n = $Opal.$try_convert(n, $$$('Integer'), "to_int"); if ($truthy(n <= 0)) { $Kernel.$raise($$$('ArgumentError'), "invalid size") }; if (!(block !== nil)) { return $send(self, 'enum_for', ["each_cons", n], function $$18(){var self = $$18.$$s == null ? this : $$18.$$s, enum_size = nil; enum_size = self.$enumerator_size(); if ($truthy(enum_size['$nil?']())) { return nil } else if (($eqeq(enum_size, 0) || ($truthy($rb_lt(enum_size, n))))) { return 0 } else { return $rb_plus($rb_minus(enum_size, n), 1) };}, {$$s: self}) }; var buffer = []; self.$each.$$p = function() { var element = $Opal.$destructure(arguments); buffer.push(element); if (buffer.length > n) { buffer.shift(); } if (buffer.length == n) { $yield1(block, buffer.slice(0, n)); } } self.$each(); return self; ; }); $def(self, '$each_entry', function $$each_entry($a) { var block = $$each_entry.$$p || nil, $post_args, data, self = this; $$each_entry.$$p = null; ; $post_args = $slice(arguments); data = $post_args; if (!(block !== nil)) { return $send(self, 'to_enum', ["each_entry"].concat($to_a(data)), function $$19(){var self = $$19.$$s == null ? this : $$19.$$s; return self.$enumerator_size()}, {$$s: self}) }; self.$each.$$p = function() { var item = $Opal.$destructure(arguments); $yield1(block, item); } self.$each.apply(self, data); return self; ; }, -1); $def(self, '$each_slice', function $$each_slice(n) { var block = $$each_slice.$$p || nil, self = this; $$each_slice.$$p = null; ; n = $coerce_to(n, $$$('Integer'), 'to_int'); if ($truthy(n <= 0)) { $Kernel.$raise($$$('ArgumentError'), "invalid slice size") }; if (!(block !== nil)) { return $send(self, 'enum_for', ["each_slice", n], function $$20(){var self = $$20.$$s == null ? this : $$20.$$s; if ($truthy(self['$respond_to?']("size"))) { return $rb_divide(self.$size(), n).$ceil() } else { return nil }}, {$$s: self}) }; var slice = [] self.$each.$$p = function() { var param = $Opal.$destructure(arguments); slice.push(param); if (slice.length === n) { $yield1(block, slice); slice = []; } }; self.$each(); // our "last" group, if smaller than n then won't have been yielded if (slice.length > 0) { $yield1(block, slice); } ; return self; }); $def(self, '$each_with_index', function $$each_with_index($a) { var block = $$each_with_index.$$p || nil, $post_args, args, self = this; $$each_with_index.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if (!(block !== nil)) { return $send(self, 'enum_for', ["each_with_index"].concat($to_a(args)), function $$21(){var self = $$21.$$s == null ? this : $$21.$$s; return self.$enumerator_size()}, {$$s: self}) }; var index = 0; self.$each.$$p = function() { var param = $Opal.$destructure(arguments); block(param, index); index++; }; self.$each.apply(self, args); ; return self; }, -1); $def(self, '$each_with_object', function $$each_with_object(object) { var block = $$each_with_object.$$p || nil, self = this; $$each_with_object.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["each_with_object", object], function $$22(){var self = $$22.$$s == null ? this : $$22.$$s; return self.$enumerator_size()}, {$$s: self}) }; self.$each.$$p = function() { var param = $Opal.$destructure(arguments); block(param, object); }; self.$each(); ; return object; }); $def(self, '$entries', function $$entries($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; var result = []; self.$each.$$p = function() { result.push($Opal.$destructure(arguments)); }; self.$each.apply(self, args); return result; ; }, -1); $def(self, '$filter_map', function $$filter_map() { var block = $$filter_map.$$p || nil, self = this; $$filter_map.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["filter_map"], function $$23(){var self = $$23.$$s == null ? this : $$23.$$s; return self.$enumerator_size()}, {$$s: self}) }; return $send($send(self, 'map', [], block.$to_proc()), 'select', [], "itself".$to_proc()); }); $def(self, '$find_all', function $$find_all() { var block = $$find_all.$$p || nil, self = this; $$find_all.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["find_all"], function $$24(){var self = $$24.$$s == null ? this : $$24.$$s; return self.$enumerator_size()}, {$$s: self}) }; var result = []; self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = $yield1(block, param); if ($truthy(value)) { result.push(param); } }; self.$each(); return result; ; }); $def(self, '$find_index', function $$find_index(object) {try { var $t_return = $thrower('return'); var block = $$find_index.$$p || nil, self = this, index = nil; $$find_index.$$p = null; ; ; if ($truthy(object === undefined && block === nil)) { return self.$enum_for("find_index") }; if (object != null && block !== nil) { self.$warn("warning: given block not used") } ; index = 0; if ($truthy(object != null)) { $send(self, 'each', [], function $$25($a){var $post_args, value; $post_args = $slice(arguments); value = $post_args; if ($eqeq($Opal.$destructure(value), object)) { $t_return.$throw(index, $$25.$$is_lambda) }; return index += 1;;}, {$$arity: -1, $$ret: $t_return}) } else { $send(self, 'each', [], function $$26($a){var $post_args, value; $post_args = $slice(arguments); value = $post_args; if ($truthy(Opal.yieldX(block, $to_a(value)))) { $t_return.$throw(index, $$26.$$is_lambda) }; return index += 1;;}, {$$arity: -1, $$ret: $t_return}) }; return nil;} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }, -1); $def(self, '$first', function $$first(number) {try { var $t_return = $thrower('return'); var self = this, result = nil, current = nil; ; if ($truthy(number === undefined)) { return $send(self, 'each', [], function $$27(value){ if (value == null) value = nil; $t_return.$throw(value, $$27.$$is_lambda);}, {$$ret: $t_return}) } else { result = []; number = $coerce_to(number, $$$('Integer'), 'to_int'); if ($truthy(number < 0)) { $Kernel.$raise($$$('ArgumentError'), "attempt to take negative size") }; if ($truthy(number == 0)) { return [] }; current = 0; $send(self, 'each', [], function $$28($a){var $post_args, args; $post_args = $slice(arguments); args = $post_args; result.push($Opal.$destructure(args)); if ($truthy(number <= ++current)) { $t_return.$throw(result, $$28.$$is_lambda) } else { return nil };}, {$$arity: -1, $$ret: $t_return}); return result; };} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }, -1); $def(self, '$grep', function $$grep(pattern) { var block = $$grep.$$p || nil, self = this, result = nil; $$grep.$$p = null; ; result = []; $send(self, 'each', [], function $$29($a){var $post_args, value, cmp = nil; $post_args = $slice(arguments); value = $post_args; cmp = comparableForPattern(value); if (!$truthy($send(pattern, '__send__', ["==="].concat($to_a(cmp))))) { return nil }; if ((block !== nil)) { if ($truthy($rb_gt(value.$length(), 1))) { value = [value] }; value = Opal.yieldX(block, $to_a(value)); } else if ($truthy($rb_le(value.$length(), 1))) { value = value['$[]'](0) }; return result.$push(value);}, -1); return result; }); $def(self, '$grep_v', function $$grep_v(pattern) { var block = $$grep_v.$$p || nil, self = this, result = nil; $$grep_v.$$p = null; ; result = []; $send(self, 'each', [], function $$30($a){var $post_args, value, cmp = nil; $post_args = $slice(arguments); value = $post_args; cmp = comparableForPattern(value); if ($truthy($send(pattern, '__send__', ["==="].concat($to_a(cmp))))) { return nil }; if ((block !== nil)) { if ($truthy($rb_gt(value.$length(), 1))) { value = [value] }; value = Opal.yieldX(block, $to_a(value)); } else if ($truthy($rb_le(value.$length(), 1))) { value = value['$[]'](0) }; return result.$push(value);}, -1); return result; }); $def(self, '$group_by', function $$group_by() { var block = $$group_by.$$p || nil, $a, self = this, hash = nil, $ret_or_1 = nil; $$group_by.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["group_by"], function $$31(){var self = $$31.$$s == null ? this : $$31.$$s; return self.$enumerator_size()}, {$$s: self}) }; hash = (new Map()); var result; self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = $yield1(block, param); ($truthy(($ret_or_1 = hash['$[]'](value))) ? ($ret_or_1) : (($a = [value, []], $send(hash, '[]=', $a), $a[$a.length - 1])))['$<<'](param); } self.$each(); if (result !== undefined) { return result; } ; return hash; }); $def(self, '$include?', function $Enumerable_include$ques$32(obj) {try { var $t_return = $thrower('return'); var self = this; $send(self, 'each', [], function $$33($a){var $post_args, args; $post_args = $slice(arguments); args = $post_args; if ($eqeq($Opal.$destructure(args), obj)) { $t_return.$throw(true, $$33.$$is_lambda) } else { return nil };}, {$$arity: -1, $$ret: $t_return}); return false;} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }); $def(self, '$inject', function $$inject(object, sym) { var block = $$inject.$$p || nil, self = this; $$inject.$$p = null; ; ; ; var result = object; if (block !== nil && sym === undefined) { self.$each.$$p = function() { var value = $Opal.$destructure(arguments); if (result === undefined) { result = value; return; } value = $yieldX(block, [result, value]); result = value; }; } else { if (sym === undefined) { if (!$$$('Symbol')['$==='](object)) { $Kernel.$raise($$$('TypeError'), "" + (object.$inspect()) + " is not a Symbol"); } sym = object; result = undefined; } self.$each.$$p = function() { var value = $Opal.$destructure(arguments); if (result === undefined) { result = value; return; } result = (result).$__send__(sym, value); }; } self.$each(); return result == undefined ? nil : result; ; }, -1); $def(self, '$lazy', function $$lazy() { var self = this; return $send($$$($$$('Enumerator'), 'Lazy'), 'new', [self, self.$enumerator_size()], function $$34(enum$, $a){var $post_args, args; if (enum$ == null) enum$ = nil; $post_args = $slice(arguments, 1); args = $post_args; return $send(enum$, 'yield', $to_a(args));}, -2) }); $def(self, '$enumerator_size', function $$enumerator_size() { var self = this; if ($truthy(self['$respond_to?']("size"))) { return self.$size() } else { return nil } }); $def(self, '$max', function $$max(n) { var block = $$max.$$p || nil, self = this; $$max.$$p = null; ; ; if (n === undefined || n === nil) { var result, value; self.$each.$$p = function() { var item = $Opal.$destructure(arguments); if (result === undefined) { result = item; return; } if (block !== nil) { value = $yieldX(block, [item, result]); } else { value = (item)['$<=>'](result); } if (value === nil) { $Kernel.$raise($$$('ArgumentError'), "comparison failed"); } if (value > 0) { result = item; } } self.$each(); if (result === undefined) { return nil; } else { return result; } } n = $coerce_to(n, $$$('Integer'), 'to_int'); ; return $send(self, 'sort', [], block.$to_proc()).$reverse().$first(n); }, -1); $def(self, '$max_by', function $$max_by(n) { var block = $$max_by.$$p || nil, self = this; $$max_by.$$p = null; ; if (n == null) n = nil; if (!$truthy(block)) { return $send(self, 'enum_for', ["max_by", n], function $$35(){var self = $$35.$$s == null ? this : $$35.$$s; return self.$enumerator_size()}, {$$s: self}) }; if (!$truthy(n['$nil?']())) { return $send(self, 'sort_by', [], block.$to_proc()).$reverse().$take(n) }; var result, by; self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = $yield1(block, param); if (result === undefined) { result = param; by = value; return; } if ((value)['$<=>'](by) > 0) { result = param by = value; } }; self.$each(); return result === undefined ? nil : result; ; }, -1); $def(self, '$min', function $$min(n) { var block = $$min.$$p || nil, self = this; $$min.$$p = null; ; if (n == null) n = nil; if (!$truthy(n['$nil?']())) { if ((block !== nil)) { return $send(self, 'sort', [], function $$36(a, b){ if (a == null) a = nil; if (b == null) b = nil; return Opal.yieldX(block, [a, b]);;}).$take(n) } else { return self.$sort().$take(n) } }; var result; if (block !== nil) { self.$each.$$p = function() { var param = $Opal.$destructure(arguments); if (result === undefined) { result = param; return; } var value = block(param, result); if (value === nil) { $Kernel.$raise($$$('ArgumentError'), "comparison failed"); } if (value < 0) { result = param; } }; } else { self.$each.$$p = function() { var param = $Opal.$destructure(arguments); if (result === undefined) { result = param; return; } if ($Opal.$compare(param, result) < 0) { result = param; } }; } self.$each(); return result === undefined ? nil : result; ; }, -1); $def(self, '$min_by', function $$min_by(n) { var block = $$min_by.$$p || nil, self = this; $$min_by.$$p = null; ; if (n == null) n = nil; if (!$truthy(block)) { return $send(self, 'enum_for', ["min_by", n], function $$37(){var self = $$37.$$s == null ? this : $$37.$$s; return self.$enumerator_size()}, {$$s: self}) }; if (!$truthy(n['$nil?']())) { return $send(self, 'sort_by', [], block.$to_proc()).$take(n) }; var result, by; self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = $yield1(block, param); if (result === undefined) { result = param; by = value; return; } if ((value)['$<=>'](by) < 0) { result = param by = value; } }; self.$each(); return result === undefined ? nil : result; ; }, -1); $def(self, '$minmax', function $$minmax() { var block = $$minmax.$$p || nil, self = this, $ret_or_1 = nil; $$minmax.$$p = null; ; block = ($truthy(($ret_or_1 = block)) ? ($ret_or_1) : ($send($Kernel, 'proc', [], function $$38(a, b){ if (a == null) a = nil; if (b == null) b = nil; return a['$<=>'](b);}))); var min = nil, max = nil, first_time = true; self.$each.$$p = function() { var element = $Opal.$destructure(arguments); if (first_time) { min = max = element; first_time = false; } else { var min_cmp = block.$call(min, element); if (min_cmp === nil) { $Kernel.$raise($$$('ArgumentError'), "comparison failed") } else if (min_cmp > 0) { min = element; } var max_cmp = block.$call(max, element); if (max_cmp === nil) { $Kernel.$raise($$$('ArgumentError'), "comparison failed") } else if (max_cmp < 0) { max = element; } } } self.$each(); return [min, max]; ; }); $def(self, '$minmax_by', function $$minmax_by() { var block = $$minmax_by.$$p || nil, self = this; $$minmax_by.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["minmax_by"], function $$39(){var self = $$39.$$s == null ? this : $$39.$$s; return self.$enumerator_size()}, {$$s: self}) }; var min_result = nil, max_result = nil, min_by, max_by; self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = $yield1(block, param); if ((min_by === undefined) || (value)['$<=>'](min_by) < 0) { min_result = param; min_by = value; } if ((max_by === undefined) || (value)['$<=>'](max_by) > 0) { max_result = param; max_by = value; } }; self.$each(); return [min_result, max_result]; ; }); $def(self, '$none?', function $Enumerable_none$ques$40(pattern) {try { var $t_return = $thrower('return'); var block = $Enumerable_none$ques$40.$$p || nil, self = this; $Enumerable_none$ques$40.$$p = null; ; ; if ($truthy(pattern !== undefined)) { $send(self, 'each', [], function $$41($a){var $post_args, value, comparable = nil; $post_args = $slice(arguments); value = $post_args; comparable = comparableForPattern(value); if ($truthy($send(pattern, 'public_send', ["==="].concat($to_a(comparable))))) { $t_return.$throw(false, $$41.$$is_lambda) } else { return nil };}, {$$arity: -1, $$ret: $t_return}) } else if ((block !== nil)) { $send(self, 'each', [], function $$42($a){var $post_args, value; $post_args = $slice(arguments); value = $post_args; if ($truthy(Opal.yieldX(block, $to_a(value)))) { $t_return.$throw(false, $$42.$$is_lambda) } else { return nil };}, {$$arity: -1, $$ret: $t_return}) } else { $send(self, 'each', [], function $$43($a){var $post_args, value, item = nil; $post_args = $slice(arguments); value = $post_args; item = $Opal.$destructure(value); if ($truthy(item)) { $t_return.$throw(false, $$43.$$is_lambda) } else { return nil };}, {$$arity: -1, $$ret: $t_return}) }; return true;} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }, -1); $def(self, '$one?', function $Enumerable_one$ques$44(pattern) {try { var $t_return = $thrower('return'); var block = $Enumerable_one$ques$44.$$p || nil, self = this, count = nil; $Enumerable_one$ques$44.$$p = null; ; ; count = 0; if ($truthy(pattern !== undefined)) { $send(self, 'each', [], function $$45($a){var $post_args, value, comparable = nil; $post_args = $slice(arguments); value = $post_args; comparable = comparableForPattern(value); if ($truthy($send(pattern, 'public_send', ["==="].concat($to_a(comparable))))) { count = $rb_plus(count, 1); if ($truthy($rb_gt(count, 1))) { $t_return.$throw(false, $$45.$$is_lambda) } else { return nil }; } else { return nil };}, {$$arity: -1, $$ret: $t_return}) } else if ((block !== nil)) { $send(self, 'each', [], function $$46($a){var $post_args, value; $post_args = $slice(arguments); value = $post_args; if (!$truthy(Opal.yieldX(block, $to_a(value)))) { return nil }; count = $rb_plus(count, 1); if ($truthy($rb_gt(count, 1))) { $t_return.$throw(false, $$46.$$is_lambda) } else { return nil };}, {$$arity: -1, $$ret: $t_return}) } else { $send(self, 'each', [], function $$47($a){var $post_args, value; $post_args = $slice(arguments); value = $post_args; if (!$truthy($Opal.$destructure(value))) { return nil }; count = $rb_plus(count, 1); if ($truthy($rb_gt(count, 1))) { $t_return.$throw(false, $$47.$$is_lambda) } else { return nil };}, {$$arity: -1, $$ret: $t_return}) }; return count['$=='](1);} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }, -1); $def(self, '$partition', function $$partition() { var block = $$partition.$$p || nil, self = this; $$partition.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["partition"], function $$48(){var self = $$48.$$s == null ? this : $$48.$$s; return self.$enumerator_size()}, {$$s: self}) }; var truthy = [], falsy = [], result; self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = $yield1(block, param); if ($truthy(value)) { truthy.push(param); } else { falsy.push(param); } }; self.$each(); return [truthy, falsy]; ; }); $def(self, '$reject', function $$reject() { var block = $$reject.$$p || nil, self = this; $$reject.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["reject"], function $$49(){var self = $$49.$$s == null ? this : $$49.$$s; return self.$enumerator_size()}, {$$s: self}) }; var result = []; self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = $yield1(block, param); if (!$truthy(value)) { result.push(param); } }; self.$each(); return result; ; }); $def(self, '$reverse_each', function $$reverse_each() { var block = $$reverse_each.$$p || nil, self = this; $$reverse_each.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["reverse_each"], function $$50(){var self = $$50.$$s == null ? this : $$50.$$s; return self.$enumerator_size()}, {$$s: self}) }; var result = []; self.$each.$$p = function() { result.push(arguments); }; self.$each(); for (var i = result.length - 1; i >= 0; i--) { $yieldX(block, result[i]); } return result; ; }); $def(self, '$slice_before', function $$slice_before(pattern) { var block = $$slice_before.$$p || nil, self = this; $$slice_before.$$p = null; ; ; if ($truthy(pattern === undefined && block === nil)) { $Kernel.$raise($$$('ArgumentError'), "both pattern and block are given") }; if ($truthy(pattern !== undefined && block !== nil || arguments.length > 1)) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " expected 1)") }; return $send($$$('Enumerator'), 'new', [], function $$51(e){var self = $$51.$$s == null ? this : $$51.$$s; if (e == null) e = nil; var slice = []; if (block !== nil) { if (pattern === undefined) { self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = $yield1(block, param); if ($truthy(value) && slice.length > 0) { e['$<<'](slice); slice = []; } slice.push(param); }; } else { self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = block(param, pattern.$dup()); if ($truthy(value) && slice.length > 0) { e['$<<'](slice); slice = []; } slice.push(param); }; } } else { self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = pattern['$==='](param); if ($truthy(value) && slice.length > 0) { e['$<<'](slice); slice = []; } slice.push(param); }; } self.$each(); if (slice.length > 0) { e['$<<'](slice); } ;}, {$$s: self}); }, -1); $def(self, '$slice_after', function $$slice_after(pattern) { var block = $$slice_after.$$p || nil, self = this; $$slice_after.$$p = null; ; ; if ($truthy(pattern === undefined && block === nil)) { $Kernel.$raise($$$('ArgumentError'), "both pattern and block are given") }; if ($truthy(pattern !== undefined && block !== nil || arguments.length > 1)) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " expected 1)") }; if ($truthy(pattern !== undefined)) { block = $send($Kernel, 'proc', [], function $$52(e){ if (e == null) e = nil; return pattern['$==='](e);}) }; return $send($$$('Enumerator'), 'new', [], function $$53(yielder){var self = $$53.$$s == null ? this : $$53.$$s; if (yielder == null) yielder = nil; var accumulate; self.$each.$$p = function() { var element = $Opal.$destructure(arguments), end_chunk = $yield1(block, element); if (accumulate == null) { accumulate = []; } if ($truthy(end_chunk)) { accumulate.push(element); yielder.$yield(accumulate); accumulate = null; } else { accumulate.push(element) } } self.$each(); if (accumulate != null) { yielder.$yield(accumulate); } ;}, {$$s: self}); }, -1); $def(self, '$slice_when', function $$slice_when() { var block = $$slice_when.$$p || nil, self = this; $$slice_when.$$p = null; ; if (!(block !== nil)) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (0 for 1)") }; return $send($$$('Enumerator'), 'new', [], function $$54(yielder){var self = $$54.$$s == null ? this : $$54.$$s; if (yielder == null) yielder = nil; var slice = nil, last_after = nil; self.$each_cons.$$p = function() { var params = $Opal.$destructure(arguments), before = params[0], after = params[1], match = $yieldX(block, [before, after]); last_after = after; if (slice === nil) { slice = []; } if ($truthy(match)) { slice.push(before); yielder.$yield(slice); slice = []; } else { slice.push(before); } } self.$each_cons(2); if (slice !== nil) { slice.push(last_after); yielder.$yield(slice); } ;}, {$$s: self}); }); $def(self, '$sort', function $$sort() { var block = $$sort.$$p || nil, self = this, ary = nil; $$sort.$$p = null; ; ary = self.$to_a(); if (!(block !== nil)) { block = $lambda(function $$55(a, b){ if (a == null) a = nil; if (b == null) b = nil; return a['$<=>'](b);}) }; return $send(ary, 'sort', [], block.$to_proc()); }); $def(self, '$sort_by', function $$sort_by() { var block = $$sort_by.$$p || nil, self = this, dup = nil; $$sort_by.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["sort_by"], function $$56(){var self = $$56.$$s == null ? this : $$56.$$s; return self.$enumerator_size()}, {$$s: self}) }; dup = $send(self, 'map', [], function $$57(){var arg = nil; arg = $Opal.$destructure(arguments); return [Opal.yield1(block, arg), arg];}); $send(dup, 'sort!', [], function $$58(a, b){ if (a == null) a = nil; if (b == null) b = nil; return (a[0])['$<=>'](b[0]);}); return $send(dup, 'map!', [], function $$59(i){ if (i == null) i = nil; return i[1];;}); }); $def(self, '$sum', function $$sum(initial) { var $yield = $$sum.$$p || nil, self = this, result = nil, compensation = nil; $$sum.$$p = null; if (initial == null) initial = 0; result = initial; compensation = 0; $send(self, 'each', [], function $$60($a){var $post_args, args, item = nil, y = nil, t = nil; $post_args = $slice(arguments); args = $post_args; item = (($yield !== nil) ? (Opal.yieldX($yield, $to_a(args))) : ($Opal.$destructure(args))); if (($not([$$$($$$('Float'), 'INFINITY'), $$$($$$('Float'), 'INFINITY')['$-@']()]['$include?'](item)) && ($truthy(item['$respond_to?']("-"))))) { y = $rb_minus(item, compensation); t = $rb_plus(result, y); compensation = $rb_minus($rb_minus(t, result), y); return (result = t); } else { return (result = $rb_plus(result, item)) };}, -1); return result; }, -1); $def(self, '$take', function $$take(num) { var self = this; return self.$first(num) }); $def(self, '$take_while', function $$take_while() {try { var $t_return = $thrower('return'); var block = $$take_while.$$p || nil, self = this, result = nil; $$take_while.$$p = null; ; if (!$truthy(block)) { return self.$enum_for("take_while") }; result = []; return $send(self, 'each', [], function $$61($a){var $post_args, args, value = nil; $post_args = $slice(arguments); args = $post_args; value = $Opal.$destructure(args); if (!$truthy(Opal.yield1(block, value))) { $t_return.$throw(result, $$61.$$is_lambda) }; return result.push(value);;}, {$$arity: -1, $$ret: $t_return});} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }); $def(self, '$uniq', function $$uniq() { var block = $$uniq.$$p || nil, self = this, hash = nil; $$uniq.$$p = null; ; hash = (new Map()); $send(self, 'each', [], function $$62($a){var $post_args, args, $b, value = nil, produced = nil; $post_args = $slice(arguments); args = $post_args; value = $Opal.$destructure(args); produced = ((block !== nil) ? (Opal.yield1(block, value)) : (value)); if ($truthy(hash['$key?'](produced))) { return nil } else { return ($b = [produced, value], $send(hash, '[]=', $b), $b[$b.length - 1]) };}, -1); return hash.$values(); }); $def(self, '$tally', function $$tally(hash) { var self = this, out = nil; ; if (hash && hash !== nil) { $deny_frozen_access(hash); }; out = $send($send(self, 'group_by', [], "itself".$to_proc()), 'transform_values', [], "count".$to_proc()); if ($truthy(hash)) { $send(out, 'each', [], function $$63(k, v){var $a; if (k == null) k = nil; if (v == null) v = nil; return ($a = [k, $rb_plus(hash.$fetch(k, 0), v)], $send(hash, '[]=', $a), $a[$a.length - 1]);}); return hash; } else { return out }; }, -1); $def(self, '$to_h', function $$to_h($a) { var block = $$to_h.$$p || nil, $post_args, args, self = this; $$to_h.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if ((block !== nil)) { return $send($send(self, 'map', [], block.$to_proc()), 'to_h', $to_a(args)) }; var hash = (new Map()); self.$each.$$p = function() { var param = $Opal.$destructure(arguments); var ary = $Opal['$coerce_to?'](param, $$$('Array'), "to_ary"), key, val; if (!ary.$$is_array) { $Kernel.$raise($$$('TypeError'), "wrong element type " + ((param).$class()) + " (expected array)") } if (ary.length !== 2) { $Kernel.$raise($$$('ArgumentError'), "element has wrong array length (expected 2, was " + ((ary).$length()) + ")") } key = ary[0]; val = ary[1]; Opal.hash_put(hash, key, val); }; self.$each.apply(self, args); return hash; ; }, -1); $def(self, '$to_set', function $$to_set($a, $b) { var block = $$to_set.$$p || nil, $post_args, klass, args, self = this; $$to_set.$$p = null; ; $post_args = $slice(arguments); if ($post_args.length > 0) klass = $post_args.shift();if (klass == null) klass = $$('Set'); args = $post_args; return $send(klass, 'new', [self].concat($to_a(args)), block.$to_proc()); }, -1); $def(self, '$zip', function $$zip($a) { var block = $$zip.$$p || nil, $post_args, others, self = this; $$zip.$$p = null; ; $post_args = $slice(arguments); others = $post_args; return $send(self.$to_a(), 'zip', $to_a(others)); }, -1); $alias(self, "find", "detect"); $alias(self, "filter", "find_all"); $alias(self, "flat_map", "collect_concat"); $alias(self, "map", "collect"); $alias(self, "member?", "include?"); $alias(self, "reduce", "inject"); $alias(self, "select", "find_all"); return $alias(self, "to_a", "entries"); })('::', $nesting) }; Opal.modules["corelib/enumerator/arithmetic_sequence"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $truthy = Opal.truthy, $to_a = Opal.to_a, $eqeq = Opal.eqeq, $Kernel = Opal.Kernel, $def = Opal.def, $rb_gt = Opal.rb_gt, $rb_lt = Opal.rb_lt, $rb_le = Opal.rb_le, $rb_ge = Opal.rb_ge, $rb_plus = Opal.rb_plus, $rb_minus = Opal.rb_minus, $eqeqeq = Opal.eqeqeq, $not = Opal.not, $rb_times = Opal.rb_times, $rb_divide = Opal.rb_divide, $alias = Opal.alias, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('is_a?,==,raise,respond_to?,class,attr_reader,begin,end,exclude_end?,>,step,<,<=,>=,-@,_lesser_than_end?,<<,+,-,===,%,_greater_than_begin?,reverse,!,include?,*,to_i,abs,/,hash,inspect'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Enumerator'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'ArithmeticSequence'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.step_arg2 = $proto.receiver_num = $proto.step_arg1 = $proto.step = $proto.range = $proto.topfx = $proto.bypfx = $proto.creation_method = $proto.skipped_arg = nil; Opal.prop(self.$$prototype, '$$is_arithmetic_seq', true); var inf = Infinity; $def(self, '$initialize', function $$initialize(range, step, creation_method) { var $a, self = this, $ret_or_1 = nil; ; if (creation_method == null) creation_method = "step"; self.creation_method = creation_method; if ($truthy(range['$is_a?']($$$('Array')))) { $a = [].concat($to_a(range)), (self.step_arg1 = ($a[0] == null ? nil : $a[0])), (self.step_arg2 = ($a[1] == null ? nil : $a[1])), (self.topfx = ($a[2] == null ? nil : $a[2])), (self.bypfx = ($a[3] == null ? nil : $a[3])), $a; self.receiver_num = step; self.step = 1; self.range = ($truthy(self.step_arg2) ? (((self.step = self.step_arg2), Opal.Range.$new(self.receiver_num, self.step_arg1, false))) : ($truthy(self.step_arg1) ? (Opal.Range.$new(self.receiver_num, self.step_arg1, false)) : (Opal.Range.$new(self.receiver_num, nil, false)))); } else { if (!$truthy(step)) { self.skipped_arg = true }; $a = [range, ($truthy(($ret_or_1 = step)) ? ($ret_or_1) : (1))], (self.range = $a[0]), (self.step = $a[1]), $a; }; self.object = self; if ($eqeq(self.step, 0)) { $Kernel.$raise($$('ArgumentError'), "step can't be 0") }; if ($truthy(self.step['$respond_to?']("to_int"))) { return nil } else { return $Kernel.$raise($$('ArgumentError'), "" + ("no implicit conversion of " + (self.step.$class()) + " ") + "into Integer") }; }, -2); self.$attr_reader("step"); $def(self, '$begin', function $$begin() { var self = this; return self.range.$begin() }); $def(self, '$end', function $$end() { var self = this; return self.range.$end() }); $def(self, '$exclude_end?', function $ArithmeticSequence_exclude_end$ques$1() { var self = this; return self.range['$exclude_end?']() }); $def(self, '$_lesser_than_end?', function $ArithmeticSequence__lesser_than_end$ques$2(val) { var self = this, end_ = nil, $ret_or_1 = nil; end_ = ($truthy(($ret_or_1 = self.$end())) ? ($ret_or_1) : (inf)); if ($truthy($rb_gt(self.$step(), 0))) { if ($truthy(self['$exclude_end?']())) { return $rb_lt(val, end_) } else { return $rb_le(val, end_) } } else if ($truthy(self['$exclude_end?']())) { return $rb_gt(val, end_) } else { return $rb_ge(val, end_) }; }); $def(self, '$_greater_than_begin?', function $ArithmeticSequence__greater_than_begin$ques$3(val) { var self = this, begin_ = nil, $ret_or_1 = nil; begin_ = ($truthy(($ret_or_1 = self.$begin())) ? ($ret_or_1) : ((inf)['$-@']())); if ($truthy($rb_gt(self.$step(), 0))) { return $rb_gt(val, begin_) } else { return $rb_lt(val, begin_) }; }); $def(self, '$first', function $$first(count) { var self = this, iter = nil, $ret_or_1 = nil, out = nil; ; iter = ($truthy(($ret_or_1 = self.$begin())) ? ($ret_or_1) : ((inf)['$-@']())); if (!$truthy(count)) { return ($truthy(self['$_lesser_than_end?'](iter)) ? (iter) : (nil)) }; out = []; while ($truthy(($truthy(($ret_or_1 = self['$_lesser_than_end?'](iter))) ? ($rb_gt(count, 0)) : ($ret_or_1)))) { out['$<<'](iter); iter = $rb_plus(iter, self.$step()); count = $rb_minus(count, 1); }; return out; }, -1); $def(self, '$each', function $$each() { var block = $$each.$$p || nil, self = this, $ret_or_1 = nil, iter = nil; $$each.$$p = null; ; if (!(block !== nil)) { return self }; if ($eqeqeq(nil, ($ret_or_1 = self.$begin()))) { $Kernel.$raise($$('TypeError'), "nil can't be coerced into Integer") } else { nil }; iter = ($truthy(($ret_or_1 = self.$begin())) ? ($ret_or_1) : ((inf)['$-@']())); while ($truthy(self['$_lesser_than_end?'](iter))) { Opal.yield1(block, iter); iter = $rb_plus(iter, self.$step()); }; return self; }); $def(self, '$last', function $$last(count) { var self = this, $ret_or_1 = nil, iter = nil, out = nil; ; if (($eqeqeq(inf, ($ret_or_1 = self.$end())) || ($eqeqeq((inf)['$-@'](), $ret_or_1)))) { $Kernel.$raise($$$('FloatDomainError'), self.$end()) } else if ($eqeqeq(nil, $ret_or_1)) { $Kernel.$raise($$$('RangeError'), "cannot get the last element of endless arithmetic sequence") } else { nil }; iter = $rb_minus(self.$end(), $rb_minus(self.$end(), self.$begin())['$%'](self.$step())); if (!$truthy(self['$_lesser_than_end?'](iter))) { iter = $rb_minus(iter, self.$step()) }; if (!$truthy(count)) { return ($truthy(self['$_greater_than_begin?'](iter)) ? (iter) : (nil)) }; out = []; while ($truthy(($truthy(($ret_or_1 = self['$_greater_than_begin?'](iter))) ? ($rb_gt(count, 0)) : ($ret_or_1)))) { out['$<<'](iter); iter = $rb_minus(iter, self.$step()); count = $rb_minus(count, 1); }; return out.$reverse(); }, -1); $def(self, '$size', function $$size() { var self = this, step_sign = nil, iter = nil; step_sign = ($truthy($rb_gt(self.$step(), 0)) ? (1) : (-1)); if ($not(self['$_lesser_than_end?'](self.$begin()))) { return 0 } else if ($truthy([(inf)['$-@'](), inf]['$include?'](self.$step()))) { return 1 } else if (($truthy([$rb_times((inf)['$-@'](), step_sign), nil]['$include?'](self.$begin())) || ($truthy([$rb_times(inf, step_sign), nil]['$include?'](self.$end()))))) { return inf; } else { iter = $rb_minus(self.$end(), $rb_minus(self.$end(), self.$begin())['$%'](self.$step())); if (!$truthy(self['$_lesser_than_end?'](iter))) { iter = $rb_minus(iter, self.$step()) }; return $rb_plus($rb_divide($rb_minus(iter, self.$begin()), self.$step()).$abs().$to_i(), 1); }; }); $def(self, '$==', function $ArithmeticSequence_$eq_eq$4(other) { var self = this, $ret_or_1 = nil, $ret_or_2 = nil, $ret_or_3 = nil, $ret_or_4 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = ($truthy(($ret_or_3 = ($truthy(($ret_or_4 = self.$class()['$=='](other.$class()))) ? (self.$begin()['$=='](other.$begin())) : ($ret_or_4)))) ? (self.$end()['$=='](other.$end())) : ($ret_or_3)))) ? (self.$step()['$=='](other.$step())) : ($ret_or_2))))) { return self['$exclude_end?']()['$=='](other['$exclude_end?']()) } else { return $ret_or_1 } }); $def(self, '$hash', function $$hash() { var self = this; return [$$('ArithmeticSequence'), self.$begin(), self.$end(), self.$step(), self['$exclude_end?']()].$hash() }); $def(self, '$inspect', function $$inspect() { var self = this, args = nil; if ($truthy(self.receiver_num)) { args = ($truthy(self.step_arg2) ? ("(" + (self.topfx) + (self.step_arg1.$inspect()) + ", " + (self.bypfx) + (self.step_arg2.$inspect()) + ")") : ($truthy(self.step_arg1) ? ("(" + (self.topfx) + (self.step_arg1.$inspect()) + ")") : nil)); return "(" + (self.receiver_num.$inspect()) + "." + (self.creation_method) + (args) + ")"; } else { args = ($truthy(self.skipped_arg) ? (nil) : ("(" + (self.step) + ")")); return "((" + (self.range.$inspect()) + ")." + (self.creation_method) + (args) + ")"; } }); $alias(self, "===", "=="); return $alias(self, "eql?", "=="); })(self, self, $nesting) })('::', null, $nesting) }; Opal.modules["corelib/enumerator/chain"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $deny_frozen_access = Opal.deny_frozen_access, $klass = Opal.klass, $slice = Opal.slice, $def = Opal.def, $send = Opal.send, $to_a = Opal.to_a, $truthy = Opal.truthy, $rb_plus = Opal.rb_plus, $thrower = Opal.thrower, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('to_enum,size,each,<<,to_proc,include?,+,reverse_each,respond_to?,rewind,inspect'); return (function($base, $super) { var self = $klass($base, $super, 'Enumerator'); return (function($base, $super) { var self = $klass($base, $super, 'Chain'); var $proto = self.$$prototype; $proto.enums = $proto.iterated = nil; $def(self, '$initialize', function $$initialize($a) { var $post_args, enums, self = this; $post_args = $slice(arguments); enums = $post_args; $deny_frozen_access(self); self.enums = enums; self.iterated = []; return (self.object = self); }, -1); $def(self, '$each', function $$each($a) { var block = $$each.$$p || nil, $post_args, args, self = this; $$each.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if (!(block !== nil)) { return $send(self, 'to_enum', ["each"].concat($to_a(args)), function $$1(){var self = $$1.$$s == null ? this : $$1.$$s; return self.$size()}, {$$s: self}) }; $send(self.enums, 'each', [], function $$2(enum$){var self = $$2.$$s == null ? this : $$2.$$s; if (self.iterated == null) self.iterated = nil; if (enum$ == null) enum$ = nil; self.iterated['$<<'](enum$); return $send(enum$, 'each', $to_a(args), block.$to_proc());}, {$$s: self}); return self; }, -1); $def(self, '$size', function $$size($a) {try { var $t_return = $thrower('return'); var $post_args, args, self = this, accum = nil; $post_args = $slice(arguments); args = $post_args; accum = 0; $send(self.enums, 'each', [], function $$3(enum$){var size = nil; if (enum$ == null) enum$ = nil; size = $send(enum$, 'size', $to_a(args)); if ($truthy([nil, $$$($$$('Float'), 'INFINITY')]['$include?'](size))) { $t_return.$throw(size, $$3.$$is_lambda) }; return (accum = $rb_plus(accum, size));}, {$$ret: $t_return}); return accum;} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }, -1); $def(self, '$rewind', function $$rewind() { var self = this; $send(self.iterated, 'reverse_each', [], function $$4(enum$){ if (enum$ == null) enum$ = nil; if ($truthy(enum$['$respond_to?']("rewind"))) { return enum$.$rewind() } else { return nil };}); self.iterated = []; return self; }); return $def(self, '$inspect', function $$inspect() { var self = this; return "#" }); })(self, self) })('::', null) }; Opal.modules["corelib/enumerator/generator"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $deny_frozen_access = Opal.deny_frozen_access, $klass = Opal.klass, $truthy = Opal.truthy, $Kernel = Opal.Kernel, $def = Opal.def, $slice = Opal.slice, $send = Opal.send, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('include,raise,new,to_proc'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Enumerator'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Generator'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.block = nil; self.$include($$$('Enumerable')); $def(self, '$initialize', function $$initialize() { var block = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; ; $deny_frozen_access(self); if (!$truthy(block)) { $Kernel.$raise($$$('LocalJumpError'), "no block given") }; return (self.block = block); }); return $def(self, '$each', function $$each($a) { var block = $$each.$$p || nil, $post_args, args, self = this, yielder = nil; $$each.$$p = null; ; $post_args = $slice(arguments); args = $post_args; yielder = $send($$('Yielder'), 'new', [], block.$to_proc()); try { args.unshift(yielder); Opal.yieldX(self.block, args); } catch (e) { if (e && e.$thrower_type == "breaker") { return e.$v; } else { throw e; } } ; return self; }, -1); })($nesting[0], null, $nesting) })($nesting[0], null, $nesting) }; Opal.modules["corelib/enumerator/lazy"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $truthy = Opal.truthy, $coerce_to = Opal.coerce_to, $yield1 = Opal.yield1, $yieldX = Opal.yieldX, $deny_frozen_access = Opal.deny_frozen_access, $klass = Opal.klass, $slice = Opal.slice, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $defs = Opal.defs, $Kernel = Opal.Kernel, $send = Opal.send, $def = Opal.def, $return_self = Opal.return_self, $Opal = Opal.Opal, $rb_lt = Opal.rb_lt, $eqeqeq = Opal.eqeqeq, $rb_plus = Opal.rb_plus, $alias = Opal.alias, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('raise,each,new,enumerator_size,yield,respond_to?,try_convert,<,===,+,for,class,to_proc,destructure,inspect,to_a,find_all,collect_concat,collect,enum_for'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Enumerator'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Lazy'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.enumerator = nil; $klass(self, $$$('Exception'), 'StopLazyError'); $defs(self, '$for', function $Lazy_for$1(object, $a) { var $post_args, $fwd_rest, $yield = $Lazy_for$1.$$p || nil, self = this, lazy = nil; $Lazy_for$1.$$p = null; $post_args = $slice(arguments, 1); $fwd_rest = $post_args; lazy = $send2(self, $find_super(self, 'for', $Lazy_for$1, false, true), 'for', [object].concat($to_a($fwd_rest)), $yield); lazy.enumerator = object; return lazy; }, -2); $def(self, '$initialize', function $$initialize(object, size) { var block = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; ; if (size == null) size = nil; $deny_frozen_access(self); if (!(block !== nil)) { $Kernel.$raise($$$('ArgumentError'), "tried to call lazy new without a block") }; self.enumerator = object; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [size], function $$2(yielder, $a){var $post_args, each_args; if (yielder == null) yielder = nil; $post_args = $slice(arguments, 1); each_args = $post_args; try { return $send(object, 'each', $to_a(each_args), function $$3($b){var $post_args, args; $post_args = $slice(arguments); args = $post_args; args.unshift(yielder); $yieldX(block, args); ;}, -1) } catch ($err) { if (Opal.rescue($err, [$$('StopLazyError')])) { try { return nil } finally { Opal.pop_exception($err); } } else { throw $err; } };}, -2); }, -2); $def(self, '$lazy', $return_self); $def(self, '$collect', function $$collect() { var block = $$collect.$$p || nil, self = this; $$collect.$$p = null; ; if (!$truthy(block)) { $Kernel.$raise($$$('ArgumentError'), "tried to call lazy map without a block") }; return $send($$('Lazy'), 'new', [self, self.$enumerator_size()], function $$4(enum$, $a){var $post_args, args; if (enum$ == null) enum$ = nil; $post_args = $slice(arguments, 1); args = $post_args; var value = $yieldX(block, args); enum$.$yield(value); ;}, -2); }); $def(self, '$collect_concat', function $$collect_concat() { var block = $$collect_concat.$$p || nil, self = this; $$collect_concat.$$p = null; ; if (!$truthy(block)) { $Kernel.$raise($$$('ArgumentError'), "tried to call lazy map without a block") }; return $send($$('Lazy'), 'new', [self, nil], function $$5(enum$, $a){var $post_args, args; if (enum$ == null) enum$ = nil; $post_args = $slice(arguments, 1); args = $post_args; var value = $yieldX(block, args); if ((value)['$respond_to?']("force") && (value)['$respond_to?']("each")) { $send((value), 'each', [], function $$6(v){ if (v == null) v = nil; return enum$.$yield(v);}) } else { var array = $Opal.$try_convert(value, $$$('Array'), "to_ary"); if (array === nil) { enum$.$yield(value); } else { $send((value), 'each', [], function $$7(v){ if (v == null) v = nil; return enum$.$yield(v);}); } } ;}, -2); }); $def(self, '$drop', function $$drop(n) { var self = this, current_size = nil, set_size = nil, dropped = nil; n = $coerce_to(n, $$$('Integer'), 'to_int'); if ($truthy($rb_lt(n, 0))) { $Kernel.$raise($$$('ArgumentError'), "attempt to drop negative size") }; current_size = self.$enumerator_size(); set_size = ($eqeqeq($$$('Integer'), current_size) ? (($truthy($rb_lt(n, current_size)) ? (n) : (current_size))) : (current_size)); dropped = 0; return $send($$('Lazy'), 'new', [self, set_size], function $$8(enum$, $a){var $post_args, args; if (enum$ == null) enum$ = nil; $post_args = $slice(arguments, 1); args = $post_args; if ($truthy($rb_lt(dropped, n))) { return (dropped = $rb_plus(dropped, 1)) } else { return $send(enum$, 'yield', $to_a(args)) };}, -2); }); $def(self, '$drop_while', function $$drop_while() { var block = $$drop_while.$$p || nil, self = this, succeeding = nil; $$drop_while.$$p = null; ; if (!$truthy(block)) { $Kernel.$raise($$$('ArgumentError'), "tried to call lazy drop_while without a block") }; succeeding = true; return $send($$('Lazy'), 'new', [self, nil], function $$9(enum$, $a){var $post_args, args; if (enum$ == null) enum$ = nil; $post_args = $slice(arguments, 1); args = $post_args; if ($truthy(succeeding)) { var value = $yieldX(block, args); if (!$truthy(value)) { succeeding = false; $send(enum$, 'yield', $to_a(args)); } } else { return $send(enum$, 'yield', $to_a(args)) };}, -2); }); $def(self, '$enum_for', function $$enum_for($a, $b) { var block = $$enum_for.$$p || nil, $post_args, method, args, self = this; $$enum_for.$$p = null; ; $post_args = $slice(arguments); if ($post_args.length > 0) method = $post_args.shift();if (method == null) method = "each"; args = $post_args; return $send(self.$class(), 'for', [self, method].concat($to_a(args)), block.$to_proc()); }, -1); $def(self, '$find_all', function $$find_all() { var block = $$find_all.$$p || nil, self = this; $$find_all.$$p = null; ; if (!$truthy(block)) { $Kernel.$raise($$$('ArgumentError'), "tried to call lazy select without a block") }; return $send($$('Lazy'), 'new', [self, nil], function $$10(enum$, $a){var $post_args, args; if (enum$ == null) enum$ = nil; $post_args = $slice(arguments, 1); args = $post_args; var value = $yieldX(block, args); if ($truthy(value)) { $send(enum$, 'yield', $to_a(args)); } ;}, -2); }); $def(self, '$grep', function $$grep(pattern) { var block = $$grep.$$p || nil, self = this; $$grep.$$p = null; ; if ($truthy(block)) { return $send($$('Lazy'), 'new', [self, nil], function $$11(enum$, $a){var $post_args, args; if (enum$ == null) enum$ = nil; $post_args = $slice(arguments, 1); args = $post_args; var param = $Opal.$destructure(args), value = pattern['$==='](param); if ($truthy(value)) { value = $yield1(block, param); enum$.$yield($yield1(block, param)); } ;}, -2) } else { return $send($$('Lazy'), 'new', [self, nil], function $$12(enum$, $a){var $post_args, args; if (enum$ == null) enum$ = nil; $post_args = $slice(arguments, 1); args = $post_args; var param = $Opal.$destructure(args), value = pattern['$==='](param); if ($truthy(value)) { enum$.$yield(param); } ;}, -2) }; }); $def(self, '$reject', function $$reject() { var block = $$reject.$$p || nil, self = this; $$reject.$$p = null; ; if (!$truthy(block)) { $Kernel.$raise($$$('ArgumentError'), "tried to call lazy reject without a block") }; return $send($$('Lazy'), 'new', [self, nil], function $$13(enum$, $a){var $post_args, args; if (enum$ == null) enum$ = nil; $post_args = $slice(arguments, 1); args = $post_args; var value = $yieldX(block, args); if (!$truthy(value)) { $send(enum$, 'yield', $to_a(args)); } ;}, -2); }); $def(self, '$take', function $$take(n) { var self = this, current_size = nil, set_size = nil, taken = nil; n = $coerce_to(n, $$$('Integer'), 'to_int'); if ($truthy($rb_lt(n, 0))) { $Kernel.$raise($$$('ArgumentError'), "attempt to take negative size") }; current_size = self.$enumerator_size(); set_size = ($eqeqeq($$$('Integer'), current_size) ? (($truthy($rb_lt(n, current_size)) ? (n) : (current_size))) : (current_size)); taken = 0; return $send($$('Lazy'), 'new', [self, set_size], function $$14(enum$, $a){var $post_args, args; if (enum$ == null) enum$ = nil; $post_args = $slice(arguments, 1); args = $post_args; if ($truthy($rb_lt(taken, n))) { $send(enum$, 'yield', $to_a(args)); return (taken = $rb_plus(taken, 1)); } else { return $Kernel.$raise($$('StopLazyError')) };}, -2); }); $def(self, '$take_while', function $$take_while() { var block = $$take_while.$$p || nil, self = this; $$take_while.$$p = null; ; if (!$truthy(block)) { $Kernel.$raise($$$('ArgumentError'), "tried to call lazy take_while without a block") }; return $send($$('Lazy'), 'new', [self, nil], function $$15(enum$, $a){var $post_args, args; if (enum$ == null) enum$ = nil; $post_args = $slice(arguments, 1); args = $post_args; var value = $yieldX(block, args); if ($truthy(value)) { $send(enum$, 'yield', $to_a(args)); } else { $Kernel.$raise($$('StopLazyError')); } ;}, -2); }); $def(self, '$inspect', function $$inspect() { var self = this; return "#<" + (self.$class()) + ": " + (self.enumerator.$inspect()) + ">" }); $alias(self, "force", "to_a"); $alias(self, "filter", "find_all"); $alias(self, "flat_map", "collect_concat"); $alias(self, "map", "collect"); $alias(self, "select", "find_all"); return $alias(self, "to_enum", "enum_for"); })(self, self, $nesting) })('::', null, $nesting) }; Opal.modules["corelib/enumerator/yielder"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $def = Opal.def, $slice = Opal.slice, $send = Opal.send, $to_a = Opal.to_a, $nesting = [], nil = Opal.nil; Opal.add_stubs('yield,proc'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Enumerator'); var $nesting = [self].concat($parent_nesting); return (function($base, $super) { var self = $klass($base, $super, 'Yielder'); var $proto = self.$$prototype; $proto.block = nil; $def(self, '$initialize', function $$initialize() { var block = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; ; self.block = block; return self; }); $def(self, '$yield', function $Yielder_yield$1($a) { var $post_args, values, self = this; $post_args = $slice(arguments); values = $post_args; var value = Opal.yieldX(self.block, values); if (value && value.$thrower_type == "break") { throw value; } return value; ; }, -1); $def(self, '$<<', function $Yielder_$lt$lt$2(value) { var self = this; self.$yield(value); return self; }); return $def(self, '$to_proc', function $$to_proc() { var self = this; return $send(self, 'proc', [], function $$3($a){var $post_args, values, self = $$3.$$s == null ? this : $$3.$$s; $post_args = $slice(arguments); values = $post_args; return $send(self, 'yield', $to_a(values));}, {$$arity: -1, $$s: self}) }); })($nesting[0], null) })($nesting[0], null, $nesting) }; Opal.modules["corelib/enumerator"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $slice = Opal.slice, $coerce_to = Opal.coerce_to, $deny_frozen_access = Opal.deny_frozen_access, $klass = Opal.klass, $defs = Opal.defs, $truthy = Opal.truthy, $send = Opal.send, $not = Opal.not, $def = Opal.def, $rb_plus = Opal.rb_plus, $to_a = Opal.to_a, $Opal = Opal.Opal, $send2 = Opal.send2, $find_super = Opal.find_super, $rb_ge = Opal.rb_ge, $Kernel = Opal.Kernel, $rb_le = Opal.rb_le, $alias = Opal.alias, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,allocate,new,to_proc,!,respond_to?,empty?,nil?,+,class,__send__,call,enum_for,size,destructure,map,>=,length,raise,[],peek_values,<=,next_values,inspect,any?,each_with_object,autoload'); self.$require("corelib/enumerable"); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Enumerator'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.size = $proto.args = $proto.object = $proto.method = $proto.values = $proto.cursor = nil; self.$include($$$('Enumerable')); self.$$prototype.$$is_enumerator = true; $defs(self, '$for', function $Enumerator_for$1(object, $a, $b) { var block = $Enumerator_for$1.$$p || nil, $post_args, method, args, self = this; $Enumerator_for$1.$$p = null; ; $post_args = $slice(arguments, 1); if ($post_args.length > 0) method = $post_args.shift();if (method == null) method = "each"; args = $post_args; var obj = self.$allocate(); obj.object = object; obj.size = block; obj.method = method; obj.args = args; obj.cursor = 0; return obj; ; }, -2); $def(self, '$initialize', function $$initialize($a) { var block = $$initialize.$$p || nil, $post_args, $fwd_rest, self = this; $$initialize.$$p = null; ; $post_args = $slice(arguments); $fwd_rest = $post_args; $deny_frozen_access(self); self.cursor = 0; if ($truthy(block)) { self.object = $send($$('Generator'), 'new', [], block.$to_proc()); self.method = "each"; self.args = []; self.size = arguments[0] || nil; if (($truthy(self.size) && ($not(self.size['$respond_to?']("call"))))) { return (self.size = $coerce_to(self.size, $$$('Integer'), 'to_int')) } else { return nil }; } else { self.object = arguments[0]; self.method = arguments[1] || "each"; self.args = $slice(arguments, 2); return (self.size = nil); }; }, -1); $def(self, '$each', function $$each($a) { var block = $$each.$$p || nil, $post_args, args, self = this; $$each.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if (($truthy(block['$nil?']()) && ($truthy(args['$empty?']())))) { return self }; args = $rb_plus(self.args, args); if ($truthy(block['$nil?']())) { return $send(self.$class(), 'new', [self.object, self.method].concat($to_a(args))) }; return $send(self.object, '__send__', [self.method].concat($to_a(args)), block.$to_proc()); }, -1); $def(self, '$size', function $$size() { var self = this; if ($truthy(self.size['$respond_to?']("call"))) { return $send(self.size, 'call', $to_a(self.args)) } else { return self.size } }); $def(self, '$with_index', function $$with_index(offset) { var block = $$with_index.$$p || nil, self = this; $$with_index.$$p = null; ; if (offset == null) offset = 0; offset = ($truthy(offset) ? ($coerce_to(offset, $$$('Integer'), 'to_int')) : (0)); if (!$truthy(block)) { return $send(self, 'enum_for', ["with_index", offset], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; return self.$size()}, {$$s: self}) }; var result, index = offset; self.$each.$$p = function() { var param = $Opal.$destructure(arguments), value = block(param, index); index++; return value; } return self.$each(); ; }, -1); $def(self, '$each_with_index', function $$each_with_index() { var block = $$each_with_index.$$p || nil, self = this; $$each_with_index.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["each_with_index"], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s; return self.$size()}, {$$s: self}) }; $send2(self, $find_super(self, 'each_with_index', $$each_with_index, false, true), 'each_with_index', [], block); return self.object; }); $def(self, '$rewind', function $$rewind() { var self = this; self.cursor = 0; return self; }); $def(self, '$peek_values', function $$peek_values() { var self = this, $ret_or_1 = nil; self.values = ($truthy(($ret_or_1 = self.values)) ? ($ret_or_1) : ($send(self, 'map', [], function $$4($a){var $post_args, i; $post_args = $slice(arguments); i = $post_args; return i;}, -1))); if ($truthy($rb_ge(self.cursor, self.values.$length()))) { $Kernel.$raise($$$('StopIteration'), "iteration reached an end") }; return self.values['$[]'](self.cursor); }); $def(self, '$peek', function $$peek() { var self = this, values = nil; values = self.$peek_values(); if ($truthy($rb_le(values.$length(), 1))) { return values['$[]'](0) } else { return values }; }); $def(self, '$next_values', function $$next_values() { var self = this, out = nil; out = self.$peek_values(); self.cursor = $rb_plus(self.cursor, 1); return out; }); $def(self, '$next', function $$next() { var self = this, values = nil; values = self.$next_values(); if ($truthy($rb_le(values.$length(), 1))) { return values['$[]'](0) } else { return values }; }); $def(self, '$feed', function $$feed(arg) { var self = this; return self.$raise($$('NotImplementedError'), "Opal doesn't support Enumerator#feed") }); $def(self, '$+', function $Enumerator_$plus$5(other) { var self = this; return $$$($$$('Enumerator'), 'Chain').$new(self, other) }); $def(self, '$inspect', function $$inspect() { var self = this, result = nil; result = "#<" + (self.$class()) + ": " + (self.object.$inspect()) + ":" + (self.method); if ($truthy(self.args['$any?']())) { result = $rb_plus(result, "(" + (self.args.$inspect()['$[]']($$$('Range').$new(1, -2))) + ")") }; return $rb_plus(result, ">"); }); $alias(self, "with_object", "each_with_object"); self.$autoload("ArithmeticSequence", "corelib/enumerator/arithmetic_sequence"); self.$autoload("Chain", "corelib/enumerator/chain"); self.$autoload("Generator", "corelib/enumerator/generator"); self.$autoload("Lazy", "corelib/enumerator/lazy"); return self.$autoload("Yielder", "corelib/enumerator/yielder"); })('::', null, $nesting); }; Opal.modules["corelib/numeric"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $truthy = Opal.truthy, $Kernel = Opal.Kernel, $def = Opal.def, $to_ary = Opal.to_ary, $return_self = Opal.return_self, $rb_minus = Opal.rb_minus, $rb_times = Opal.rb_times, $rb_lt = Opal.rb_lt, $eqeq = Opal.eqeq, $rb_divide = Opal.rb_divide, $return_val = Opal.return_val, $Opal = Opal.Opal, $slice = Opal.slice, $extract_kwargs = Opal.extract_kwargs, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $not = Opal.not, $send = Opal.send, $rb_ge = Opal.rb_ge, $rb_le = Opal.rb_le, $rb_plus = Opal.rb_plus, $rb_gt = Opal.rb_gt, $alias = Opal.alias, self = Opal.top, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,instance_of?,class,Float,respond_to?,coerce,__send__,raise,equal?,-,*,div,<,-@,ceil,to_f,denominator,to_r,==,floor,/,%,Complex,zero?,numerator,abs,arg,coerce_to!,round,<=>,compare,is_a?,!,new,enum_for,to_proc,negative?,>=,<=,+,to_i,truncate,>,angle,conj,imag,rect'); self.$require("corelib/comparable"); return (function($base, $super) { var self = $klass($base, $super, 'Numeric'); self.$include($$$('Comparable')); $def(self, '$coerce', function $$coerce(other) { var self = this; if ($truthy(other['$instance_of?'](self.$class()))) { return [other, self] }; return [$Kernel.$Float(other), $Kernel.$Float(self)]; }); $def(self, '$__coerced__', function $$__coerced__(method, other) { var $a, $b, self = this, a = nil, b = nil; if ($truthy(other['$respond_to?']("coerce"))) { $b = other.$coerce(self), $a = $to_ary($b), (a = ($a[0] == null ? nil : $a[0])), (b = ($a[1] == null ? nil : $a[1])), $b; return a.$__send__(method, b); } else switch (method.valueOf()) { case "+": case "-": case "*": case "/": case "%": case "&": case "|": case "^": case "**": return $Kernel.$raise($$$('TypeError'), "" + (other.$class()) + " can't be coerced into Numeric") case ">": case ">=": case "<": case "<=": case "<=>": return $Kernel.$raise($$$('ArgumentError'), "comparison of " + (self.$class()) + " with " + (other.$class()) + " failed") default: return nil } }); $def(self, '$<=>', function $Numeric_$lt_eq_gt$1(other) { var self = this; if ($truthy(self['$equal?'](other))) { return 0 }; return nil; }); $def(self, '$+@', $return_self); $def(self, '$-@', function $Numeric_$minus$$2() { var self = this; return $rb_minus(0, self) }); $def(self, '$%', function $Numeric_$percent$3(other) { var self = this; return $rb_minus(self, $rb_times(other, self.$div(other))) }); $def(self, '$abs', function $$abs() { var self = this; if ($truthy($rb_lt(self, 0))) { return self['$-@']() } else { return self } }); $def(self, '$abs2', function $$abs2() { var self = this; return $rb_times(self, self) }); $def(self, '$angle', function $$angle() { var self = this; if ($truthy($rb_lt(self, 0))) { return $$$($$$('Math'), 'PI') } else { return 0 } }); $def(self, '$ceil', function $$ceil(ndigits) { var self = this; if (ndigits == null) ndigits = 0; return self.$to_f().$ceil(ndigits); }, -1); $def(self, '$conj', $return_self); $def(self, '$denominator', function $$denominator() { var self = this; return self.$to_r().$denominator() }); $def(self, '$div', function $$div(other) { var self = this; if ($eqeq(other, 0)) { $Kernel.$raise($$$('ZeroDivisionError'), "divided by o") }; return $rb_divide(self, other).$floor(); }); $def(self, '$divmod', function $$divmod(other) { var self = this; return [self.$div(other), self['$%'](other)] }); $def(self, '$fdiv', function $$fdiv(other) { var self = this; return $rb_divide(self.$to_f(), other) }); $def(self, '$floor', function $$floor(ndigits) { var self = this; if (ndigits == null) ndigits = 0; return self.$to_f().$floor(ndigits); }, -1); $def(self, '$i', function $$i() { var self = this; return $Kernel.$Complex(0, self) }); $def(self, '$imag', $return_val(0)); $def(self, '$integer?', $return_val(false)); $def(self, '$nonzero?', function $Numeric_nonzero$ques$4() { var self = this; if ($truthy(self['$zero?']())) { return nil } else { return self } }); $def(self, '$numerator', function $$numerator() { var self = this; return self.$to_r().$numerator() }); $def(self, '$polar', function $$polar() { var self = this; return [self.$abs(), self.$arg()] }); $def(self, '$quo', function $$quo(other) { var self = this; return $rb_divide($Opal['$coerce_to!'](self, $$$('Rational'), "to_r"), other) }); $def(self, '$real', $return_self); $def(self, '$real?', $return_val(true)); $def(self, '$rect', function $$rect() { var self = this; return [self, 0] }); $def(self, '$round', function $$round(digits) { var self = this; ; return self.$to_f().$round(digits); }, -1); $def(self, '$step', function $$step($a, $b, $c) { var block = $$step.$$p || nil, $post_args, $kwargs, limit, step, to, by, self = this, counter = nil; $$step.$$p = null; ; $post_args = $slice(arguments); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); if ($post_args.length > 0) limit = $post_args.shift();; if ($post_args.length > 0) step = $post_args.shift();; to = $hash_get($kwargs, "to");; by = $hash_get($kwargs, "by");; if (limit !== undefined && to !== undefined) { $Kernel.$raise($$$('ArgumentError'), "to is given twice") } if (step !== undefined && by !== undefined) { $Kernel.$raise($$$('ArgumentError'), "step is given twice") } if (to !== undefined) { limit = to; } if (by !== undefined) { step = by; } if (limit === undefined) { limit = nil; } function validateParameters() { if (step === nil) { $Kernel.$raise($$$('TypeError'), "step must be numeric") } if (step != null && step['$=='](0)) { $Kernel.$raise($$$('ArgumentError'), "step can't be 0") } if (step === nil || step == null) { step = 1; } var sign = step['$<=>'](0); if (sign === nil) { $Kernel.$raise($$$('ArgumentError'), "0 can't be coerced into " + (step.$class())) } if (limit === nil || limit == null) { limit = sign > 0 ? $$$($$$('Float'), 'INFINITY') : $$$($$$('Float'), 'INFINITY')['$-@'](); } $Opal.$compare(self, limit) } function stepFloatSize() { if ((step > 0 && self > limit) || (step < 0 && self < limit)) { return 0; } else if (step === Infinity || step === -Infinity) { return 1; } else { var abs = Math.abs, floor = Math.floor, err = (abs(self) + abs(limit) + abs(limit - self)) / abs(step) * $$$($$$('Float'), 'EPSILON'); if (err === Infinity || err === -Infinity) { return 0; } else { if (err > 0.5) { err = 0.5; } return floor((limit - self) / step + err) + 1 } } } function stepSize() { validateParameters(); if (step === 0) { return Infinity; } if (step % 1 !== 0) { return stepFloatSize(); } else if ((step > 0 && self > limit) || (step < 0 && self < limit)) { return 0; } else { var ceil = Math.ceil, abs = Math.abs, lhs = abs(self - limit) + 1, rhs = abs(step); return ceil(lhs / rhs); } } ; if (!(block !== nil)) { if ((($not(limit) || ($truthy(limit['$is_a?']($$$('Numeric'))))) && (($not(step) || ($truthy(step['$is_a?']($$$('Numeric')))))))) { return $$$($$$('Enumerator'), 'ArithmeticSequence').$new([limit, step, ($truthy(to) ? ("to: ") : nil), ($truthy(by) ? ("by: ") : nil)], self) } else { return $send(self, 'enum_for', ["step", limit, step], (stepSize).$to_proc()) } }; validateParameters(); var isDesc = step['$negative?'](), isInf = step['$=='](0) || (limit === Infinity && !isDesc) || (limit === -Infinity && isDesc); if (self.$$is_number && step.$$is_number && limit.$$is_number) { if (self % 1 === 0 && (isInf || limit % 1 === 0) && step % 1 === 0) { var value = self; if (isInf) { for (;; value += step) { block(value); } } else if (isDesc) { for (; value >= limit; value += step) { block(value); } } else { for (; value <= limit; value += step) { block(value); } } return self; } else { var begin = self.$to_f().valueOf(); step = step.$to_f().valueOf(); limit = limit.$to_f().valueOf(); var n = stepFloatSize(); if (!isFinite(step)) { if (n !== 0) block(begin); } else if (step === 0) { while (true) { block(begin); } } else { for (var i = 0; i < n; i++) { var d = i * step + self; if (step >= 0 ? limit < d : limit > d) { d = limit; } block(d); } } return self; } } ; counter = self; while ($truthy(isDesc ? $rb_ge(counter, limit) : $rb_le(counter, limit))) { Opal.yield1(block, counter); counter = $rb_plus(counter, step); }; }, -1); $def(self, '$to_c', function $$to_c() { var self = this; return $Kernel.$Complex(self, 0) }); $def(self, '$to_int', function $$to_int() { var self = this; return self.$to_i() }); $def(self, '$truncate', function $$truncate(ndigits) { var self = this; if (ndigits == null) ndigits = 0; return self.$to_f().$truncate(ndigits); }, -1); $def(self, '$zero?', function $Numeric_zero$ques$5() { var self = this; return self['$=='](0) }); $def(self, '$positive?', function $Numeric_positive$ques$6() { var self = this; return $rb_gt(self, 0) }); $def(self, '$negative?', function $Numeric_negative$ques$7() { var self = this; return $rb_lt(self, 0) }); $def(self, '$dup', $return_self); $def(self, '$clone', function $$clone($kwargs) { var freeze, self = this; $kwargs = $ensure_kwargs($kwargs); freeze = $hash_get($kwargs, "freeze");if (freeze == null) freeze = true; return self; }, -1); $def(self, '$finite?', $return_val(true)); $def(self, '$infinite?', $return_val(nil)); $alias(self, "arg", "angle"); $alias(self, "conjugate", "conj"); $alias(self, "imaginary", "imag"); $alias(self, "magnitude", "abs"); $alias(self, "modulo", "%"); $alias(self, "phase", "arg"); return $alias(self, "rectangular", "rect"); })('::', null); }; Opal.modules["corelib/array"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $truthy = Opal.truthy, $falsy = Opal.falsy, $yield1 = Opal.yield1, $hash_get = Opal.hash_get, $hash_put = Opal.hash_put, $hash_delete = Opal.hash_delete, $coerce_to = Opal.coerce_to, $respond_to = Opal.respond_to, $deny_frozen_access = Opal.deny_frozen_access, $freeze = Opal.freeze, $opal32_init = Opal.opal32_init, $opal32_add = Opal.opal32_add, $klass = Opal.klass, $slice = Opal.slice, $defs = Opal.defs, $Kernel = Opal.Kernel, $def = Opal.def, $Opal = Opal.Opal, $eqeqeq = Opal.eqeqeq, $send2 = Opal.send2, $find_super = Opal.find_super, $send = Opal.send, $rb_gt = Opal.rb_gt, $rb_times = Opal.rb_times, $eqeq = Opal.eqeq, $rb_minus = Opal.rb_minus, $to_a = Opal.to_a, $to_ary = Opal.to_ary, $gvars = Opal.gvars, $rb_ge = Opal.rb_ge, $assign_ivar = Opal.assign_ivar, $rb_lt = Opal.rb_lt, $return_self = Opal.return_self, $neqeq = Opal.neqeq, $alias = Opal.alias, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,to_a,warn,raise,replace,respond_to?,to_ary,coerce_to?,join,to_str,===,<=>,==,object_id,inspect,enum_for,class,bsearch_index,to_proc,nil?,coerce_to!,>,*,enumerator_size,empty?,size,map,equal?,dup,each,reduce,-,[],dig,eql?,length,exclude_end?,flatten,frozen?,__id__,sort_by,&,to_s,new,item,max,min,!,>=,**,delete_if,rotate,rand,at,keep_if,shuffle!,<,sort,!=,times,[]=,<<,uniq,|,values,is_a?,end,begin,upto,reject,push,select,select!,collect,collect!,unshift,pristine,singleton_class'); self.$require("corelib/enumerable"); self.$require("corelib/numeric"); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Array'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$include($$$('Enumerable')); Opal.prop(self.$$prototype, '$$is_array', true); // Recent versions of V8 (> 7.1) only use an optimized implementation when Array.prototype is unmodified. // For instance, "array-splice.tq" has a "fast path" (ExtractFastJSArray, defined in "src/codegen/code-stub-assembler.cc") // but it's only enabled when "IsPrototypeInitialArrayPrototype()" is true. // // Older versions of V8 were using relatively fast JS-with-extensions code even when Array.prototype is modified: // https://github.com/v8/v8/blob/7.0.1/src/js/array.js#L599-L642 // // In short, Array operations are slow in recent versions of V8 when the Array.prototype has been tampered. // So, when possible, we are using faster open-coded version to boost the performance. // As of V8 8.4, depending on the size of the array, this is up to ~25x times faster than Array#shift() // Implementation is heavily inspired by: https://github.com/nodejs/node/blob/ba684805b6c0eded76e5cd89ee00328ac7a59365/lib/internal/util.js#L341-L347 function shiftNoArg(list) { var r = list[0]; var index = 1; var length = list.length; for (; index < length; index++) { list[index - 1] = list[index]; } list.pop(); return r; } function toArraySubclass(obj, klass) { if (klass.$$name === Opal.Array) { return obj; } else { return klass.$allocate().$replace((obj).$to_a()); } } // A helper for keep_if and delete_if, filter is either Opal.truthy // or Opal.falsy. function filterIf(self, filter, block) { var value, raised = null, updated = new Array(self.length); for (var i = 0, i2 = 0; i < self.length; i++) { if (!raised) { try { value = $yield1(block, self[i]) } catch(error) { raised = error; } } if (raised || filter(value)) { updated[i2] = self[i] i2 += 1; } } if (i2 !== i) { self.splice.apply(self, [0, updated.length].concat(updated)); self.splice(i2, updated.length); } if (raised) throw raised; } function convertToArray(array) { if (!array.$$is_array) { array = $coerce_to(array, $$$('Array'), 'to_ary'); } return (array).$to_a(); } function fast_push(arr, objects) { // push.apply() for arrays longer than 32767 may cause various argument errors in browsers // but it is significantly faster than a for loop, which pushes each element separately // but apply() has a overhead by itself, for a small number of elements // the for loop is significantly faster // this is using the best option depending on objects.length var length = objects.length; if (length > 6 && length < 32767) { arr.push.apply(arr, objects); } else { for (var i = 0; i < length; i++) { arr.push(objects[i]); } } } ; $defs(self, '$[]', function $Array_$$$1($a) { var $post_args, objects, self = this; $post_args = $slice(arguments); objects = $post_args; return toArraySubclass(objects, self);; }, -1); $def(self, '$initialize', function $$initialize(size, obj) { var block = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; ; if (size == null) size = nil; if (obj == null) obj = nil; $deny_frozen_access(self); if (obj !== nil && block !== nil) { $Kernel.$warn("warning: block supersedes default value argument") } if (size > $$$($$$('Integer'), 'MAX')) { $Kernel.$raise($$$('ArgumentError'), "array size too big") } if (arguments.length > 2) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 0..2)") } if (arguments.length === 0) { if (self.length > 0) self.splice(0, self.length); return self; } if (arguments.length === 1) { if (size.$$is_array) { self.$replace(size.$to_a()) return self; } else if (size['$respond_to?']("to_ary")) { self.$replace(size.$to_ary()) return self; } } size = $coerce_to(size, $$$('Integer'), 'to_int'); if (size < 0) { $Kernel.$raise($$$('ArgumentError'), "negative array size") } self.splice(0, self.length); var i, value; if (block === nil) { for (i = 0; i < size; i++) { self.push(obj); } } else { for (i = 0, value; i < size; i++) { value = block(i); self[i] = value; } } return self; ; }, -1); $defs(self, '$try_convert', function $$try_convert(obj) { return $Opal['$coerce_to?'](obj, $$$('Array'), "to_ary") }); $def(self, '$&', function $Array_$$2(other) { var self = this; other = convertToArray(other) if (self.length === 0 || other.length === 0) { return []; } var result = [], hash = (new Map()), i, length, item; for (i = 0, length = other.length; i < length; i++) { $hash_put(hash, other[i], true); } for (i = 0, length = self.length; i < length; i++) { item = self[i]; if ($hash_delete(hash, item) !== undefined) { result.push(item); } } return result; }); $def(self, '$|', function $Array_$$3(other) { var self = this; other = convertToArray(other); var hash = (new Map()), i, length, item; for (i = 0, length = self.length; i < length; i++) { $hash_put(hash, self[i], true); } for (i = 0, length = other.length; i < length; i++) { $hash_put(hash, other[i], true); } return hash.$keys(); ; }); $def(self, '$*', function $Array_$$4(other) { var self = this; if ($truthy(other['$respond_to?']("to_str"))) { return self.$join(other.$to_str()) }; other = $coerce_to(other, $$$('Integer'), 'to_int'); if ($truthy(other < 0)) { $Kernel.$raise($$$('ArgumentError'), "negative argument") }; var result = [], converted = self.$to_a(); for (var i = 0; i < other; i++) { result = result.concat(converted); } return result; ; }); $def(self, '$+', function $Array_$plus$5(other) { var self = this; other = convertToArray(other); return self.concat(other);; }); $def(self, '$-', function $Array_$minus$6(other) { var self = this; other = convertToArray(other); if ($truthy(self.length === 0)) { return [] }; if ($truthy(other.length === 0)) { return self.slice() }; var result = [], hash = (new Map()), i, length, item; for (i = 0, length = other.length; i < length; i++) { $hash_put(hash, other[i], true); } for (i = 0, length = self.length; i < length; i++) { item = self[i]; if ($hash_get(hash, item) === undefined) { result.push(item); } } return result; ; }); $def(self, '$<<', function $Array_$lt$lt$7(object) { var self = this; $deny_frozen_access(self); self.push(object); return self; }); $def(self, '$<=>', function $Array_$lt_eq_gt$8(other) { var self = this; if ($eqeqeq($$$('Array'), other)) { other = other.$to_a() } else if ($truthy(other['$respond_to?']("to_ary"))) { other = other.$to_ary().$to_a() } else { return nil }; if (self === other) { return 0; } var count = Math.min(self.length, other.length); for (var i = 0; i < count; i++) { var tmp = (self[i])['$<=>'](other[i]); if (tmp !== 0) { return tmp; } } return (self.length)['$<=>'](other.length); ; }); $def(self, '$==', function $Array_$eq_eq$9(other) { var self = this; var recursed = {}; function _eqeq(array, other) { var i, length, a, b; if (array === other) return true; if (!other.$$is_array) { if ($respond_to(other, '$to_ary')) { return (other)['$=='](array); } else { return false; } } if (array.$$constructor !== Array) array = (array).$to_a(); if (other.$$constructor !== Array) other = (other).$to_a(); if (array.length !== other.length) { return false; } recursed[(array).$object_id()] = true; for (i = 0, length = array.length; i < length; i++) { a = array[i]; b = other[i]; if (a.$$is_array) { if (b.$$is_array && b.length !== a.length) { return false; } if (!recursed.hasOwnProperty((a).$object_id())) { if (!_eqeq(a, b)) { return false; } } } else { if (!(a)['$=='](b)) { return false; } } } return true; } return _eqeq(self, other); }); function $array_slice_range(self, index) { var size = self.length, exclude, from, to, result; exclude = index.excl; from = index.begin === nil ? 0 : $coerce_to(index.begin, Opal.Integer, 'to_int'); to = index.end === nil ? -1 : $coerce_to(index.end, Opal.Integer, 'to_int'); if (from < 0) { from += size; if (from < 0) { return nil; } } if (index.excl_rev && index.begin !== nil) { from += 1; } if (from > size) { return nil; } if (to < 0) { to += size; if (to < 0) { return []; } } if (!exclude || index.end === nil) { to += 1; } result = self.slice(from, to); return result; } function $array_slice_arithmetic_seq(self, index) { var array, out = [], i = 0, pseudorange; if (index.step < 0) { pseudorange = { begin: index.range.end, end: index.range.begin, excl: false, excl_rev: index.range.excl }; array = $array_slice_range(self, pseudorange).$reverse(); } else { array = $array_slice_range(self, index.range); } while (i < array.length) { out.push(array[i]); i += Math.abs(index.step); } return out; } function $array_slice_index_length(self, index, length) { var size = self.length, exclude, from, to, result; index = $coerce_to(index, Opal.Integer, 'to_int'); if (index < 0) { index += size; if (index < 0) { return nil; } } if (length === undefined) { if (index >= size || index < 0) { return nil; } return self[index]; } else { length = $coerce_to(length, Opal.Integer, 'to_int'); if (length < 0 || index > size || index < 0) { return nil; } result = self.slice(index, index + length); } return result; } ; $def(self, '$[]', function $Array_$$$10(index, length) { var self = this; ; if (index.$$is_range) { return $array_slice_range(self, index); } else if (index.$$is_arithmetic_seq) { return $array_slice_arithmetic_seq(self, index); } else { return $array_slice_index_length(self, index, length); } ; }, -2); $def(self, '$[]=', function $Array_$$$eq$11(index, value, extra) { var self = this, data = nil, length = nil; ; $deny_frozen_access(self); data = nil; var i, size = self.length; if (index.$$is_range) { if (value.$$is_array) data = value.$to_a(); else if (value['$respond_to?']("to_ary")) data = value.$to_ary().$to_a(); else data = [value]; var exclude = index.excl, from = index.begin === nil ? 0 : $coerce_to(index.begin, Opal.Integer, 'to_int'), to = index.end === nil ? -1 : $coerce_to(index.end, Opal.Integer, 'to_int'); if (from < 0) { from += size; if (from < 0) { $Kernel.$raise($$$('RangeError'), "" + (index.$inspect()) + " out of range"); } } if (to < 0) { to += size; } if (!exclude || index.end === nil) { to += 1; } if (from > size) { for (i = size; i < from; i++) { self[i] = nil; } } if (to < 0) { self.splice.apply(self, [from, 0].concat(data)); } else { self.splice.apply(self, [from, to - from].concat(data)); } return value; } else { if (extra === undefined) { (length = 1) } else { length = value; value = extra; if (value.$$is_array) data = value.$to_a(); else if (value['$respond_to?']("to_ary")) data = value.$to_ary().$to_a(); else data = [value]; } var old; index = $coerce_to(index, $$$('Integer'), 'to_int'); length = $coerce_to(length, $$$('Integer'), 'to_int'); if (index < 0) { old = index; index += size; if (index < 0) { $Kernel.$raise($$$('IndexError'), "index " + (old) + " too small for array; minimum " + (-self.length)); } } if (length < 0) { $Kernel.$raise($$$('IndexError'), "negative length (" + (length) + ")") } if (index > size) { for (i = size; i < index; i++) { self[i] = nil; } } if (extra === undefined) { self[index] = value; } else { self.splice.apply(self, [index, length].concat(data)); } return value; } ; }, -3); $def(self, '$any?', function $Array_any$ques$12(pattern) { var block = $Array_any$ques$12.$$p || nil, self = this; $Array_any$ques$12.$$p = null; ; ; if (self.length === 0) return false; return $send2(self, $find_super(self, 'any?', $Array_any$ques$12, false, true), 'any?', [pattern], block); }, -1); $def(self, '$assoc', function $$assoc(object) { var self = this; for (var i = 0, length = self.length, item; i < length; i++) { if (item = self[i], item.length && (item[0])['$=='](object)) { return item; } } return nil; }); $def(self, '$at', function $$at(index) { var self = this; index = $coerce_to(index, $$$('Integer'), 'to_int') if (index < 0) { index += self.length; } if (index < 0 || index >= self.length) { return nil; } return self[index]; }); $def(self, '$bsearch_index', function $$bsearch_index() { var block = $$bsearch_index.$$p || nil, self = this; $$bsearch_index.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("bsearch_index") }; var min = 0, max = self.length, mid, val, ret, smaller = false, satisfied = nil; while (min < max) { mid = min + Math.floor((max - min) / 2); val = self[mid]; ret = $yield1(block, val); if (ret === true) { satisfied = mid; smaller = true; } else if (ret === false || ret === nil) { smaller = false; } else if (ret.$$is_number) { if (ret === 0) { return mid; } smaller = (ret < 0); } else { $Kernel.$raise($$$('TypeError'), "wrong argument type " + ((ret).$class()) + " (must be numeric, true, false or nil)") } if (smaller) { max = mid; } else { min = mid + 1; } } return satisfied; ; }); $def(self, '$bsearch', function $$bsearch() { var block = $$bsearch.$$p || nil, self = this, index = nil; $$bsearch.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("bsearch") }; index = $send(self, 'bsearch_index', [], block.$to_proc()); if (index != null && index.$$is_number) { return self[index]; } else { return index; } ; }); $def(self, '$cycle', function $$cycle(n) { var block = $$cycle.$$p || nil, self = this; $$cycle.$$p = null; ; if (n == null) n = nil; if (!(block !== nil)) { return $send(self, 'enum_for', ["cycle", n], function $$13(){var self = $$13.$$s == null ? this : $$13.$$s; if ($truthy(n['$nil?']())) { return $$$($$$('Float'), 'INFINITY') } else { n = $Opal['$coerce_to!'](n, $$$('Integer'), "to_int"); if ($truthy($rb_gt(n, 0))) { return $rb_times(self.$enumerator_size(), n) } else { return 0 }; }}, {$$s: self}) }; if (($truthy(self['$empty?']()) || ($eqeq(n, 0)))) { return nil }; var i, length, value; if (n === nil) { while (true) { for (i = 0, length = self.length; i < length; i++) { value = $yield1(block, self[i]); } } } else { n = $Opal['$coerce_to!'](n, $$$('Integer'), "to_int"); if (n <= 0) { return self; } while (n > 0) { for (i = 0, length = self.length; i < length; i++) { value = $yield1(block, self[i]); } n--; } } ; return self; }, -1); $def(self, '$clear', function $$clear() { var self = this; $deny_frozen_access(self); self.splice(0, self.length); return self; }); $def(self, '$count', function $$count(object) { var block = $$count.$$p || nil, self = this; $$count.$$p = null; ; ; if (($truthy(object !== undefined) || ($truthy(block)))) { return $send2(self, $find_super(self, 'count', $$count, false, true), 'count', [object], block) } else { return self.$size() }; }, -1); $def(self, '$initialize_copy', function $$initialize_copy(other) { var self = this; return self.$replace(other) }); $def(self, '$collect', function $$collect() { var block = $$collect.$$p || nil, self = this; $$collect.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["collect"], function $$14(){var self = $$14.$$s == null ? this : $$14.$$s; return self.$size()}, {$$s: self}) }; var result = []; for (var i = 0; i < self.length; i++) { var value = $yield1(block, self[i]); result[i] = value; } return result; ; }); $def(self, '$collect!', function $Array_collect$excl$15() { var block = $Array_collect$excl$15.$$p || nil, self = this; $Array_collect$excl$15.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["collect!"], function $$16(){var self = $$16.$$s == null ? this : $$16.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self); for (var i = 0; i < self.length; i++) { var value = $yield1(block, self[i]); self[i] = value; } ; return self; }); function binomial_coefficient(n, k) { if (n === k || k === 0) { return 1; } if (k > 0 && n > k) { return binomial_coefficient(n - 1, k - 1) + binomial_coefficient(n - 1, k); } return 0; } ; $def(self, '$combination', function $$combination(n) { var $yield = $$combination.$$p || nil, self = this, num = nil; $$combination.$$p = null; num = $Opal['$coerce_to!'](n, $$$('Integer'), "to_int"); if (!($yield !== nil)) { return $send(self, 'enum_for', ["combination", num], function $$17(){var self = $$17.$$s == null ? this : $$17.$$s; return binomial_coefficient(self.length, num)}, {$$s: self}) }; var i, length, stack, chosen, lev, done, next; if (num === 0) { Opal.yield1($yield, []) } else if (num === 1) { for (i = 0, length = self.length; i < length; i++) { Opal.yield1($yield, [self[i]]) } } else if (num === self.length) { Opal.yield1($yield, self.slice()) } else if (num >= 0 && num < self.length) { stack = []; for (i = 0; i <= num + 1; i++) { stack.push(0); } chosen = []; lev = 0; done = false; stack[0] = -1; while (!done) { chosen[lev] = self[stack[lev+1]]; while (lev < num - 1) { lev++; next = stack[lev+1] = stack[lev] + 1; chosen[lev] = self[next]; } Opal.yield1($yield, chosen.slice()) lev++; do { done = (lev === 0); stack[lev]++; lev--; } while ( stack[lev+1] + num === self.length + lev + 1 ); } } ; return self; }); $def(self, '$repeated_combination', function $$repeated_combination(n) { var $yield = $$repeated_combination.$$p || nil, self = this, num = nil; $$repeated_combination.$$p = null; num = $Opal['$coerce_to!'](n, $$$('Integer'), "to_int"); if (!($yield !== nil)) { return $send(self, 'enum_for', ["repeated_combination", num], function $$18(){var self = $$18.$$s == null ? this : $$18.$$s; return binomial_coefficient(self.length + num - 1, num);}, {$$s: self}) }; function iterate(max, from, buffer, self) { if (buffer.length == max) { var copy = buffer.slice(); Opal.yield1($yield, copy) return; } for (var i = from; i < self.length; i++) { buffer.push(self[i]); iterate(max, i, buffer, self); buffer.pop(); } } if (num >= 0) { iterate(num, 0, [], self); } ; return self; }); $def(self, '$compact', function $$compact() { var self = this; var result = []; for (var i = 0, length = self.length, item; i < length; i++) { if ((item = self[i]) !== nil) { result.push(item); } } return result; }); $def(self, '$compact!', function $Array_compact$excl$19() { var self = this; $deny_frozen_access(self); var original = self.length; for (var i = 0, length = self.length; i < length; i++) { if (self[i] === nil) { self.splice(i, 1); length--; i--; } } return self.length === original ? nil : self; }); $def(self, '$concat', function $$concat($a) { var $post_args, others, self = this; $post_args = $slice(arguments); others = $post_args; $deny_frozen_access(self); others = $send(others, 'map', [], function $$20(other){var self = $$20.$$s == null ? this : $$20.$$s; if (other == null) other = nil; other = convertToArray(other); if ($truthy(other['$equal?'](self))) { other = other.$dup() }; return other;}, {$$s: self}); $send(others, 'each', [], function $$21(other){var self = $$21.$$s == null ? this : $$21.$$s; if (other == null) other = nil; for (var i = 0, length = other.length; i < length; i++) { self.push(other[i]); } ;}, {$$s: self}); return self; }, -1); $def(self, '$delete', function $Array_delete$22(object) { var $yield = $Array_delete$22.$$p || nil, self = this; $Array_delete$22.$$p = null; var original = self.length; for (var i = 0, length = original; i < length; i++) { if ((self[i])['$=='](object)) { $deny_frozen_access(self); self.splice(i, 1); length--; i--; } } if (self.length === original) { if (($yield !== nil)) { return Opal.yieldX($yield, []); } return nil; } return object; }); $def(self, '$delete_at', function $$delete_at(index) { var self = this; $deny_frozen_access(self); index = $coerce_to(index, $$$('Integer'), 'to_int'); if (index < 0) { index += self.length; } if (index < 0 || index >= self.length) { return nil; } var result = self[index]; self.splice(index, 1); return result; }); $def(self, '$delete_if', function $$delete_if() { var block = $$delete_if.$$p || nil, self = this; $$delete_if.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["delete_if"], function $$23(){var self = $$23.$$s == null ? this : $$23.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self); filterIf(self, $falsy, block) ; return self; }); $def(self, '$difference', function $$difference($a) { var $post_args, arrays, self = this; $post_args = $slice(arguments); arrays = $post_args; return $send(arrays, 'reduce', [self.$to_a().$dup()], function $$24(a, b){ if (a == null) a = nil; if (b == null) b = nil; return $rb_minus(a, b);}); }, -1); $def(self, '$dig', function $$dig(idx, $a) { var $post_args, idxs, self = this, item = nil; $post_args = $slice(arguments, 1); idxs = $post_args; item = self['$[]'](idx); if (item === nil || idxs.length === 0) { return item; } ; if (!$truthy(item['$respond_to?']("dig"))) { $Kernel.$raise($$$('TypeError'), "" + (item.$class()) + " does not have #dig method") }; return $send(item, 'dig', $to_a(idxs)); }, -2); $def(self, '$drop', function $$drop(number) { var self = this; number = $coerce_to(number, $$$('Integer'), 'to_int'); if (number < 0) { $Kernel.$raise($$$('ArgumentError')) } return self.slice(number); }); $def(self, '$dup', function $$dup() { var $yield = $$dup.$$p || nil, self = this; $$dup.$$p = null; if (self.$$class === Opal.Array && self.$$class.$allocate.$$pristine && self.$copy_instance_variables.$$pristine && self.$initialize_dup.$$pristine) { return self.slice(0); } ; return $send2(self, $find_super(self, 'dup', $$dup, false, true), 'dup', [], $yield); }); $def(self, '$each', function $$each() { var block = $$each.$$p || nil, self = this; $$each.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["each"], function $$25(){var self = $$25.$$s == null ? this : $$25.$$s; return self.$size()}, {$$s: self}) }; for (var i = 0; i < self.length; i++) { $yield1(block, self[i]); } ; return self; }); $def(self, '$each_index', function $$each_index() { var block = $$each_index.$$p || nil, self = this; $$each_index.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["each_index"], function $$26(){var self = $$26.$$s == null ? this : $$26.$$s; return self.$size()}, {$$s: self}) }; for (var i = 0; i < self.length; i++) { $yield1(block, i); } ; return self; }); $def(self, '$empty?', function $Array_empty$ques$27() { var self = this; return self.length === 0; }); $def(self, '$eql?', function $Array_eql$ques$28(other) { var self = this; var recursed = {}; function _eql(array, other) { var i, length, a, b; if (!other.$$is_array) { return false; } other = other.$to_a(); if (array.length !== other.length) { return false; } recursed[(array).$object_id()] = true; for (i = 0, length = array.length; i < length; i++) { a = array[i]; b = other[i]; if (a.$$is_array) { if (b.$$is_array && b.length !== a.length) { return false; } if (!recursed.hasOwnProperty((a).$object_id())) { if (!_eql(a, b)) { return false; } } } else { if (!(a)['$eql?'](b)) { return false; } } } return true; } return _eql(self, other); }); $def(self, '$fetch', function $$fetch(index, defaults) { var block = $$fetch.$$p || nil, self = this; $$fetch.$$p = null; ; ; var original = index; index = $coerce_to(index, $$$('Integer'), 'to_int'); if (index < 0) { index += self.length; } if (index >= 0 && index < self.length) { return self[index]; } if (block !== nil && defaults != null) { self.$warn("warning: block supersedes default value argument") } if (block !== nil) { return block(original); } if (defaults != null) { return defaults; } if (self.length === 0) { $Kernel.$raise($$$('IndexError'), "index " + (original) + " outside of array bounds: 0...0") } else { $Kernel.$raise($$$('IndexError'), "index " + (original) + " outside of array bounds: -" + (self.length) + "..." + (self.length)); } ; }, -2); $def(self, '$fill', function $$fill($a) { var block = $$fill.$$p || nil, $post_args, args, $b, $c, self = this, one = nil, two = nil, obj = nil, left = nil, right = nil; $$fill.$$p = null; ; $post_args = $slice(arguments); args = $post_args; $deny_frozen_access(self); var i, length, value; ; if ($truthy(block)) { if ($truthy(args.length > 2)) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (args.$length()) + " for 0..2)") }; $c = args, $b = $to_ary($c), (one = ($b[0] == null ? nil : $b[0])), (two = ($b[1] == null ? nil : $b[1])), $c; } else { if ($truthy(args.length == 0)) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (0 for 1..3)") } else if ($truthy(args.length > 3)) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (args.$length()) + " for 1..3)") }; $c = args, $b = $to_ary($c), (obj = ($b[0] == null ? nil : $b[0])), (one = ($b[1] == null ? nil : $b[1])), (two = ($b[2] == null ? nil : $b[2])), $c; }; if ($eqeqeq($$$('Range'), one)) { if ($truthy(two)) { $Kernel.$raise($$$('TypeError'), "length invalid with range") }; left = one.begin === nil ? 0 : $coerce_to(one.begin, $$$('Integer'), 'to_int'); if ($truthy(left < 0)) { left += this.length }; if ($truthy(left < 0)) { $Kernel.$raise($$$('RangeError'), "" + (one.$inspect()) + " out of range") }; right = one.end === nil ? -1 : $coerce_to(one.end, $$$('Integer'), 'to_int'); if ($truthy(right < 0)) { right += this.length }; if (!$truthy(one['$exclude_end?']())) { right += 1 }; if ($truthy(right <= left)) { return self }; } else if ($truthy(one)) { left = $coerce_to(one, $$$('Integer'), 'to_int'); if ($truthy(left < 0)) { left += this.length }; if ($truthy(left < 0)) { left = 0 }; if ($truthy(two)) { right = $coerce_to(two, $$$('Integer'), 'to_int'); if ($truthy(right == 0)) { return self }; right += left; } else { right = this.length }; } else { left = 0; right = this.length; }; if ($truthy(left > this.length)) { for (i = this.length; i < right; i++) { self[i] = nil; } }; if ($truthy(right > this.length)) { this.length = right }; if ($truthy(block)) { for (length = this.length; left < right; left++) { value = block(left); self[left] = value; } } else { for (length = this.length; left < right; left++) { self[left] = obj; } }; return self; }, -1); $def(self, '$first', function $$first(count) { var self = this; ; if (count == null) { return self.length === 0 ? nil : self[0]; } count = $coerce_to(count, $$$('Integer'), 'to_int'); if (count < 0) { $Kernel.$raise($$$('ArgumentError'), "negative array size"); } return self.slice(0, count); ; }, -1); $def(self, '$flatten', function $$flatten(level) { var self = this; ; function _flatten(array, level) { var result = [], i, length, item, ary; array = (array).$to_a(); for (i = 0, length = array.length; i < length; i++) { item = array[i]; if (!$respond_to(item, '$to_ary', true)) { result.push(item); continue; } ary = (item).$to_ary(); if (ary === nil) { result.push(item); continue; } if (!ary.$$is_array) { $Kernel.$raise($$$('TypeError')); } if (ary === self) { $Kernel.$raise($$$('ArgumentError')); } switch (level) { case undefined: result = result.concat(_flatten(ary)); break; case 0: result.push(ary); break; default: fast_push(result, _flatten(ary, level - 1)); } } return result; } if (level !== undefined) { level = $coerce_to(level, $$$('Integer'), 'to_int'); } return _flatten(self, level); ; }, -1); $def(self, '$flatten!', function $Array_flatten$excl$29(level) { var self = this; ; $deny_frozen_access(self); var flattened = self.$flatten(level); if (self.length == flattened.length) { for (var i = 0, length = self.length; i < length; i++) { if (self[i] !== flattened[i]) { break; } } if (i == length) { return nil; } } self.$replace(flattened); ; return self; }, -1); $def(self, '$freeze', function $$freeze() { var self = this; if ($truthy(self['$frozen?']())) { return self }; return $freeze(self);; }); var $hash_ids; $def(self, '$hash', function $$hash() { var self = this; var top = ($hash_ids === undefined), result = $opal32_init(), hash_id = self.$object_id(), item, i, key; result = $opal32_add(result, 0xA); result = $opal32_add(result, self.length); if (top) { $hash_ids = Object.create(null); } // return early for recursive structures else if ($hash_ids[hash_id]) { return $opal32_add(result, 0x01010101); } try { for (key in $hash_ids) { item = $hash_ids[key]; if (self['$eql?'](item)) { return $opal32_add(result, 0x01010101); } } $hash_ids[hash_id] = self; for (i = 0; i < self.length; i++) { item = self[i]; result = $opal32_add(result, item.$hash()); } return result; } finally { if (top) { $hash_ids = undefined; } } }); $def(self, '$include?', function $Array_include$ques$30(member) { var self = this; for (var i = 0, length = self.length; i < length; i++) { if ((self[i])['$=='](member)) { return true; } } return false; }); $def(self, '$index', function $$index(object) { var block = $$index.$$p || nil, self = this; $$index.$$p = null; ; ; var i, length, value; if (object != null && block !== nil) { self.$warn("warning: given block not used") } if (object != null) { for (i = 0, length = self.length; i < length; i++) { if ((self[i])['$=='](object)) { return i; } } } else if (block !== nil) { for (i = 0; i < self.length; i++) { value = block(self[i]); if (value !== false && value !== nil) { return i; } } } else { return self.$enum_for("index"); } return nil; ; }, -1); $def(self, '$insert', function $$insert(index, $a) { var $post_args, objects, self = this; $post_args = $slice(arguments, 1); objects = $post_args; $deny_frozen_access(self); index = $coerce_to(index, $$$('Integer'), 'to_int'); if (objects.length > 0) { if (index < 0) { index += self.length + 1; if (index < 0) { $Kernel.$raise($$$('IndexError'), "" + (index) + " is out of bounds"); } } if (index > self.length) { for (var i = self.length; i < index; i++) { self.push(nil); } } self.splice.apply(self, [index, 0].concat(objects)); } ; return self; }, -2); var inspect_stack = []; $def(self, '$inspect', function $$inspect() { var self = this; var result = [], id = self.$__id__(), pushed = true; ; return (function() { try { if (inspect_stack.indexOf(id) !== -1) { pushed = false; return '[...]'; } inspect_stack.push(id) for (var i = 0, length = self.length; i < length; i++) { var item = self['$[]'](i); result.push($$('Opal').$inspect(item)); } return '[' + result.join(', ') + ']'; ; return nil; } finally { if (pushed) inspect_stack.pop() }; })();; }); $def(self, '$intersection', function $$intersection($a) { var $post_args, arrays, self = this, largest = nil, intersection_of_args = nil; $post_args = $slice(arguments); arrays = $post_args; if (arrays.length === 0) { return self.$to_a().$dup(); } arrays = arrays.map(convertToArray); if (self.length === 0) { return []; } ; arrays = $send(arrays, 'sort_by', [], "length".$to_proc()); if ($truthy(self.length < arrays[0].length)) { return $send(arrays, 'reduce', [self], "&".$to_proc()) }; largest = arrays.pop(); intersection_of_args = $send(arrays, 'reduce', [largest], "&".$to_proc()); return self['$&'](intersection_of_args); }, -1); $def(self, '$intersect?', function $Array_intersect$ques$31(other) { var self = this; var small, large, hash = (new Map()), i, length; if (self.length < other.length) { small = self; large = other; } else { small = other; large = self; } for (i = 0, length = small.length; i < length; i++) { $hash_put(hash, small[i], true); } for (i = 0, length = large.length; i < length; i++) { if ($hash_get(hash, large[i])) { return true; } } return false; }); $def(self, '$join', function $$join(sep) { var self = this; if ($gvars[","] == null) $gvars[","] = nil; if (sep == null) sep = nil; if ($truthy(self.length === 0)) { return "" }; if ($truthy(sep === nil)) { sep = $gvars[","] }; var result = []; var i, length, item, tmp; for (i = 0, length = self.length; i < length; i++) { item = self[i]; if ($respond_to(item, '$to_str')) { tmp = (item).$to_str(); if (tmp !== nil) { result.push((tmp).$to_s()); continue; } } if ($respond_to(item, '$to_ary')) { tmp = (item).$to_ary(); if (tmp === self) { $Kernel.$raise($$$('ArgumentError')); } if (tmp !== nil) { result.push((tmp).$join(sep)); continue; } } if ($respond_to(item, '$to_s')) { tmp = (item).$to_s(); if (tmp !== nil) { result.push(tmp); continue; } } $Kernel.$raise($$$('NoMethodError').$new("" + ($$('Opal').$inspect(self.$item())) + " doesn't respond to #to_str, #to_ary or #to_s", "to_str")); } if (sep === nil) { return result.join(''); } else { return result.join($Opal['$coerce_to!'](sep, $$$('String'), "to_str").$to_s()); } ; }, -1); $def(self, '$keep_if', function $$keep_if() { var block = $$keep_if.$$p || nil, self = this; $$keep_if.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["keep_if"], function $$32(){var self = $$32.$$s == null ? this : $$32.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self); filterIf(self, $truthy, block) ; return self; }); $def(self, '$last', function $$last(count) { var self = this; ; if (count == null) { return self.length === 0 ? nil : self[self.length - 1]; } count = $coerce_to(count, $$$('Integer'), 'to_int'); if (count < 0) { $Kernel.$raise($$$('ArgumentError'), "negative array size"); } if (count > self.length) { count = self.length; } return self.slice(self.length - count, self.length); ; }, -1); $def(self, '$length', function $$length() { var self = this; return self.length; }); $def(self, '$max', function $$max(n) { var block = $$max.$$p || nil, self = this; $$max.$$p = null; ; ; return $send(self.$each(), 'max', [n], block.$to_proc()); }, -1); $def(self, '$min', function $$min() { var block = $$min.$$p || nil, self = this; $$min.$$p = null; ; return $send(self.$each(), 'min', [], block.$to_proc()); }); // Returns the product of from, from-1, ..., from - how_many + 1. function descending_factorial(from, how_many) { var count = how_many >= 0 ? 1 : 0; while (how_many) { count *= from; from--; how_many--; } return count; } ; $def(self, '$permutation', function $$permutation(num) { var block = $$permutation.$$p || nil, self = this, perm = nil, used = nil; $$permutation.$$p = null; ; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["permutation", num], function $$33(){var self = $$33.$$s == null ? this : $$33.$$s; return descending_factorial(self.length, num === undefined ? self.length : num);}, {$$s: self}) }; var permute, offensive, output; if (num === undefined) { num = self.length; } else { num = $coerce_to(num, $$$('Integer'), 'to_int'); } if (num < 0 || self.length < num) { // no permutations, yield nothing } else if (num === 0) { // exactly one permutation: the zero-length array Opal.yield1(block, []) } else if (num === 1) { // this is a special, easy case for (var i = 0; i < self.length; i++) { Opal.yield1(block, [self[i]]) } } else { // this is the general case (perm = $$('Array').$new(num)); (used = $$('Array').$new(self.length, false)); permute = function(num, perm, index, used, blk) { self = this; for(var i = 0; i < self.length; i++){ if(used['$[]'](i)['$!']()) { perm[index] = i; if(index < num - 1) { used[i] = true; permute.call(self, num, perm, index + 1, used, blk); used[i] = false; } else { output = []; for (var j = 0; j < perm.length; j++) { output.push(self[perm[j]]); } $yield1(blk, output); } } } } if ((block !== nil)) { // offensive (both definitions) copy. offensive = self.slice(); permute.call(offensive, num, perm, 0, used, block); } else { permute.call(self, num, perm, 0, used, block); } } ; return self; }, -1); $def(self, '$repeated_permutation', function $$repeated_permutation(n) { var $yield = $$repeated_permutation.$$p || nil, self = this, num = nil; $$repeated_permutation.$$p = null; num = $Opal['$coerce_to!'](n, $$$('Integer'), "to_int"); if (!($yield !== nil)) { return $send(self, 'enum_for', ["repeated_permutation", num], function $$34(){var self = $$34.$$s == null ? this : $$34.$$s; if ($truthy($rb_ge(num, 0))) { return self.$size()['$**'](num) } else { return 0 }}, {$$s: self}) }; function iterate(max, buffer, self) { if (buffer.length == max) { var copy = buffer.slice(); Opal.yield1($yield, copy) return; } for (var i = 0; i < self.length; i++) { buffer.push(self[i]); iterate(max, buffer, self); buffer.pop(); } } iterate(num, [], self.slice()); ; return self; }); $def(self, '$pop', function $$pop(count) { var self = this; ; $deny_frozen_access(self); if ($truthy(count === undefined)) { if ($truthy(self.length === 0)) { return nil }; return self.pop(); }; count = $coerce_to(count, $$$('Integer'), 'to_int'); if ($truthy(count < 0)) { $Kernel.$raise($$$('ArgumentError'), "negative array size") }; if ($truthy(self.length === 0)) { return [] }; if ($truthy(count === 1)) { return [self.pop()]; } else if ($truthy(count > self.length)) { return self.splice(0, self.length); } else { return self.splice(self.length - count, self.length); }; }, -1); $def(self, '$product', function $$product($a) { var block = $$product.$$p || nil, $post_args, args, self = this; $$product.$$p = null; ; $post_args = $slice(arguments); args = $post_args; var result = (block !== nil) ? null : [], n = args.length + 1, counters = new Array(n), lengths = new Array(n), arrays = new Array(n), i, m, subarray, len, resultlen = 1; arrays[0] = self; for (i = 1; i < n; i++) { arrays[i] = $coerce_to(args[i - 1], $$$('Array'), 'to_ary'); } for (i = 0; i < n; i++) { len = arrays[i].length; if (len === 0) { return result || self; } resultlen *= len; if (resultlen > 2147483647) { $Kernel.$raise($$$('RangeError'), "too big to product") } lengths[i] = len; counters[i] = 0; } outer_loop: for (;;) { subarray = []; for (i = 0; i < n; i++) { subarray.push(arrays[i][counters[i]]); } if (result) { result.push(subarray); } else { Opal.yield1(block, subarray) } m = n - 1; counters[m]++; while (counters[m] === lengths[m]) { counters[m] = 0; if (--m < 0) break outer_loop; counters[m]++; } } return result || self; ; }, -1); $def(self, '$push', function $$push($a) { var $post_args, objects, self = this; $post_args = $slice(arguments); objects = $post_args; $deny_frozen_access(self); fast_push(self, objects); ; return self; }, -1); $def(self, '$rassoc', function $$rassoc(object) { var self = this; for (var i = 0, length = self.length, item; i < length; i++) { item = self[i]; if (item.length && item[1] !== undefined) { if ((item[1])['$=='](object)) { return item; } } } return nil; }); $def(self, '$reject', function $$reject() { var block = $$reject.$$p || nil, self = this; $$reject.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["reject"], function $$35(){var self = $$35.$$s == null ? this : $$35.$$s; return self.$size()}, {$$s: self}) }; var result = []; for (var i = 0, value; i < self.length; i++) { value = block(self[i]); if (value === false || value === nil) { result.push(self[i]); } } return result; ; }); $def(self, '$reject!', function $Array_reject$excl$36() { var block = $Array_reject$excl$36.$$p || nil, self = this, original = nil; $Array_reject$excl$36.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["reject!"], function $$37(){var self = $$37.$$s == null ? this : $$37.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self); original = self.$length(); $send(self, 'delete_if', [], block.$to_proc()); if ($eqeq(self.$length(), original)) { return nil } else { return self }; }); $def(self, '$replace', function $$replace(other) { var self = this; $deny_frozen_access(self); other = convertToArray(other); if (self.length > 0) self.splice(0, self.length); fast_push(self, other); ; return self; }); $def(self, '$reverse', function $$reverse() { var self = this; return self.slice(0).reverse(); }); $def(self, '$reverse!', function $Array_reverse$excl$38() { var self = this; $deny_frozen_access(self); return self.reverse();; }); $def(self, '$reverse_each', function $$reverse_each() { var block = $$reverse_each.$$p || nil, self = this; $$reverse_each.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["reverse_each"], function $$39(){var self = $$39.$$s == null ? this : $$39.$$s; return self.$size()}, {$$s: self}) }; for (var i = self.length - 1; i >= 0; i--) { $yield1(block, self[i]); } ; return self; }); $def(self, '$rindex', function $$rindex(object) { var block = $$rindex.$$p || nil, self = this; $$rindex.$$p = null; ; ; var i, value; if (object != null && block !== nil) { self.$warn("warning: given block not used") } if (object != null) { for (i = self.length - 1; i >= 0; i--) { if (i >= self.length) { break; } if ((self[i])['$=='](object)) { return i; } } } else if (block !== nil) { for (i = self.length - 1; i >= 0; i--) { if (i >= self.length) { break; } value = block(self[i]); if (value !== false && value !== nil) { return i; } } } else if (object == null) { return self.$enum_for("rindex"); } return nil; ; }, -1); $def(self, '$rotate', function $$rotate(n) { var self = this; if (n == null) n = 1; var ary, idx, firstPart, lastPart; n = $coerce_to(n, $$$('Integer'), 'to_int') if (self.length === 1) { return self.slice(); } if (self.length === 0) { return []; } ary = self.slice(); idx = n % ary.length; firstPart = ary.slice(idx); lastPart = ary.slice(0, idx); return firstPart.concat(lastPart); ; }, -1); $def(self, '$rotate!', function $Array_rotate$excl$40(cnt) { var self = this, ary = nil; if (cnt == null) cnt = 1; $deny_frozen_access(self); if (self.length === 0 || self.length === 1) { return self; } cnt = $coerce_to(cnt, $$$('Integer'), 'to_int'); ; ary = self.$rotate(cnt); return self.$replace(ary); }, -1); (function($base, $super) { var self = $klass($base, $super, 'SampleRandom'); var $proto = self.$$prototype; $proto.rng = nil; $def(self, '$initialize', $assign_ivar("rng")); return $def(self, '$rand', function $$rand(size) { var self = this, random = nil; random = $coerce_to(self.rng.$rand(size), $$$('Integer'), 'to_int'); if ($truthy(random < 0)) { $Kernel.$raise($$$('RangeError'), "random value must be >= 0") }; if (!$truthy(random < size)) { $Kernel.$raise($$$('RangeError'), "random value must be less than Array size") }; return random; }); })(self, null); $def(self, '$sample', function $$sample(count, options) { var self = this, o = nil, rng = nil; ; ; if ($truthy(count === undefined)) { return self.$at($Kernel.$rand(self.length)) }; if ($truthy(options === undefined)) { if ($truthy((o = $Opal['$coerce_to?'](count, $$$('Hash'), "to_hash")))) { options = o; count = nil; } else { options = nil; count = $coerce_to(count, $$$('Integer'), 'to_int'); } } else { count = $coerce_to(count, $$$('Integer'), 'to_int'); options = $coerce_to(options, $$$('Hash'), 'to_hash'); }; if (($truthy(count) && ($truthy(count < 0)))) { $Kernel.$raise($$$('ArgumentError'), "count must be greater than 0") }; if ($truthy(options)) { rng = options['$[]']("random") }; rng = (($truthy(rng) && ($truthy(rng['$respond_to?']("rand")))) ? ($$('SampleRandom').$new(rng)) : ($Kernel)); if (!$truthy(count)) { return self[rng.$rand(self.length)] }; var abandon, spin, result, i, j, k, targetIndex, oldValue; if (count > self.length) { count = self.length; } switch (count) { case 0: return []; break; case 1: return [self[rng.$rand(self.length)]]; break; case 2: i = rng.$rand(self.length); j = rng.$rand(self.length - 1); if (i <= j) { j++; } return [self[i], self[j]]; break; default: if (self.length / count > 3) { abandon = false; spin = 0; result = $$('Array').$new(count); i = 1; result[0] = rng.$rand(self.length); while (i < count) { k = rng.$rand(self.length); j = 0; while (j < i) { while (k === result[j]) { spin++; if (spin > 100) { abandon = true; break; } k = rng.$rand(self.length); } if (abandon) { break; } j++; } if (abandon) { break; } result[i] = k; i++; } if (!abandon) { i = 0; while (i < count) { result[i] = self[result[i]]; i++; } return result; } } result = self.slice(); for (var c = 0; c < count; c++) { targetIndex = rng.$rand(self.length - c) + c; oldValue = result[c]; result[c] = result[targetIndex]; result[targetIndex] = oldValue; } return count === self.length ? result : (result)['$[]'](0, count); } ; }, -1); $def(self, '$select', function $$select() { var block = $$select.$$p || nil, self = this; $$select.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["select"], function $$41(){var self = $$41.$$s == null ? this : $$41.$$s; return self.$size()}, {$$s: self}) }; var result = []; for (var i = 0, item, value; i < self.length; i++) { item = self[i]; value = $yield1(block, item); if ($truthy(value)) { result.push(item); } } return result; ; }); $def(self, '$select!', function $Array_select$excl$42() { var block = $Array_select$excl$42.$$p || nil, self = this; $Array_select$excl$42.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["select!"], function $$43(){var self = $$43.$$s == null ? this : $$43.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self) var original = self.length; $send(self, 'keep_if', [], block.$to_proc()); return self.length === original ? nil : self; ; }); $def(self, '$shift', function $$shift(count) { var self = this; ; $deny_frozen_access(self); if ($truthy(count === undefined)) { if ($truthy(self.length === 0)) { return nil }; return shiftNoArg(self); }; count = $coerce_to(count, $$$('Integer'), 'to_int'); if ($truthy(count < 0)) { $Kernel.$raise($$$('ArgumentError'), "negative array size") }; if ($truthy(self.length === 0)) { return [] }; return self.splice(0, count);; }, -1); $def(self, '$shuffle', function $$shuffle(rng) { var self = this; ; return self.$dup().$to_a()['$shuffle!'](rng); }, -1); $def(self, '$shuffle!', function $Array_shuffle$excl$44(rng) { var self = this; ; $deny_frozen_access(self); var randgen, i = self.length, j, tmp; if (rng !== undefined) { rng = $Opal['$coerce_to?'](rng, $$$('Hash'), "to_hash"); if (rng !== nil) { rng = rng['$[]']("random"); if (rng !== nil && rng['$respond_to?']("rand")) { randgen = rng; } } } while (i) { if (randgen) { j = randgen.$rand(i).$to_int(); if (j < 0) { $Kernel.$raise($$$('RangeError'), "random number too small " + (j)) } if (j >= i) { $Kernel.$raise($$$('RangeError'), "random number too big " + (j)) } } else { j = self.$rand(i); } tmp = self[--i]; self[i] = self[j]; self[j] = tmp; } return self; ; }, -1); $def(self, '$slice!', function $Array_slice$excl$45(index, length) { var self = this, result = nil, range = nil, range_start = nil, range_end = nil, start = nil; ; $deny_frozen_access(self); result = nil; if ($truthy(length === undefined)) { if ($eqeqeq($$$('Range'), index)) { range = index; result = self['$[]'](range); range_start = range.begin === nil ? 0 : $coerce_to(range.begin, $$$('Integer'), 'to_int'); range_end = range.end === nil ? -1 : $coerce_to(range.end, $$$('Integer'), 'to_int'); if (range_start < 0) { range_start += self.length; } if (range_end < 0) { range_end += self.length; } else if (range_end >= self.length) { range_end = self.length - 1; if (range.excl) { range_end += 1; } } var range_length = range_end - range_start; if (range.excl && range.end !== nil) { range_end -= 1; } else { range_length += 1; } if (range_start < self.length && range_start >= 0 && range_end < self.length && range_end >= 0 && range_length > 0) { self.splice(range_start, range_length); } ; } else { start = $coerce_to(index, $$$('Integer'), 'to_int'); if (start < 0) { start += self.length; } if (start < 0 || start >= self.length) { return nil; } result = self[start]; if (start === 0) { self.shift(); } else { self.splice(start, 1); } ; } } else { start = $coerce_to(index, $$$('Integer'), 'to_int'); length = $coerce_to(length, $$$('Integer'), 'to_int'); if (length < 0) { return nil; } var end = start + length; result = self['$[]'](start, length); if (start < 0) { start += self.length; } if (start + length > self.length) { length = self.length - start; } if (start < self.length && start >= 0) { self.splice(start, length); } ; }; return result; }, -2); $def(self, '$sort', function $$sort() { var block = $$sort.$$p || nil, self = this; $$sort.$$p = null; ; if (!$truthy(self.length > 1)) { return self }; if (block === nil) { block = function(a, b) { return (a)['$<=>'](b); }; } return self.slice().sort(function(x, y) { var ret = block(x, y); if (ret === nil) { $Kernel.$raise($$$('ArgumentError'), "comparison of " + ((x).$inspect()) + " with " + ((y).$inspect()) + " failed"); } return $rb_gt(ret, 0) ? 1 : ($rb_lt(ret, 0) ? -1 : 0); }); ; }); $def(self, '$sort!', function $Array_sort$excl$46() { var block = $Array_sort$excl$46.$$p || nil, self = this; $Array_sort$excl$46.$$p = null; ; $deny_frozen_access(self) var result; if ((block !== nil)) { result = $send((self.slice()), 'sort', [], block.$to_proc()); } else { result = (self.slice()).$sort(); } self.length = 0; for(var i = 0, length = result.length; i < length; i++) { self.push(result[i]); } return self; ; }); $def(self, '$sort_by!', function $Array_sort_by$excl$47() { var block = $Array_sort_by$excl$47.$$p || nil, self = this; $Array_sort_by$excl$47.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["sort_by!"], function $$48(){var self = $$48.$$s == null ? this : $$48.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self); return self.$replace($send(self, 'sort_by', [], block.$to_proc())); }); $def(self, '$take', function $$take(count) { var self = this; if (count < 0) { $Kernel.$raise($$$('ArgumentError')); } return self.slice(0, count); }); $def(self, '$take_while', function $$take_while() { var block = $$take_while.$$p || nil, self = this; $$take_while.$$p = null; ; var result = []; for (var i = 0, item, value; i < self.length; i++) { item = self[i]; value = block(item); if (value === false || value === nil) { return result; } result.push(item); } return result; ; }); $def(self, '$to_a', function $$to_a() { var self = this; if (self.$$class === Opal.Array) { return self; } else { return Opal.Array.$new(self); } }); $def(self, '$to_ary', $return_self); $def(self, '$to_h', function $$to_h() { var block = $$to_h.$$p || nil, self = this, array = nil; $$to_h.$$p = null; ; array = self; if ((block !== nil)) { array = $send(array, 'map', [], block.$to_proc()) }; var i, len = array.length, ary, key, val, hash = (new Map()); for (i = 0; i < len; i++) { ary = $Opal['$coerce_to?'](array[i], $$$('Array'), "to_ary"); if (!ary.$$is_array) { $Kernel.$raise($$$('TypeError'), "wrong element type " + ((array[i]).$class()) + " at " + (i) + " (expected array)") } if (ary.length !== 2) { $Kernel.$raise($$$('ArgumentError'), "element has wrong array length at " + (i) + " (expected 2, was " + ((ary).$length()) + ")") } key = ary[0]; val = ary[1]; $hash_put(hash, key, val); } return hash; ; }); $def(self, '$transpose', function $$transpose() { var self = this, result = nil, max = nil; if ($truthy(self['$empty?']())) { return [] }; result = []; max = nil; $send(self, 'each', [], function $$49(row){var $ret_or_1 = nil; if (row == null) row = nil; row = convertToArray(row); max = ($truthy(($ret_or_1 = max)) ? ($ret_or_1) : (row.length)); if ($neqeq(row.length, max)) { $Kernel.$raise($$$('IndexError'), "element size differs (" + (row.length) + " should be " + (max) + ")") }; return $send((row.length), 'times', [], function $$50(i){var $a, entry = nil; if (i == null) i = nil; entry = ($truthy(($ret_or_1 = result['$[]'](i))) ? ($ret_or_1) : (($a = [i, []], $send(result, '[]=', $a), $a[$a.length - 1]))); return entry['$<<'](row.$at(i));});}); return result; }); $def(self, '$union', function $$union($a) { var $post_args, arrays, self = this; $post_args = $slice(arguments); arrays = $post_args; return $send(arrays, 'reduce', [self.$uniq()], function $$51(a, b){ if (a == null) a = nil; if (b == null) b = nil; return a['$|'](b);}); }, -1); $def(self, '$uniq', function $$uniq() { var block = $$uniq.$$p || nil, self = this; $$uniq.$$p = null; ; var hash = (new Map()), i, length, item, key; if (block === nil) { for (i = 0, length = self.length; i < length; i++) { item = self[i]; if ($hash_get(hash, item) === undefined) { $hash_put(hash, item, item); } } } else { for (i = 0; i < self.length; i++) { item = self[i]; key = $yield1(block, item); if ($hash_get(hash, key) === undefined) { $hash_put(hash, key, item); } } } return (hash).$values(); ; }); $def(self, '$uniq!', function $Array_uniq$excl$52() { var block = $Array_uniq$excl$52.$$p || nil, self = this; $Array_uniq$excl$52.$$p = null; ; $deny_frozen_access(self); var hash = (new Map()), i, item, key, delete_indexes = []; for (i = 0; i < self.length; i++) { item = self[i]; key = (block === nil ? item : $yield1(block, item)); if ($hash_get(hash, key) === undefined) { $hash_put(hash, key, item); } else { delete_indexes.push(i); } } for (i = delete_indexes.length - 1; i >= 0; i--) { self.splice(delete_indexes[i], 1); } return delete_indexes.length === 0 ? nil : self; ; }); $def(self, '$unshift', function $$unshift($a) { var $post_args, objects, self = this; $post_args = $slice(arguments); objects = $post_args; $deny_frozen_access(self); var selfLength = self.length var objectsLength = objects.length if (objectsLength == 0) return self; var index = selfLength - objectsLength for (var i = 0; i < objectsLength; i++) { self.push(self[index + i]) } var len = selfLength - 1 while (len - objectsLength >= 0) { self[len] = self[len - objectsLength] len-- } for (var j = 0; j < objectsLength; j++) { self[j] = objects[j] } return self; ; }, -1); $def(self, '$values_at', function $$values_at($a) { var $post_args, args, self = this, out = nil; $post_args = $slice(arguments); args = $post_args; out = []; $send(args, 'each', [], function $$53(elem){var self = $$53.$$s == null ? this : $$53.$$s, finish = nil, start = nil, i = nil; if (elem == null) elem = nil; if ($truthy(elem['$is_a?']($$$('Range')))) { finish = elem.$end() === nil ? -1 : $coerce_to(elem.$end(), $$$('Integer'), 'to_int'); start = elem.$begin() === nil ? 0 : $coerce_to(elem.$begin(), $$$('Integer'), 'to_int'); if (start < 0) { start = start + self.length; return nil; } ; if (finish < 0) { finish = finish + self.length; } if (elem['$exclude_end?']() && elem.$end() !== nil) { finish--; } if (finish < start) { return nil; } ; return $send(start, 'upto', [finish], function $$54(i){var self = $$54.$$s == null ? this : $$54.$$s; if (i == null) i = nil; return out['$<<'](self.$at(i));}, {$$s: self}); } else { i = $coerce_to(elem, $$$('Integer'), 'to_int'); return out['$<<'](self.$at(i)); };}, {$$s: self}); return out; }, -1); $def(self, '$zip', function $$zip($a) { var block = $$zip.$$p || nil, $post_args, others, self = this, $ret_or_1 = nil; $$zip.$$p = null; ; $post_args = $slice(arguments); others = $post_args; var result = [], size = self.length, part, o, i, j, jj; for (j = 0, jj = others.length; j < jj; j++) { o = others[j]; if (o.$$is_array) { continue; } if (o.$$is_range || o.$$is_enumerator) { others[j] = o.$take(size); continue; } others[j] = ($truthy(($ret_or_1 = $Opal['$coerce_to?'](o, $$$('Array'), "to_ary"))) ? ($ret_or_1) : ($Opal['$coerce_to!'](o, $$$('Enumerator'), "to_enum", "each"))).$to_a(); } for (i = 0; i < size; i++) { part = [self[i]]; for (j = 0, jj = others.length; j < jj; j++) { o = others[j][i]; if (o == null) { o = nil; } part[j + 1] = o; } result[i] = part; } if (block !== nil) { for (i = 0; i < size; i++) { Opal.yield1(block, result[i]); } return nil; } return result; ; }, -1); $defs(self, '$inherited', function $$inherited(klass) { klass.$$prototype.$to_a = function() { return this.slice(0, this.length); } }); $def(self, '$instance_variables', function $$instance_variables() { var $yield = $$instance_variables.$$p || nil, self = this; $$instance_variables.$$p = null; return $send($send2(self, $find_super(self, 'instance_variables', $$instance_variables, false, true), 'instance_variables', [], $yield), 'reject', [], function $$55(ivar){var $ret_or_1 = nil; if (ivar == null) ivar = nil; if ($truthy(($ret_or_1 = /^@\d+$/.test(ivar)))) { return $ret_or_1 } else { return ivar['$==']("@length") };}) }); $def(self, '$pack', function $$pack($a) { var $post_args, args; $post_args = $slice(arguments); args = $post_args; return $Kernel.$raise("To use Array#pack, you must first require 'corelib/array/pack'."); }, -1); $alias(self, "append", "push"); $alias(self, "filter", "select"); $alias(self, "filter!", "select!"); $alias(self, "map", "collect"); $alias(self, "map!", "collect!"); $alias(self, "prepend", "unshift"); $alias(self, "size", "length"); $alias(self, "slice", "[]"); $alias(self, "to_s", "inspect"); $Opal.$pristine(self.$singleton_class(), "allocate"); return $Opal.$pristine(self, "copy_instance_variables", "initialize_dup"); })('::', Array, $nesting); }; Opal.modules["corelib/hash"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $yield1 = Opal.yield1, $hash_clone = Opal.hash_clone, $hash_delete = Opal.hash_delete, $hash_each = Opal.hash_each, $hash_get = Opal.hash_get, $hash_put = Opal.hash_put, $deny_frozen_access = Opal.deny_frozen_access, $freeze = Opal.freeze, $opal32_init = Opal.opal32_init, $opal32_add = Opal.opal32_add, $klass = Opal.klass, $slice = Opal.slice, $Opal = Opal.Opal, $Kernel = Opal.Kernel, $defs = Opal.defs, $def = Opal.def, $send = Opal.send, $rb_ge = Opal.rb_ge, $rb_gt = Opal.rb_gt, $truthy = Opal.truthy, $to_a = Opal.to_a, $return_self = Opal.return_self, $not = Opal.not, $alias = Opal.alias, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,coerce_to?,[],merge!,allocate,raise,inspect,coerce_to!,each,fetch,>=,>,==,lambda?,abs,arity,enum_for,size,respond_to?,class,dig,except!,dup,delete,new,map,to_proc,flatten,frozen?,eql?,default,default_proc,default_proc=,default=,to_h,proc,!,select,select!,has_key?,indexes,index,length,[]=,has_value?'); self.$require("corelib/enumerable"); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Hash'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$include($$$('Enumerable')); self.$$prototype.$$is_hash = true; $defs(self, '$[]', function $Hash_$$$1($a) { var $post_args, argv, self = this; $post_args = $slice(arguments); argv = $post_args; var hash, argc = argv.length, arg, i; if (argc === 1) { hash = $Opal['$coerce_to?'](argv['$[]'](0), $$$('Hash'), "to_hash"); if (hash !== nil) { return self.$allocate()['$merge!'](hash); } argv = $Opal['$coerce_to?'](argv['$[]'](0), $$$('Array'), "to_ary"); if (argv === nil) { $Kernel.$raise($$$('ArgumentError'), "odd number of arguments for Hash"); } argc = argv.length; hash = self.$allocate(); for (i = 0; i < argc; i++) { arg = argv[i]; if (!arg.$$is_array) $Kernel.$raise($$$('ArgumentError'), "invalid element " + ((arg).$inspect()) + " for Hash"); if (arg.length === 1) { hash.$store(arg[0], nil); } else if (arg.length === 2) { hash.$store(arg[0], arg[1]); } else { $Kernel.$raise($$$('ArgumentError'), "invalid number of elements (" + (arg.length) + " for " + ((arg).$inspect()) + "), must be 1..2"); } } return hash; } if (argc % 2 !== 0) { $Kernel.$raise($$$('ArgumentError'), "odd number of arguments for Hash") } hash = self.$allocate(); for (i = 0; i < argc; i += 2) { hash.$store(argv[i], argv[i + 1]); } return hash; ; }, -1); $defs(self, '$allocate', function $$allocate() { var self = this; var hash = new self.$$constructor(); hash.$$none = nil; hash.$$proc = nil; return hash; }); $defs(self, '$try_convert', function $$try_convert(obj) { return $Opal['$coerce_to?'](obj, $$$('Hash'), "to_hash") }); $def(self, '$initialize', function $$initialize(defaults) { var block = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; ; ; $deny_frozen_access(self); if (defaults !== undefined && block !== nil) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (1 for 0)") } self.$$none = (defaults === undefined ? nil : defaults); self.$$proc = block; return self; ; }, -1); $def(self, '$==', function $Hash_$eq_eq$2(other) { var self = this; if (self === other) { return true; } if (!other.$$is_hash) { return false; } if (self.size !== other.size) { return false; } return $hash_each(self, true, function(key, value) { var other_value = $hash_get(other, key); if (other_value === undefined || !value['$eql?'](other_value)) { return [true, false]; } return [false, true]; }); }); $def(self, '$>=', function $Hash_$gt_eq$3(other) { var self = this, result = nil; other = $Opal['$coerce_to!'](other, $$$('Hash'), "to_hash"); if (self.size < other.size) { return false; } ; result = true; $send(other, 'each', [], function $$4(other_key, other_val){var self = $$4.$$s == null ? this : $$4.$$s, val = nil; if (other_key == null) other_key = nil; if (other_val == null) other_val = nil; val = self.$fetch(other_key, null); if (val == null || val !== other_val) { result = false; return; } ;}, {$$s: self}); return result; }); $def(self, '$>', function $Hash_$gt$5(other) { var self = this; other = $Opal['$coerce_to!'](other, $$$('Hash'), "to_hash"); if (self.size <= other.size) { return false; } ; return $rb_ge(self, other); }); $def(self, '$<', function $Hash_$lt$6(other) { var self = this; other = $Opal['$coerce_to!'](other, $$$('Hash'), "to_hash"); return $rb_gt(other, self); }); $def(self, '$<=', function $Hash_$lt_eq$7(other) { var self = this; other = $Opal['$coerce_to!'](other, $$$('Hash'), "to_hash"); return $rb_ge(other, self); }); $def(self, '$[]', function $Hash_$$$8(key) { var self = this; var value = $hash_get(self, key); if (value !== undefined) { return value; } return self.$default(key); }); $def(self, '$[]=', function $Hash_$$$eq$9(key, value) { var self = this; $deny_frozen_access(self); $hash_put(self, key, value); return value; }); $def(self, '$assoc', function $$assoc(object) { var self = this; return $hash_each(self, nil, function(key, value) { if ((key)['$=='](object)) { return [true, [key, value]]; } return [false, nil]; }); }); $def(self, '$clear', function $$clear() { var self = this; $deny_frozen_access(self); self.clear(); if (self.$$keys) self.$$keys.clear(); return self; }); $def(self, '$clone', function $$clone() { var self = this; var hash = self.$class().$new(); $hash_clone(self, hash); return self["$frozen?"]() ? hash.$freeze() : hash; }); $def(self, '$compact', function $$compact() { var self = this; var hash = new Map(); return $hash_each(self, hash, function(key, value) { if (value !== nil) { $hash_put(hash, key, value); } return [false, hash]; }); }); $def(self, '$compact!', function $Hash_compact$excl$10() { var self = this; $deny_frozen_access(self); var result = nil; return $hash_each(self, result, function(key, value) { if (value === nil) { $hash_delete(self, key); result = self; } return [false, result]; }); }); $def(self, '$compare_by_identity', function $$compare_by_identity() { var self = this; $deny_frozen_access(self); if (!self.$$by_identity) { self.$$by_identity = true; if (self.size !== 0) Opal.hash_rehash(self); } return self; }); $def(self, '$compare_by_identity?', function $Hash_compare_by_identity$ques$11() { var self = this; return self.$$by_identity === true; }); $def(self, '$default', function $Hash_default$12(key) { var self = this; ; if (key !== undefined && self.$$proc !== nil && self.$$proc !== undefined) { return self.$$proc.$call(self, key); } if (self.$$none === undefined) { return nil; } return self.$$none; ; }, -1); $def(self, '$default=', function $Hash_default$eq$13(object) { var self = this; $deny_frozen_access(self); self.$$proc = nil; self.$$none = object; return object; }); $def(self, '$default_proc', function $$default_proc() { var self = this; if (self.$$proc !== undefined) { return self.$$proc; } return nil; }); $def(self, '$default_proc=', function $Hash_default_proc$eq$14(default_proc) { var self = this; $deny_frozen_access(self); var proc = default_proc; if (proc !== nil) { proc = $Opal['$coerce_to!'](proc, $$$('Proc'), "to_proc"); if ((proc)['$lambda?']() && (proc).$arity().$abs() !== 2) { $Kernel.$raise($$$('TypeError'), "default_proc takes two arguments"); } } self.$$none = nil; self.$$proc = proc; return default_proc; }); $def(self, '$delete', function $Hash_delete$15(key) { var block = $Hash_delete$15.$$p || nil, self = this; $Hash_delete$15.$$p = null; ; $deny_frozen_access(self); var value = $hash_delete(self, key); if (value !== undefined) { return value; } if (block !== nil) { return Opal.yield1(block, key); } return nil; ; }); $def(self, '$delete_if', function $$delete_if() { var block = $$delete_if.$$p || nil, self = this; $$delete_if.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["delete_if"], function $$16(){var self = $$16.$$s == null ? this : $$16.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self); return $hash_each(self, self, function(key, value) { var obj = block(key, value); if (obj !== false && obj !== nil) { $hash_delete(self, key); } return [false, self]; }); ; }); $def(self, '$dig', function $$dig(key, $a) { var $post_args, keys, self = this, item = nil; $post_args = $slice(arguments, 1); keys = $post_args; item = self['$[]'](key); if (item === nil || keys.length === 0) { return item; } ; if (!$truthy(item['$respond_to?']("dig"))) { $Kernel.$raise($$$('TypeError'), "" + (item.$class()) + " does not have #dig method") }; return $send(item, 'dig', $to_a(keys)); }, -2); $def(self, '$dup', function $$dup() { var self = this; return $hash_clone(self, self.$class().$new()); }); $def(self, '$each', function $$each() { var block = $$each.$$p || nil, self = this; $$each.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["each"], function $$17(){var self = $$17.$$s == null ? this : $$17.$$s; return self.$size()}, {$$s: self}) }; return $hash_each(self, self, function(key, value) { $yield1(block, [key, value]); return [false, self]; }); ; }); $def(self, '$each_key', function $$each_key() { var block = $$each_key.$$p || nil, self = this; $$each_key.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["each_key"], function $$18(){var self = $$18.$$s == null ? this : $$18.$$s; return self.$size()}, {$$s: self}) }; return $hash_each(self, self, function(key, value) { block(key); return [false, self]; }); ; }); $def(self, '$each_value', function $$each_value() { var block = $$each_value.$$p || nil, self = this; $$each_value.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["each_value"], function $$19(){var self = $$19.$$s == null ? this : $$19.$$s; return self.$size()}, {$$s: self}) }; return $hash_each(self, self, function(key, value) { block(value); return [false, self]; }); ; }); $def(self, '$empty?', function $Hash_empty$ques$20() { var self = this; return self.size === 0; }); $def(self, '$except', function $$except($a) { var $post_args, keys, self = this; $post_args = $slice(arguments); keys = $post_args; return $send(self.$dup(), 'except!', $to_a(keys)); }, -1); $def(self, '$except!', function $Hash_except$excl$21($a) { var $post_args, keys, self = this; $post_args = $slice(arguments); keys = $post_args; $send(keys, 'each', [], function $$22(key){var self = $$22.$$s == null ? this : $$22.$$s; if (key == null) key = nil; return self.$delete(key);}, {$$s: self}); return self; }, -1); $def(self, '$fetch', function $$fetch(key, defaults) { var block = $$fetch.$$p || nil, self = this; $$fetch.$$p = null; ; ; var value = $hash_get(self, key); if (value !== undefined) { return value; } if (block !== nil) { return block(key); } if (defaults !== undefined) { return defaults; } ; return $Kernel.$raise($$$('KeyError').$new("key not found: " + (key.$inspect()), (new Map([["key", key], ["receiver", self]])))); }, -2); $def(self, '$fetch_values', function $$fetch_values($a) { var block = $$fetch_values.$$p || nil, $post_args, keys, self = this; $$fetch_values.$$p = null; ; $post_args = $slice(arguments); keys = $post_args; return $send(keys, 'map', [], function $$23(key){var self = $$23.$$s == null ? this : $$23.$$s; if (key == null) key = nil; return $send(self, 'fetch', [key], block.$to_proc());}, {$$s: self}); }, -1); $def(self, '$flatten', function $$flatten(level) { var self = this; if (level == null) level = 1; level = $Opal['$coerce_to!'](level, $$$('Integer'), "to_int"); var result = []; return $hash_each(self, result, function(key, value) { result.push(key); if (value.$$is_array) { if (level === 1) { result.push(value); return [false, result]; } result = result.concat((value).$flatten(level - 2)); return [false, result]; } result.push(value); return [false, result]; }); ; }, -1); $def(self, '$freeze', function $$freeze() { var self = this; if ($truthy(self['$frozen?']())) { return self }; return $freeze(self);; }); $def(self, '$has_key?', function $Hash_has_key$ques$24(key) { var self = this; return $hash_get(self, key) !== undefined; }); $def(self, '$has_value?', function $Hash_has_value$ques$25(value) { var self = this; return $hash_each(self, false, function(key, val) { if ((val)['$=='](value)) { return [true, true]; } return [false, false]; }); }); var $hash_ids; $def(self, '$hash', function $$hash() { var self = this; var top = ($hash_ids === undefined), hash_id = self.$object_id(), result = $opal32_init(), key, item, i, size = self.size, ary = new Int32Array(size); result = $opal32_add(result, 0x4); result = $opal32_add(result, size); if (top) { $hash_ids = Object.create(null); } else if ($hash_ids[hash_id]) { return $opal32_add(result, 0x01010101); } try { for (key in $hash_ids) { item = $hash_ids[key]; if (self['$eql?'](item)) { return $opal32_add(result, 0x01010101); } } $hash_ids[hash_id] = self; i = 0 $hash_each(self, false, function(key, value) { ary[i] = [0x70414952, key, value].$hash(); i++; return [false, false]; }); ary = ary.sort(); for (i = 0; i < ary.length; i++) { result = $opal32_add(result, ary[i]); } return result; } finally { if (top) { $hash_ids = undefined; } } }); $def(self, '$index', function $$index(object) { var self = this; return $hash_each(self, nil, function(key, value) { if ((value)['$=='](object)) { return [true, key]; } return [false, nil]; }); }); $def(self, '$indexes', function $$indexes($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; var result = []; for (var i = 0, length = args.length, key, value; i < length; i++) { key = args[i]; value = $hash_get(self, key); if (value === undefined) { result.push(self.$default()); continue; } result.push(value); } return result; ; }, -1); var inspect_ids; $def(self, '$inspect', function $$inspect() { var self = this; var top = (inspect_ids === undefined), hash_id = self.$object_id(), result = []; ; return (function() { try { if (top) { inspect_ids = {}; } if (inspect_ids.hasOwnProperty(hash_id)) { return '{...}'; } inspect_ids[hash_id] = true; $hash_each(self, false, function(key, value) { value = $$('Opal').$inspect(value) key = $$('Opal').$inspect(key) result.push(key + '=>' + value); return [false, false]; }) return '{' + result.join(', ') + '}'; ; return nil; } finally { if (top) inspect_ids = undefined }; })();; }); $def(self, '$invert', function $$invert() { var self = this; var hash = new Map(); return $hash_each(self, hash, function(key, value) { $hash_put(hash, value, key); return [false, hash]; }); }); $def(self, '$keep_if', function $$keep_if() { var block = $$keep_if.$$p || nil, self = this; $$keep_if.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["keep_if"], function $$26(){var self = $$26.$$s == null ? this : $$26.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self); return $hash_each(self, self, function(key, value) { var obj = block(key, value); if (obj === false || obj === nil) { $hash_delete(self, key); } return [false, self]; }); ; }); $def(self, '$keys', function $$keys() { var self = this; return Array.from(self.keys()); }); $def(self, '$length', function $$length() { var self = this; return self.size; }); $def(self, '$merge', function $$merge($a) { var block = $$merge.$$p || nil, $post_args, others, self = this; $$merge.$$p = null; ; $post_args = $slice(arguments); others = $post_args; return $send(self.$dup(), 'merge!', $to_a(others), block.$to_proc()); }, -1); $def(self, '$merge!', function $Hash_merge$excl$27($a) { var block = $Hash_merge$excl$27.$$p || nil, $post_args, others, self = this; $Hash_merge$excl$27.$$p = null; ; $post_args = $slice(arguments); others = $post_args; $deny_frozen_access(self); var i, j, other; for (i = 0; i < others.length; ++i) { other = $Opal['$coerce_to!'](others[i], $$$('Hash'), "to_hash"); if (block === nil) { $hash_each(other, false, function(key, value) { $hash_put(self, key, value); return [false, false]; }); } else { $hash_each(other, false, function(key, value) { var val = $hash_get(self, key); if (val === undefined) { $hash_put(self, key, value); return [false, false]; } $hash_put(self, key, block(key, val, value)); return [false, false]; }); } } return self; ; }, -1); $def(self, '$rassoc', function $$rassoc(object) { var self = this; return $hash_each(self, nil, function(key, value) { if ((value)['$=='](object)) { return [true, [key, value]]; } return [false, nil]; }); }); $def(self, '$rehash', function $$rehash() { var self = this; $deny_frozen_access(self); return Opal.hash_rehash(self); }); $def(self, '$reject', function $$reject() { var block = $$reject.$$p || nil, self = this; $$reject.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["reject"], function $$28(){var self = $$28.$$s == null ? this : $$28.$$s; return self.$size()}, {$$s: self}) }; var hash = new Map(); return $hash_each(self, hash, function(key, value) { var obj = block(key, value); if (obj === false || obj === nil) { $hash_put(hash, key, value); } return [false, hash] }); ; }); $def(self, '$reject!', function $Hash_reject$excl$29() { var block = $Hash_reject$excl$29.$$p || nil, self = this; $Hash_reject$excl$29.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["reject!"], function $$30(){var self = $$30.$$s == null ? this : $$30.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self); var result = nil; return $hash_each(self, result, function(key, value) { var obj = block(key, value); if (obj !== false && obj !== nil) { $hash_delete(self, key); result = self; } return [false, result]; }); ; }); $def(self, '$replace', function $$replace(other) { var self = this; $deny_frozen_access(self);; other = $Opal['$coerce_to!'](other, $$$('Hash'), "to_hash"); self.$clear(); $hash_each(other, false, function(key, value) { $hash_put(self, key, value); return [false, false]; }); ; if ($truthy(other.$default_proc())) { self['$default_proc='](other.$default_proc()) } else { self['$default='](other.$default()) }; return self; }); $def(self, '$select', function $$select() { var block = $$select.$$p || nil, self = this; $$select.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["select"], function $$31(){var self = $$31.$$s == null ? this : $$31.$$s; return self.$size()}, {$$s: self}) }; var hash = new Map(); return $hash_each(self, hash, function(key, value) { var obj = block(key, value); if (obj !== false && obj !== nil) { $hash_put(hash, key, value); } return [false, hash]; }); ; }); $def(self, '$select!', function $Hash_select$excl$32() { var block = $Hash_select$excl$32.$$p || nil, self = this; $Hash_select$excl$32.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["select!"], function $$33(){var self = $$33.$$s == null ? this : $$33.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self); var result = nil; return $hash_each(self, result, function(key, value) { var obj = block(key, value); if (obj === false || obj === nil) { $hash_delete(self, key); result = self; } return [false, result]; }); ; }); $def(self, '$shift', function $$shift() { var self = this; $deny_frozen_access(self); return $hash_each(self, nil, function(key, value) { return [true, [key, $hash_delete(self, key)]]; }); }); $def(self, '$slice', function $$slice($a) { var $post_args, keys, self = this; $post_args = $slice(arguments); keys = $post_args; var result = new Map(); for (var i = 0, length = keys.length; i < length; i++) { var key = keys[i], value = $hash_get(self, key); if (value !== undefined) { $hash_put(result, key, value); } } return result; ; }, -1); $def(self, '$to_a', function $$to_a() { var self = this; var result = []; return $hash_each(self, result, function(key, value) { result.push([key, value]); return [false, result]; }); }); $def(self, '$to_h', function $$to_h() { var block = $$to_h.$$p || nil, self = this; $$to_h.$$p = null; ; if ((block !== nil)) { return $send(self, 'map', [], block.$to_proc()).$to_h() }; if (self.$$class === Opal.Hash) { return self; } var hash = new Map(); $hash_clone(self, hash); return hash; ; }); $def(self, '$to_hash', $return_self); $def(self, '$to_proc', function $$to_proc() { var self = this; return $send(self, 'proc', [], function $$34(key){var self = $$34.$$s == null ? this : $$34.$$s; ; if (key == null) { $Kernel.$raise($$$('ArgumentError'), "no key given") } ; return self['$[]'](key);}, {$$arity: -1, $$s: self}) }); $def(self, '$transform_keys', function $$transform_keys(keys_hash) { var block = $$transform_keys.$$p || nil, self = this; $$transform_keys.$$p = null; ; if (keys_hash == null) keys_hash = nil; if (($not(block) && ($not(keys_hash)))) { return $send(self, 'enum_for', ["transform_keys"], function $$35(){var self = $$35.$$s == null ? this : $$35.$$s; return self.$size()}, {$$s: self}) }; var result = new Map(); return $hash_each(self, result, function(key, value) { var new_key; if (keys_hash !== nil) new_key = $hash_get(keys_hash, key); if (new_key === undefined && block && block !== nil) new_key = block(key); if (new_key === undefined) new_key = key // key not modified $hash_put(result, new_key, value); return [false, result]; }); ; }, -1); $def(self, '$transform_keys!', function $Hash_transform_keys$excl$36(keys_hash) { var block = $Hash_transform_keys$excl$36.$$p || nil, self = this; $Hash_transform_keys$excl$36.$$p = null; ; if (keys_hash == null) keys_hash = nil; if (($not(block) && ($not(keys_hash)))) { return $send(self, 'enum_for', ["transform_keys!"], function $$37(){var self = $$37.$$s == null ? this : $$37.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self); var modified_keys = new Map(); return $hash_each(self, self, function(key, value) { var new_key; if (keys_hash !== nil) new_key = $hash_get(keys_hash, key); if (new_key === undefined && block && block !== nil) new_key = block(key); if (new_key === undefined) return [false, self]; // key not modified if (!$hash_get(modified_keys, key)) $hash_delete(self, key); $hash_put(self, new_key, value); $hash_put(modified_keys, new_key, true) return [false, self]; }); ; }, -1); $def(self, '$transform_values', function $$transform_values() { var block = $$transform_values.$$p || nil, self = this; $$transform_values.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["transform_values"], function $$38(){var self = $$38.$$s == null ? this : $$38.$$s; return self.$size()}, {$$s: self}) }; var result = new Map(); return $hash_each(self, result, function(key, value) { $hash_put(result, key, block(value)); return [false, result]; }); ; }); $def(self, '$transform_values!', function $Hash_transform_values$excl$39() { var block = $Hash_transform_values$excl$39.$$p || nil, self = this; $Hash_transform_values$excl$39.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["transform_values!"], function $$40(){var self = $$40.$$s == null ? this : $$40.$$s; return self.$size()}, {$$s: self}) }; $deny_frozen_access(self); return $hash_each(self, self, function(key, value) { $hash_put(self, key, block(value)); return [false, self]; }); ; }); $def(self, '$values', function $$values() { var self = this; return Array.from(self.values()); }); $alias(self, "each_pair", "each"); $alias(self, "eql?", "=="); $alias(self, "filter", "select"); $alias(self, "filter!", "select!"); $alias(self, "include?", "has_key?"); $alias(self, "indices", "indexes"); $alias(self, "key", "index"); $alias(self, "key?", "has_key?"); $alias(self, "member?", "has_key?"); $alias(self, "size", "length"); $alias(self, "store", "[]="); $alias(self, "to_s", "inspect"); $alias(self, "update", "merge!"); $alias(self, "value?", "has_value?"); return $alias(self, "values_at", "indexes"); })('::', Map, $nesting); }; Opal.modules["corelib/number"] = function(Opal) {/* Generated by Opal 1.8.2 */ "use strict"; var $klass = Opal.klass, $Opal = Opal.Opal, $Kernel = Opal.Kernel, $def = Opal.def, $eqeqeq = Opal.eqeqeq, $truthy = Opal.truthy, $rb_gt = Opal.rb_gt, $not = Opal.not, $rb_lt = Opal.rb_lt, $alias = Opal.alias, $send2 = Opal.send2, $find_super = Opal.find_super, $send = Opal.send, $rb_plus = Opal.rb_plus, $rb_minus = Opal.rb_minus, $eqeq = Opal.eqeq, $return_self = Opal.return_self, $rb_divide = Opal.rb_divide, $to_ary = Opal.to_ary, $rb_times = Opal.rb_times, $rb_le = Opal.rb_le, $rb_ge = Opal.rb_ge, $return_val = Opal.return_val, $const_set = Opal.const_set, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,bridge,raise,name,class,Float,respond_to?,coerce_to!,__id__,__coerced__,===,>,!,**,new,<,to_f,==,nan?,infinite?,enum_for,+,-,gcd,lcm,%,/,frexp,to_i,ldexp,rationalize,*,<<,to_r,truncate,-@,size,<=,>=,inspect,angle,to_s,is_a?,abs,next,coerce_to?'); self.$require("corelib/numeric"); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Number'); var $nesting = [self].concat($parent_nesting); $Opal.$bridge(Number, self); Opal.prop(self.$$prototype, '$$is_number', true); self.$$is_number_class = true; var number_id_map = new Map(); (function(self, $parent_nesting) { $def(self, '$allocate', function $$allocate() { var self = this; return $Kernel.$raise($$$('TypeError'), "allocator undefined for " + (self.$name())) }); Opal.udef(self, '$' + "new");; return nil;; })(Opal.get_singleton_class(self), $nesting); $def(self, '$coerce', function $$coerce(other) { var self = this; if (other === nil) { $Kernel.$raise($$$('TypeError'), "can't convert " + (other.$class()) + " into Float"); } else if (other.$$is_string) { return [$Kernel.$Float(other), self]; } else if (other['$respond_to?']("to_f")) { return [$Opal['$coerce_to!'](other, $$$('Float'), "to_f"), self]; } else if (other.$$is_number) { return [other, self]; } else { $Kernel.$raise($$$('TypeError'), "can't convert " + (other.$class()) + " into Float"); } }); $def(self, '$__id__', function $$__id__() { var self = this; // Binary-safe integers if (self|0 === self) { return (self * 2) + 1; } else { if (number_id_map.has(self)) { return number_id_map.get(self); } var id = Opal.uid(); number_id_map.set(self, id); return id; } }); $def(self, '$hash', function $$hash() { var self = this; // Binary-safe integers if (self|0 === self) { return self.$__id__() } else { return self.toString().$hash(); } }); $def(self, '$+', function $Number_$plus$1(other) { var self = this; if (other.$$is_number) { return self + other; } else { return self.$__coerced__("+", other); } }); $def(self, '$-', function $Number_$minus$2(other) { var self = this; if (other.$$is_number) { return self - other; } else { return self.$__coerced__("-", other); } }); $def(self, '$*', function $Number_$$3(other) { var self = this; if (other.$$is_number) { return self * other; } else { return self.$__coerced__("*", other); } }); $def(self, '$/', function $Number_$slash$4(other) { var self = this; if (other.$$is_number) { return self / other; } else { return self.$__coerced__("/", other); } }); $def(self, '$%', function $Number_$percent$5(other) { var self = this; if (other.$$is_number) { if (other == -Infinity) { return other; } else if (other == 0) { $Kernel.$raise($$$('ZeroDivisionError'), "divided by 0"); } else if (other < 0 || self < 0) { return (self % other + other) % other; } else { return self % other; } } else { return self.$__coerced__("%", other); } }); $def(self, '$&', function $Number_$$6(other) { var self = this; if (other.$$is_number) { return self & other; } else { return self.$__coerced__("&", other); } }); $def(self, '$|', function $Number_$$7(other) { var self = this; if (other.$$is_number) { return self | other; } else { return self.$__coerced__("|", other); } }); $def(self, '$^', function $Number_$$8(other) { var self = this; if (other.$$is_number) { return self ^ other; } else { return self.$__coerced__("^", other); } }); $def(self, '$<', function $Number_$lt$9(other) { var self = this; if (other.$$is_number) { return self < other; } else { return self.$__coerced__("<", other); } }); $def(self, '$<=', function $Number_$lt_eq$10(other) { var self = this; if (other.$$is_number) { return self <= other; } else { return self.$__coerced__("<=", other); } }); $def(self, '$>', function $Number_$gt$11(other) { var self = this; if (other.$$is_number) { return self > other; } else { return self.$__coerced__(">", other); } }); $def(self, '$>=', function $Number_$gt_eq$12(other) { var self = this; if (other.$$is_number) { return self >= other; } else { return self.$__coerced__(">=", other); } }); var spaceship_operator = function(self, other) { if (other.$$is_number) { if (isNaN(self) || isNaN(other)) { return nil; } if (self > other) { return 1; } else if (self < other) { return -1; } else { return 0; } } else { return self.$__coerced__("<=>", other); } } ; $def(self, '$<=>', function $Number_$lt_eq_gt$13(other) { var self = this; try { return spaceship_operator(self, other); } catch ($err) { if (Opal.rescue($err, [$$$('ArgumentError')])) { try { return nil } finally { Opal.pop_exception($err); } } else { throw $err; } } }); $def(self, '$<<', function $Number_$lt$lt$14(count) { var self = this; count = $Opal['$coerce_to!'](count, $$$('Integer'), "to_int"); return count > 0 ? self << count : self >> -count; }); $def(self, '$>>', function $Number_$gt$gt$15(count) { var self = this; count = $Opal['$coerce_to!'](count, $$$('Integer'), "to_int"); return count > 0 ? self >> count : self << -count; }); $def(self, '$[]', function $Number_$$$16(bit) { var self = this; bit = $Opal['$coerce_to!'](bit, $$$('Integer'), "to_int"); if (bit < 0) { return 0; } if (bit >= 32) { return self < 0 ? 1 : 0; } return (self >> bit) & 1; ; }); $def(self, '$+@', function $Number_$plus$$17() { var self = this; return +self; }); $def(self, '$-@', function $Number_$minus$$18() { var self = this; return -self; }); $def(self, '$~', function $Number_$$19() { var self = this; return ~self; }); $def(self, '$**', function $Number_$$$20(other) { var self = this; if ($eqeqeq($$$('Integer'), other)) { if (($not($$$('Integer')['$==='](self)) || ($truthy($rb_gt(other, 0))))) { return Math.pow(self, other); } else { return $$$('Rational').$new(self, 1)['$**'](other) } } else if (($truthy($rb_lt(self, 0)) && (($eqeqeq($$$('Float'), other) || ($eqeqeq($$$('Rational'), other)))))) { return $$$('Complex').$new(self, 0)['$**'](other.$to_f()) } else if ($truthy(other.$$is_number != null)) { return Math.pow(self, other); } else { return self.$__coerced__("**", other) } }); $def(self, '$==', function $Number_$eq_eq$21(other) { var self = this; if (other.$$is_number) { return self.valueOf() === other.valueOf(); } else if (other['$respond_to?']("==")) { return other['$=='](self); } else { return false; } }); $alias(self, "===", "=="); $def(self, '$abs', function $$abs() { var self = this; return Math.abs(self); }); $def(self, '$abs2', function $$abs2() { var self = this; return Math.abs(self * self); }); $def(self, '$allbits?', function $Number_allbits$ques$22(mask) { var self = this; mask = $Opal['$coerce_to!'](mask, $$$('Integer'), "to_int"); return (self & mask) == mask;; }); $def(self, '$anybits?', function $Number_anybits$ques$23(mask) { var self = this; mask = $Opal['$coerce_to!'](mask, $$$('Integer'), "to_int"); return (self & mask) !== 0;; }); $def(self, '$angle', function $$angle() { var self = this; if ($truthy(self['$nan?']())) { return self }; if (self == 0) { if (1 / self > 0) { return 0; } else { return Math.PI; } } else if (self < 0) { return Math.PI; } else { return 0; } ; }); $def(self, '$bit_length', function $$bit_length() { var self = this; if (!$eqeqeq($$$('Integer'), self)) { $Kernel.$raise($$$('NoMethodError').$new("undefined method `bit_length` for " + (self) + ":Float", "bit_length")) }; if (self === 0 || self === -1) { return 0; } var result = 0, value = self < 0 ? ~self : self; while (value != 0) { result += 1; value >>>= 1; } return result; ; }); $def(self, '$ceil', function $$ceil(ndigits) { var self = this; if (ndigits == null) ndigits = 0; var f = self.$to_f(); if (f % 1 === 0 && ndigits >= 0) { return f; } var factor = Math.pow(10, ndigits), result = Math.ceil(f * factor) / factor; if (f % 1 === 0) { result = Math.round(result); } return result; ; }, -1); $def(self, '$chr', function $$chr(encoding) { var self = this; ; return Opal.enc(String.fromCharCode(self), encoding || "BINARY");; }, -1); $def(self, '$denominator', function $$denominator() { var $yield = $$denominator.$$p || nil, self = this; $$denominator.$$p = null; if (($truthy(self['$nan?']()) || ($truthy(self['$infinite?']())))) { return 1 } else { return $send2(self, $find_super(self, 'denominator', $$denominator, false, true), 'denominator', [], $yield) } }); $def(self, '$downto', function $$downto(stop) { var block = $$downto.$$p || nil, self = this; $$downto.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["downto", stop], function $$24(){var self = $$24.$$s == null ? this : $$24.$$s; if (!$eqeqeq($$$('Numeric'), stop)) { $Kernel.$raise($$$('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed") }; if ($truthy($rb_gt(stop, self))) { return 0 } else { return $rb_plus($rb_minus(self, stop), 1) };}, {$$s: self}) }; if (!stop.$$is_number) { $Kernel.$raise($$$('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed") } for (var i = self; i >= stop; i--) { block(i); } ; return self; }); $def(self, '$equal?', function $Number_equal$ques$25(other) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$=='](other)))) { return $ret_or_1 } else { return isNaN(self) && isNaN(other); } }); $def(self, '$even?', function $Number_even$ques$26() { var self = this; return self % 2 === 0; }); $def(self, '$floor', function $$floor(ndigits) { var self = this; if (ndigits == null) ndigits = 0; var f = self.$to_f(); if (f % 1 === 0 && ndigits >= 0) { return f; } var factor = Math.pow(10, ndigits), result = Math.floor(f * factor) / factor; if (f % 1 === 0) { result = Math.round(result); } return result; ; }, -1); $def(self, '$gcd', function $$gcd(other) { var self = this; if (!$eqeqeq($$$('Integer'), other)) { $Kernel.$raise($$$('TypeError'), "not an integer") }; var min = Math.abs(self), max = Math.abs(other); while (min > 0) { var tmp = min; min = max % min; max = tmp; } return max; ; }); $def(self, '$gcdlcm', function $$gcdlcm(other) { var self = this; return [self.$gcd(other), self.$lcm(other)] }); $def(self, '$integer?', function $Number_integer$ques$27() { var self = this; return self % 1 === 0; }); $def(self, '$is_a?', function $Number_is_a$ques$28(klass) { var $yield = $Number_is_a$ques$28.$$p || nil, self = this; $Number_is_a$ques$28.$$p = null; if (($eqeq(klass, $$$('Integer')) && ($eqeqeq($$$('Integer'), self)))) { return true }; if (($eqeq(klass, $$$('Integer')) && ($eqeqeq($$$('Integer'), self)))) { return true }; if (($eqeq(klass, $$$('Float')) && ($eqeqeq($$$('Float'), self)))) { return true }; return $send2(self, $find_super(self, 'is_a?', $Number_is_a$ques$28, false, true), 'is_a?', [klass], $yield); }); $def(self, '$instance_of?', function $Number_instance_of$ques$29(klass) { var $yield = $Number_instance_of$ques$29.$$p || nil, self = this; $Number_instance_of$ques$29.$$p = null; if (($eqeq(klass, $$$('Integer')) && ($eqeqeq($$$('Integer'), self)))) { return true }; if (($eqeq(klass, $$$('Integer')) && ($eqeqeq($$$('Integer'), self)))) { return true }; if (($eqeq(klass, $$$('Float')) && ($eqeqeq($$$('Float'), self)))) { return true }; return $send2(self, $find_super(self, 'instance_of?', $Number_instance_of$ques$29, false, true), 'instance_of?', [klass], $yield); }); $def(self, '$lcm', function $$lcm(other) { var self = this; if (!$eqeqeq($$$('Integer'), other)) { $Kernel.$raise($$$('TypeError'), "not an integer") }; if (self == 0 || other == 0) { return 0; } else { return Math.abs(self * other / self.$gcd(other)); } ; }); $def(self, '$next', function $$next() { var self = this; return self + 1; }); $def(self, '$nobits?', function $Number_nobits$ques$30(mask) { var self = this; mask = $Opal['$coerce_to!'](mask, $$$('Integer'), "to_int"); return (self & mask) == 0;; }); $def(self, '$nonzero?', function $Number_nonzero$ques$31() { var self = this; return self == 0 ? nil : self; }); $def(self, '$numerator', function $$numerator() { var $yield = $$numerator.$$p || nil, self = this; $$numerator.$$p = null; if (($truthy(self['$nan?']()) || ($truthy(self['$infinite?']())))) { return self } else { return $send2(self, $find_super(self, 'numerator', $$numerator, false, true), 'numerator', [], $yield) } }); $def(self, '$odd?', function $Number_odd$ques$32() { var self = this; return self % 2 !== 0; }); $def(self, '$ord', $return_self); $def(self, '$pow', function $$pow(b, m) { var self = this; ; if (self == 0) { $Kernel.$raise($$$('ZeroDivisionError'), "divided by 0") } if (m === undefined) { return self['$**'](b); } else { if (!($$$('Integer')['$==='](b))) { $Kernel.$raise($$$('TypeError'), "Integer#pow() 2nd argument not allowed unless a 1st argument is integer") } if (b < 0) { $Kernel.$raise($$$('TypeError'), "Integer#pow() 1st argument cannot be negative when 2nd argument specified") } if (!($$$('Integer')['$==='](m))) { $Kernel.$raise($$$('TypeError'), "Integer#pow() 2nd argument not allowed unless all arguments are integers") } if (m === 0) { $Kernel.$raise($$$('ZeroDivisionError'), "divided by 0") } return self['$**'](b)['$%'](m) } ; }, -2); $def(self, '$pred', function $$pred() { var self = this; return self - 1; }); $def(self, '$quo', function $$quo(other) { var $yield = $$quo.$$p || nil, self = this; $$quo.$$p = null; if ($eqeqeq($$$('Integer'), self)) { return $send2(self, $find_super(self, 'quo', $$quo, false, true), 'quo', [other], $yield) } else { return $rb_divide(self, other) } }); $def(self, '$rationalize', function $$rationalize(eps) { var $a, $b, self = this, f = nil, n = nil; ; if (arguments.length > 1) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 0..1)"); } ; if ($eqeqeq($$$('Integer'), self)) { return $$$('Rational').$new(self, 1) } else if ($truthy(self['$infinite?']())) { return $Kernel.$raise($$$('FloatDomainError'), "Infinity") } else if ($truthy(self['$nan?']())) { return $Kernel.$raise($$$('FloatDomainError'), "NaN") } else if ($truthy(eps == null)) { $b = $$$('Math').$frexp(self), $a = $to_ary($b), (f = ($a[0] == null ? nil : $a[0])), (n = ($a[1] == null ? nil : $a[1])), $b; f = $$$('Math').$ldexp(f, $$$($$$('Float'), 'MANT_DIG')).$to_i(); n = $rb_minus(n, $$$($$$('Float'), 'MANT_DIG')); return $$$('Rational').$new($rb_times(2, f), (1)['$<<']($rb_minus(1, n))).$rationalize($$$('Rational').$new(1, (1)['$<<']($rb_minus(1, n)))); } else { return self.$to_r().$rationalize(eps) }; }, -1); $def(self, '$remainder', function $$remainder(y) { var self = this; return $rb_minus(self, $rb_times(y, $rb_divide(self, y).$truncate())) }); $def(self, '$round', function $$round(ndigits) { var $a, $b, self = this, _ = nil, exp = nil; ; if ($eqeqeq($$$('Integer'), self)) { if ($truthy(ndigits == null)) { return self }; if (($eqeqeq($$$('Float'), ndigits) && ($truthy(ndigits['$infinite?']())))) { $Kernel.$raise($$$('RangeError'), "Infinity") }; ndigits = $Opal['$coerce_to!'](ndigits, $$$('Integer'), "to_int"); if ($truthy($rb_lt(ndigits, $$$($$$('Integer'), 'MIN')))) { $Kernel.$raise($$$('RangeError'), "out of bounds") }; if ($truthy(ndigits >= 0)) { return self }; ndigits = ndigits['$-@'](); if (0.415241 * ndigits - 0.125 > self.$size()) { return 0; } var f = Math.pow(10, ndigits), x = Math.floor((Math.abs(self) + f / 2) / f) * f; return self < 0 ? -x : x; ; } else { if (($truthy(self['$nan?']()) && ($truthy(ndigits == null)))) { $Kernel.$raise($$$('FloatDomainError'), "NaN") }; ndigits = $Opal['$coerce_to!'](ndigits || 0, $$$('Integer'), "to_int"); if ($truthy($rb_le(ndigits, 0))) { if ($truthy(self['$nan?']())) { $Kernel.$raise($$$('RangeError'), "NaN") } else if ($truthy(self['$infinite?']())) { $Kernel.$raise($$$('FloatDomainError'), "Infinity") } } else if ($eqeq(ndigits, 0)) { return Math.round(self) } else if (($truthy(self['$nan?']()) || ($truthy(self['$infinite?']())))) { return self }; $b = $$$('Math').$frexp(self), $a = $to_ary($b), (_ = ($a[0] == null ? nil : $a[0])), (exp = ($a[1] == null ? nil : $a[1])), $b; if ($truthy($rb_ge(ndigits, $rb_minus($rb_plus($$$($$$('Float'), 'DIG'), 2), ($truthy($rb_gt(exp, 0)) ? ($rb_divide(exp, 4)) : ($rb_minus($rb_divide(exp, 3), 1))))))) { return self }; if ($truthy($rb_lt(ndigits, ($truthy($rb_gt(exp, 0)) ? ($rb_plus($rb_divide(exp, 3), 1)) : ($rb_divide(exp, 4)))['$-@']()))) { return 0 }; return Math.round(self * Math.pow(10, ndigits)) / Math.pow(10, ndigits);; }; }, -1); $def(self, '$times', function $$times() { var block = $$times.$$p || nil, self = this; $$times.$$p = null; ; if (!$truthy(block)) { return $send(self, 'enum_for', ["times"], function $$33(){var self = $$33.$$s == null ? this : $$33.$$s; return self}, {$$s: self}) }; for (var i = 0; i < self; i++) { block(i); } ; return self; }); $def(self, '$to_f', $return_self); $def(self, '$to_i', function $$to_i() { var self = this; return self < 0 ? Math.ceil(self) : Math.floor(self); }); $def(self, '$to_r', function $$to_r() { var $a, $b, self = this, f = nil, e = nil; if ($eqeqeq($$$('Integer'), self)) { return $$$('Rational').$new(self, 1) } else { $b = $$$('Math').$frexp(self), $a = $to_ary($b), (f = ($a[0] == null ? nil : $a[0])), (e = ($a[1] == null ? nil : $a[1])), $b; f = $$$('Math').$ldexp(f, $$$($$$('Float'), 'MANT_DIG')).$to_i(); e = $rb_minus(e, $$$($$$('Float'), 'MANT_DIG')); return $rb_times(f, $$$($$$('Float'), 'RADIX')['$**'](e)).$to_r(); } }); $def(self, '$to_s', function $$to_s(base) { var self = this; if (base == null) base = 10; base = $Opal['$coerce_to!'](base, $$$('Integer'), "to_int"); if (($truthy($rb_lt(base, 2)) || ($truthy($rb_gt(base, 36))))) { $Kernel.$raise($$$('ArgumentError'), "invalid radix " + (base)) }; if (($eqeq(self, 0) && ($truthy(1/self === -Infinity)))) { return "-0.0" }; return self.toString(base);; }, -1); $def(self, '$truncate', function $$truncate(ndigits) { var self = this; if (ndigits == null) ndigits = 0; var f = self.$to_f(); if (f % 1 === 0 && ndigits >= 0) { return f; } var factor = Math.pow(10, ndigits), result = parseInt(f * factor, 10) / factor; if (f % 1 === 0) { result = Math.round(result); } return result; ; }, -1); $def(self, '$digits', function $$digits(base) { var self = this; if (base == null) base = 10; if ($truthy($rb_lt(self, 0))) { $Kernel.$raise($$$($$$('Math'), 'DomainError'), "out of domain") }; base = $Opal['$coerce_to!'](base, $$$('Integer'), "to_int"); if ($truthy($rb_lt(base, 2))) { $Kernel.$raise($$$('ArgumentError'), "invalid radix " + (base)) }; if (self != parseInt(self)) $Kernel.$raise($$$('NoMethodError'), "undefined method `digits' for " + (self.$inspect())) var value = self, result = []; if (self == 0) { return [0]; } while (value != 0) { result.push(value % base); value = parseInt(value / base, 10); } return result; ; }, -1); $def(self, '$divmod', function $$divmod(other) { var $yield = $$divmod.$$p || nil, self = this; $$divmod.$$p = null; if (($truthy(self['$nan?']()) || ($truthy(other['$nan?']())))) { return $Kernel.$raise($$$('FloatDomainError'), "NaN") } else if ($truthy(self['$infinite?']())) { return $Kernel.$raise($$$('FloatDomainError'), "Infinity") } else { return $send2(self, $find_super(self, 'divmod', $$divmod, false, true), 'divmod', [other], $yield) } }); $def(self, '$upto', function $$upto(stop) { var block = $$upto.$$p || nil, self = this; $$upto.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["upto", stop], function $$34(){var self = $$34.$$s == null ? this : $$34.$$s; if (!$eqeqeq($$$('Numeric'), stop)) { $Kernel.$raise($$$('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed") }; if ($truthy($rb_lt(stop, self))) { return 0 } else { return $rb_plus($rb_minus(stop, self), 1) };}, {$$s: self}) }; if (!stop.$$is_number) { $Kernel.$raise($$$('ArgumentError'), "comparison of " + (self.$class()) + " with " + (stop.$class()) + " failed") } for (var i = self; i <= stop; i++) { block(i); } ; return self; }); $def(self, '$zero?', function $Number_zero$ques$35() { var self = this; return self == 0; }); $def(self, '$size', $return_val(4)); $def(self, '$nan?', function $Number_nan$ques$36() { var self = this; return isNaN(self); }); $def(self, '$finite?', function $Number_finite$ques$37() { var self = this; return self != Infinity && self != -Infinity && !isNaN(self); }); $def(self, '$infinite?', function $Number_infinite$ques$38() { var self = this; if (self == Infinity) { return +1; } else if (self == -Infinity) { return -1; } else { return nil; } }); $def(self, '$positive?', function $Number_positive$ques$39() { var self = this; return self != 0 && (self == Infinity || 1 / self > 0); }); $def(self, '$negative?', function $Number_negative$ques$40() { var self = this; return self == -Infinity || 1 / self < 0; }); function numberToUint8Array(num) { var uint8array = new Uint8Array(8); new DataView(uint8array.buffer).setFloat64(0, num, true); return uint8array; } function uint8ArrayToNumber(arr) { return new DataView(arr.buffer).getFloat64(0, true); } function incrementNumberBit(num) { var arr = numberToUint8Array(num); for (var i = 0; i < arr.length; i++) { if (arr[i] === 0xff) { arr[i] = 0; } else { arr[i]++; break; } } return uint8ArrayToNumber(arr); } function decrementNumberBit(num) { var arr = numberToUint8Array(num); for (var i = 0; i < arr.length; i++) { if (arr[i] === 0) { arr[i] = 0xff; } else { arr[i]--; break; } } return uint8ArrayToNumber(arr); } ; $def(self, '$next_float', function $$next_float() { var self = this; if ($eqeq(self, $$$($$$('Float'), 'INFINITY'))) { return $$$($$$('Float'), 'INFINITY') }; if ($truthy(self['$nan?']())) { return $$$($$$('Float'), 'NAN') }; if ($truthy($rb_ge(self, 0))) { return incrementNumberBit(Math.abs(self)); } else { return decrementNumberBit(self); }; }); $def(self, '$prev_float', function $$prev_float() { var self = this; if ($eqeq(self, $$$($$$('Float'), 'INFINITY')['$-@']())) { return $$$($$$('Float'), 'INFINITY')['$-@']() }; if ($truthy(self['$nan?']())) { return $$$($$$('Float'), 'NAN') }; if ($truthy($rb_gt(self, 0))) { return decrementNumberBit(self); } else { return -incrementNumberBit(Math.abs(self)); }; }); $alias(self, "arg", "angle"); $alias(self, "eql?", "=="); $alias(self, "fdiv", "/"); $alias(self, "inspect", "to_s"); $alias(self, "kind_of?", "is_a?"); $alias(self, "magnitude", "abs"); $alias(self, "modulo", "%"); $alias(self, "object_id", "__id__"); $alias(self, "phase", "angle"); $alias(self, "succ", "next"); return $alias(self, "to_int", "to_i"); })('::', $$$('Numeric'), $nesting); $const_set('::', 'Fixnum', $$$('Number')); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Integer'); var $nesting = [self].concat($parent_nesting); self.$$is_number_class = true; self.$$is_integer_class = true; (function(self, $parent_nesting) { var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$allocate', function $$allocate() { var self = this; return $Kernel.$raise($$$('TypeError'), "allocator undefined for " + (self.$name())) }); Opal.udef(self, '$' + "new");; $def(self, '$sqrt', function $$sqrt(n) { n = $Opal['$coerce_to!'](n, $$$('Integer'), "to_int"); if (n < 0) { $Kernel.$raise($$$($$$('Math'), 'DomainError'), "Numerical argument is out of domain - \"isqrt\"") } return parseInt(Math.sqrt(n), 10); ; }); return $def(self, '$try_convert', function $$try_convert(object) { var self = this; return $$('Opal')['$coerce_to?'](object, self, "to_int") }); })(Opal.get_singleton_class(self), $nesting); $const_set(self, 'MAX', Math.pow(2, 30) - 1); return $const_set(self, 'MIN', -Math.pow(2, 30)); })('::', $$$('Numeric'), $nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Float'); var $nesting = [self].concat($parent_nesting); self.$$is_number_class = true; (function(self, $parent_nesting) { $def(self, '$allocate', function $$allocate() { var self = this; return $Kernel.$raise($$$('TypeError'), "allocator undefined for " + (self.$name())) }); Opal.udef(self, '$' + "new");; return $def(self, '$===', function $eq_eq_eq$41(other) { return !!other.$$is_number; }); })(Opal.get_singleton_class(self), $nesting); $const_set(self, 'INFINITY', Infinity); $const_set(self, 'MAX', Number.MAX_VALUE); $const_set(self, 'MIN', Number.MIN_VALUE); $const_set(self, 'NAN', NaN); $const_set(self, 'DIG', 15); $const_set(self, 'MANT_DIG', 53); $const_set(self, 'RADIX', 2); return $const_set(self, 'EPSILON', Number.EPSILON || 2.2204460492503130808472633361816E-16); })('::', $$$('Numeric'), $nesting); }; Opal.modules["corelib/range"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $truthy = Opal.truthy, $Kernel = Opal.Kernel, $def = Opal.def, $not = Opal.not, $send2 = Opal.send2, $find_super = Opal.find_super, $lambda = Opal.lambda, $send = Opal.send, $rb_ge = Opal.rb_ge, $rb_gt = Opal.rb_gt, $eqeq = Opal.eqeq, $rb_le = Opal.rb_le, $rb_lt = Opal.rb_lt, $eqeqeq = Opal.eqeqeq, $return_ivar = Opal.return_ivar, $rb_minus = Opal.rb_minus, $Opal = Opal.Opal, $rb_divide = Opal.rb_divide, $rb_plus = Opal.rb_plus, $rb_times = Opal.rb_times, $thrower = Opal.thrower, $alias = Opal.alias, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,attr_reader,raise,nil?,<=>,cover?,!,begin,end,exclude_end?,then,call,>=,>,==,max,<=,<,enum_for,size,upto,to_proc,respond_to?,class,succ,===,eql?,try_convert,is_a?,any?,last,to_a,-,coerce_to!,ceil,/,new,loop,+,*,each_with_index,%,step,bsearch,inspect,[],hash,include?'); self.$require("corelib/enumerable"); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Range'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.begin = $proto.end = $proto.excl = nil; self.$include($$$('Enumerable')); self.$$prototype.$$is_range = true; self.$attr_reader("begin", "end"); $def(self, '$initialize', function $$initialize(first, last, exclude) { var self = this; if (exclude == null) exclude = false; if ($truthy(self.begin)) { $Kernel.$raise($$$('NameError'), "'initialize' called twice") }; if (!(($truthy(first['$<=>'](last)) || ($truthy(first['$nil?']()))) || ($truthy(last['$nil?']())))) { $Kernel.$raise($$$('ArgumentError'), "bad value for range") }; self.begin = first; self.end = last; return (self.excl = exclude); }, -3); $def(self, '$===', function $Range_$eq_eq_eq$1(value) { var self = this; if ($truthy(value.$$is_range)) { return false }; return self['$cover?'](value); }); function is_infinite(self) { if (self.begin === nil || self.end === nil || self.begin === -Infinity || self.end === Infinity || self.begin === Infinity || self.end === -Infinity) return true; return false; } ; $def(self, '$count', function $$count() { var block = $$count.$$p || nil, self = this; $$count.$$p = null; ; if (($not((block !== nil)) && ($truthy(is_infinite(self))))) { return $$$($$$('Float'), 'INFINITY') }; return $send2(self, $find_super(self, 'count', $$count, false, true), 'count', [], block); }); $def(self, '$to_a', function $$to_a() { var $yield = $$to_a.$$p || nil, self = this; $$to_a.$$p = null; if ($truthy(is_infinite(self))) { $Kernel.$raise($$$('TypeError'), "cannot convert endless range to an array") }; return $send2(self, $find_super(self, 'to_a', $$to_a, false, true), 'to_a', [], $yield); }); $def(self, '$cover?', function $Range_cover$ques$2(value) { var self = this, compare = nil, val_begin = nil, val_end = nil, val_excl = nil, cmp = nil, val_max = nil, $ret_or_1 = nil, end_cmp = nil; compare = $lambda(function $$3(a, b){var $ret_or_1 = nil; if (a == null) a = nil; if (b == null) b = nil; if ($truthy(($ret_or_1 = a['$<=>'](b)))) { return $ret_or_1 } else { return 1 };}); if ($truthy(value.$$is_range)) { val_begin = value.$begin(); val_end = value.$end(); val_excl = value['$exclude_end?'](); if ((((($truthy(self.begin) && ($truthy(val_begin['$nil?']()))) || (($truthy(self.end) && ($truthy(val_end['$nil?']()))))) || ((($truthy(val_begin) && ($truthy(val_end))) && ($truthy($send(compare.$call(val_begin, val_end), 'then', [], function $$4(c){ if (c == null) c = nil; if ($truthy(val_excl)) { return $rb_ge(c, 0) } else { return $rb_gt(c, 0) };})))))) || (($truthy(val_begin) && ($not(self['$cover?'](val_begin))))))) { return false }; cmp = compare.$call(self.end, val_end); if ($eqeq(self.excl, val_excl)) { return $rb_ge(cmp, 0) }; if ($truthy(self.excl)) { return $rb_gt(cmp, 0) }; if ($truthy($rb_ge(cmp, 0))) { return true }; val_max = value.$max(); return ($truthy(($ret_or_1 = val_max['$nil?']()['$!']())) ? ($rb_le(compare.$call(val_max, self.end), 0)) : ($ret_or_1)); }; if (($truthy(self.begin) && ($truthy($rb_gt(compare.$call(self.begin, value), 0))))) { return false }; if ($truthy(self.end['$nil?']())) { return true }; end_cmp = compare.$call(value, self.end); if ($truthy(self.excl)) { return $rb_lt(end_cmp, 0) } else { return $rb_le(end_cmp, 0) }; }); $def(self, '$each', function $$each() { var block = $$each.$$p || nil, self = this, current = nil, last = nil, $ret_or_1 = nil; $$each.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["each"], function $$5(){var self = $$5.$$s == null ? this : $$5.$$s; return self.$size()}, {$$s: self}) }; var i, limit; if (self.begin.$$is_number && self.end.$$is_number) { if (self.begin % 1 !== 0 || self.end % 1 !== 0) { $Kernel.$raise($$$('TypeError'), "can't iterate from Float") } for (i = self.begin, limit = self.end + ($truthy(self.excl) ? (0) : (1)); i < limit; i++) { block(i); } return self; } if (self.begin.$$is_string && self.end.$$is_string) { $send(self.begin, 'upto', [self.end, self.excl], block.$to_proc()) return self; } ; current = self.begin; last = self.end; if (!$truthy(current['$respond_to?']("succ"))) { $Kernel.$raise($$$('TypeError'), "can't iterate from " + (current.$class())) }; while ($truthy(($truthy(($ret_or_1 = self.end['$nil?']())) ? ($ret_or_1) : ($rb_lt(current['$<=>'](last), 0))))) { Opal.yield1(block, current); current = current.$succ(); }; if (($not(self.excl) && ($eqeq(current, last)))) { Opal.yield1(block, current) }; return self; }); $def(self, '$eql?', function $Range_eql$ques$6(other) { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if (!$eqeqeq($$$('Range'), other)) { return false }; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.excl['$==='](other['$exclude_end?']()))) ? (self.begin['$eql?'](other.$begin())) : ($ret_or_2))))) { return self.end['$eql?'](other.$end()) } else { return $ret_or_1 }; }); $def(self, '$exclude_end?', $return_ivar("excl")); $def(self, '$first', function $$first(n) { var $yield = $$first.$$p || nil, self = this; $$first.$$p = null; ; if ($truthy(self.begin['$nil?']())) { $Kernel.$raise($$$('RangeError'), "cannot get the minimum of beginless range") }; if ($truthy(n == null)) { return self.begin }; return $send2(self, $find_super(self, 'first', $$first, false, true), 'first', [n], $yield); }, -1); $def(self, '$include?', function $Range_include$ques$7(val) { var $yield = $Range_include$ques$7.$$p || nil, self = this, cmp = nil, $ret_or_1 = nil; $Range_include$ques$7.$$p = null; if ((((($truthy(self.begin.$$is_number || self.end.$$is_number) || ($truthy(self.begin['$is_a?']($$$('Time'))))) || ($truthy(self.end['$is_a?']($$$('Time'))))) || ($truthy($$$('Integer').$try_convert(self.begin)))) || ($truthy($$$('Integer').$try_convert(self.end))))) { return self['$cover?'](val) }; if ($truthy(self.begin.$$is_string || self.end.$$is_string)) { if ($truthy(self.begin.$$is_string && self.end.$$is_string)) { return $send(self.begin.$upto(self.end, self.excl), 'any?', [], function $$8(s){ if (s == null) s = nil; return s['$=='](val);}) } else if ($truthy(self.begin['$nil?']())) { cmp = val['$<=>'](self.end); return ($truthy(($ret_or_1 = cmp['$nil?']()['$!']())) ? (($truthy(self.excl) ? ($rb_lt(cmp, 0)) : ($rb_le(cmp, 0)))) : ($ret_or_1)); } else if ($truthy(self.end['$nil?']())) { cmp = self.begin['$<=>'](val); return ($truthy(($ret_or_1 = cmp['$nil?']()['$!']())) ? ($rb_le(cmp, 0)) : ($ret_or_1)); } }; return $send2(self, $find_super(self, 'include?', $Range_include$ques$7, false, true), 'include?', [val], $yield); }); $def(self, '$last', function $$last(n) { var self = this; ; if ($truthy(self.end['$nil?']())) { $Kernel.$raise($$$('RangeError'), "cannot get the maximum of endless range") }; if ($truthy(n == null)) { return self.end }; return self.$to_a().$last(n); }, -1); $def(self, '$max', function $$max() { var $yield = $$max.$$p || nil, self = this; $$max.$$p = null; if ($truthy(self.end['$nil?']())) { return $Kernel.$raise($$$('RangeError'), "cannot get the maximum of endless range") } else if (($yield !== nil)) { return $send2(self, $find_super(self, 'max', $$max, false, true), 'max', [], $yield) } else if (($not(self.begin['$nil?']()) && (($truthy($rb_gt(self.begin, self.end)) || (($truthy(self.excl) && ($eqeq(self.begin, self.end)))))))) { return nil } else { return self.excl ? self.end - 1 : self.end } }); $def(self, '$min', function $$min() { var $yield = $$min.$$p || nil, self = this; $$min.$$p = null; if ($truthy(self.begin['$nil?']())) { return $Kernel.$raise($$$('RangeError'), "cannot get the minimum of beginless range") } else if (($yield !== nil)) { return $send2(self, $find_super(self, 'min', $$min, false, true), 'min', [], $yield) } else if (($not(self.end['$nil?']()) && (($truthy($rb_gt(self.begin, self.end)) || (($truthy(self.excl) && ($eqeq(self.begin, self.end)))))))) { return nil } else { return self.begin } }); $def(self, '$size', function $$size() { var b = this.begin, e = this.end; // If begin is Numeric if ($$$('Numeric')['$==='](b)) { // If end is Numeric if ($$$('Numeric')['$==='](e)) { // Calculating size based on whether range is exclusive or inclusive var size = $rb_minus(e, b); if (size < 0) { return 0; } if (!this.excl) { size += 1; } return ($$$('Float')['$==='](b) || $$$('Float')['$==='](e)) ? Math.floor(size) : size; } // If end is nil else if (e === nil) { return Infinity; } } // If begin is nil else if (b === nil) { // If end is Numeric if ($$$('Numeric')['$==='](e)) { return Infinity; } } // If neither begin nor end is Numeric return nil; }); $def(self, '$step', function $$step(n) { var $yield = $$step.$$p || nil, self = this, $ret_or_1 = nil, i = nil; $$step.$$p = null; ; function coerceStepSize() { if (n == null) { n = 1; } else if (!n.$$is_number) { n = $Opal['$coerce_to!'](n, $$$('Integer'), "to_int") } if (n < 0) { $Kernel.$raise($$$('ArgumentError'), "step can't be negative") } else if (n === 0) { $Kernel.$raise($$$('ArgumentError'), "step can't be 0") } } function enumeratorSize() { if (!self.begin['$respond_to?']("succ")) { return nil; } if (self.begin.$$is_string && self.end.$$is_string) { return nil; } if (n % 1 === 0) { return $rb_divide(self.$size(), n).$ceil(); } else { // n is a float var begin = self.begin, end = self.end, abs = Math.abs, floor = Math.floor, err = (abs(begin) + abs(end) + abs(end - begin)) / abs(n) * $$$($$$('Float'), 'EPSILON'), size; if (err > 0.5) { err = 0.5; } if (self.excl) { size = floor((end - begin) / n - err); if (size * n + begin < end) { size++; } } else { size = floor((end - begin) / n + err) + 1 } return size; } } ; if (!($yield !== nil)) { if (((($truthy(self.begin['$is_a?']($$('Numeric'))) || ($truthy(self.begin['$nil?']()))) && (($truthy(self.end['$is_a?']($$('Numeric'))) || ($truthy(self.end['$nil?']()))))) && ($not(($truthy(($ret_or_1 = self.begin['$nil?']())) ? (self.end['$nil?']()) : ($ret_or_1)))))) { return $$$($$$('Enumerator'), 'ArithmeticSequence').$new(self, n, "step") } else { return $send(self, 'enum_for', ["step", n], function $$9(){ coerceStepSize(); return enumeratorSize(); }) } }; coerceStepSize(); if ($truthy(self.begin.$$is_number && self.end.$$is_number)) { i = 0; (function(){try { var $t_break = $thrower('break'); return $send(self, 'loop', [], function $$10(){var self = $$10.$$s == null ? this : $$10.$$s, current = nil; if (self.begin == null) self.begin = nil; if (self.excl == null) self.excl = nil; if (self.end == null) self.end = nil; current = $rb_plus(self.begin, $rb_times(i, n)); if ($truthy(self.excl)) { if ($truthy($rb_ge(current, self.end))) { $t_break.$throw(nil, $$10.$$is_lambda) } } else if ($truthy($rb_gt(current, self.end))) { $t_break.$throw(nil, $$10.$$is_lambda) }; Opal.yield1($yield, current); return (i = $rb_plus(i, 1));}, {$$s: self})} catch($e) { if ($e === $t_break) return $e.$v; throw $e; } finally {$t_break.is_orphan = true;}})(); } else { if (self.begin.$$is_string && self.end.$$is_string && n % 1 !== 0) { $Kernel.$raise($$$('TypeError'), "no implicit conversion to float from string") } ; $send(self, 'each_with_index', [], function $$11(value, idx){ if (value == null) value = nil; if (idx == null) idx = nil; if ($eqeq(idx['$%'](n), 0)) { return Opal.yield1($yield, value); } else { return nil };}); }; return self; }, -1); $def(self, '$%', function $Range_$percent$12(n) { var self = this; if (($truthy(self.begin['$is_a?']($$('Numeric'))) && ($truthy(self.end['$is_a?']($$('Numeric')))))) { return $$$($$$('Enumerator'), 'ArithmeticSequence').$new(self, n, "%") } else { return self.$step(n) } }); $def(self, '$bsearch', function $$bsearch() { var block = $$bsearch.$$p || nil, self = this; $$bsearch.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("bsearch") }; if ($truthy(is_infinite(self) && (self.begin.$$is_number || self.end.$$is_number))) { $Kernel.$raise($$$('NotImplementedError'), "Can't #bsearch an infinite range") }; if (!$truthy(self.begin.$$is_number && self.end.$$is_number)) { $Kernel.$raise($$$('TypeError'), "can't do binary search for " + (self.begin.$class())) }; return $send(self.$to_a(), 'bsearch', [], block.$to_proc()); }); $def(self, '$to_s', function $$to_s() { var self = this, $ret_or_1 = nil; return "" + (($truthy(($ret_or_1 = self.begin)) ? ($ret_or_1) : (""))) + (($truthy(self.excl) ? ("...") : (".."))) + (($truthy(($ret_or_1 = self.end)) ? ($ret_or_1) : (""))) }); $def(self, '$inspect', function $$inspect() { var self = this, $ret_or_1 = nil; return "" + (($truthy(($ret_or_1 = self.begin)) ? (self.begin.$inspect()) : ($ret_or_1))) + (($truthy(self.excl) ? ("...") : (".."))) + (($truthy(($ret_or_1 = self.end)) ? (self.end.$inspect()) : ($ret_or_1))) }); $def(self, '$marshal_load', function $$marshal_load(args) { var self = this; self.begin = args['$[]']("begin"); self.end = args['$[]']("end"); return (self.excl = args['$[]']("excl")); }); $def(self, '$hash', function $$hash() { var self = this; return [$$$('Range'), self.begin, self.end, self.excl].$hash() }); $alias(self, "==", "eql?"); return $alias(self, "member?", "include?"); })('::', null, $nesting); }; Opal.modules["corelib/proc"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $slice = Opal.slice, $each_ivar = Opal.each_ivar, $klass = Opal.klass, $truthy = Opal.truthy, $Kernel = Opal.Kernel, $defs = Opal.defs, $def = Opal.def, $send = Opal.send, $to_a = Opal.to_a, $return_self = Opal.return_self, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $Opal = Opal.Opal, $alias = Opal.alias, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('raise,proc,call,to_proc,new,source_location,coerce_to!,dup'); return (function($base, $super) { var self = $klass($base, $super, 'Proc'); Opal.prop(self.$$prototype, '$$is_proc', true); Opal.prop(self.$$prototype, '$$is_lambda', false); $defs(self, '$new', function $Proc_new$1() { var block = $Proc_new$1.$$p || nil; $Proc_new$1.$$p = null; ; if (!$truthy(block)) { $Kernel.$raise($$$('ArgumentError'), "tried to create a Proc object without a block") }; return block; }); function $call_lambda(self, args) { if (self.$$ret) { try { return self.apply(null, args); } catch (err) { if (err === self.$$ret) { return err.$v; } else { throw err; } } } else { return self.apply(null, args); } } function $call_proc(self, args) { if (self.$$brk) { try { return Opal.yieldX(self, args); } catch (err) { if (err === self.$$brk) { return err.$v; } else { throw err; } } } else { return Opal.yieldX(self, args); } } ; $def(self, '$call', function $$call($a) { var block = $$call.$$p || nil, $post_args, args, self = this; $$call.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if (block !== nil) self.$$p = block; if (self.$$is_lambda) return $call_lambda(self, args); return $call_proc(self, args); ; }, -1); $def(self, '$>>', function $Proc_$gt$gt$2(other) { var $yield = $Proc_$gt$gt$2.$$p || nil, self = this; $Proc_$gt$gt$2.$$p = null; return $send($Kernel, 'proc', [], function $$3($a){var block = $$3.$$p || nil, $post_args, args, self = $$3.$$s == null ? this : $$3.$$s, out = nil; $$3.$$p = null; ; $post_args = $slice(arguments); args = $post_args; out = $send(self, 'call', $to_a(args), block.$to_proc()); return other.$call(out);}, {$$arity: -1, $$s: self}) }); $def(self, '$<<', function $Proc_$lt$lt$4(other) { var $yield = $Proc_$lt$lt$4.$$p || nil, self = this; $Proc_$lt$lt$4.$$p = null; return $send($Kernel, 'proc', [], function $$5($a){var block = $$5.$$p || nil, $post_args, args, self = $$5.$$s == null ? this : $$5.$$s, out = nil; $$5.$$p = null; ; $post_args = $slice(arguments); args = $post_args; out = $send(other, 'call', $to_a(args), block.$to_proc()); return self.$call(out);}, {$$arity: -1, $$s: self}) }); $def(self, '$to_proc', $return_self); $def(self, '$lambda?', function $Proc_lambda$ques$6() { var self = this; return !!self.$$is_lambda; }); $def(self, '$arity', function $$arity() { var self = this; if (self.$$is_curried) { return -1; } else if (self.$$arity != null) { return self.$$arity; } else { return self.length; } }); $def(self, '$source_location', function $$source_location() { var self = this, $ret_or_1 = nil; if (self.$$is_curried) { return nil; }; if ($truthy(($ret_or_1 = self.$$source_location))) { return $ret_or_1 } else { return nil }; }); $def(self, '$binding', function $$binding() { var $a, self = this; if (self.$$is_curried) { $Kernel.$raise($$$('ArgumentError'), "Can't create Binding") }; if ($truthy((($a = $$$('::', 'Binding', 'skip_raise')) ? 'constant' : nil))) { return $$$('Binding').$new(nil, [], self.$$s, self.$source_location()) } else { return nil }; }); $def(self, '$parameters', function $$parameters($kwargs) { var lambda, self = this; $kwargs = $ensure_kwargs($kwargs); lambda = $hash_get($kwargs, "lambda");; if (self.$$is_curried) { return [["rest"]]; } else if (self.$$parameters) { if (lambda == null ? self.$$is_lambda : lambda) { return self.$$parameters; } else { var result = [], i, length; for (i = 0, length = self.$$parameters.length; i < length; i++) { var parameter = self.$$parameters[i]; if (parameter[0] === 'req') { // required arguments always have name parameter = ['opt', parameter[1]]; } result.push(parameter); } return result; } } else { return []; } ; }, -1); $def(self, '$curry', function $$curry(arity) { var self = this; ; if (arity === undefined) { arity = self.length; } else { arity = $Opal['$coerce_to!'](arity, $$$('Integer'), "to_int"); if (self.$$is_lambda && arity !== self.length) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (arity) + " for " + (self.length) + ")") } } function curried () { var args = $slice(arguments), length = args.length, result; if (length > arity && self.$$is_lambda && !self.$$is_curried) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (length) + " for " + (arity) + ")") } if (length >= arity) { return self.$call.apply(self, args); } result = function () { return curried.apply(null, args.concat($slice(arguments))); } result.$$is_lambda = self.$$is_lambda; result.$$is_curried = true; return result; }; curried.$$is_lambda = self.$$is_lambda; curried.$$is_curried = true; return curried; ; }, -1); $def(self, '$dup', function $$dup() { var self = this; var original_proc = self.$$original_proc || self, proc = function () { return original_proc.apply(this, arguments); }; $each_ivar(self, function(prop) { proc[prop] = self[prop]; }); return proc; }); $alias(self, "===", "call"); $alias(self, "clone", "dup"); $alias(self, "yield", "call"); return $alias(self, "[]", "call"); })('::', Function) }; Opal.modules["corelib/method"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $def = Opal.def, $truthy = Opal.truthy, $slice = Opal.slice, $alias = Opal.alias, $Kernel = Opal.Kernel, $send = Opal.send, $to_a = Opal.to_a, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_reader,arity,curry,>>,<<,new,class,join,source_location,call,raise,bind,to_proc'); (function($base, $super) { var self = $klass($base, $super, 'Method'); var $proto = self.$$prototype; $proto.method = $proto.receiver = $proto.owner = $proto.name = nil; self.$attr_reader("owner", "receiver", "name"); $def(self, '$initialize', function $$initialize(receiver, owner, method, name) { var self = this; self.receiver = receiver; self.owner = owner; self.name = name; return (self.method = method); }); $def(self, '$arity', function $$arity() { var self = this; return self.method.$arity() }); $def(self, '$parameters', function $$parameters() { var self = this; return self.method.$$parameters }); $def(self, '$source_location', function $$source_location() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.method.$$source_location))) { return $ret_or_1 } else { return ["(eval)", 0] } }); $def(self, '$comments', function $$comments() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.method.$$comments))) { return $ret_or_1 } else { return [] } }); $def(self, '$call', function $$call($a) { var block = $$call.$$p || nil, $post_args, args, self = this; $$call.$$p = null; ; $post_args = $slice(arguments); args = $post_args; self.method.$$p = block; return self.method.apply(self.receiver, args); ; }, -1); $def(self, '$curry', function $$curry(arity) { var self = this; ; return self.method.$curry(arity); }, -1); $def(self, '$>>', function $Method_$gt$gt$1(other) { var self = this; return self.method['$>>'](other) }); $def(self, '$<<', function $Method_$lt$lt$2(other) { var self = this; return self.method['$<<'](other) }); $def(self, '$unbind', function $$unbind() { var self = this; return $$$('UnboundMethod').$new(self.receiver.$class(), self.owner, self.method, self.name) }); $def(self, '$to_proc', function $$to_proc() { var self = this; var proc = self.$call.bind(self); proc.$$unbound = self.method; proc.$$is_lambda = true; proc.$$arity = self.method.$$arity == null ? self.method.length : self.method.$$arity; proc.$$parameters = self.method.$$parameters; return proc; }); $def(self, '$inspect', function $$inspect() { var self = this; return "#<" + (self.$class()) + ": " + (self.receiver.$class()) + "#" + (self.name) + " (defined in " + (self.owner) + " in " + (self.$source_location().$join(":")) + ")>" }); $alias(self, "[]", "call"); return $alias(self, "===", "call"); })('::', null); return (function($base, $super) { var self = $klass($base, $super, 'UnboundMethod'); var $proto = self.$$prototype; $proto.method = $proto.owner = $proto.name = $proto.source = nil; self.$attr_reader("source", "owner", "name"); $def(self, '$initialize', function $$initialize(source, owner, method, name) { var self = this; self.source = source; self.owner = owner; self.method = method; self.name = name; return self.$$method = method;; }); $def(self, '$arity', function $$arity() { var self = this; return self.method.$arity() }); $def(self, '$parameters', function $$parameters() { var self = this; return self.method.$$parameters }); $def(self, '$source_location', function $$source_location() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.method.$$source_location))) { return $ret_or_1 } else { return ["(eval)", 0] } }); $def(self, '$comments', function $$comments() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.method.$$comments))) { return $ret_or_1 } else { return [] } }); $def(self, '$bind', function $$bind(object) { var self = this; if (self.owner.$$is_module || Opal.is_a(object, self.owner)) { return $$$('Method').$new(object, self.owner, self.method, self.name); } else { $Kernel.$raise($$$('TypeError'), "can't bind singleton method to a different class (expected " + (object) + ".kind_of?(" + (self.owner) + " to be true)"); } }); $def(self, '$bind_call', function $$bind_call(object, $a) { var block = $$bind_call.$$p || nil, $post_args, args, self = this; $$bind_call.$$p = null; ; $post_args = $slice(arguments, 1); args = $post_args; return $send(self.$bind(object), 'call', $to_a(args), block.$to_proc()); }, -2); return $def(self, '$inspect', function $$inspect() { var self = this; return "#<" + (self.$class()) + ": " + (self.source) + "#" + (self.name) + " (defined in " + (self.owner) + " in " + (self.$source_location().$join(":")) + ")>" }); })('::', null); }; Opal.modules["corelib/variables"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $gvars = Opal.gvars, $const_set = Opal.const_set, $Object = Opal.Object, nil = Opal.nil; Opal.add_stubs('new'); $gvars['&'] = $gvars['~'] = $gvars['`'] = $gvars["'"] = nil; $gvars.LOADED_FEATURES = ($gvars["\""] = Opal.loaded_features); $gvars.LOAD_PATH = ($gvars[":"] = []); $gvars["/"] = "\n"; $gvars[","] = nil; $const_set('::', 'ARGV', []); $const_set('::', 'ARGF', $Object.$new()); $const_set('::', 'ENV', (new Map())); $gvars.VERBOSE = false; $gvars.DEBUG = false; return ($gvars.SAFE = 0); }; Opal.modules["corelib/io"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $const_set = Opal.const_set, $not = Opal.not, $truthy = Opal.truthy, $def = Opal.def, $return_ivar = Opal.return_ivar, $return_val = Opal.return_val, $slice = Opal.slice, $Kernel = Opal.Kernel, $gvars = Opal.gvars, $send = Opal.send, $to_a = Opal.to_a, $rb_plus = Opal.rb_plus, $neqeq = Opal.neqeq, $range = Opal.range, $eqeq = Opal.eqeq, $to_ary = Opal.to_ary, $rb_gt = Opal.rb_gt, $assign_ivar_val = Opal.assign_ivar_val, $alias = Opal.alias, $a, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_reader,attr_accessor,!,match?,include?,size,write,String,flatten,puts,sysread_noraise,+,!=,[],ord,getc,readchar,raise,gets,==,to_str,length,split,sub,sysread,>,to_a,each_line,enum_for,getbyte,closed_write?,closed_read?,each,eof,new,write_proc=,read_proc='); (function($base, $super) { var self = $klass($base, $super, 'IO'); var $proto = self.$$prototype; $proto.read_buffer = $proto.closed = nil; $const_set(self, 'SEEK_SET', 0); $const_set(self, 'SEEK_CUR', 1); $const_set(self, 'SEEK_END', 2); $const_set(self, 'SEEK_DATA', 3); $const_set(self, 'SEEK_HOLE', 4); $const_set(self, 'READABLE', 1); $const_set(self, 'WRITABLE', 4); self.$attr_reader("eof"); self.$attr_accessor("read_proc", "sync", "tty", "write_proc"); $def(self, '$initialize', function $$initialize(fd, flags) { var self = this; if (flags == null) flags = "r"; self.fd = fd; self.flags = flags; self.eof = false; if (($truthy(flags['$include?']("r")) && ($not(flags['$match?'](/[wa+]/))))) { return (self.closed = "write") } else if (($truthy(flags['$match?'](/[wa]/)) && ($not(flags['$match?'](/[r+]/))))) { return (self.closed = "read") } else { return nil }; }, -2); $def(self, '$fileno', $return_ivar("fd")); $def(self, '$tty?', function $IO_tty$ques$1() { var self = this; return self.tty == true; }); $def(self, '$write', function $$write(string) { var self = this; self.write_proc(string); return string.$size(); }); $def(self, '$flush', $return_val(nil)); $def(self, '$<<', function $IO_$lt$lt$2(string) { var self = this; self.$write(string); return self; }); $def(self, '$print', function $$print($a) { var $post_args, args, self = this; if ($gvars[","] == null) $gvars[","] = nil; $post_args = $slice(arguments); args = $post_args; for (var i = 0, ii = args.length; i < ii; i++) { args[i] = $Kernel.$String(args[i]) } self.$write(args.join($gvars[","])); ; return nil; }, -1); $def(self, '$puts', function $$puts($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; var line if (args.length === 0) { self.$write("\n"); return nil; } else { for (var i = 0, ii = args.length; i < ii; i++) { if (args[i].$$is_array){ var ary = (args[i]).$flatten() if (ary.length > 0) $send(self, 'puts', $to_a((ary))) } else { if (args[i].$$is_string) { line = args[i].valueOf(); } else { line = $Kernel.$String(args[i]); } if (!line.endsWith("\n")) line += "\n" self.$write(line) } } } ; return nil; }, -1); $def(self, '$getc', function $$getc() { var self = this, $ret_or_1 = nil, parts = nil, ret = nil; self.read_buffer = ($truthy(($ret_or_1 = self.read_buffer)) ? ($ret_or_1) : ("")); parts = ""; do { self.read_buffer = $rb_plus(self.read_buffer, parts); if ($neqeq(self.read_buffer, "")) { ret = self.read_buffer['$[]'](0); self.read_buffer = self.read_buffer['$[]']($range(1, -1, false)); return ret; }; } while ($truthy((parts = self.$sysread_noraise(1))));; return nil; }); $def(self, '$getbyte', function $$getbyte() { var $a, self = this; return ($a = self.$getc(), ($a === nil || $a == null) ? nil : $a.$ord()) }); $def(self, '$readbyte', function $$readbyte() { var self = this; return self.$readchar().$ord() }); $def(self, '$readchar', function $$readchar() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$getc()))) { return $ret_or_1 } else { return $Kernel.$raise($$$('EOFError'), "end of file reached") } }); $def(self, '$readline', function $$readline($a) { var $post_args, args, self = this, $ret_or_1 = nil; $post_args = $slice(arguments); args = $post_args; if ($truthy(($ret_or_1 = $send(self, 'gets', $to_a(args))))) { return $ret_or_1 } else { return $Kernel.$raise($$$('EOFError'), "end of file reached") }; }, -1); $def(self, '$gets', function $$gets(sep, limit, opts) { var $a, $b, self = this, orig_sep = nil, $ret_or_1 = nil, seplen = nil, data = nil, ret = nil, orig_buffer = nil; if ($gvars["/"] == null) $gvars["/"] = nil; if (sep == null) sep = false; if (limit == null) limit = nil; if (opts == null) opts = (new Map()); if (($truthy(sep.$$is_number) && ($not(limit)))) { $a = [false, sep, limit], (sep = $a[0]), (limit = $a[1]), (opts = $a[2]), $a }; if ((($truthy(sep.$$is_hash) && ($not(limit))) && ($eqeq(opts, (new Map()))))) { $a = [false, nil, sep], (sep = $a[0]), (limit = $a[1]), (opts = $a[2]), $a } else if (($truthy(limit.$$is_hash) && ($eqeq(opts, (new Map()))))) { $a = [sep, nil, limit], (sep = $a[0]), (limit = $a[1]), (opts = $a[2]), $a }; orig_sep = sep; if ($eqeq(sep, false)) { sep = $gvars["/"] }; if ($eqeq(sep, "")) { sep = /\r?\n\r?\n/ }; sep = ($truthy(($ret_or_1 = sep)) ? ($ret_or_1) : ("")); if (!$eqeq(orig_sep, "")) { sep = sep.$to_str() }; seplen = ($eqeq(orig_sep, "") ? (2) : (sep.$length())); if ($eqeq(sep, " ")) { sep = / / }; self.read_buffer = ($truthy(($ret_or_1 = self.read_buffer)) ? ($ret_or_1) : ("")); data = ""; ret = nil; do { self.read_buffer = $rb_plus(self.read_buffer, data); if (($neqeq(sep, "") && ($truthy(($truthy(sep.$$is_regexp) ? (self.read_buffer['$match?'](sep)) : (self.read_buffer['$include?'](sep))))))) { orig_buffer = self.read_buffer; $b = self.read_buffer.$split(sep, 2), $a = $to_ary($b), (ret = ($a[0] == null ? nil : $a[0])), (self.read_buffer = ($a[1] == null ? nil : $a[1])), $b; if ($neqeq(ret, orig_buffer)) { ret = $rb_plus(ret, orig_buffer['$[]'](ret.$length(), seplen)) }; break; }; } while ($truthy((data = self.$sysread_noraise(($eqeq(sep, "") ? (65536) : (1))))));; if (!$truthy(ret)) { $a = [($truthy(($ret_or_1 = self.read_buffer)) ? ($ret_or_1) : ("")), ""], (ret = $a[0]), (self.read_buffer = $a[1]), $a; if ($eqeq(ret, "")) { ret = nil }; }; if ($truthy(ret)) { if ($truthy(limit)) { ret = ret['$[]'](Opal.Range.$new(0,limit, true)); self.read_buffer = $rb_plus(ret['$[]'](Opal.Range.$new(limit, -1, false)), self.read_buffer); }; if ($truthy(opts['$[]']("chomp"))) { ret = ret.$sub(/\r?\n$/, "") }; if ($eqeq(orig_sep, "")) { ret = ret.$sub(/^[\r\n]+/, "") }; }; if ($eqeq(orig_sep, false)) { $gvars._ = ret }; return ret; }, -1); $def(self, '$sysread', function $$sysread(integer) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.read_proc(integer)))) { return $ret_or_1 } else { self.eof = true; return $Kernel.$raise($$$('EOFError'), "end of file reached"); } }); $def(self, '$sysread_noraise', function $$sysread_noraise(integer) { var self = this; try { return self.$sysread(integer) } catch ($err) { if (Opal.rescue($err, [$$$('EOFError')])) { try { return nil } finally { Opal.pop_exception($err); } } else { throw $err; } } }); $def(self, '$readpartial', function $$readpartial(integer) { var $a, self = this, $ret_or_1 = nil, part = nil, ret = nil; self.read_buffer = ($truthy(($ret_or_1 = self.read_buffer)) ? ($ret_or_1) : ("")); part = self.$sysread(integer); $a = [$rb_plus(self.read_buffer, ($truthy(($ret_or_1 = part)) ? ($ret_or_1) : (""))), ""], (ret = $a[0]), (self.read_buffer = $a[1]), $a; if ($eqeq(ret, "")) { ret = nil }; return ret; }); $def(self, '$read', function $$read(integer) { var $a, self = this, $ret_or_1 = nil, parts = nil, ret = nil; if (integer == null) integer = nil; self.read_buffer = ($truthy(($ret_or_1 = self.read_buffer)) ? ($ret_or_1) : ("")); parts = ""; ret = nil; do { self.read_buffer = $rb_plus(self.read_buffer, parts); if (($truthy(integer) && ($truthy($rb_gt(self.read_buffer.$length(), integer))))) { $a = [self.read_buffer['$[]'](Opal.Range.$new(0,integer, true)), self.read_buffer['$[]'](Opal.Range.$new(integer, -1, false))], (ret = $a[0]), (self.read_buffer = $a[1]), $a; return ret; }; } while ($truthy((parts = self.$sysread_noraise(($truthy(($ret_or_1 = integer)) ? ($ret_or_1) : (65536))))));; $a = [self.read_buffer, ""], (ret = $a[0]), (self.read_buffer = $a[1]), $a; return ret; }, -1); $def(self, '$readlines', function $$readlines(separator) { var self = this; if ($gvars["/"] == null) $gvars["/"] = nil; if (separator == null) separator = $gvars["/"]; return self.$each_line(separator).$to_a(); }, -1); $def(self, '$each', function $$each($a, $b) { var block = $$each.$$p || nil, $post_args, sep, args, self = this, s = nil; if ($gvars["/"] == null) $gvars["/"] = nil; $$each.$$p = null; ; $post_args = $slice(arguments); if ($post_args.length > 0) sep = $post_args.shift();if (sep == null) sep = $gvars["/"]; args = $post_args; if (!(block !== nil)) { return $send(self, 'enum_for', ["each", sep].concat($to_a(args))) }; while ($truthy((s = $send(self, 'gets', [sep].concat($to_a(args)))))) { Opal.yield1(block, s) }; return self; }, -1); $def(self, '$each_byte', function $$each_byte() { var block = $$each_byte.$$p || nil, self = this, s = nil; $$each_byte.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("each_byte") }; while ($truthy((s = self.$getbyte()))) { Opal.yield1(block, s) }; return self; }); $def(self, '$each_char', function $$each_char() { var block = $$each_char.$$p || nil, self = this, s = nil; $$each_char.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("each_char") }; while ($truthy((s = self.$getc()))) { Opal.yield1(block, s) }; return self; }); $def(self, '$close', $assign_ivar_val("closed", "both")); $def(self, '$close_read', function $$close_read() { var self = this; if ($eqeq(self.closed, "write")) { return (self.closed = "both") } else { return (self.closed = "read") } }); $def(self, '$close_write', function $$close_write() { var self = this; if ($eqeq(self.closed, "read")) { return (self.closed = "both") } else { return (self.closed = "write") } }); $def(self, '$closed?', function $IO_closed$ques$3() { var self = this; return self.closed['$==']("both") }); $def(self, '$closed_read?', function $IO_closed_read$ques$4() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.closed['$==']("read")))) { return $ret_or_1 } else { return self.closed['$==']("both") } }); $def(self, '$closed_write?', function $IO_closed_write$ques$5() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.closed['$==']("write")))) { return $ret_or_1 } else { return self.closed['$==']("both") } }); $def(self, '$check_writable', function $$check_writable() { var self = this; if ($truthy(self['$closed_write?']())) { return $Kernel.$raise($$$('IOError'), "not opened for writing") } else { return nil } }); $def(self, '$check_readable', function $$check_readable() { var self = this; if ($truthy(self['$closed_read?']())) { return $Kernel.$raise($$$('IOError'), "not opened for reading") } else { return nil } }); $alias(self, "each_line", "each"); return $alias(self, "eof?", "eof"); })('::', null); $const_set('::', 'STDIN', ($gvars.stdin = $$$('IO').$new(0, "r"))); $const_set('::', 'STDOUT', ($gvars.stdout = $$$('IO').$new(1, "w"))); $const_set('::', 'STDERR', ($gvars.stderr = $$$('IO').$new(2, "w"))); var console = Opal.global.console; $$$('STDOUT')['$write_proc='](typeof(process) === 'object' && typeof(process.stdout) === 'object' ? function(s){process.stdout.write(s)} : function(s){console.log(s)}); $$$('STDERR')['$write_proc='](typeof(process) === 'object' && typeof(process.stderr) === 'object' ? function(s){process.stderr.write(s)} : function(s){console.warn(s)}); return ($a = [function(s) { var p = prompt(); if (p !== null) return p + "\n"; return nil; }], $send($$$('STDIN'), 'read_proc=', $a), $a[$a.length - 1]); }; Opal.modules["opal/regexp_anchors"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $const_set = Opal.const_set, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('new'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $const_set(self, 'REGEXP_START', "^"); $const_set(self, 'REGEXP_END', "$"); $const_set(self, 'FORBIDDEN_STARTING_IDENTIFIER_CHARS', "\\u0001-\\u002F\\u003A-\\u0040\\u005B-\\u005E\\u0060\\u007B-\\u007F"); $const_set(self, 'FORBIDDEN_ENDING_IDENTIFIER_CHARS', "\\u0001-\\u0020\\u0022-\\u002F\\u003A-\\u003E\\u0040\\u005B-\\u005E\\u0060\\u007B-\\u007F"); $const_set(self, 'INLINE_IDENTIFIER_REGEXP', $$('Regexp').$new("[^" + ($$$(self, 'FORBIDDEN_STARTING_IDENTIFIER_CHARS')) + "]*[^" + ($$$(self, 'FORBIDDEN_ENDING_IDENTIFIER_CHARS')) + "]")); $const_set(self, 'FORBIDDEN_CONST_NAME_CHARS', "\\u0001-\\u0020\\u0021-\\u002F\\u003B-\\u003F\\u0040\\u005B-\\u005E\\u0060\\u007B-\\u007F"); return $const_set(self, 'CONST_NAME_REGEXP', $$('Regexp').$new("" + ($$$(self, 'REGEXP_START')) + "(::)?[A-Z][^" + ($$$(self, 'FORBIDDEN_CONST_NAME_CHARS')) + "]*" + ($$$(self, 'REGEXP_END')))); })($nesting[0], $nesting) }; Opal.modules["opal/mini"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $Object = Opal.Object, nil = Opal.nil; Opal.add_stubs('require'); $Object.$require("opal/base"); $Object.$require("corelib/nil"); $Object.$require("corelib/boolean"); $Object.$require("corelib/string"); $Object.$require("corelib/comparable"); $Object.$require("corelib/enumerable"); $Object.$require("corelib/enumerator"); $Object.$require("corelib/array"); $Object.$require("corelib/hash"); $Object.$require("corelib/number"); $Object.$require("corelib/range"); $Object.$require("corelib/proc"); $Object.$require("corelib/method"); $Object.$require("corelib/regexp"); $Object.$require("corelib/variables"); $Object.$require("corelib/io"); return $Object.$require("opal/regexp_anchors"); }; Opal.modules["corelib/kernel/format"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $coerce_to = Opal.coerce_to, $module = Opal.module, $slice = Opal.slice, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $Opal = Opal.Opal, $Kernel = Opal.Kernel, $gvars = Opal.gvars, $def = Opal.def, $alias = Opal.alias, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('respond_to?,[],==,length,coerce_to?,nil?,to_a,raise,to_int,fetch,Integer,Float,to_ary,to_str,inspect,to_s,format'); return (function($base) { var self = $module($base, 'Kernel'); $def(self, '$format', function $$format(format_string, $a) { var $post_args, args, ary = nil; if ($gvars.DEBUG == null) $gvars.DEBUG = nil; $post_args = $slice(arguments, 1); args = $post_args; if (($eqeq(args.$length(), 1) && ($truthy(args['$[]'](0)['$respond_to?']("to_ary"))))) { ary = $Opal['$coerce_to?'](args['$[]'](0), $$$('Array'), "to_ary"); if (!$truthy(ary['$nil?']())) { args = ary.$to_a() }; }; var result = '', //used for slicing: begin_slice = 0, end_slice, //used for iterating over the format string: i, len = format_string.length, //used for processing field values: arg, str, //used for processing %g and %G fields: exponent, //used for keeping track of width and precision: width, precision, //used for holding temporary values: tmp_num, //used for processing %{} and %<> fileds: hash_parameter_key, closing_brace_char, //used for processing %b, %B, %o, %x, and %X fields: base_number, base_prefix, base_neg_zero_regex, base_neg_zero_digit, //used for processing arguments: next_arg, seq_arg_num = 1, pos_arg_num = 0, //used for keeping track of flags: flags, FNONE = 0, FSHARP = 1, FMINUS = 2, FPLUS = 4, FZERO = 8, FSPACE = 16, FWIDTH = 32, FPREC = 64, FPREC0 = 128; function CHECK_FOR_FLAGS() { if (flags&FWIDTH) { $Kernel.$raise($$$('ArgumentError'), "flag after width") } if (flags&FPREC0) { $Kernel.$raise($$$('ArgumentError'), "flag after precision") } } function CHECK_FOR_WIDTH() { if (flags&FWIDTH) { $Kernel.$raise($$$('ArgumentError'), "width given twice") } if (flags&FPREC0) { $Kernel.$raise($$$('ArgumentError'), "width after precision") } } function GET_NTH_ARG(num) { if (num >= args.length) { $Kernel.$raise($$$('ArgumentError'), "too few arguments") } return args[num]; } function GET_NEXT_ARG() { switch (pos_arg_num) { case -1: $Kernel.$raise($$$('ArgumentError'), "unnumbered(" + (seq_arg_num) + ") mixed with numbered") // raise case -2: $Kernel.$raise($$$('ArgumentError'), "unnumbered(" + (seq_arg_num) + ") mixed with named") // raise } pos_arg_num = seq_arg_num++; return GET_NTH_ARG(pos_arg_num - 1); } function GET_POS_ARG(num) { if (pos_arg_num > 0) { $Kernel.$raise($$$('ArgumentError'), "numbered(" + (num) + ") after unnumbered(" + (pos_arg_num) + ")") } if (pos_arg_num === -2) { $Kernel.$raise($$$('ArgumentError'), "numbered(" + (num) + ") after named") } if (num < 1) { $Kernel.$raise($$$('ArgumentError'), "invalid index - " + (num) + "$") } pos_arg_num = -1; return GET_NTH_ARG(num - 1); } function GET_ARG() { return (next_arg === undefined ? GET_NEXT_ARG() : next_arg); } function READ_NUM(label) { var num, str = ''; for (;; i++) { if (i === len) { $Kernel.$raise($$$('ArgumentError'), "malformed format string - %*[0-9]") } if (format_string.charCodeAt(i) < 48 || format_string.charCodeAt(i) > 57) { i--; num = parseInt(str, 10) || 0; if (num > 2147483647) { $Kernel.$raise($$$('ArgumentError'), "" + (label) + " too big") } return num; } str += format_string.charAt(i); } } function READ_NUM_AFTER_ASTER(label) { var arg, num = READ_NUM(label); if (format_string.charAt(i + 1) === '$') { i++; arg = GET_POS_ARG(num); } else { arg = GET_NEXT_ARG(); } return (arg).$to_int(); } for (i = format_string.indexOf('%'); i !== -1; i = format_string.indexOf('%', i)) { str = undefined; flags = FNONE; width = -1; precision = -1; next_arg = undefined; end_slice = i; i++; switch (format_string.charAt(i)) { case '%': begin_slice = i; // no-break case '': case '\n': case '\0': i++; continue; } format_sequence: for (; i < len; i++) { switch (format_string.charAt(i)) { case ' ': CHECK_FOR_FLAGS(); flags |= FSPACE; continue format_sequence; case '#': CHECK_FOR_FLAGS(); flags |= FSHARP; continue format_sequence; case '+': CHECK_FOR_FLAGS(); flags |= FPLUS; continue format_sequence; case '-': CHECK_FOR_FLAGS(); flags |= FMINUS; continue format_sequence; case '0': CHECK_FOR_FLAGS(); flags |= FZERO; continue format_sequence; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': tmp_num = READ_NUM('width'); if (format_string.charAt(i + 1) === '$') { if (i + 2 === len) { str = '%'; i++; break format_sequence; } if (next_arg !== undefined) { $Kernel.$raise($$$('ArgumentError'), "value given twice - %" + (tmp_num) + "$") } next_arg = GET_POS_ARG(tmp_num); i++; } else { CHECK_FOR_WIDTH(); flags |= FWIDTH; width = tmp_num; } continue format_sequence; case '<': case '\{': closing_brace_char = (format_string.charAt(i) === '<' ? '>' : '\}'); hash_parameter_key = ''; i++; for (;; i++) { if (i === len) { $Kernel.$raise($$$('ArgumentError'), "malformed name - unmatched parenthesis") } if (format_string.charAt(i) === closing_brace_char) { if (pos_arg_num > 0) { $Kernel.$raise($$$('ArgumentError'), "named " + (hash_parameter_key) + " after unnumbered(" + (pos_arg_num) + ")") } if (pos_arg_num === -1) { $Kernel.$raise($$$('ArgumentError'), "named " + (hash_parameter_key) + " after numbered") } pos_arg_num = -2; if (args[0] === undefined || !args[0].$$is_hash) { $Kernel.$raise($$$('ArgumentError'), "one hash required") } next_arg = (args[0]).$fetch(hash_parameter_key); if (closing_brace_char === '>') { continue format_sequence; } else { str = next_arg.toString(); if (precision !== -1) { str = str.slice(0, precision); } if (flags&FMINUS) { while (str.length < width) { str = str + ' '; } } else { while (str.length < width) { str = ' ' + str; } } break format_sequence; } } hash_parameter_key += format_string.charAt(i); } // raise case '*': i++; CHECK_FOR_WIDTH(); flags |= FWIDTH; width = READ_NUM_AFTER_ASTER('width'); if (width < 0) { flags |= FMINUS; width = -width; } continue format_sequence; case '.': if (flags&FPREC0) { $Kernel.$raise($$$('ArgumentError'), "precision given twice") } flags |= FPREC|FPREC0; precision = 0; i++; if (format_string.charAt(i) === '*') { i++; precision = READ_NUM_AFTER_ASTER('precision'); if (precision < 0) { flags &= ~FPREC; } continue format_sequence; } precision = READ_NUM('precision'); continue format_sequence; case 'd': case 'i': case 'u': arg = $Kernel.$Integer(GET_ARG()); if (arg >= 0) { str = arg.toString(); while (str.length < precision) { str = '0' + str; } if (flags&FMINUS) { if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; } while (str.length < width) { str = str + ' '; } } else { if (flags&FZERO && precision === -1) { while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0)) { str = '0' + str; } if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; } } else { if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; } while (str.length < width) { str = ' ' + str; } } } } else { str = (-arg).toString(); while (str.length < precision) { str = '0' + str; } if (flags&FMINUS) { str = '-' + str; while (str.length < width) { str = str + ' '; } } else { if (flags&FZERO && precision === -1) { while (str.length < width - 1) { str = '0' + str; } str = '-' + str; } else { str = '-' + str; while (str.length < width) { str = ' ' + str; } } } } break format_sequence; case 'b': case 'B': case 'o': case 'x': case 'X': switch (format_string.charAt(i)) { case 'b': case 'B': base_number = 2; base_prefix = '0b'; base_neg_zero_regex = /^1+/; base_neg_zero_digit = '1'; break; case 'o': base_number = 8; base_prefix = '0'; base_neg_zero_regex = /^3?7+/; base_neg_zero_digit = '7'; break; case 'x': case 'X': base_number = 16; base_prefix = '0x'; base_neg_zero_regex = /^f+/; base_neg_zero_digit = 'f'; break; } arg = $Kernel.$Integer(GET_ARG()); if (arg >= 0) { str = arg.toString(base_number); while (str.length < precision) { str = '0' + str; } if (flags&FMINUS) { if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; } if (flags&FSHARP && arg !== 0) { str = base_prefix + str; } while (str.length < width) { str = str + ' '; } } else { if (flags&FZERO && precision === -1) { while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0) - ((flags&FSHARP && arg !== 0) ? base_prefix.length : 0)) { str = '0' + str; } if (flags&FSHARP && arg !== 0) { str = base_prefix + str; } if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; } } else { if (flags&FSHARP && arg !== 0) { str = base_prefix + str; } if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; } while (str.length < width) { str = ' ' + str; } } } } else { if (flags&FPLUS || flags&FSPACE) { str = (-arg).toString(base_number); while (str.length < precision) { str = '0' + str; } if (flags&FMINUS) { if (flags&FSHARP) { str = base_prefix + str; } str = '-' + str; while (str.length < width) { str = str + ' '; } } else { if (flags&FZERO && precision === -1) { while (str.length < width - 1 - (flags&FSHARP ? 2 : 0)) { str = '0' + str; } if (flags&FSHARP) { str = base_prefix + str; } str = '-' + str; } else { if (flags&FSHARP) { str = base_prefix + str; } str = '-' + str; while (str.length < width) { str = ' ' + str; } } } } else { str = (arg >>> 0).toString(base_number).replace(base_neg_zero_regex, base_neg_zero_digit); while (str.length < precision - 2) { str = base_neg_zero_digit + str; } if (flags&FMINUS) { str = '..' + str; if (flags&FSHARP) { str = base_prefix + str; } while (str.length < width) { str = str + ' '; } } else { if (flags&FZERO && precision === -1) { while (str.length < width - 2 - (flags&FSHARP ? base_prefix.length : 0)) { str = base_neg_zero_digit + str; } str = '..' + str; if (flags&FSHARP) { str = base_prefix + str; } } else { str = '..' + str; if (flags&FSHARP) { str = base_prefix + str; } while (str.length < width) { str = ' ' + str; } } } } } if (format_string.charAt(i) === format_string.charAt(i).toUpperCase()) { str = str.toUpperCase(); } break format_sequence; case 'f': case 'e': case 'E': case 'g': case 'G': arg = $Kernel.$Float(GET_ARG()); if (arg >= 0 || isNaN(arg)) { if (arg === Infinity) { str = 'Inf'; } else { switch (format_string.charAt(i)) { case 'f': str = arg.toFixed(precision === -1 ? 6 : precision); break; case 'e': case 'E': str = arg.toExponential(precision === -1 ? 6 : precision); break; case 'g': case 'G': str = arg.toExponential(); exponent = parseInt(str.split('e')[1], 10); if (!(exponent < -4 || exponent >= (precision === -1 ? 6 : precision))) { str = arg.toPrecision(precision === -1 ? (flags&FSHARP ? 6 : undefined) : precision); } break; } } if (flags&FMINUS) { if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; } while (str.length < width) { str = str + ' '; } } else { if (flags&FZERO && arg !== Infinity && !isNaN(arg)) { while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0)) { str = '0' + str; } if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; } } else { if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; } while (str.length < width) { str = ' ' + str; } } } } else { if (arg === -Infinity) { str = 'Inf'; } else { switch (format_string.charAt(i)) { case 'f': str = (-arg).toFixed(precision === -1 ? 6 : precision); break; case 'e': case 'E': str = (-arg).toExponential(precision === -1 ? 6 : precision); break; case 'g': case 'G': str = (-arg).toExponential(); exponent = parseInt(str.split('e')[1], 10); if (!(exponent < -4 || exponent >= (precision === -1 ? 6 : precision))) { str = (-arg).toPrecision(precision === -1 ? (flags&FSHARP ? 6 : undefined) : precision); } break; } } if (flags&FMINUS) { str = '-' + str; while (str.length < width) { str = str + ' '; } } else { if (flags&FZERO && arg !== -Infinity) { while (str.length < width - 1) { str = '0' + str; } str = '-' + str; } else { str = '-' + str; while (str.length < width) { str = ' ' + str; } } } } if (format_string.charAt(i) === format_string.charAt(i).toUpperCase() && arg !== Infinity && arg !== -Infinity && !isNaN(arg)) { str = str.toUpperCase(); } str = str.replace(/([eE][-+]?)([0-9])$/, '$10$2'); break format_sequence; case 'a': case 'A': // Not implemented because there are no specs for this field type. $Kernel.$raise($$$('NotImplementedError'), "`A` and `a` format field types are not implemented in Opal yet") // raise case 'c': arg = GET_ARG(); if ((arg)['$respond_to?']("to_ary")) { arg = (arg).$to_ary()[0]; } if ((arg)['$respond_to?']("to_str")) { str = (arg).$to_str(); } else { str = String.fromCharCode($coerce_to(arg, $$$('Integer'), 'to_int')); } if (str.length !== 1) { $Kernel.$raise($$$('ArgumentError'), "%c requires a character") } if (flags&FMINUS) { while (str.length < width) { str = str + ' '; } } else { while (str.length < width) { str = ' ' + str; } } break format_sequence; case 'p': str = (GET_ARG()).$inspect(); if (precision !== -1) { str = str.slice(0, precision); } if (flags&FMINUS) { while (str.length < width) { str = str + ' '; } } else { while (str.length < width) { str = ' ' + str; } } break format_sequence; case 's': str = (GET_ARG()).$to_s(); if (precision !== -1) { str = str.slice(0, precision); } if (flags&FMINUS) { while (str.length < width) { str = str + ' '; } } else { while (str.length < width) { str = ' ' + str; } } break format_sequence; default: $Kernel.$raise($$$('ArgumentError'), "malformed format string - %" + (format_string.charAt(i))) } } if (str === undefined) { $Kernel.$raise($$$('ArgumentError'), "malformed format string - %") } result += format_string.slice(begin_slice, end_slice) + str; begin_slice = i + 1; } if ($gvars.DEBUG && pos_arg_num >= 0 && seq_arg_num < args.length) { $Kernel.$raise($$$('ArgumentError'), "too many arguments for format string") } return result + format_string.slice(begin_slice); ; }, -2); return $alias(self, "sprintf", "format"); })('::') }; Opal.modules["corelib/string/encoding"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $rb_plus = Opal.rb_plus, $truthy = Opal.truthy, $send = Opal.send, $defs = Opal.defs, $eqeq = Opal.eqeq, $def = Opal.def, $return_ivar = Opal.return_ivar, $return_val = Opal.return_val, $slice = Opal.slice, $Kernel = Opal.Kernel, $Opal = Opal.Opal, $rb_lt = Opal.rb_lt, $a, self = Opal.top, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,+,[],clone,initialize,new,instance_eval,to_proc,each,const_set,tr,==,default_external,attr_accessor,singleton_class,attr_reader,raise,register,length,bytes,force_encoding,dup,bytesize,enum_for,each_byte,to_a,each_char,each_codepoint,coerce_to!,find,<,default_external='); self.$require("corelib/string"); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Encoding'); var $nesting = [self].concat($parent_nesting), $proto = self.$$prototype; $proto.name = $proto.dummy = nil; $defs(self, '$register', function $$register(name, options) { var block = $$register.$$p || nil, self = this, names = nil, $ret_or_1 = nil, ascii = nil, dummy = nil, encoding = nil, register = nil; $$register.$$p = null; ; if (options == null) options = (new Map()); names = $rb_plus([name], ($truthy(($ret_or_1 = options['$[]']("aliases"))) ? ($ret_or_1) : ([]))); ascii = ($truthy(($ret_or_1 = options['$[]']("ascii"))) && ($ret_or_1)); dummy = ($truthy(($ret_or_1 = options['$[]']("dummy"))) && ($ret_or_1)); if ($truthy(options['$[]']("inherits"))) { encoding = options['$[]']("inherits").$clone(); encoding.$initialize(name, names, ascii, dummy); } else { encoding = self.$new(name, names, ascii, dummy) }; if ((block !== nil)) { $send(encoding, 'instance_eval', [], block.$to_proc()) }; register = Opal.encodings; return $send(names, 'each', [], function $$1(encoding_name){var self = $$1.$$s == null ? this : $$1.$$s; if (encoding_name == null) encoding_name = nil; self.$const_set(encoding_name.$tr("-", "_"), encoding); return register[encoding_name] = encoding;}, {$$s: self}); }, -2); $defs(self, '$find', function $$find(name) { var self = this; if ($eqeq(name, "default_external")) { return self.$default_external() }; return Opal.find_encoding(name);; }); self.$singleton_class().$attr_accessor("default_external"); self.$attr_reader("name", "names"); $def(self, '$initialize', function $$initialize(name, names, ascii, dummy) { var self = this; self.name = name; self.names = names; self.ascii = ascii; return (self.dummy = dummy); }); $def(self, '$ascii_compatible?', $return_ivar("ascii")); $def(self, '$dummy?', $return_ivar("dummy")); $def(self, '$binary?', $return_val(false)); $def(self, '$to_s', $return_ivar("name")); $def(self, '$inspect', function $$inspect() { var self = this; return "#" }); $def(self, '$charsize', function $$charsize(string) { var len = 0; for (var i = 0, length = string.length; i < length; i++) { var charcode = string.charCodeAt(i); if (!(charcode >= 0xD800 && charcode <= 0xDBFF)) { len++; } } return len; }); $def(self, '$each_char', function $$each_char(string) { var block = $$each_char.$$p || nil; $$each_char.$$p = null; ; var low_surrogate = ""; for (var i = 0, length = string.length; i < length; i++) { var charcode = string.charCodeAt(i); var chr = string.charAt(i); if (charcode >= 0xDC00 && charcode <= 0xDFFF) { low_surrogate = chr; continue; } else if (charcode >= 0xD800 && charcode <= 0xDBFF) { chr = low_surrogate + chr; } if (string.encoding.name != "UTF-8") { chr = new String(chr); chr.encoding = string.encoding; } Opal.yield1(block, chr); } ; }); $def(self, '$each_byte', function $$each_byte($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return $Kernel.$raise($$$('NotImplementedError')); }, -1); $def(self, '$bytesize', function $$bytesize($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return $Kernel.$raise($$$('NotImplementedError')); }, -1); $klass('::', $$$('StandardError'), 'EncodingError'); $klass('::', $$$('EncodingError'), 'CompatibilityError'); return ($klass($nesting[0], $$$('EncodingError'), 'UndefinedConversionError'), nil); })('::', null, $nesting); $send($$$('Encoding'), 'register', ["UTF-8", (new Map([["aliases", ["CP65001"]], ["ascii", true]]))], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; $def(self, '$each_byte', function $$each_byte(string) { var block = $$each_byte.$$p || nil; $$each_byte.$$p = null; ; // Taken from: https://github.com/feross/buffer/blob/f52dffd9df0445b93c0c9065c2f8f0f46b2c729a/index.js#L1954-L2032 var units = Infinity; var codePoint; var length = string.length; var leadSurrogate = null; for (var i = 0; i < length; ++i) { codePoint = string.charCodeAt(i); // is surrogate component if (codePoint > 0xD7FF && codePoint < 0xE000) { // last char was a lead if (!leadSurrogate) { // no lead yet if (codePoint > 0xDBFF) { // unexpected trail if ((units -= 3) > -1) { Opal.yield1(block, 0xEF); Opal.yield1(block, 0xBF); Opal.yield1(block, 0xBD); } continue; } else if (i + 1 === length) { // unpaired lead if ((units -= 3) > -1) { Opal.yield1(block, 0xEF); Opal.yield1(block, 0xBF); Opal.yield1(block, 0xBD); } continue; } // valid lead leadSurrogate = codePoint; continue; } // 2 leads in a row if (codePoint < 0xDC00) { if ((units -= 3) > -1) { Opal.yield1(block, 0xEF); Opal.yield1(block, 0xBF); Opal.yield1(block, 0xBD); } leadSurrogate = codePoint; continue; } // valid surrogate pair codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000; } else if (leadSurrogate) { // valid bmp char, but last char was a lead if ((units -= 3) > -1) { Opal.yield1(block, 0xEF); Opal.yield1(block, 0xBF); Opal.yield1(block, 0xBD); } } leadSurrogate = null; // encode utf8 if (codePoint < 0x80) { if ((units -= 1) < 0) break; Opal.yield1(block, codePoint); } else if (codePoint < 0x800) { if ((units -= 2) < 0) break; Opal.yield1(block, codePoint >> 0x6 | 0xC0); Opal.yield1(block, codePoint & 0x3F | 0x80); } else if (codePoint < 0x10000) { if ((units -= 3) < 0) break; Opal.yield1(block, codePoint >> 0xC | 0xE0); Opal.yield1(block, codePoint >> 0x6 & 0x3F | 0x80); Opal.yield1(block, codePoint & 0x3F | 0x80); } else if (codePoint < 0x110000) { if ((units -= 4) < 0) break; Opal.yield1(block, codePoint >> 0x12 | 0xF0); Opal.yield1(block, codePoint >> 0xC & 0x3F | 0x80); Opal.yield1(block, codePoint >> 0x6 & 0x3F | 0x80); Opal.yield1(block, codePoint & 0x3F | 0x80); } else { // Invalid code point } } ; }); return $def(self, '$bytesize', function $$bytesize(string) { return string.$bytes().$length() });}, {$$s: self}); $send($$$('Encoding'), 'register', ["UTF-16LE"], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s; $def(self, '$each_byte', function $$each_byte(string) { var block = $$each_byte.$$p || nil; $$each_byte.$$p = null; ; for (var i = 0, length = string.length; i < length; i++) { var code = string.charCodeAt(i); Opal.yield1(block, code & 0xff); Opal.yield1(block, code >> 8); } ; }); return $def(self, '$bytesize', function $$bytesize(string) { return string.length * 2; });}, {$$s: self}); $send($$$('Encoding'), 'register', ["UTF-16BE", (new Map([["inherits", $$$($$$('Encoding'), 'UTF_16LE')]]))], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; return $def(self, '$each_byte', function $$each_byte(string) { var block = $$each_byte.$$p || nil; $$each_byte.$$p = null; ; for (var i = 0, length = string.length; i < length; i++) { var code = string.charCodeAt(i); Opal.yield1(block, code >> 8); Opal.yield1(block, code & 0xff); } ; })}, {$$s: self}); $send($$$('Encoding'), 'register', ["UTF-32LE"], function $$5(){var self = $$5.$$s == null ? this : $$5.$$s; $def(self, '$each_byte', function $$each_byte(string) { var block = $$each_byte.$$p || nil; $$each_byte.$$p = null; ; for (var i = 0, length = string.length; i < length; i++) { var code = string.charCodeAt(i); Opal.yield1(block, code & 0xff); Opal.yield1(block, code >> 8); Opal.yield1(block, 0); Opal.yield1(block, 0); } ; }); return $def(self, '$bytesize', function $$bytesize(string) { return string.length * 4; });}, {$$s: self}); $send($$$('Encoding'), 'register', ["UTF-32BE", (new Map([["inherits", $$$($$$('Encoding'), 'UTF_32LE')]]))], function $$6(){var self = $$6.$$s == null ? this : $$6.$$s; return $def(self, '$each_byte', function $$each_byte(string) { var block = $$each_byte.$$p || nil; $$each_byte.$$p = null; ; for (var i = 0, length = string.length; i < length; i++) { var code = string.charCodeAt(i); Opal.yield1(block, 0); Opal.yield1(block, 0); Opal.yield1(block, code >> 8); Opal.yield1(block, code & 0xff); } ; })}, {$$s: self}); $send($$$('Encoding'), 'register', ["ASCII-8BIT", (new Map([["aliases", ["BINARY"]], ["ascii", true]]))], function $$7(){var self = $$7.$$s == null ? this : $$7.$$s; $def(self, '$each_char', function $$each_char(string) { var block = $$each_char.$$p || nil; $$each_char.$$p = null; ; for (var i = 0, length = string.length; i < length; i++) { var chr = new String(string.charAt(i)); chr.encoding = string.encoding; Opal.yield1(block, chr); } ; }); $def(self, '$charsize', function $$charsize(string) { return string.length; }); $def(self, '$each_byte', function $$each_byte(string) { var block = $$each_byte.$$p || nil; $$each_byte.$$p = null; ; for (var i = 0, length = string.length; i < length; i++) { var code = string.charCodeAt(i); Opal.yield1(block, code & 0xff); } ; }); $def(self, '$bytesize', function $$bytesize(string) { return string.length; }); return $def(self, '$binary?', $return_val(true));}, {$$s: self}); $$$('Encoding').$register("ISO-8859-1", (new Map([["aliases", ["ISO8859-1"]], ["ascii", true], ["inherits", $$$($$$('Encoding'), 'ASCII_8BIT')]]))); $$$('Encoding').$register("US-ASCII", (new Map([["aliases", ["ASCII"]], ["ascii", true], ["inherits", $$$($$$('Encoding'), 'ASCII_8BIT')]]))); (function($base, $super) { var self = $klass($base, $super, 'String'); var $proto = self.$$prototype; $proto.internal_encoding = $proto.bytes = $proto.encoding = nil; self.$attr_reader("encoding"); self.$attr_reader("internal_encoding"); Opal.prop(String.prototype, 'bytes', nil); Opal.prop(String.prototype, 'encoding', $$$($$$('Encoding'), 'UTF_8')); Opal.prop(String.prototype, 'internal_encoding', $$$($$$('Encoding'), 'UTF_8')); $def(self, '$b', function $$b() { var self = this; return self.$dup().$force_encoding("binary") }); $def(self, '$bytesize', function $$bytesize() { var self = this; return self.internal_encoding.$bytesize(self) }); $def(self, '$each_byte', function $$each_byte() { var block = $$each_byte.$$p || nil, self = this; $$each_byte.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["each_byte"], function $$8(){var self = $$8.$$s == null ? this : $$8.$$s; return self.$bytesize()}, {$$s: self}) }; $send(self.internal_encoding, 'each_byte', [self], block.$to_proc()); return self; }); $def(self, '$bytes', function $$bytes() { var self = this, $ret_or_1 = nil; if (typeof self === 'string') { return (new String(self)).$each_byte().$to_a(); } ; self.bytes = ($truthy(($ret_or_1 = self.bytes)) ? ($ret_or_1) : (self.$each_byte().$to_a())); return self.bytes.$dup(); }); $def(self, '$each_char', function $$each_char() { var block = $$each_char.$$p || nil, self = this; $$each_char.$$p = null; ; if (!(block !== nil)) { return $send(self, 'enum_for', ["each_char"], function $$9(){var self = $$9.$$s == null ? this : $$9.$$s; return self.$length()}, {$$s: self}) }; $send(self.encoding, 'each_char', [self], block.$to_proc()); return self; }); $def(self, '$chars', function $$chars() { var block = $$chars.$$p || nil, self = this; $$chars.$$p = null; ; if (!$truthy(block)) { return self.$each_char().$to_a() }; return $send(self, 'each_char', [], block.$to_proc()); }); $def(self, '$each_codepoint', function $$each_codepoint() { var block = $$each_codepoint.$$p || nil, self = this; $$each_codepoint.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("each_codepoint") }; for (var i = 0, length = self.length; i < length; i++) { Opal.yield1(block, self.codePointAt(i)); } ; return self; }); $def(self, '$codepoints', function $$codepoints() { var block = $$codepoints.$$p || nil, self = this; $$codepoints.$$p = null; ; if ((block !== nil)) { return $send(self, 'each_codepoint', [], block.$to_proc()) }; return self.$each_codepoint().$to_a(); }); $def(self, '$encode', function $$encode(encoding) { var self = this; return Opal.enc(self, encoding); }); $def(self, '$force_encoding', function $$force_encoding(encoding) { var self = this; var str = self; if (encoding === str.encoding) { return str; } encoding = $Opal['$coerce_to!'](encoding, $$$('String'), "to_s"); encoding = $$$('Encoding').$find(encoding); if (encoding === str.encoding) { return str; } str = Opal.set_encoding(str, encoding); return str; }); $def(self, '$getbyte', function $$getbyte(idx) { var self = this, string_bytes = nil; string_bytes = self.$bytes(); idx = $Opal['$coerce_to!'](idx, $$$('Integer'), "to_int"); if ($truthy($rb_lt(string_bytes.$length(), idx))) { return nil }; return string_bytes['$[]'](idx); }); $def(self, '$initialize_copy', function $$initialize_copy(other) { return "\n" + " self.encoding = other.encoding;\n" + " self.internal_encoding = other.internal_encoding;\n" + " " }); return $def(self, '$valid_encoding?', $return_val(true)); })('::', null); return ($a = [$$$($$('Encoding'), 'UTF_8')], $send($$$('Encoding'), 'default_external=', $a), $a[$a.length - 1]); }; Opal.modules["corelib/math"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $type_error = Opal.type_error, $module = Opal.module, $const_set = Opal.const_set, $Class = Opal.Class, $slice = Opal.slice, $Kernel = Opal.Kernel, $defs = Opal.defs, $truthy = Opal.truthy, $send = Opal.send, $def = Opal.def, $rb_minus = Opal.rb_minus, $eqeqeq = Opal.eqeqeq, $rb_divide = Opal.rb_divide, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('new,raise,Float,Integer,module_function,each,define_method,checked,float!,===,gamma,-,integer!,/,infinite?'); return (function($base, $parent_nesting) { var self = $module($base, 'Math'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $const_set(self, 'E', Math.E); $const_set(self, 'PI', Math.PI); $const_set(self, 'DomainError', $Class.$new($$$('StandardError'))); $defs(self, '$checked', function $$checked(method, $a) { var $post_args, args; $post_args = $slice(arguments, 1); args = $post_args; if (isNaN(args[0]) || (args.length == 2 && isNaN(args[1]))) { return NaN; } var result = Math[method].apply(null, args); if (isNaN(result)) { $Kernel.$raise($$('DomainError'), "Numerical argument is out of domain - \"" + (method) + "\""); } return result; ; }, -2); $defs(self, '$float!', function $Math_float$excl$1(value) { try { return $Kernel.$Float(value) } catch ($err) { if (Opal.rescue($err, [$$$('ArgumentError')])) { try { return $Kernel.$raise($type_error(value, $$$('Float'))) } finally { Opal.pop_exception($err); } } else { throw $err; } } }); $defs(self, '$integer!', function $Math_integer$excl$2(value) { try { return $Kernel.$Integer(value) } catch ($err) { if (Opal.rescue($err, [$$$('ArgumentError')])) { try { return $Kernel.$raise($type_error(value, $$$('Integer'))) } finally { Opal.pop_exception($err); } } else { throw $err; } } }); self.$module_function(); if (!$truthy((typeof(Math.erf) !== "undefined"))) { Opal.prop(Math, 'erf', function(x) { var A1 = 0.254829592, A2 = -0.284496736, A3 = 1.421413741, A4 = -1.453152027, A5 = 1.061405429, P = 0.3275911; var sign = 1; if (x < 0) { sign = -1; } x = Math.abs(x); var t = 1.0 / (1.0 + P * x); var y = 1.0 - (((((A5 * t + A4) * t) + A3) * t + A2) * t + A1) * t * Math.exp(-x * x); return sign * y; }); }; if (!$truthy((typeof(Math.erfc) !== "undefined"))) { Opal.prop(Math, 'erfc', function(x) { var z = Math.abs(x), t = 1.0 / (0.5 * z + 1.0); var A1 = t * 0.17087277 + -0.82215223, A2 = t * A1 + 1.48851587, A3 = t * A2 + -1.13520398, A4 = t * A3 + 0.27886807, A5 = t * A4 + -0.18628806, A6 = t * A5 + 0.09678418, A7 = t * A6 + 0.37409196, A8 = t * A7 + 1.00002368, A9 = t * A8, A10 = -z * z - 1.26551223 + A9; var a = t * Math.exp(A10); if (x < 0.0) { return 2.0 - a; } else { return a; } }); }; $send(["acos", "acosh", "asin", "asinh", "atan", "atanh", "cbrt", "cos", "cosh", "erf", "erfc", "exp", "sin", "sinh", "sqrt", "tanh"], 'each', [], function $Math$3(method){var self = $Math$3.$$s == null ? this : $Math$3.$$s; if (method == null) method = nil; return $send(self, 'define_method', [method], function $$4(x){ if (x == null) x = nil; return $$$('Math').$checked(method, $$$('Math')['$float!'](x));});}, {$$s: self}); $def(self, '$atan2', function $$atan2(y, x) { return $$$('Math').$checked("atan2", $$$('Math')['$float!'](y), $$$('Math')['$float!'](x)) }); $def(self, '$hypot', function $$hypot(x, y) { return $$$('Math').$checked("hypot", $$$('Math')['$float!'](x), $$$('Math')['$float!'](y)) }); $def(self, '$frexp', function $$frexp(x) { x = $$('Math')['$float!'](x); if (isNaN(x)) { return [NaN, 0]; } var ex = Math.floor(Math.log(Math.abs(x)) / Math.log(2)) + 1, frac = x / Math.pow(2, ex); return [frac, ex]; ; }); $def(self, '$gamma', function $$gamma(n) { n = $$('Math')['$float!'](n); var i, t, x, value, result, twoN, threeN, fourN, fiveN; var G = 4.7421875; var P = [ 0.99999999999999709182, 57.156235665862923517, -59.597960355475491248, 14.136097974741747174, -0.49191381609762019978, 0.33994649984811888699e-4, 0.46523628927048575665e-4, -0.98374475304879564677e-4, 0.15808870322491248884e-3, -0.21026444172410488319e-3, 0.21743961811521264320e-3, -0.16431810653676389022e-3, 0.84418223983852743293e-4, -0.26190838401581408670e-4, 0.36899182659531622704e-5 ]; if (isNaN(n)) { return NaN; } if (n === 0 && 1 / n < 0) { return -Infinity; } if (n === -1 || n === -Infinity) { $Kernel.$raise($$('DomainError'), "Numerical argument is out of domain - \"gamma\""); } if ($$('Integer')['$==='](n)) { if (n <= 0) { return isFinite(n) ? Infinity : NaN; } if (n > 171) { return Infinity; } value = n - 2; result = n - 1; while (value > 1) { result *= value; value--; } if (result == 0) { result = 1; } return result; } if (n < 0.5) { return Math.PI / (Math.sin(Math.PI * n) * $$$('Math').$gamma($rb_minus(1, n))); } if (n >= 171.35) { return Infinity; } if (n > 85.0) { twoN = n * n; threeN = twoN * n; fourN = threeN * n; fiveN = fourN * n; return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) * (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) - 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) + 5246819 / (75246796800 * fiveN * n)); } n -= 1; x = P[0]; for (i = 1; i < P.length; ++i) { x += P[i] / (n + i); } t = n + G + 0.5; return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x; ; }); $def(self, '$ldexp', function $$ldexp(mantissa, exponent) { mantissa = $$('Math')['$float!'](mantissa); exponent = $$('Math')['$integer!'](exponent); if (isNaN(exponent)) { $Kernel.$raise($$$('RangeError'), "float NaN out of range of integer"); } return mantissa * Math.pow(2, exponent); ; }); $def(self, '$lgamma', function $$lgamma(n) { if (n == -1) { return [Infinity, 1]; } else { return [Math.log(Math.abs($$$('Math').$gamma(n))), $$$('Math').$gamma(n) < 0 ? -1 : 1]; } }); $def(self, '$log', function $$log(x, base) { ; if ($eqeqeq($$$('String'), x)) { $Kernel.$raise($type_error(x, $$$('Float'))) }; if ($truthy(base == null)) { return $$$('Math').$checked("log", $$$('Math')['$float!'](x)) } else { if ($eqeqeq($$$('String'), base)) { $Kernel.$raise($type_error(base, $$$('Float'))) }; return $rb_divide($$$('Math').$checked("log", $$$('Math')['$float!'](x)), $$$('Math').$checked("log", $$$('Math')['$float!'](base))); }; }, -2); $def(self, '$log10', function $$log10(x) { if ($eqeqeq($$$('String'), x)) { $Kernel.$raise($type_error(x, $$$('Float'))) }; return $$$('Math').$checked("log10", $$$('Math')['$float!'](x)); }); $def(self, '$log2', function $$log2(x) { if ($eqeqeq($$$('String'), x)) { $Kernel.$raise($type_error(x, $$$('Float'))) }; return $$$('Math').$checked("log2", $$$('Math')['$float!'](x)); }); return $def(self, '$tan', function $$tan(x) { x = $$$('Math')['$float!'](x); if ($truthy(x['$infinite?']())) { return $$$($$$('Float'), 'NAN') }; return $$$('Math').$checked("tan", $$$('Math')['$float!'](x)); }); })('::', $nesting) }; Opal.modules["corelib/complex/base"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $truthy = Opal.truthy, $def = Opal.def, $klass = Opal.klass, $nesting = [], nil = Opal.nil; Opal.add_stubs('new,from_string'); (function($base, $parent_nesting) { var self = $module($base, 'Kernel'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $def(self, '$Complex', function $$Complex(real, imag) { if (imag == null) imag = nil; if ($truthy(imag)) { return $$('Complex').$new(real, imag) } else { return $$('Complex').$new(real, 0) }; }, -2) })('::', $nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'String'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $def(self, '$to_c', function $$to_c() { var self = this; return $$('Complex').$from_string(self) }) })('::', null, $nesting); }; Opal.modules["corelib/complex"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $truthy = Opal.truthy, $eqeqeq = Opal.eqeqeq, $Kernel = Opal.Kernel, $defs = Opal.defs, $rb_times = Opal.rb_times, $def = Opal.def, $rb_plus = Opal.rb_plus, $rb_minus = Opal.rb_minus, $rb_divide = Opal.rb_divide, $eqeq = Opal.eqeq, $to_ary = Opal.to_ary, $rb_gt = Opal.rb_gt, $neqeq = Opal.neqeq, $return_val = Opal.return_val, $const_set = Opal.const_set, $alias = Opal.alias, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,real?,===,raise,new,*,cos,sin,attr_reader,freeze,class,==,real,imag,Complex,-@,+,__coerced__,-,nan?,/,conj,abs2,quo,polar,exp,log,>,!=,divmod,**,hypot,atan2,lcm,denominator,finite?,hash,infinite?,numerator,abs,arg,rationalize,to_f,to_i,to_r,inspect,zero?,positive?,Rational,rect,angle'); self.$require("corelib/numeric"); self.$require("corelib/complex/base"); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Complex'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.real = $proto.imag = nil; $defs(self, '$rect', function $$rect(real, imag) { var self = this; if (imag == null) imag = 0; if (!((($eqeqeq($$$('Numeric'), real) && ($truthy(real['$real?']()))) && ($eqeqeq($$$('Numeric'), imag))) && ($truthy(imag['$real?']())))) { $Kernel.$raise($$$('TypeError'), "not a real") }; return self.$new(real, imag); }, -2); $defs(self, '$polar', function $$polar(r, theta) { var self = this; if (theta == null) theta = 0; if (!((($eqeqeq($$$('Numeric'), r) && ($truthy(r['$real?']()))) && ($eqeqeq($$$('Numeric'), theta))) && ($truthy(theta['$real?']())))) { $Kernel.$raise($$$('TypeError'), "not a real") }; return self.$new($rb_times(r, $$$('Math').$cos(theta)), $rb_times(r, $$$('Math').$sin(theta))); }, -2); self.$attr_reader("real", "imag"); $def(self, '$initialize', function $$initialize(real, imag) { var self = this; if (imag == null) imag = 0; self.real = real; self.imag = imag; return self.$freeze(); }, -2); $def(self, '$coerce', function $$coerce(other) { var self = this; if ($eqeqeq($$$('Complex'), other)) { return [other, self] } else if (($eqeqeq($$$('Numeric'), other) && ($truthy(other['$real?']())))) { return [$$$('Complex').$new(other, 0), self] } else { return $Kernel.$raise($$$('TypeError'), "" + (other.$class()) + " can't be coerced into Complex") } }); $def(self, '$==', function $Complex_$eq_eq$1(other) { var self = this, $ret_or_1 = nil; if ($eqeqeq($$$('Complex'), other)) { if ($truthy(($ret_or_1 = self.real['$=='](other.$real())))) { return self.imag['$=='](other.$imag()) } else { return $ret_or_1 } } else if (($eqeqeq($$$('Numeric'), other) && ($truthy(other['$real?']())))) { if ($truthy(($ret_or_1 = self.real['$=='](other)))) { return self.imag['$=='](0) } else { return $ret_or_1 } } else { return other['$=='](self) } }); $def(self, '$-@', function $Complex_$minus$$2() { var self = this; return $Kernel.$Complex(self.real['$-@'](), self.imag['$-@']()) }); $def(self, '$+', function $Complex_$plus$3(other) { var self = this; if ($eqeqeq($$$('Complex'), other)) { return $Kernel.$Complex($rb_plus(self.real, other.$real()), $rb_plus(self.imag, other.$imag())) } else if (($eqeqeq($$$('Numeric'), other) && ($truthy(other['$real?']())))) { return $Kernel.$Complex($rb_plus(self.real, other), self.imag) } else { return self.$__coerced__("+", other) } }); $def(self, '$-', function $Complex_$minus$4(other) { var self = this; if ($eqeqeq($$$('Complex'), other)) { return $Kernel.$Complex($rb_minus(self.real, other.$real()), $rb_minus(self.imag, other.$imag())) } else if (($eqeqeq($$$('Numeric'), other) && ($truthy(other['$real?']())))) { return $Kernel.$Complex($rb_minus(self.real, other), self.imag) } else { return self.$__coerced__("-", other) } }); $def(self, '$*', function $Complex_$$5(other) { var self = this; if ($eqeqeq($$$('Complex'), other)) { return $Kernel.$Complex($rb_minus($rb_times(self.real, other.$real()), $rb_times(self.imag, other.$imag())), $rb_plus($rb_times(self.real, other.$imag()), $rb_times(self.imag, other.$real()))) } else if (($eqeqeq($$$('Numeric'), other) && ($truthy(other['$real?']())))) { return $Kernel.$Complex($rb_times(self.real, other), $rb_times(self.imag, other)) } else { return self.$__coerced__("*", other) } }); $def(self, '$/', function $Complex_$slash$6(other) { var self = this; if ($eqeqeq($$$('Complex'), other)) { if ((((($eqeqeq($$$('Number'), self.real) && ($truthy(self.real['$nan?']()))) || (($eqeqeq($$$('Number'), self.imag) && ($truthy(self.imag['$nan?']()))))) || (($eqeqeq($$$('Number'), other.$real()) && ($truthy(other.$real()['$nan?']()))))) || (($eqeqeq($$$('Number'), other.$imag()) && ($truthy(other.$imag()['$nan?']())))))) { return $$$('Complex').$new($$$($$$('Float'), 'NAN'), $$$($$$('Float'), 'NAN')) } else { return $rb_divide($rb_times(self, other.$conj()), other.$abs2()) } } else if (($eqeqeq($$$('Numeric'), other) && ($truthy(other['$real?']())))) { return $Kernel.$Complex(self.real.$quo(other), self.imag.$quo(other)) } else { return self.$__coerced__("/", other) } }); $def(self, '$**', function $Complex_$$$7(other) { var $a, $b, self = this, r = nil, theta = nil, ore = nil, oim = nil, nr = nil, ntheta = nil, x = nil, z = nil, n = nil, div = nil, mod = nil; if ($eqeq(other, 0)) { return $$$('Complex').$new(1, 0) }; if ($eqeqeq($$$('Complex'), other)) { $b = self.$polar(), $a = $to_ary($b), (r = ($a[0] == null ? nil : $a[0])), (theta = ($a[1] == null ? nil : $a[1])), $b; ore = other.$real(); oim = other.$imag(); nr = $$$('Math').$exp($rb_minus($rb_times(ore, $$$('Math').$log(r)), $rb_times(oim, theta))); ntheta = $rb_plus($rb_times(theta, ore), $rb_times(oim, $$$('Math').$log(r))); return $$$('Complex').$polar(nr, ntheta); } else if ($eqeqeq($$$('Integer'), other)) { if ($truthy($rb_gt(other, 0))) { x = self; z = x; n = $rb_minus(other, 1); while ($neqeq(n, 0)) { $b = n.$divmod(2), $a = $to_ary($b), (div = ($a[0] == null ? nil : $a[0])), (mod = ($a[1] == null ? nil : $a[1])), $b; while ($eqeq(mod, 0)) { x = $Kernel.$Complex($rb_minus($rb_times(x.$real(), x.$real()), $rb_times(x.$imag(), x.$imag())), $rb_times($rb_times(2, x.$real()), x.$imag())); n = div; $b = n.$divmod(2), $a = $to_ary($b), (div = ($a[0] == null ? nil : $a[0])), (mod = ($a[1] == null ? nil : $a[1])), $b; }; z = $rb_times(z, x); n = $rb_minus(n, 1); }; return z; } else { return $rb_divide($$$('Rational').$new(1, 1), self)['$**'](other['$-@']()) } } else if (($eqeqeq($$$('Float'), other) || ($eqeqeq($$$('Rational'), other)))) { $b = self.$polar(), $a = $to_ary($b), (r = ($a[0] == null ? nil : $a[0])), (theta = ($a[1] == null ? nil : $a[1])), $b; return $$$('Complex').$polar(r['$**'](other), $rb_times(theta, other)); } else { return self.$__coerced__("**", other) }; }); $def(self, '$abs', function $$abs() { var self = this; return $$$('Math').$hypot(self.real, self.imag) }); $def(self, '$abs2', function $$abs2() { var self = this; return $rb_plus($rb_times(self.real, self.real), $rb_times(self.imag, self.imag)) }); $def(self, '$angle', function $$angle() { var self = this; return $$$('Math').$atan2(self.imag, self.real) }); $def(self, '$conj', function $$conj() { var self = this; return $Kernel.$Complex(self.real, self.imag['$-@']()) }); $def(self, '$denominator', function $$denominator() { var self = this; return self.real.$denominator().$lcm(self.imag.$denominator()) }); $def(self, '$eql?', function $Complex_eql$ques$8(other) { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = $$('Complex')['$==='](other))) ? (self.real.$class()['$=='](self.imag.$class())) : ($ret_or_2))))) { return self['$=='](other) } else { return $ret_or_1 } }); $def(self, '$fdiv', function $$fdiv(other) { var self = this; if (!$eqeqeq($$$('Numeric'), other)) { $Kernel.$raise($$$('TypeError'), "" + (other.$class()) + " can't be coerced into Complex") }; return $rb_divide(self, other); }); $def(self, '$finite?', function $Complex_finite$ques$9() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.real['$finite?']()))) { return self.imag['$finite?']() } else { return $ret_or_1 } }); $def(self, '$hash', function $$hash() { var self = this; return [$$$('Complex'), self.real, self.imag].$hash() }); $def(self, '$infinite?', function $Complex_infinite$ques$10() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.real['$infinite?']()))) { return $ret_or_1 } else { return self.imag['$infinite?']() } }); $def(self, '$inspect', function $$inspect() { var self = this; return "(" + (self) + ")" }); $def(self, '$numerator', function $$numerator() { var self = this, d = nil; d = self.$denominator(); return $Kernel.$Complex($rb_times(self.real.$numerator(), $rb_divide(d, self.real.$denominator())), $rb_times(self.imag.$numerator(), $rb_divide(d, self.imag.$denominator()))); }); $def(self, '$polar', function $$polar() { var self = this; return [self.$abs(), self.$arg()] }); $def(self, '$rationalize', function $$rationalize(eps) { var self = this; ; if (arguments.length > 1) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 0..1)"); } ; if ($neqeq(self.imag, 0)) { $Kernel.$raise($$$('RangeError'), "can't convert " + (self) + " into Rational") }; return self.$real().$rationalize(eps); }, -1); $def(self, '$real?', $return_val(false)); $def(self, '$rect', function $$rect() { var self = this; return [self.real, self.imag] }); $def(self, '$to_f', function $$to_f() { var self = this; if (!$eqeq(self.imag, 0)) { $Kernel.$raise($$$('RangeError'), "can't convert " + (self) + " into Float") }; return self.real.$to_f(); }); $def(self, '$to_i', function $$to_i() { var self = this; if (!$eqeq(self.imag, 0)) { $Kernel.$raise($$$('RangeError'), "can't convert " + (self) + " into Integer") }; return self.real.$to_i(); }); $def(self, '$to_r', function $$to_r() { var self = this; if (!$eqeq(self.imag, 0)) { $Kernel.$raise($$$('RangeError'), "can't convert " + (self) + " into Rational") }; return self.real.$to_r(); }); $def(self, '$to_s', function $$to_s() { var self = this, result = nil; result = self.real.$inspect(); result = $rb_plus(result, (((($eqeqeq($$$('Number'), self.imag) && ($truthy(self.imag['$nan?']()))) || ($truthy(self.imag['$positive?']()))) || ($truthy(self.imag['$zero?']()))) ? ("+") : ("-"))); result = $rb_plus(result, self.imag.$abs().$inspect()); if (($eqeqeq($$$('Number'), self.imag) && (($truthy(self.imag['$nan?']()) || ($truthy(self.imag['$infinite?']())))))) { result = $rb_plus(result, "*") }; return $rb_plus(result, "i"); }); $const_set($nesting[0], 'I', self.$new(0, 1)); $defs(self, '$from_string', function $$from_string(str) { var re = /[+-]?[\d_]+(\.[\d_]+)?(e\d+)?/, match = str.match(re), real, imag, denominator; function isFloat() { return re.test(str); } function cutFloat() { var match = str.match(re); var number = match[0]; str = str.slice(number.length); return number.replace(/_/g, ''); } // handles both floats and rationals function cutNumber() { if (isFloat()) { var numerator = parseFloat(cutFloat()); if (str[0] === '/') { // rational real part str = str.slice(1); if (isFloat()) { var denominator = parseFloat(cutFloat()); return $Kernel.$Rational(numerator, denominator); } else { // reverting '/' str = '/' + str; return numerator; } } else { // float real part, no denominator return numerator; } } else { return null; } } real = cutNumber(); if (!real) { if (str[0] === 'i') { // i => Complex(0, 1) return $Kernel.$Complex(0, 1); } if (str[0] === '-' && str[1] === 'i') { // -i => Complex(0, -1) return $Kernel.$Complex(0, -1); } if (str[0] === '+' && str[1] === 'i') { // +i => Complex(0, 1) return $Kernel.$Complex(0, 1); } // anything => Complex(0, 0) return $Kernel.$Complex(0, 0); } imag = cutNumber(); if (!imag) { if (str[0] === 'i') { // 3i => Complex(0, 3) return $Kernel.$Complex(0, real); } else { // 3 => Complex(3, 0) return $Kernel.$Complex(real, 0); } } else { // 3+2i => Complex(3, 2) return $Kernel.$Complex(real, imag); } }); (function(self, $parent_nesting) { return $alias(self, "rectangular", "rect") })(Opal.get_singleton_class(self), $nesting); $alias(self, "arg", "angle"); $alias(self, "conjugate", "conj"); $alias(self, "divide", "/"); $alias(self, "imaginary", "imag"); $alias(self, "magnitude", "abs"); $alias(self, "phase", "arg"); $alias(self, "quo", "/"); $alias(self, "rectangular", "rect"); Opal.udef(self, '$' + "negative?");; Opal.udef(self, '$' + "positive?");; Opal.udef(self, '$' + "step");; return nil;; })('::', $$$('Numeric'), $nesting); }; Opal.modules["corelib/rational/base"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $def = Opal.def, $klass = Opal.klass, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('convert,from_string'); (function($base) { var self = $module($base, 'Kernel'); return $def(self, '$Rational', function $$Rational(numerator, denominator) { if (denominator == null) denominator = 1; return $$$('Rational').$convert(numerator, denominator); }, -2) })('::'); return (function($base, $super) { var self = $klass($base, $super, 'String'); return $def(self, '$to_r', function $$to_r() { var self = this; return $$$('Rational').$from_string(self) }) })('::', null); }; Opal.modules["corelib/rational"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $eqeq = Opal.eqeq, $Kernel = Opal.Kernel, $truthy = Opal.truthy, $rb_lt = Opal.rb_lt, $rb_divide = Opal.rb_divide, $defs = Opal.defs, $eqeqeq = Opal.eqeqeq, $not = Opal.not, $Opal = Opal.Opal, $def = Opal.def, $return_ivar = Opal.return_ivar, $rb_minus = Opal.rb_minus, $rb_times = Opal.rb_times, $rb_plus = Opal.rb_plus, $rb_gt = Opal.rb_gt, $rb_le = Opal.rb_le, $return_self = Opal.return_self, $alias = Opal.alias, self = Opal.top, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,to_i,==,raise,<,-@,new,gcd,/,nil?,===,reduce,to_r,!,equal?,coerce_to!,freeze,to_f,numerator,denominator,<=>,-,*,__coerced__,+,Rational,>,**,abs,ceil,with_precision,floor,hash,<=,truncate,send'); self.$require("corelib/numeric"); self.$require("corelib/rational/base"); return (function($base, $super) { var self = $klass($base, $super, 'Rational'); var $proto = self.$$prototype; $proto.num = $proto.den = nil; $defs(self, '$reduce', function $$reduce(num, den) { var self = this, gcd = nil; num = num.$to_i(); den = den.$to_i(); if ($eqeq(den, 0)) { $Kernel.$raise($$$('ZeroDivisionError'), "divided by 0") } else if ($truthy($rb_lt(den, 0))) { num = num['$-@'](); den = den['$-@'](); } else if ($eqeq(den, 1)) { return self.$new(num, den) }; gcd = num.$gcd(den); return self.$new($rb_divide(num, gcd), $rb_divide(den, gcd)); }); $defs(self, '$convert', function $$convert(num, den) { var self = this; if (($truthy(num['$nil?']()) || ($truthy(den['$nil?']())))) { $Kernel.$raise($$$('TypeError'), "cannot convert nil into Rational") }; if (($eqeqeq($$$('Integer'), num) && ($eqeqeq($$$('Integer'), den)))) { return self.$reduce(num, den) }; if ((($eqeqeq($$$('Float'), num) || ($eqeqeq($$$('String'), num))) || ($eqeqeq($$$('Complex'), num)))) { num = num.$to_r() }; if ((($eqeqeq($$$('Float'), den) || ($eqeqeq($$$('String'), den))) || ($eqeqeq($$$('Complex'), den)))) { den = den.$to_r() }; if (($truthy(den['$equal?'](1)) && ($not($$$('Integer')['$==='](num))))) { return $Opal['$coerce_to!'](num, $$$('Rational'), "to_r") } else if (($eqeqeq($$$('Numeric'), num) && ($eqeqeq($$$('Numeric'), den)))) { return $rb_divide(num, den) } else { return self.$reduce(num, den) }; }); $def(self, '$initialize', function $$initialize(num, den) { var self = this; self.num = num; self.den = den; return self.$freeze(); }); $def(self, '$numerator', $return_ivar("num")); $def(self, '$denominator', $return_ivar("den")); $def(self, '$coerce', function $$coerce(other) { var self = this, $ret_or_1 = nil; if ($eqeqeq($$$('Rational'), ($ret_or_1 = other))) { return [other, self] } else if ($eqeqeq($$$('Integer'), $ret_or_1)) { return [other.$to_r(), self] } else if ($eqeqeq($$$('Float'), $ret_or_1)) { return [other, self.$to_f()] } else { return nil } }); $def(self, '$==', function $Rational_$eq_eq$1(other) { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($eqeqeq($$$('Rational'), ($ret_or_1 = other))) { if ($truthy(($ret_or_2 = self.num['$=='](other.$numerator())))) { return self.den['$=='](other.$denominator()) } else { return $ret_or_2 } } else if ($eqeqeq($$$('Integer'), $ret_or_1)) { if ($truthy(($ret_or_2 = self.num['$=='](other)))) { return self.den['$=='](1) } else { return $ret_or_2 } } else if ($eqeqeq($$$('Float'), $ret_or_1)) { return self.$to_f()['$=='](other) } else { return other['$=='](self) } }); $def(self, '$<=>', function $Rational_$lt_eq_gt$2(other) { var self = this, $ret_or_1 = nil; if ($eqeqeq($$$('Rational'), ($ret_or_1 = other))) { return $rb_minus($rb_times(self.num, other.$denominator()), $rb_times(self.den, other.$numerator()))['$<=>'](0) } else if ($eqeqeq($$$('Integer'), $ret_or_1)) { return $rb_minus(self.num, $rb_times(self.den, other))['$<=>'](0) } else if ($eqeqeq($$$('Float'), $ret_or_1)) { return self.$to_f()['$<=>'](other) } else { return self.$__coerced__("<=>", other) } }); $def(self, '$+', function $Rational_$plus$3(other) { var self = this, $ret_or_1 = nil, num = nil, den = nil; if ($eqeqeq($$$('Rational'), ($ret_or_1 = other))) { num = $rb_plus($rb_times(self.num, other.$denominator()), $rb_times(self.den, other.$numerator())); den = $rb_times(self.den, other.$denominator()); return $Kernel.$Rational(num, den); } else if ($eqeqeq($$$('Integer'), $ret_or_1)) { return $Kernel.$Rational($rb_plus(self.num, $rb_times(other, self.den)), self.den) } else if ($eqeqeq($$$('Float'), $ret_or_1)) { return $rb_plus(self.$to_f(), other) } else { return self.$__coerced__("+", other) } }); $def(self, '$-', function $Rational_$minus$4(other) { var self = this, $ret_or_1 = nil, num = nil, den = nil; if ($eqeqeq($$$('Rational'), ($ret_or_1 = other))) { num = $rb_minus($rb_times(self.num, other.$denominator()), $rb_times(self.den, other.$numerator())); den = $rb_times(self.den, other.$denominator()); return $Kernel.$Rational(num, den); } else if ($eqeqeq($$$('Integer'), $ret_or_1)) { return $Kernel.$Rational($rb_minus(self.num, $rb_times(other, self.den)), self.den) } else if ($eqeqeq($$$('Float'), $ret_or_1)) { return $rb_minus(self.$to_f(), other) } else { return self.$__coerced__("-", other) } }); $def(self, '$*', function $Rational_$$5(other) { var self = this, $ret_or_1 = nil, num = nil, den = nil; if ($eqeqeq($$$('Rational'), ($ret_or_1 = other))) { num = $rb_times(self.num, other.$numerator()); den = $rb_times(self.den, other.$denominator()); return $Kernel.$Rational(num, den); } else if ($eqeqeq($$$('Integer'), $ret_or_1)) { return $Kernel.$Rational($rb_times(self.num, other), self.den) } else if ($eqeqeq($$$('Float'), $ret_or_1)) { return $rb_times(self.$to_f(), other) } else { return self.$__coerced__("*", other) } }); $def(self, '$/', function $Rational_$slash$6(other) { var self = this, $ret_or_1 = nil, num = nil, den = nil; if ($eqeqeq($$$('Rational'), ($ret_or_1 = other))) { num = $rb_times(self.num, other.$denominator()); den = $rb_times(self.den, other.$numerator()); return $Kernel.$Rational(num, den); } else if ($eqeqeq($$$('Integer'), $ret_or_1)) { if ($eqeq(other, 0)) { return $rb_divide(self.$to_f(), 0.0) } else { return $Kernel.$Rational(self.num, $rb_times(self.den, other)) } } else if ($eqeqeq($$$('Float'), $ret_or_1)) { return $rb_divide(self.$to_f(), other) } else { return self.$__coerced__("/", other) } }); $def(self, '$**', function $Rational_$$$7(other) { var self = this, $ret_or_1 = nil; if ($eqeqeq($$$('Integer'), ($ret_or_1 = other))) { if (($eqeq(self, 0) && ($truthy($rb_lt(other, 0))))) { return $$$($$$('Float'), 'INFINITY') } else if ($truthy($rb_gt(other, 0))) { return $Kernel.$Rational(self.num['$**'](other), self.den['$**'](other)) } else if ($truthy($rb_lt(other, 0))) { return $Kernel.$Rational(self.den['$**'](other['$-@']()), self.num['$**'](other['$-@']())) } else { return $Kernel.$Rational(1, 1) } } else if ($eqeqeq($$$('Float'), $ret_or_1)) { return self.$to_f()['$**'](other) } else if ($eqeqeq($$$('Rational'), $ret_or_1)) { if ($eqeq(other, 0)) { return $Kernel.$Rational(1, 1) } else if ($eqeq(other.$denominator(), 1)) { if ($truthy($rb_lt(other, 0))) { return $Kernel.$Rational(self.den['$**'](other.$numerator().$abs()), self.num['$**'](other.$numerator().$abs())) } else { return $Kernel.$Rational(self.num['$**'](other.$numerator()), self.den['$**'](other.$numerator())) } } else if (($eqeq(self, 0) && ($truthy($rb_lt(other, 0))))) { return $Kernel.$raise($$$('ZeroDivisionError'), "divided by 0") } else { return self.$to_f()['$**'](other) } } else { return self.$__coerced__("**", other) } }); $def(self, '$abs', function $$abs() { var self = this; return $Kernel.$Rational(self.num.$abs(), self.den.$abs()) }); $def(self, '$ceil', function $$ceil(precision) { var self = this; if (precision == null) precision = 0; if ($eqeq(precision, 0)) { return $rb_divide(self.num['$-@'](), self.den)['$-@']().$ceil() } else { return self.$with_precision("ceil", precision) }; }, -1); $def(self, '$floor', function $$floor(precision) { var self = this; if (precision == null) precision = 0; if ($eqeq(precision, 0)) { return $rb_divide(self.num['$-@'](), self.den)['$-@']().$floor() } else { return self.$with_precision("floor", precision) }; }, -1); $def(self, '$hash', function $$hash() { var self = this; return [$$$('Rational'), self.num, self.den].$hash() }); $def(self, '$inspect', function $$inspect() { var self = this; return "(" + (self) + ")" }); $def(self, '$rationalize', function $$rationalize(eps) { var self = this; ; if (arguments.length > 1) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (" + (arguments.length) + " for 0..1)"); } if (eps == null) { return self; } var e = eps.$abs(), a = $rb_minus(self, e), b = $rb_plus(self, e); var p0 = 0, p1 = 1, q0 = 1, q1 = 0, p2, q2; var c, k, t; while (true) { c = (a).$ceil(); if ($rb_le(c, b)) { break; } k = c - 1; p2 = k * p1 + p0; q2 = k * q1 + q0; t = $rb_divide(1, $rb_minus(b, k)); b = $rb_divide(1, $rb_minus(a, k)); a = t; p0 = p1; q0 = q1; p1 = p2; q1 = q2; } return $Kernel.$Rational(c * p1 + p0, c * q1 + q0); ; }, -1); $def(self, '$round', function $$round(precision) { var self = this, num = nil, den = nil, approx = nil; if (precision == null) precision = 0; if (!$eqeq(precision, 0)) { return self.$with_precision("round", precision) }; if ($eqeq(self.num, 0)) { return 0 }; if ($eqeq(self.den, 1)) { return self.num }; num = $rb_plus($rb_times(self.num.$abs(), 2), self.den); den = $rb_times(self.den, 2); approx = $rb_divide(num, den).$truncate(); if ($truthy($rb_lt(self.num, 0))) { return approx['$-@']() } else { return approx }; }, -1); $def(self, '$to_f', function $$to_f() { var self = this; return $rb_divide(self.num, self.den) }); $def(self, '$to_i', function $$to_i() { var self = this; return self.$truncate() }); $def(self, '$to_r', $return_self); $def(self, '$to_s', function $$to_s() { var self = this; return "" + (self.num) + "/" + (self.den) }); $def(self, '$truncate', function $$truncate(precision) { var self = this; if (precision == null) precision = 0; if ($eqeq(precision, 0)) { if ($truthy($rb_lt(self.num, 0))) { return self.$ceil() } else { return self.$floor() } } else { return self.$with_precision("truncate", precision) }; }, -1); $def(self, '$with_precision', function $$with_precision(method, precision) { var self = this, p = nil, s = nil; if (!$eqeqeq($$$('Integer'), precision)) { $Kernel.$raise($$$('TypeError'), "not an Integer") }; p = (10)['$**'](precision); s = $rb_times(self, p); if ($truthy($rb_lt(precision, 1))) { return $rb_divide(s.$send(method), p).$to_i() } else { return $Kernel.$Rational(s.$send(method), p) }; }); $defs(self, '$from_string', function $$from_string(string) { var str = string.trimLeft(), re = /^[+-]?[\d_]+(\.[\d_]+)?/, match = str.match(re), numerator, denominator; function isFloat() { return re.test(str); } function cutFloat() { var match = str.match(re); var number = match[0]; str = str.slice(number.length); return number.replace(/_/g, ''); } if (isFloat()) { numerator = parseFloat(cutFloat()); if (str[0] === '/') { // rational real part str = str.slice(1); if (isFloat()) { denominator = parseFloat(cutFloat()); return $Kernel.$Rational(numerator, denominator); } else { return $Kernel.$Rational(numerator, 1); } } else { return $Kernel.$Rational(numerator, 1); } } else { return $Kernel.$Rational(0, 1); } }); $alias(self, "divide", "/"); return $alias(self, "quo", "/"); })('::', $$$('Numeric')); }; Opal.modules["corelib/time"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $slice = Opal.slice, $deny_frozen_access = Opal.deny_frozen_access, $klass = Opal.klass, $Kernel = Opal.Kernel, $Opal = Opal.Opal, $defs = Opal.defs, $eqeqeq = Opal.eqeqeq, $def = Opal.def, $truthy = Opal.truthy, $rb_gt = Opal.rb_gt, $rb_lt = Opal.rb_lt, $send = Opal.send, $rb_plus = Opal.rb_plus, $rb_divide = Opal.rb_divide, $rb_minus = Opal.rb_minus, $range = Opal.range, $neqeq = Opal.neqeq, $rb_le = Opal.rb_le, $eqeq = Opal.eqeq, $alias = Opal.alias, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,===,raise,coerce_to!,respond_to?,to_str,to_i,_parse_offset,new,<=>,to_f,nil?,>,<,strftime,each,define_method,year,month,day,+,round,/,-,copy_instance_variables,initialize_dup,is_a?,zero?,wday,hash,utc?,mon,yday,hour,min,sec,rjust,ljust,zone,to_s,[],cweek_cyear,jd,to_date,format,isdst,!=,<=,==,ceil,local,gm,asctime,getgm,gmt_offset,inspect,usec,gmtime,gmt?'); self.$require("corelib/comparable"); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Time'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$include($$$('Comparable')); var days_of_week = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], short_days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], short_months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], long_months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; ; $defs(self, '$at', function $$at(seconds, frac) { ; var result; if ($$$('Time')['$==='](seconds)) { if (frac !== undefined) { $Kernel.$raise($$$('TypeError'), "can't convert Time into an exact number") } result = new Date(seconds.getTime()); result.timezone = seconds.timezone; return result; } if (!seconds.$$is_number) { seconds = $Opal['$coerce_to!'](seconds, $$$('Integer'), "to_int"); } if (frac === undefined) { return new Date(seconds * 1000); } if (!frac.$$is_number) { frac = $Opal['$coerce_to!'](frac, $$$('Integer'), "to_int"); } return new Date(seconds * 1000 + (frac / 1000)); ; }, -2); function time_params(year, month, day, hour, min, sec) { if (year.$$is_string) { year = parseInt(year, 10); } else { year = $Opal['$coerce_to!'](year, $$$('Integer'), "to_int"); } if (month === nil) { month = 1; } else if (!month.$$is_number) { if ((month)['$respond_to?']("to_str")) { month = (month).$to_str(); switch (month.toLowerCase()) { case 'jan': month = 1; break; case 'feb': month = 2; break; case 'mar': month = 3; break; case 'apr': month = 4; break; case 'may': month = 5; break; case 'jun': month = 6; break; case 'jul': month = 7; break; case 'aug': month = 8; break; case 'sep': month = 9; break; case 'oct': month = 10; break; case 'nov': month = 11; break; case 'dec': month = 12; break; default: month = (month).$to_i(); } } else { month = $Opal['$coerce_to!'](month, $$$('Integer'), "to_int"); } } if (month < 1 || month > 12) { $Kernel.$raise($$$('ArgumentError'), "month out of range: " + (month)) } month = month - 1; if (day === nil) { day = 1; } else if (day.$$is_string) { day = parseInt(day, 10); } else { day = $Opal['$coerce_to!'](day, $$$('Integer'), "to_int"); } if (day < 1 || day > 31) { $Kernel.$raise($$$('ArgumentError'), "day out of range: " + (day)) } if (hour === nil) { hour = 0; } else if (hour.$$is_string) { hour = parseInt(hour, 10); } else { hour = $Opal['$coerce_to!'](hour, $$$('Integer'), "to_int"); } if (hour < 0 || hour > 24) { $Kernel.$raise($$$('ArgumentError'), "hour out of range: " + (hour)) } if (min === nil) { min = 0; } else if (min.$$is_string) { min = parseInt(min, 10); } else { min = $Opal['$coerce_to!'](min, $$$('Integer'), "to_int"); } if (min < 0 || min > 59) { $Kernel.$raise($$$('ArgumentError'), "min out of range: " + (min)) } if (sec === nil) { sec = 0; } else if (!sec.$$is_number) { if (sec.$$is_string) { sec = parseInt(sec, 10); } else { sec = $Opal['$coerce_to!'](sec, $$$('Integer'), "to_int"); } } if (sec < 0 || sec > 60) { $Kernel.$raise($$$('ArgumentError'), "sec out of range: " + (sec)) } return [year, month, day, hour, min, sec]; } ; $defs(self, '$new', function $Time_new$1(year, month, day, hour, min, sec, utc_offset) { var self = this; ; if (month == null) month = nil; if (day == null) day = nil; if (hour == null) hour = nil; if (min == null) min = nil; if (sec == null) sec = nil; if (utc_offset == null) utc_offset = nil; var args, result, timezone, utc_date; if (year === undefined) { return new Date(); } args = time_params(year, month, day, hour, min, sec); year = args[0]; month = args[1]; day = args[2]; hour = args[3]; min = args[4]; sec = args[5]; if (utc_offset === nil) { result = new Date(year, month, day, hour, min, 0, sec * 1000); if (year < 100) { result.setFullYear(year); } return result; } timezone = self.$_parse_offset(utc_offset); utc_date = new Date(Date.UTC(year, month, day, hour, min, 0, sec * 1000)); if (year < 100) { utc_date.setUTCFullYear(year); } result = new Date(utc_date.getTime() - timezone * 3600000); result.timezone = timezone; return result; ; }, -1); $defs(self, '$_parse_offset', function $$_parse_offset(utc_offset) { var timezone; if (utc_offset.$$is_string) { if (utc_offset == 'UTC') { timezone = 0; } else if(/^[+-]\d\d:[0-5]\d$/.test(utc_offset)) { var sign, hours, minutes; sign = utc_offset[0]; hours = +(utc_offset[1] + utc_offset[2]); minutes = +(utc_offset[4] + utc_offset[5]); timezone = (sign == '-' ? -1 : 1) * (hours + minutes / 60); } else { // Unsupported: "A".."I","K".."Z" $Kernel.$raise($$$('ArgumentError'), "\"+HH:MM\", \"-HH:MM\", \"UTC\" expected for utc_offset: " + (utc_offset)) } } else if (utc_offset.$$is_number) { timezone = utc_offset / 3600; } else { $Kernel.$raise($$$('ArgumentError'), "Opal doesn't support other types for a timezone argument than Integer and String") } return timezone; }); $defs(self, '$local', function $$local(year, month, day, hour, min, sec, millisecond, _dummy1, _dummy2, _dummy3) { if (month == null) month = nil; if (day == null) day = nil; if (hour == null) hour = nil; if (min == null) min = nil; if (sec == null) sec = nil; if (millisecond == null) millisecond = nil; if (_dummy1 == null) _dummy1 = nil; if (_dummy2 == null) _dummy2 = nil; if (_dummy3 == null) _dummy3 = nil; var args, result; if (arguments.length === 10) { args = $slice(arguments); year = args[5]; month = args[4]; day = args[3]; hour = args[2]; min = args[1]; sec = args[0]; } args = time_params(year, month, day, hour, min, sec); year = args[0]; month = args[1]; day = args[2]; hour = args[3]; min = args[4]; sec = args[5]; result = new Date(year, month, day, hour, min, 0, sec * 1000); if (year < 100) { result.setFullYear(year); } return result; ; }, -2); $defs(self, '$gm', function $$gm(year, month, day, hour, min, sec, millisecond, _dummy1, _dummy2, _dummy3) { if (month == null) month = nil; if (day == null) day = nil; if (hour == null) hour = nil; if (min == null) min = nil; if (sec == null) sec = nil; if (millisecond == null) millisecond = nil; if (_dummy1 == null) _dummy1 = nil; if (_dummy2 == null) _dummy2 = nil; if (_dummy3 == null) _dummy3 = nil; var args, result; if (arguments.length === 10) { args = $slice(arguments); year = args[5]; month = args[4]; day = args[3]; hour = args[2]; min = args[1]; sec = args[0]; } args = time_params(year, month, day, hour, min, sec); year = args[0]; month = args[1]; day = args[2]; hour = args[3]; min = args[4]; sec = args[5]; result = new Date(Date.UTC(year, month, day, hour, min, 0, sec * 1000)); if (year < 100) { result.setUTCFullYear(year); } result.timezone = 0; return result; ; }, -2); $defs(self, '$now', function $$now() { var self = this; return self.$new() }); $def(self, '$+', function $Time_$plus$2(other) { var self = this; if ($eqeqeq($$$('Time'), other)) { $Kernel.$raise($$$('TypeError'), "time + time?") }; if (!other.$$is_number) { other = $Opal['$coerce_to!'](other, $$$('Integer'), "to_int"); } var result = new Date(self.getTime() + (other * 1000)); result.timezone = self.timezone; return result; ; }); $def(self, '$-', function $Time_$minus$3(other) { var self = this; if ($eqeqeq($$$('Time'), other)) { return (self.getTime() - other.getTime()) / 1000 }; if (!other.$$is_number) { other = $Opal['$coerce_to!'](other, $$$('Integer'), "to_int"); } var result = new Date(self.getTime() - (other * 1000)); result.timezone = self.timezone; return result; ; }); $def(self, '$<=>', function $Time_$lt_eq_gt$4(other) { var self = this, r = nil; if ($eqeqeq($$$('Time'), other)) { return self.$to_f()['$<=>'](other.$to_f()) } else { r = other['$<=>'](self); if ($truthy(r['$nil?']())) { return nil } else if ($truthy($rb_gt(r, 0))) { return -1 } else if ($truthy($rb_lt(r, 0))) { return 1 } else { return 0 }; } }); $def(self, '$==', function $Time_$eq_eq$5(other) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = $$$('Time')['$==='](other)))) { return self.$to_f() === other.$to_f() } else { return $ret_or_1 } }); $def(self, '$asctime', function $$asctime() { var self = this; return self.$strftime("%a %b %e %H:%M:%S %Y") }); $send([["year", "getFullYear", "getUTCFullYear"], ["mon", "getMonth", "getUTCMonth", 1], ["wday", "getDay", "getUTCDay"], ["day", "getDate", "getUTCDate"], ["hour", "getHours", "getUTCHours"], ["min", "getMinutes", "getUTCMinutes"], ["sec", "getSeconds", "getUTCSeconds"]], 'each', [], function $Time$6(method, getter, utcgetter, difference){var self = $Time$6.$$s == null ? this : $Time$6.$$s; if (method == null) method = nil; if (getter == null) getter = nil; if (utcgetter == null) utcgetter = nil; if (difference == null) difference = 0; return $send(self, 'define_method', [method], function $$7(){var self = $$7.$$s == null ? this : $$7.$$s; return difference + ((self.timezone != null) ? (new Date(self.getTime() + self.timezone * 3600000))[utcgetter]() : self[getter]()) }, {$$s: self});}, {$$arity: -4, $$s: self}); $def(self, '$yday', function $$yday() { var self = this, start_of_year = nil, start_of_day = nil, one_day = nil; start_of_year = $$('Time').$new(self.$year()).$to_i(); start_of_day = $$('Time').$new(self.$year(), self.$month(), self.$day()).$to_i(); one_day = 86400; return $rb_plus($rb_divide($rb_minus(start_of_day, start_of_year), one_day).$round(), 1); }); $def(self, '$isdst', function $$isdst() { var self = this; var jan = new Date(self.getFullYear(), 0, 1), jul = new Date(self.getFullYear(), 6, 1); return self.getTimezoneOffset() < Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset()); }); $def(self, '$dup', function $$dup() { var self = this, copy = nil; copy = new Date(self.getTime()); copy.$copy_instance_variables(self); copy.$initialize_dup(self); return copy; }); $def(self, '$eql?', function $Time_eql$ques$8(other) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = other['$is_a?']($$$('Time'))))) { return self['$<=>'](other)['$zero?']() } else { return $ret_or_1 } }); $send([["sunday?", 0], ["monday?", 1], ["tuesday?", 2], ["wednesday?", 3], ["thursday?", 4], ["friday?", 5], ["saturday?", 6]], 'each', [], function $Time$9(method, weekday){var self = $Time$9.$$s == null ? this : $Time$9.$$s; if (method == null) method = nil; if (weekday == null) weekday = nil; return $send(self, 'define_method', [method], function $$10(){var self = $$10.$$s == null ? this : $$10.$$s; return self.$wday() === weekday}, {$$s: self});}, {$$s: self}); $def(self, '$hash', function $$hash() { var self = this; return [$$$('Time'), self.getTime()].$hash() }); $def(self, '$inspect', function $$inspect() { var self = this; if ($truthy(self['$utc?']())) { return self.$strftime("%Y-%m-%d %H:%M:%S UTC") } else { return self.$strftime("%Y-%m-%d %H:%M:%S %z") } }); $def(self, '$succ', function $$succ() { var self = this; var result = new Date(self.getTime() + 1000); result.timezone = self.timezone; return result; }); $def(self, '$usec', function $$usec() { var self = this; return self.getMilliseconds() * 1000; }); $def(self, '$zone', function $$zone() { var self = this; if (self.timezone === 0) return "UTC"; else if (self.timezone != null) return nil; var string = self.toString(), result; if (string.indexOf('(') == -1) { result = string.match(/[A-Z]{3,4}/)[0]; } else { result = string.match(/\((.+)\)(?:\s|$)/)[1] } if (result == "GMT" && /(GMT\W*\d{4})/.test(string)) { return RegExp.$1; } else { return result; } }); $def(self, '$getgm', function $$getgm() { var self = this; var result = new Date(self.getTime()); result.timezone = 0; return result; }); $def(self, '$gmtime', function $$gmtime() { var self = this; if (self.timezone !== 0) { $deny_frozen_access(self); self.timezone = 0; } return self; }); $def(self, '$gmt?', function $Time_gmt$ques$11() { var self = this; return self.timezone === 0; }); $def(self, '$gmt_offset', function $$gmt_offset() { var self = this; return (self.timezone != null) ? self.timezone * 60 : -self.getTimezoneOffset() * 60; }); $def(self, '$strftime', function $$strftime(format) { var self = this; return format.replace(/%([\-_#^0]*:{0,2})(\d+)?([EO]*)(.)/g, function(full, flags, width, _, conv) { var result = "", jd, c, s, zero = flags.indexOf('0') !== -1, pad = flags.indexOf('-') === -1, blank = flags.indexOf('_') !== -1, upcase = flags.indexOf('^') !== -1, invert = flags.indexOf('#') !== -1, colons = (flags.match(':') || []).length; width = parseInt(width, 10); if (zero && blank) { if (flags.indexOf('0') < flags.indexOf('_')) { zero = false; } else { blank = false; } } switch (conv) { case 'Y': result += self.$year(); break; case 'C': zero = !blank; result += Math.round(self.$year() / 100); break; case 'y': zero = !blank; result += (self.$year() % 100); break; case 'm': zero = !blank; result += self.$mon(); break; case 'B': result += long_months[self.$mon() - 1]; break; case 'b': case 'h': blank = !zero; result += short_months[self.$mon() - 1]; break; case 'd': zero = !blank result += self.$day(); break; case 'e': blank = !zero result += self.$day(); break; case 'j': zero = !blank; width = isNaN(width) ? 3 : width; result += self.$yday(); break; case 'H': zero = !blank; result += self.$hour(); break; case 'k': blank = !zero; result += self.$hour(); break; case 'I': zero = !blank; result += (self.$hour() % 12 || 12); break; case 'l': blank = !zero; result += (self.$hour() % 12 || 12); break; case 'P': result += (self.$hour() >= 12 ? "pm" : "am"); break; case 'p': result += (self.$hour() >= 12 ? "PM" : "AM"); break; case 'M': zero = !blank; result += self.$min(); break; case 'S': zero = !blank; result += self.$sec() break; case 'L': zero = !blank; width = isNaN(width) ? 3 : width; result += self.getMilliseconds(); break; case 'N': width = isNaN(width) ? 9 : width; result += (self.getMilliseconds().toString()).$rjust(3, "0"); result = (result).$ljust(width, "0"); break; case 'z': var offset = (self.timezone == null) ? self.getTimezoneOffset() : (-self.timezone * 60), hours = Math.floor(Math.abs(offset) / 60), minutes = Math.abs(offset) % 60; result += offset < 0 ? "+" : "-"; result += hours < 10 ? "0" : ""; result += hours; if (colons > 0) { result += ":"; } result += minutes < 10 ? "0" : ""; result += minutes; if (colons > 1) { result += ":00"; } break; case 'Z': result += self.$zone(); break; case 'A': result += days_of_week[self.$wday()]; break; case 'a': result += short_days[self.$wday()]; break; case 'u': result += (self.$wday() + 1); break; case 'w': result += self.$wday(); break; case 'V': result += self.$cweek_cyear()['$[]'](0).$to_s().$rjust(2, "0"); break; case 'G': result += self.$cweek_cyear()['$[]'](1); break; case 'g': result += self.$cweek_cyear()['$[]'](1)['$[]']($range(-2, -1, false)); break; case 's': result += self.$to_i(); break; case 'n': result += "\n"; break; case 't': result += "\t"; break; case '%': result += "%"; break; case 'c': result += self.$strftime("%a %b %e %T %Y"); break; case 'D': case 'x': result += self.$strftime("%m/%d/%y"); break; case 'F': result += self.$strftime("%Y-%m-%d"); break; case 'v': result += self.$strftime("%e-%^b-%4Y"); break; case 'r': result += self.$strftime("%I:%M:%S %p"); break; case 'R': result += self.$strftime("%H:%M"); break; case 'T': case 'X': result += self.$strftime("%H:%M:%S"); break; // Non-standard: JIS X 0301 date format case 'J': jd = self.$to_date().$jd(); if (jd < 2405160) { result += self.$strftime("%Y-%m-%d"); break; } else if (jd < 2419614) c = 'M', s = 1867; else if (jd < 2424875) c = 'T', s = 1911; else if (jd < 2447535) c = 'S', s = 1925; else if (jd < 2458605) c = 'H', s = 1988; else c = 'R', s = 2018; result += self.$format("%c%02d", c, $rb_minus(self.$year(), s)); result += self.$strftime("-%m-%d"); break; default: return full; } if (upcase) { result = result.toUpperCase(); } if (invert) { result = result.replace(/[A-Z]/, function(c) { c.toLowerCase() }). replace(/[a-z]/, function(c) { c.toUpperCase() }); } if (pad && (zero || blank)) { result = (result).$rjust(isNaN(width) ? 2 : width, blank ? " " : "0"); } return result; }); }); $def(self, '$to_a', function $$to_a() { var self = this; return [self.$sec(), self.$min(), self.$hour(), self.$day(), self.$month(), self.$year(), self.$wday(), self.$yday(), self.$isdst(), self.$zone()] }); $def(self, '$to_f', function $$to_f() { var self = this; return self.getTime() / 1000; }); $def(self, '$to_i', function $$to_i() { var self = this; return parseInt(self.getTime() / 1000, 10); }); $def(self, '$cweek_cyear', function $$cweek_cyear() { var self = this, jan01 = nil, jan01_wday = nil, first_monday = nil, year = nil, offset = nil, week = nil, dec31 = nil, dec31_wday = nil; jan01 = $$$('Time').$new(self.$year(), 1, 1); jan01_wday = jan01.$wday(); first_monday = 0; year = self.$year(); if (($truthy($rb_le(jan01_wday, 4)) && ($neqeq(jan01_wday, 0)))) { offset = $rb_minus(jan01_wday, 1) } else { offset = $rb_minus($rb_minus(jan01_wday, 7), 1); if ($eqeq(offset, -8)) { offset = -1 }; }; week = $rb_divide($rb_plus(self.$yday(), offset), 7.0).$ceil(); if ($truthy($rb_le(week, 0))) { return $$$('Time').$new($rb_minus(self.$year(), 1), 12, 31).$cweek_cyear() } else if ($eqeq(week, 53)) { dec31 = $$$('Time').$new(self.$year(), 12, 31); dec31_wday = dec31.$wday(); if (($truthy($rb_le(dec31_wday, 3)) && ($neqeq(dec31_wday, 0)))) { week = 1; year = $rb_plus(year, 1); }; }; return [week, year]; }); (function(self, $parent_nesting) { $alias(self, "mktime", "local"); return $alias(self, "utc", "gm"); })(Opal.get_singleton_class(self), $nesting); $alias(self, "ctime", "asctime"); $alias(self, "dst?", "isdst"); $alias(self, "getutc", "getgm"); $alias(self, "gmtoff", "gmt_offset"); $alias(self, "mday", "day"); $alias(self, "month", "mon"); $alias(self, "to_s", "inspect"); $alias(self, "tv_sec", "to_i"); $alias(self, "tv_usec", "usec"); $alias(self, "utc", "gmtime"); $alias(self, "utc?", "gmt?"); return $alias(self, "utc_offset", "gmt_offset"); })('::', Date, $nesting); }; Opal.modules["corelib/struct"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $slice = Opal.slice, $extract_kwargs = Opal.extract_kwargs, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $truthy = Opal.truthy, $neqeq = Opal.neqeq, $eqeq = Opal.eqeq, $Opal = Opal.Opal, $send = Opal.send, $Class = Opal.Class, $to_a = Opal.to_a, $def = Opal.def, $defs = Opal.defs, $Kernel = Opal.Kernel, $rb_gt = Opal.rb_gt, $rb_minus = Opal.rb_minus, $eqeqeq = Opal.eqeqeq, $rb_lt = Opal.rb_lt, $rb_ge = Opal.rb_ge, $rb_plus = Opal.rb_plus, $alias = Opal.alias, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,!=,upcase,[],==,class,unshift,const_name!,map,coerce_to!,new,each,define_struct_attribute,allocate,initialize,alias_method,module_eval,to_proc,const_set,raise,<<,members,define_method,instance_eval,last,>,length,-,keys,any?,join,[]=,each_with_index,hash,to_a,===,<,-@,size,>=,include?,to_sym,instance_of?,__id__,eql?,enum_for,+,name,each_pair,inspect,to_h,each_with_object,flatten,respond_to?,dig'); self.$require("corelib/enumerable"); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Struct'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$include($$$('Enumerable')); $defs(self, '$new', function $Struct_new$1(const_name, $a, $b) { var block = $Struct_new$1.$$p || nil, $post_args, $kwargs, args, keyword_init, self = this, klass = nil; $Struct_new$1.$$p = null; ; $post_args = $slice(arguments, 1); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); args = $post_args; keyword_init = $hash_get($kwargs, "keyword_init");if (keyword_init == null) keyword_init = false; if ($truthy(const_name)) { if (($eqeq(const_name.$class(), $$$('String')) && ($neqeq(const_name['$[]'](0).$upcase(), const_name['$[]'](0))))) { args.$unshift(const_name); const_name = nil; } else { try { const_name = $Opal['$const_name!'](const_name) } catch ($err) { if (Opal.rescue($err, [$$$('TypeError'), $$$('NameError')])) { try { args.$unshift(const_name); const_name = nil; } finally { Opal.pop_exception($err); } } else { throw $err; } }; } }; $send(args, 'map', [], function $$2(arg){ if (arg == null) arg = nil; return $Opal['$coerce_to!'](arg, $$$('String'), "to_str");}); klass = $send($Class, 'new', [self], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s; $send(args, 'each', [], function $$4(arg){var self = $$4.$$s == null ? this : $$4.$$s; if (arg == null) arg = nil; return self.$define_struct_attribute(arg);}, {$$s: self}); return (function(self, $parent_nesting) { $def(self, '$new', function $new$5($a) { var $post_args, args, self = this, instance = nil; $post_args = $slice(arguments); args = $post_args; instance = self.$allocate(); instance.$$data = {}; $send(instance, 'initialize', $to_a(args)); return instance; }, -1); return self.$alias_method("[]", "new"); })(Opal.get_singleton_class(self), $nesting);}, {$$s: self}); if ($truthy(block)) { $send(klass, 'module_eval', [], block.$to_proc()) }; klass.$$keyword_init = keyword_init; if ($truthy(const_name)) { $$$('Struct').$const_set(const_name, klass) }; return klass; }, -2); $defs(self, '$define_struct_attribute', function $$define_struct_attribute(name) { var self = this; if ($eqeq(self, $$$('Struct'))) { $Kernel.$raise($$$('ArgumentError'), "you cannot define attributes to the Struct class") }; self.$members()['$<<'](name); $send(self, 'define_method', [name], function $$6(){var self = $$6.$$s == null ? this : $$6.$$s; return self.$$data[name];}, {$$s: self}); return $send(self, 'define_method', ["" + (name) + "="], function $$7(value){var self = $$7.$$s == null ? this : $$7.$$s; if (value == null) value = nil; return self.$$data[name] = value;;}, {$$s: self}); }); $defs(self, '$members', function $$members() { var self = this, $ret_or_1 = nil; if (self.members == null) self.members = nil; if ($eqeq(self, $$$('Struct'))) { $Kernel.$raise($$$('ArgumentError'), "the Struct class has no members") }; return (self.members = ($truthy(($ret_or_1 = self.members)) ? ($ret_or_1) : ([]))); }); $defs(self, '$inherited', function $$inherited(klass) { var self = this, members = nil; if (self.members == null) self.members = nil; members = self.members; return $send(klass, 'instance_eval', [], function $$8(){var self = $$8.$$s == null ? this : $$8.$$s; return (self.members = members)}, {$$s: self}); }); $def(self, '$initialize', function $$initialize($a) { var $post_args, args, self = this, kwargs = nil, $ret_or_1 = nil, extra = nil; $post_args = $slice(arguments); args = $post_args; if ($truthy(self.$class().$$keyword_init)) { kwargs = ($truthy(($ret_or_1 = args.$last())) ? ($ret_or_1) : ((new Map()))); if (($truthy($rb_gt(args.$length(), 1)) || ($truthy((args.length === 1 && !kwargs.$$is_hash))))) { $Kernel.$raise($$$('ArgumentError'), "wrong number of arguments (given " + (args.$length()) + ", expected 0)") }; extra = $rb_minus(kwargs.$keys(), self.$class().$members()); if ($truthy(extra['$any?']())) { $Kernel.$raise($$$('ArgumentError'), "unknown keywords: " + (extra.$join(", "))) }; return $send(self.$class().$members(), 'each', [], function $$9(name){var $b, self = $$9.$$s == null ? this : $$9.$$s; if (name == null) name = nil; return ($b = [name, kwargs['$[]'](name)], $send(self, '[]=', $b), $b[$b.length - 1]);}, {$$s: self}); } else { if ($truthy($rb_gt(args.$length(), self.$class().$members().$length()))) { $Kernel.$raise($$$('ArgumentError'), "struct size differs") }; return $send(self.$class().$members(), 'each_with_index', [], function $$10(name, index){var $b, self = $$10.$$s == null ? this : $$10.$$s; if (name == null) name = nil; if (index == null) index = nil; return ($b = [name, args['$[]'](index)], $send(self, '[]=', $b), $b[$b.length - 1]);}, {$$s: self}); }; }, -1); $def(self, '$initialize_copy', function $$initialize_copy(from) { var self = this; self.$$data = {} var keys = Object.keys(from.$$data), i, max, name; for (i = 0, max = keys.length; i < max; i++) { name = keys[i]; self.$$data[name] = from.$$data[name]; } }); $defs(self, '$keyword_init?', function $Struct_keyword_init$ques$11() { var self = this; return self.$$keyword_init; }); $def(self, '$members', function $$members() { var self = this; return self.$class().$members() }); $def(self, '$hash', function $$hash() { var self = this; return [self.$class(), self.$to_a()].$hash() }); $def(self, '$[]', function $Struct_$$$12(name) { var self = this; if ($eqeqeq($$$('Integer'), name)) { if ($truthy($rb_lt(name, self.$class().$members().$size()['$-@']()))) { $Kernel.$raise($$$('IndexError'), "offset " + (name) + " too small for struct(size:" + (self.$class().$members().$size()) + ")") }; if ($truthy($rb_ge(name, self.$class().$members().$size()))) { $Kernel.$raise($$$('IndexError'), "offset " + (name) + " too large for struct(size:" + (self.$class().$members().$size()) + ")") }; name = self.$class().$members()['$[]'](name); } else if ($eqeqeq($$$('String'), name)) { if(!self.$$data.hasOwnProperty(name)) { $Kernel.$raise($$$('NameError').$new("no member '" + (name) + "' in struct", name)) } } else { $Kernel.$raise($$$('TypeError'), "no implicit conversion of " + (name.$class()) + " into Integer") }; name = $Opal['$coerce_to!'](name, $$$('String'), "to_str"); return self.$$data[name];; }); $def(self, '$[]=', function $Struct_$$$eq$13(name, value) { var self = this; if ($eqeqeq($$$('Integer'), name)) { if ($truthy($rb_lt(name, self.$class().$members().$size()['$-@']()))) { $Kernel.$raise($$$('IndexError'), "offset " + (name) + " too small for struct(size:" + (self.$class().$members().$size()) + ")") }; if ($truthy($rb_ge(name, self.$class().$members().$size()))) { $Kernel.$raise($$$('IndexError'), "offset " + (name) + " too large for struct(size:" + (self.$class().$members().$size()) + ")") }; name = self.$class().$members()['$[]'](name); } else if ($eqeqeq($$$('String'), name)) { if (!$truthy(self.$class().$members()['$include?'](name.$to_sym()))) { $Kernel.$raise($$$('NameError').$new("no member '" + (name) + "' in struct", name)) } } else { $Kernel.$raise($$$('TypeError'), "no implicit conversion of " + (name.$class()) + " into Integer") }; name = $Opal['$coerce_to!'](name, $$$('String'), "to_str"); return self.$$data[name] = value;; }); $def(self, '$==', function $Struct_$eq_eq$14(other) { var self = this; if (!$truthy(other['$instance_of?'](self.$class()))) { return false }; var recursed1 = {}, recursed2 = {}; function _eqeq(struct, other) { var key, a, b; recursed1[(struct).$__id__()] = true; recursed2[(other).$__id__()] = true; for (key in struct.$$data) { a = struct.$$data[key]; b = other.$$data[key]; if ($$$('Struct')['$==='](a)) { if (!recursed1.hasOwnProperty((a).$__id__()) || !recursed2.hasOwnProperty((b).$__id__())) { if (!_eqeq(a, b)) { return false; } } } else { if (!(a)['$=='](b)) { return false; } } } return true; } return _eqeq(self, other); ; }); $def(self, '$eql?', function $Struct_eql$ques$15(other) { var self = this; if (!$truthy(other['$instance_of?'](self.$class()))) { return false }; var recursed1 = {}, recursed2 = {}; function _eqeq(struct, other) { var key, a, b; recursed1[(struct).$__id__()] = true; recursed2[(other).$__id__()] = true; for (key in struct.$$data) { a = struct.$$data[key]; b = other.$$data[key]; if ($$$('Struct')['$==='](a)) { if (!recursed1.hasOwnProperty((a).$__id__()) || !recursed2.hasOwnProperty((b).$__id__())) { if (!_eqeq(a, b)) { return false; } } } else { if (!(a)['$eql?'](b)) { return false; } } } return true; } return _eqeq(self, other); ; }); $def(self, '$each', function $$each() { var $yield = $$each.$$p || nil, self = this; $$each.$$p = null; if (!($yield !== nil)) { return $send(self, 'enum_for', ["each"], function $$16(){var self = $$16.$$s == null ? this : $$16.$$s; return self.$size()}, {$$s: self}) }; $send(self.$class().$members(), 'each', [], function $$17(name){var self = $$17.$$s == null ? this : $$17.$$s; if (name == null) name = nil; return Opal.yield1($yield, self['$[]'](name));;}, {$$s: self}); return self; }); $def(self, '$each_pair', function $$each_pair() { var $yield = $$each_pair.$$p || nil, self = this; $$each_pair.$$p = null; if (!($yield !== nil)) { return $send(self, 'enum_for', ["each_pair"], function $$18(){var self = $$18.$$s == null ? this : $$18.$$s; return self.$size()}, {$$s: self}) }; $send(self.$class().$members(), 'each', [], function $$19(name){var self = $$19.$$s == null ? this : $$19.$$s; if (name == null) name = nil; return Opal.yield1($yield, [name, self['$[]'](name)]);;}, {$$s: self}); return self; }); $def(self, '$length', function $$length() { var self = this; return self.$class().$members().$length() }); $def(self, '$to_a', function $$to_a() { var self = this; return $send(self.$class().$members(), 'map', [], function $$20(name){var self = $$20.$$s == null ? this : $$20.$$s; if (name == null) name = nil; return self['$[]'](name);}, {$$s: self}) }); var inspect_stack = []; $def(self, '$inspect', function $$inspect() { var self = this, result = nil, pushed = nil; return (function() { try { result = "#") } else { (inspect_stack)['$<<'](self.$__id__()); pushed = true; if (($eqeqeq($$$('Struct'), self) && ($truthy(self.$class().$name())))) { result = $rb_plus(result, "" + (self.$class()) + " ") }; result = $rb_plus(result, $send(self.$each_pair(), 'map', [], function $$21(name, value){ if (name == null) name = nil; if (value == null) value = nil; return "" + (name) + "=" + ($$('Opal').$inspect(value));}).$join(", ")); result = $rb_plus(result, ">"); return result; }; } finally { ($truthy(pushed) ? (inspect_stack.pop()) : nil) }; })() }); $def(self, '$to_h', function $$to_h($a) { var block = $$to_h.$$p || nil, $post_args, args, self = this; $$to_h.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if ((block !== nil)) { return $send($send(self, 'map', [], block.$to_proc()), 'to_h', $to_a(args)) }; return $send(self.$class().$members(), 'each_with_object', [(new Map())], function $$22(name, h){var $b, self = $$22.$$s == null ? this : $$22.$$s; if (name == null) name = nil; if (h == null) h = nil; return ($b = [name, self['$[]'](name)], $send(h, '[]=', $b), $b[$b.length - 1]);}, {$$s: self}); }, -1); $def(self, '$values_at', function $$values_at($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; args = $send(args, 'map', [], function $$23(arg){ if (arg == null) arg = nil; return arg.$$is_range ? arg.$to_a() : arg;}).$flatten(); var result = []; for (var i = 0, len = args.length; i < len; i++) { if (!args[i].$$is_number) { $Kernel.$raise($$$('TypeError'), "no implicit conversion of " + ((args[i]).$class()) + " into Integer") } result.push(self['$[]'](args[i])); } return result; ; }, -1); $def(self, '$dig', function $$dig(key, $a) { var $post_args, keys, self = this, item = nil; $post_args = $slice(arguments, 1); keys = $post_args; item = ($truthy(key.$$is_string && self.$$data.hasOwnProperty(key)) ? (self.$$data[key] || nil) : nil); if (item === nil || keys.length === 0) { return item; } ; if (!$truthy(item['$respond_to?']("dig"))) { $Kernel.$raise($$$('TypeError'), "" + (item.$class()) + " does not have #dig method") }; return $send(item, 'dig', $to_a(keys)); }, -2); $alias(self, "size", "length"); $alias(self, "to_s", "inspect"); return $alias(self, "values", "to_a"); })('::', null, $nesting); }; Opal.modules["corelib/set"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $freeze = Opal.freeze, $klass = Opal.klass, $slice = Opal.slice, $defs = Opal.defs, $truthy = Opal.truthy, $eqeqeq = Opal.eqeqeq, $Kernel = Opal.Kernel, $send = Opal.send, $def = Opal.def, $eqeq = Opal.eqeq, $rb_lt = Opal.rb_lt, $rb_le = Opal.rb_le, $alias = Opal.alias, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('include,new,nil?,===,raise,each,add,merge,class,respond_to?,subtract,dup,join,to_a,equal?,instance_of?,==,instance_variable_get,size,is_a?,all?,include?,[]=,enum_for,[],<<,replace,compare_by_identity,name,compare_by_identity?,delete,select,frozen?,freeze,reject,delete_if,to_proc,keep_if,each_key,empty?,eql?,instance_eval,clear,<,<=,any?,!,intersect?,keys,|,proper_subset?,subset?,proper_superset?,superset?,-,select!,collect!'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Set'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $ret_or_1 = nil, $proto = self.$$prototype; $proto.hash = nil; self.$include($$$('Enumerable')); $defs(self, '$[]', function $Set_$$$1($a) { var $post_args, ary, self = this; $post_args = $slice(arguments); ary = $post_args; return self.$new(ary); }, -1); $def(self, '$initialize', function $$initialize(enum$) { var block = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; ; if (enum$ == null) enum$ = nil; self.hash = (new Map()); if ($truthy(enum$['$nil?']())) { return nil }; if (!$eqeqeq($$$('Enumerable'), enum$)) { $Kernel.$raise($$$('ArgumentError'), "value must be enumerable") }; if ($truthy(block)) { return $send(enum$, 'each', [], function $$2(item){var self = $$2.$$s == null ? this : $$2.$$s; if (item == null) item = nil; return self.$add(Opal.yield1(block, item));}, {$$s: self}) } else { return self.$merge(enum$) }; }, -1); $def(self, '$dup', function $$dup() { var self = this, result = nil; result = self.$class().$new(); return result.$merge(self); }); $def(self, '$-', function $Set_$minus$3(enum$) { var self = this; if (!$truthy(enum$['$respond_to?']("each"))) { $Kernel.$raise($$$('ArgumentError'), "value must be enumerable") }; return self.$dup().$subtract(enum$); }); $def(self, '$inspect', function $$inspect() { var self = this; return "#" }); $def(self, '$==', function $Set_$eq_eq$4(other) { var self = this; if ($truthy(self['$equal?'](other))) { return true } else if ($truthy(other['$instance_of?'](self.$class()))) { return self.hash['$=='](other.$instance_variable_get("@hash")) } else if (($truthy(other['$is_a?']($$$('Set'))) && ($eqeq(self.$size(), other.$size())))) { return $send(other, 'all?', [], function $$5(o){var self = $$5.$$s == null ? this : $$5.$$s; if (self.hash == null) self.hash = nil; if (o == null) o = nil; return self.hash['$include?'](o);}, {$$s: self}) } else { return false } }); $def(self, '$add', function $$add(o) { var self = this; self.hash['$[]='](o, true); return self; }); $def(self, '$classify', function $$classify() { var block = $$classify.$$p || nil, self = this, result = nil; $$classify.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("classify") }; result = $send($$$('Hash'), 'new', [], function $$6(h, k){var $a, self = $$6.$$s == null ? this : $$6.$$s; if (h == null) h = nil; if (k == null) k = nil; return ($a = [k, self.$class().$new()], $send(h, '[]=', $a), $a[$a.length - 1]);}, {$$s: self}); $send(self, 'each', [], function $$7(item){ if (item == null) item = nil; return result['$[]'](Opal.yield1(block, item)).$add(item);}); return result; }); $def(self, '$collect!', function $Set_collect$excl$8() { var block = $Set_collect$excl$8.$$p || nil, self = this, result = nil; $Set_collect$excl$8.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("collect!") }; result = self.$class().$new(); $send(self, 'each', [], function $$9(item){ if (item == null) item = nil; return result['$<<'](Opal.yield1(block, item));}); return self.$replace(result); }); $def(self, '$compare_by_identity', function $$compare_by_identity() { var self = this; if ($truthy(self.hash['$respond_to?']("compare_by_identity"))) { self.hash.$compare_by_identity(); return self; } else { return self.$raise($$('NotImplementedError'), "" + (self.$class().$name()) + "#" + ("compare_by_identity") + " is not implemented") } }); $def(self, '$compare_by_identity?', function $Set_compare_by_identity$ques$10() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.hash['$respond_to?']("compare_by_identity?")))) { return self.hash['$compare_by_identity?']() } else { return $ret_or_1 } }); $def(self, '$delete', function $Set_delete$11(o) { var self = this; self.hash.$delete(o); return self; }); $def(self, '$delete?', function $Set_delete$ques$12(o) { var self = this; if ($truthy(self['$include?'](o))) { self.$delete(o); return self; } else { return nil } }); $def(self, '$delete_if', function $$delete_if() { var $yield = $$delete_if.$$p || nil, self = this; $$delete_if.$$p = null; if (!($yield !== nil)) { return self.$enum_for("delete_if") }; $send($send(self, 'select', [], function $$13(o){ if (o == null) o = nil; return Opal.yield1($yield, o);;}), 'each', [], function $$14(o){var self = $$14.$$s == null ? this : $$14.$$s; if (self.hash == null) self.hash = nil; if (o == null) o = nil; return self.hash.$delete(o);}, {$$s: self}); return self; }); $def(self, '$freeze', function $$freeze() { var self = this; if ($truthy(self['$frozen?']())) { return self }; self.hash.$freeze(); return $freeze(self);; }); $def(self, '$keep_if', function $$keep_if() { var $yield = $$keep_if.$$p || nil, self = this; $$keep_if.$$p = null; if (!($yield !== nil)) { return self.$enum_for("keep_if") }; $send($send(self, 'reject', [], function $$15(o){ if (o == null) o = nil; return Opal.yield1($yield, o);;}), 'each', [], function $$16(o){var self = $$16.$$s == null ? this : $$16.$$s; if (self.hash == null) self.hash = nil; if (o == null) o = nil; return self.hash.$delete(o);}, {$$s: self}); return self; }); $def(self, '$reject!', function $Set_reject$excl$17() { var block = $Set_reject$excl$17.$$p || nil, self = this, before = nil; $Set_reject$excl$17.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("reject!") }; before = self.$size(); $send(self, 'delete_if', [], block.$to_proc()); if ($eqeq(self.$size(), before)) { return nil } else { return self }; }); $def(self, '$select!', function $Set_select$excl$18() { var block = $Set_select$excl$18.$$p || nil, self = this, before = nil; $Set_select$excl$18.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("select!") }; before = self.$size(); $send(self, 'keep_if', [], block.$to_proc()); if ($eqeq(self.$size(), before)) { return nil } else { return self }; }); $def(self, '$add?', function $Set_add$ques$19(o) { var self = this; if ($truthy(self['$include?'](o))) { return nil } else { return self.$add(o) } }); $def(self, '$each', function $$each() { var block = $$each.$$p || nil, self = this; $$each.$$p = null; ; if (!(block !== nil)) { return self.$enum_for("each") }; $send(self.hash, 'each_key', [], block.$to_proc()); return self; }); $def(self, '$empty?', function $Set_empty$ques$20() { var self = this; return self.hash['$empty?']() }); $def(self, '$eql?', function $Set_eql$ques$21(other) { var self = this; return self.hash['$eql?']($send(other, 'instance_eval', [], function $$22(){var self = $$22.$$s == null ? this : $$22.$$s; if (self.hash == null) self.hash = nil; return self.hash}, {$$s: self})) }); $def(self, '$clear', function $$clear() { var self = this; self.hash.$clear(); return self; }); $def(self, '$include?', function $Set_include$ques$23(o) { var self = this; return self.hash['$include?'](o) }); $def(self, '$merge', function $$merge(enum$) { var self = this; $send(enum$, 'each', [], function $$24(item){var self = $$24.$$s == null ? this : $$24.$$s; if (item == null) item = nil; return self.$add(item);}, {$$s: self}); return self; }); $def(self, '$replace', function $$replace(enum$) { var self = this; self.$clear(); self.$merge(enum$); return self; }); $def(self, '$size', function $$size() { var self = this; return self.hash.$size() }); $def(self, '$subtract', function $$subtract(enum$) { var self = this; $send(enum$, 'each', [], function $$25(item){var self = $$25.$$s == null ? this : $$25.$$s; if (item == null) item = nil; return self.$delete(item);}, {$$s: self}); return self; }); $def(self, '$|', function $Set_$$26(enum$) { var self = this; if (!$truthy(enum$['$respond_to?']("each"))) { $Kernel.$raise($$$('ArgumentError'), "value must be enumerable") }; return self.$dup().$merge(enum$); }); function is_set(set) { ($truthy(($ret_or_1 = (set)['$is_a?']($$$('Set')))) ? ($ret_or_1) : ($Kernel.$raise($$$('ArgumentError'), "value must be a set"))) } ; $def(self, '$superset?', function $Set_superset$ques$27(set) { var self = this; is_set(set); if ($truthy($rb_lt(self.$size(), set.$size()))) { return false }; return $send(set, 'all?', [], function $$28(o){var self = $$28.$$s == null ? this : $$28.$$s; if (o == null) o = nil; return self['$include?'](o);}, {$$s: self}); }); $def(self, '$proper_superset?', function $Set_proper_superset$ques$29(set) { var self = this; is_set(set); if ($truthy($rb_le(self.$size(), set.$size()))) { return false }; return $send(set, 'all?', [], function $$30(o){var self = $$30.$$s == null ? this : $$30.$$s; if (o == null) o = nil; return self['$include?'](o);}, {$$s: self}); }); $def(self, '$subset?', function $Set_subset$ques$31(set) { var self = this; is_set(set); if ($truthy($rb_lt(set.$size(), self.$size()))) { return false }; return $send(self, 'all?', [], function $$32(o){ if (o == null) o = nil; return set['$include?'](o);}); }); $def(self, '$proper_subset?', function $Set_proper_subset$ques$33(set) { var self = this; is_set(set); if ($truthy($rb_le(set.$size(), self.$size()))) { return false }; return $send(self, 'all?', [], function $$34(o){ if (o == null) o = nil; return set['$include?'](o);}); }); $def(self, '$intersect?', function $Set_intersect$ques$35(set) { var self = this; is_set(set); if ($truthy($rb_lt(self.$size(), set.$size()))) { return $send(self, 'any?', [], function $$36(o){ if (o == null) o = nil; return set['$include?'](o);}) } else { return $send(set, 'any?', [], function $$37(o){var self = $$37.$$s == null ? this : $$37.$$s; if (o == null) o = nil; return self['$include?'](o);}, {$$s: self}) }; }); $def(self, '$disjoint?', function $Set_disjoint$ques$38(set) { var self = this; return self['$intersect?'](set)['$!']() }); $def(self, '$to_a', function $$to_a() { var self = this; return self.hash.$keys() }); $alias(self, "+", "|"); $alias(self, "<", "proper_subset?"); $alias(self, "<<", "add"); $alias(self, "<=", "subset?"); $alias(self, ">", "proper_superset?"); $alias(self, ">=", "superset?"); $alias(self, "difference", "-"); $alias(self, "filter!", "select!"); $alias(self, "length", "size"); $alias(self, "map!", "collect!"); $alias(self, "member?", "include?"); return $alias(self, "union", "|"); })('::', null, $nesting) }; Opal.modules["corelib/dir"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $def = Opal.def, $truthy = Opal.truthy, $alias = Opal.alias, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('[],pwd'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Dir'); var $nesting = [self].concat($parent_nesting); return (function(self, $parent_nesting) { $def(self, '$chdir', function $$chdir(dir) { var $yield = $$chdir.$$p || nil, prev_cwd = nil; $$chdir.$$p = null; return (function() { try { prev_cwd = Opal.current_dir; Opal.current_dir = dir; return Opal.yieldX($yield, []);; } finally { Opal.current_dir = prev_cwd }; })() }); $def(self, '$pwd', function $$pwd() { return Opal.current_dir || '.'; }); $def(self, '$home', function $$home() { var $ret_or_1 = nil; if ($truthy(($ret_or_1 = $$$('ENV')['$[]']("HOME")))) { return $ret_or_1 } else { return "." } }); return $alias(self, "getwd", "pwd"); })(Opal.get_singleton_class(self), $nesting) })('::', null, $nesting) }; Opal.modules["corelib/file"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $truthy = Opal.truthy, $klass = Opal.klass, $const_set = Opal.const_set, $Opal = Opal.Opal, $regexp = Opal.regexp, $rb_plus = Opal.rb_plus, $def = Opal.def, $Kernel = Opal.Kernel, $eqeq = Opal.eqeq, $rb_lt = Opal.rb_lt, $rb_minus = Opal.rb_minus, $range = Opal.range, $send = Opal.send, $slice = Opal.slice, $alias = Opal.alias, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('respond_to?,to_path,coerce_to!,pwd,split,sub,+,unshift,join,home,raise,start_with?,absolute_path,==,<,dirname,-,basename,empty?,rindex,[],length,nil?,gsub,find,=~,map,each_with_index,flatten,reject,to_proc,end_with?,expand_path,exist?'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'File'); var $nesting = [self].concat($parent_nesting), windows_root_rx = nil; $const_set($nesting[0], 'Separator', $const_set($nesting[0], 'SEPARATOR', "/")); $const_set($nesting[0], 'ALT_SEPARATOR', nil); $const_set($nesting[0], 'PATH_SEPARATOR', ":"); $const_set($nesting[0], 'FNM_SYSCASE', 0); windows_root_rx = /^[a-zA-Z]:(?:\\|\/)/; return (function(self, $parent_nesting) { var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$absolute_path', function $$absolute_path(path, basedir) { var sep = nil, sep_chars = nil, new_parts = nil, $ret_or_1 = nil, path_abs = nil, basedir_abs = nil, parts = nil, leading_sep = nil, abs = nil, new_path = nil; if (basedir == null) basedir = nil; sep = $$('SEPARATOR'); sep_chars = $sep_chars(); new_parts = []; path = ($truthy(path['$respond_to?']("to_path")) ? (path.$to_path()) : (path)); path = $Opal['$coerce_to!'](path, $$$('String'), "to_str"); basedir = ($truthy(($ret_or_1 = basedir)) ? ($ret_or_1) : ($$$('Dir').$pwd())); path_abs = path.substr(0, sep.length) === sep || windows_root_rx.test(path); basedir_abs = basedir.substr(0, sep.length) === sep || windows_root_rx.test(basedir); if ($truthy(path_abs)) { parts = path.$split($regexp(["[", sep_chars, "]"])); leading_sep = windows_root_rx.test(path) ? '' : path.$sub($regexp(["^([", sep_chars, "]+).*$"]), "\\1"); abs = true; } else { parts = $rb_plus(basedir.$split($regexp(["[", sep_chars, "]"])), path.$split($regexp(["[", sep_chars, "]"]))); leading_sep = windows_root_rx.test(basedir) ? '' : basedir.$sub($regexp(["^([", sep_chars, "]+).*$"]), "\\1"); abs = basedir_abs; }; var part; for (var i = 0, ii = parts.length; i < ii; i++) { part = parts[i]; if ( (part === nil) || (part === '' && ((new_parts.length === 0) || abs)) || (part === '.' && ((new_parts.length === 0) || abs)) ) { continue; } if (part === '..') { new_parts.pop(); } else { new_parts.push(part); } } if (!abs && parts[0] !== '.') { new_parts.$unshift(".") } ; new_path = new_parts.$join(sep); if ($truthy(abs)) { new_path = $rb_plus(leading_sep, new_path) }; return new_path; }, -2); $def(self, '$expand_path', function $$expand_path(path, basedir) { var self = this, sep = nil, sep_chars = nil, home = nil, leading_sep = nil, home_path_regexp = nil; if (basedir == null) basedir = nil; sep = $$('SEPARATOR'); sep_chars = $sep_chars(); if ($truthy(path[0] === '~' || (basedir && basedir[0] === '~'))) { home = $$('Dir').$home(); if (!$truthy(home)) { $Kernel.$raise($$$('ArgumentError'), "couldn't find HOME environment -- expanding `~'") }; leading_sep = windows_root_rx.test(home) ? '' : home.$sub($regexp(["^([", sep_chars, "]+).*$"]), "\\1"); if (!$truthy(home['$start_with?'](leading_sep))) { $Kernel.$raise($$$('ArgumentError'), "non-absolute home") }; home = $rb_plus(home, sep); home_path_regexp = $regexp(["^\\~(?:", sep, "|$)"]); path = path.$sub(home_path_regexp, home); if ($truthy(basedir)) { basedir = basedir.$sub(home_path_regexp, home) }; }; return self.$absolute_path(path, basedir); }, -2); // Coerce a given path to a path string using #to_path and #to_str function $coerce_to_path(path) { if ($truthy((path)['$respond_to?']("to_path"))) { path = path.$to_path(); } path = $Opal['$coerce_to!'](path, $$$('String'), "to_str"); return path; } // Return a RegExp compatible char class function $sep_chars() { if ($$('ALT_SEPARATOR') === nil) { return Opal.escape_regexp($$('SEPARATOR')); } else { return Opal.escape_regexp($rb_plus($$('SEPARATOR'), $$('ALT_SEPARATOR'))); } } ; $def(self, '$dirname', function $$dirname(path, level) { var self = this, sep_chars = nil; if (level == null) level = 1; if ($eqeq(level, 0)) { return path }; if ($truthy($rb_lt(level, 0))) { $Kernel.$raise($$$('ArgumentError'), "level can't be negative") }; sep_chars = $sep_chars(); path = $coerce_to_path(path); var absolute = path.match(new RegExp("^[" + (sep_chars) + "]")), out; path = path.replace(new RegExp("[" + (sep_chars) + "]+$"), ''); // remove trailing separators path = path.replace(new RegExp("[^" + (sep_chars) + "]+$"), ''); // remove trailing basename path = path.replace(new RegExp("[" + (sep_chars) + "]+$"), ''); // remove final trailing separators if (path === '') { out = absolute ? '/' : '.'; } else { out = path; } if (level == 1) { return out; } else { return self.$dirname(out, $rb_minus(level, 1)) } ; }, -2); $def(self, '$basename', function $$basename(name, suffix) { var sep_chars = nil; if (suffix == null) suffix = nil; sep_chars = $sep_chars(); name = $coerce_to_path(name); if (name.length == 0) { return name; } if (suffix !== nil) { suffix = $Opal['$coerce_to!'](suffix, $$$('String'), "to_str") } else { suffix = null; } name = name.replace(new RegExp("(.)[" + (sep_chars) + "]*$"), '$1'); name = name.replace(new RegExp("^(?:.*[" + (sep_chars) + "])?([^" + (sep_chars) + "]+)$"), '$1'); if (suffix === ".*") { name = name.replace(/\.[^\.]+$/, ''); } else if(suffix !== null) { suffix = Opal.escape_regexp(suffix); name = name.replace(new RegExp("" + (suffix) + "$"), ''); } return name; ; }, -2); $def(self, '$extname', function $$extname(path) { var self = this, filename = nil, last_dot_idx = nil; path = $coerce_to_path(path); filename = self.$basename(path); if ($truthy(filename['$empty?']())) { return "" }; last_dot_idx = filename['$[]']($range(1, -1, false)).$rindex("."); if (($truthy(last_dot_idx['$nil?']()) || ($eqeq($rb_plus(last_dot_idx, 1), $rb_minus(filename.$length(), 1))))) { return "" } else { return filename['$[]'](Opal.Range.$new($rb_plus(last_dot_idx, 1), -1, false)) }; }); $def(self, '$exist?', function $exist$ques$1(path) { return Opal.modules[path] != null }); $def(self, '$directory?', function $directory$ques$2(path) { var files = nil; files = []; for (var key in Opal.modules) { files.push(key) } ; path = path.$gsub($regexp(["(^.", $$('SEPARATOR'), "+|", $$('SEPARATOR'), "+$)"])); return $send(files, 'find', [], function $$3(f){ if (f == null) f = nil; return f['$=~']($regexp(["^", path]));}); }); $def(self, '$join', function $$join($a) { var $post_args, paths, result = nil; $post_args = $slice(arguments); paths = $post_args; if ($truthy(paths['$empty?']())) { return "" }; result = ""; paths = $send(paths.$flatten().$each_with_index(), 'map', [], function $$4(item, index){ if (item == null) item = nil; if (index == null) index = nil; if (($eqeq(index, 0) && ($truthy(item['$empty?']())))) { return $$('SEPARATOR') } else if (($eqeq(paths.$length(), $rb_plus(index, 1)) && ($truthy(item['$empty?']())))) { return $$('SEPARATOR') } else { return item };}); paths = $send(paths, 'reject', [], "empty?".$to_proc()); $send(paths, 'each_with_index', [], function $$5(item, index){var next_item = nil; if (item == null) item = nil; if (index == null) index = nil; next_item = paths['$[]']($rb_plus(index, 1)); if ($truthy(next_item['$nil?']())) { return (result = "" + (result) + (item)) } else { if (($truthy(item['$end_with?']($$('SEPARATOR'))) && ($truthy(next_item['$start_with?']($$('SEPARATOR')))))) { item = item.$sub($regexp([$$('SEPARATOR'), "+$"]), "") }; return (result = (($truthy(item['$end_with?']($$('SEPARATOR'))) || ($truthy(next_item['$start_with?']($$('SEPARATOR'))))) ? ("" + (result) + (item)) : ("" + (result) + (item) + ($$('SEPARATOR'))))); };}); return result; }, -1); $def(self, '$split', function $$split(path) { return path.$split($$('SEPARATOR')) }); $alias(self, "realpath", "expand_path"); return $alias(self, "exists?", "exist?"); })(Opal.get_singleton_class(self), $nesting); })('::', $$$('IO'), $nesting) }; Opal.modules["corelib/process/base"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $slice = Opal.slice, $defs = Opal.defs, $return_val = Opal.return_val, nil = Opal.nil; (function($base, $super) { var self = $klass($base, $super, 'Signal'); return $defs(self, '$trap', function $$trap($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return nil; }, -1) })('::', null); return (function($base, $super) { var self = $klass($base, $super, 'GC'); return $defs(self, '$start', $return_val(nil)) })('::', null); }; Opal.modules["corelib/process"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $defs = Opal.defs, $truthy = Opal.truthy, $return_val = Opal.return_val, $Kernel = Opal.Kernel, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('const_set,size,<<,__register_clock__,to_f,now,new,[],raise'); return (function($base) { var self = $module($base, 'Process'); var monotonic = nil; self.__clocks__ = []; $defs(self, '$__register_clock__', function $$__register_clock__(name, func) { var self = this; if (self.__clocks__ == null) self.__clocks__ = nil; self.$const_set(name, self.__clocks__.$size()); return self.__clocks__['$<<'](func); }); self.$__register_clock__("CLOCK_REALTIME", function() { return Date.now() }); monotonic = false; if (Opal.global.performance) { monotonic = function() { return performance.now() }; } else if (Opal.global.process && process.hrtime) { // let now be the base to get smaller numbers var hrtime_base = process.hrtime(); monotonic = function() { var hrtime = process.hrtime(hrtime_base); var us = (hrtime[1] / 1000) | 0; // cut below microsecs; return ((hrtime[0] * 1000) + (us / 1000)); }; } ; if ($truthy(monotonic)) { self.$__register_clock__("CLOCK_MONOTONIC", monotonic) }; $defs(self, '$pid', $return_val(0)); $defs(self, '$times', function $$times() { var t = nil; t = $$$('Time').$now().$to_f(); return $$$($$$('Benchmark'), 'Tms').$new(t, t, t, t, t); }); return $defs(self, '$clock_gettime', function $$clock_gettime(clock_id, unit) { var self = this, $ret_or_1 = nil, clock = nil; if (self.__clocks__ == null) self.__clocks__ = nil; if (unit == null) unit = "float_second"; if ($truthy(($ret_or_1 = (clock = self.__clocks__['$[]'](clock_id))))) { $ret_or_1 } else { $Kernel.$raise($$$($$$('Errno'), 'EINVAL'), "clock_gettime(" + (clock_id) + ") " + (self.__clocks__['$[]'](clock_id))) }; var ms = clock(); switch (unit) { case 'float_second': return (ms / 1000); // number of seconds as a float (default) case 'float_millisecond': return (ms / 1); // number of milliseconds as a float case 'float_microsecond': return (ms * 1000); // number of microseconds as a float case 'second': return ((ms / 1000) | 0); // number of seconds as an integer case 'millisecond': return ((ms / 1) | 0); // number of milliseconds as an integer case 'microsecond': return ((ms * 1000) | 0); // number of microseconds as an integer case 'nanosecond': return ((ms * 1000000) | 0); // number of nanoseconds as an integer default: $Kernel.$raise($$$('ArgumentError'), "unexpected unit: " + (unit)) } ; }, -2); })('::') }; Opal.modules["corelib/random/formatter"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $module = Opal.module, $def = Opal.def, $range = Opal.range, $send = Opal.send, $rb_divide = Opal.rb_divide, $Kernel = Opal.Kernel, $Opal = Opal.Opal, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('_verify_count,bytes,encode,strict_encode64,random_bytes,urlsafe_encode64,split,hex,[]=,[],map,to_proc,join,times,<<,|,ord,/,abs,random_float,raise,coerce_to!,flatten,new,random_number,length,include,extend'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Random'); var $nesting = [self].concat($parent_nesting); (function($base, $parent_nesting) { var self = $module($base, 'Formatter'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$hex', function $$hex(count) { var self = this; if (count == null) count = nil; count = $$$('Random').$_verify_count(count); var bytes = self.$bytes(count); var out = ""; for (var i = 0; i < count; i++) { out += bytes.charCodeAt(i).toString(16).padStart(2, '0'); } return (out).$encode("US-ASCII"); ; }, -1); $def(self, '$random_bytes', function $$random_bytes(count) { var self = this; if (count == null) count = nil; return self.$bytes(count); }, -1); $def(self, '$base64', function $$base64(count) { var self = this; if (count == null) count = nil; return $$$('Base64').$strict_encode64(self.$random_bytes(count)).$encode("US-ASCII"); }, -1); $def(self, '$urlsafe_base64', function $$urlsafe_base64(count, padding) { var self = this; if (count == null) count = nil; if (padding == null) padding = false; return $$$('Base64').$urlsafe_encode64(self.$random_bytes(count), padding).$encode("US-ASCII"); }, -1); $def(self, '$uuid', function $$uuid() { var self = this, str = nil; str = self.$hex(16).$split(""); str['$[]='](12, "4"); str['$[]='](16, (parseInt(str['$[]'](16), 16) & 3 | 8).toString(16)); str = [str['$[]']($range(0, 8, true)), str['$[]']($range(8, 12, true)), str['$[]']($range(12, 16, true)), str['$[]']($range(16, 20, true)), str['$[]']($range(20, 32, true))]; str = $send(str, 'map', [], "join".$to_proc()); return str.$join("-"); }); $def(self, '$random_float', function $$random_float() { var self = this, bs = nil, num = nil; bs = self.$bytes(4); num = 0; $send((4), 'times', [], function $$1(i){ if (i == null) i = nil; num = num['$<<'](8); return (num = num['$|'](bs['$[]'](i).$ord()));}); return $rb_divide(num.$abs(), 2147483647); }); $def(self, '$random_number', function $$random_number(limit) { var self = this; ; function randomFloat() { return self.$random_float(); } function randomInt(max) { return Math.floor(randomFloat() * max); } function randomRange() { var min = limit.begin, max = limit.end; if (min === nil || max === nil) { return nil; } var length = max - min; if (length < 0) { return nil; } if (length === 0) { return min; } if (max % 1 === 0 && min % 1 === 0 && !limit.excl) { length++; } return randomInt(length) + min; } if (limit == null) { return randomFloat(); } else if (limit.$$is_range) { return randomRange(); } else if (limit.$$is_number) { if (limit <= 0) { $Kernel.$raise($$$('ArgumentError'), "invalid argument - " + (limit)) } if (limit % 1 === 0) { // integer return randomInt(limit); } else { return randomFloat() * limit; } } else { limit = $Opal['$coerce_to!'](limit, $$$('Integer'), "to_int"); if (limit <= 0) { $Kernel.$raise($$$('ArgumentError'), "invalid argument - " + (limit)) } return randomInt(limit); } ; }, -1); return $def(self, '$alphanumeric', function $$alphanumeric(count) { var self = this, map = nil; if (count == null) count = nil; count = $$('Random').$_verify_count(count); map = $send([$range("0", "9", false), $range("a", "z", false), $range("A", "Z", false)], 'map', [], "to_a".$to_proc()).$flatten(); return $send($$$('Array'), 'new', [count], function $$2(i){var self = $$2.$$s == null ? this : $$2.$$s; if (i == null) i = nil; return map['$[]'](self.$random_number(map.$length()));}, {$$s: self}).$join(); }, -1); })(self, $nesting); self.$include($$$($$$('Random'), 'Formatter')); return self.$extend($$$($$$('Random'), 'Formatter')); })('::', null, $nesting) }; Opal.modules["corelib/random/mersenne_twister"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $const_set = Opal.const_set, $send = Opal.send, nil = Opal.nil, $$$ = Opal.$$$, mersenne_twister = nil; Opal.add_stubs('generator='); mersenne_twister = (function() { /* Period parameters */ var N = 624; var M = 397; var MATRIX_A = 0x9908b0df; /* constant vector a */ var UMASK = 0x80000000; /* most significant w-r bits */ var LMASK = 0x7fffffff; /* least significant r bits */ var MIXBITS = function(u,v) { return ( ((u) & UMASK) | ((v) & LMASK) ); }; var TWIST = function(u,v) { return (MIXBITS((u),(v)) >>> 1) ^ ((v & 0x1) ? MATRIX_A : 0x0); }; function init(s) { var mt = {left: 0, next: N, state: new Array(N)}; init_genrand(mt, s); return mt; } /* initializes mt[N] with a seed */ function init_genrand(mt, s) { var j, i; mt.state[0] = s >>> 0; for (j=1; j> 30) >>> 0)) + j); /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ /* In the previous versions, MSBs of the seed affect */ /* only MSBs of the array state[]. */ /* 2002/01/09 modified by Makoto Matsumoto */ mt.state[j] &= 0xffffffff; /* for >32 bit machines */ } mt.left = 1; mt.next = N; } /* generate N words at one time */ function next_state(mt) { var p = 0, _p = mt.state; var j; mt.left = N; mt.next = 0; for (j=N-M+1; --j; p++) _p[p] = _p[p+(M)] ^ TWIST(_p[p+(0)], _p[p+(1)]); for (j=M; --j; p++) _p[p] = _p[p+(M-N)] ^ TWIST(_p[p+(0)], _p[p+(1)]); _p[p] = _p[p+(M-N)] ^ TWIST(_p[p+(0)], _p[0]); } /* generates a random number on [0,0xffffffff]-interval */ function genrand_int32(mt) { /* mt must be initialized */ var y; if (--mt.left <= 0) next_state(mt); y = mt.state[mt.next++]; /* Tempering */ y ^= (y >>> 11); y ^= (y << 7) & 0x9d2c5680; y ^= (y << 15) & 0xefc60000; y ^= (y >>> 18); return y >>> 0; } function int_pair_to_real_exclusive(a, b) { a >>>= 5; b >>>= 6; return(a*67108864.0+b)*(1.0/9007199254740992.0); } // generates a random number on [0,1) with 53-bit resolution function genrand_real(mt) { /* mt must be initialized */ var a = genrand_int32(mt), b = genrand_int32(mt); return int_pair_to_real_exclusive(a, b); } return { genrand_real: genrand_real, init: init }; })(); return (function($base, $super) { var self = $klass($base, $super, 'Random'); var $a; var MAX_INT = Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1; $const_set(self, 'MERSENNE_TWISTER_GENERATOR', { new_seed: function() { return Math.round(Math.random() * MAX_INT); }, reseed: function(seed) { return mersenne_twister.init(seed); }, rand: function(mt) { return mersenne_twister.genrand_real(mt); } }); return ($a = [$$$(self, 'MERSENNE_TWISTER_GENERATOR')], $send(self, 'generator=', $a), $a[$a.length - 1]); })('::', null); }; Opal.modules["corelib/random"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $truthy = Opal.truthy, $klass = Opal.klass, $Kernel = Opal.Kernel, $defs = Opal.defs, $Opal = Opal.Opal, $def = Opal.def, $eqeqeq = Opal.eqeqeq, $send = Opal.send, self = Opal.top, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,attr_reader,to_int,raise,new_seed,coerce_to!,reseed,rand,seed,bytes,===,==,state,_verify_count,encode,join,new,chr,random_number,random_float,const_defined?,const_set'); self.$require("corelib/random/formatter"); (function($base, $super) { var self = $klass($base, $super, 'Random'); self.$attr_reader("seed", "state"); $defs(self, '$_verify_count', function $$_verify_count(count) { if (!$truthy(count)) count = 16; if (typeof count !== "number") count = (count).$to_int(); if (count < 0) $Kernel.$raise($$$('ArgumentError'), "negative string size (or size too big)"); count = Math.floor(count); return count; }); $def(self, '$initialize', function $$initialize(seed) { var self = this; if (seed == null) seed = $$$('Random').$new_seed(); seed = $Opal['$coerce_to!'](seed, $$$('Integer'), "to_int"); self.state = seed; return self.$reseed(seed); }, -1); $def(self, '$reseed', function $$reseed(seed) { var self = this; self.seed = seed; return self.$rng = Opal.$$rand.reseed(seed);; }); $defs(self, '$new_seed', function $$new_seed() { return Opal.$$rand.new_seed(); }); $defs(self, '$rand', function $$rand(limit) { var self = this; ; return $$$(self, 'DEFAULT').$rand(limit); }, -1); $defs(self, '$srand', function $$srand(n) { var self = this, previous_seed = nil; if (n == null) n = $$$('Random').$new_seed(); n = $Opal['$coerce_to!'](n, $$$('Integer'), "to_int"); previous_seed = $$$(self, 'DEFAULT').$seed(); $$$(self, 'DEFAULT').$reseed(n); return previous_seed; }, -1); $defs(self, '$urandom', function $$urandom(size) { return $$$('SecureRandom').$bytes(size) }); $def(self, '$==', function $Random_$eq_eq$1(other) { var self = this, $ret_or_1 = nil; if (!$eqeqeq($$$('Random'), other)) { return false }; if ($truthy(($ret_or_1 = self.$seed()['$=='](other.$seed())))) { return self.$state()['$=='](other.$state()) } else { return $ret_or_1 }; }); $def(self, '$bytes', function $$bytes(length) { var self = this; length = $$$('Random').$_verify_count(length); return $send($$$('Array'), 'new', [length], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; return self.$rand(255).$chr()}, {$$s: self}).$join().$encode("ASCII-8BIT"); }); $defs(self, '$bytes', function $$bytes(length) { var self = this; return $$$(self, 'DEFAULT').$bytes(length) }); $def(self, '$rand', function $$rand(limit) { var self = this; ; return self.$random_number(limit); }, -1); $def(self, '$random_float', function $$random_float() { var self = this; self.state++; return Opal.$$rand.rand(self.$rng); }); $defs(self, '$random_float', function $$random_float() { var self = this; return $$$(self, 'DEFAULT').$random_float() }); return $defs(self, '$generator=', function $Random_generator$eq$3(generator) { var self = this; Opal.$$rand = generator; if ($truthy(self['$const_defined?']("DEFAULT"))) { return $$$(self, 'DEFAULT').$reseed() } else { return self.$const_set("DEFAULT", self.$new(self.$new_seed())) }; }); })('::', null); return self.$require("corelib/random/mersenne_twister"); }; Opal.modules["corelib/unsupported"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $Kernel = Opal.Kernel, $klass = Opal.klass, $send = Opal.send, $slice = Opal.slice, $module = Opal.module, $def = Opal.def, $return_val = Opal.return_val, $alias = Opal.alias, $defs = Opal.defs, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('raise,warn,each,define_method,%,public,private_method_defined?,private_class_method,instance_method,instance_methods,method_defined?,private_methods'); var warnings = {}; function handle_unsupported_feature(message) { switch (Opal.config.unsupported_features_severity) { case 'error': $Kernel.$raise($$$('NotImplementedError'), message) break; case 'warning': warn(message) break; default: // ignore // noop } } function warn(string) { if (warnings[string]) { return; } warnings[string] = true; self.$warn(string); } ; (function($base, $super) { var self = $klass($base, $super, 'String'); var ERROR = "String#%s not supported. Mutable String methods are not supported in Opal."; return $send(["<<", "capitalize!", "chomp!", "chop!", "downcase!", "gsub!", "lstrip!", "next!", "reverse!", "slice!", "squeeze!", "strip!", "sub!", "succ!", "swapcase!", "tr!", "tr_s!", "upcase!", "prepend", "[]=", "clear", "encode!", "unicode_normalize!"], 'each', [], function $String$1(method_name){var self = $String$1.$$s == null ? this : $String$1.$$s; if (method_name == null) method_name = nil; return $send(self, 'define_method', [method_name], function $$2($a){var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return $Kernel.$raise($$$('NotImplementedError'), (ERROR)['$%'](method_name));}, -1);}, {$$s: self}); })('::', null); (function($base) { var self = $module($base, 'Kernel'); var ERROR = "Object tainting is not supported by Opal"; $def(self, '$taint', function $$taint() { var self = this; handle_unsupported_feature(ERROR); return self; }); $def(self, '$untaint', function $$untaint() { var self = this; handle_unsupported_feature(ERROR); return self; }); return $def(self, '$tainted?', function $Kernel_tainted$ques$3() { handle_unsupported_feature(ERROR); return false; }); })('::'); (function($base, $super) { var self = $klass($base, $super, 'Module'); $def(self, '$public', function $Module_public$4($a) { var $post_args, methods, self = this; $post_args = $slice(arguments); methods = $post_args; if (methods.length === 0) { self.$$module_function = false; return nil; } return (methods.length === 1) ? methods[0] : methods; ; }, -1); $def(self, '$private_class_method', function $$private_class_method($a) { var $post_args, methods; $post_args = $slice(arguments); methods = $post_args; return (methods.length === 1) ? methods[0] : methods;; }, -1); $def(self, '$private_method_defined?', $return_val(false)); $def(self, '$private_constant', function $$private_constant($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return nil; }, -1); $alias(self, "nesting", "public"); $alias(self, "private", "public"); $alias(self, "protected", "public"); $alias(self, "protected_method_defined?", "private_method_defined?"); $alias(self, "public_class_method", "private_class_method"); $alias(self, "public_instance_method", "instance_method"); $alias(self, "public_instance_methods", "instance_methods"); return $alias(self, "public_method_defined?", "method_defined?"); })('::', null); (function($base) { var self = $module($base, 'Kernel'); $def(self, '$private_methods', function $$private_methods($a) { var $post_args, methods; $post_args = $slice(arguments); methods = $post_args; return []; }, -1); $alias(self, "protected_methods", "private_methods"); $alias(self, "private_instance_methods", "private_methods"); return $alias(self, "protected_instance_methods", "private_methods"); })('::'); (function($base, $parent_nesting) { var self = $module($base, 'Kernel'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $def(self, '$eval', function $Kernel_eval$5($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return $Kernel.$raise($$$('NotImplementedError'), "To use Kernel#eval, you must first require 'opal-parser'. " + ("See https://github.com/opal/opal/blob/" + ($$('RUBY_ENGINE_VERSION')) + "/docs/opal_parser.md for details.")); }, -1) })('::', $nesting); $defs(self, '$public', function $public$6($a) { var $post_args, methods; $post_args = $slice(arguments); methods = $post_args; return (methods.length === 1) ? methods[0] : methods;; }, -1); return $defs(self, '$private', function $private$7($a) { var $post_args, methods; $post_args = $slice(arguments); methods = $post_args; return (methods.length === 1) ? methods[0] : methods;; }, -1); }; Opal.modules["corelib/binding"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $truthy = Opal.truthy, $def = Opal.def, $slice = Opal.slice, $send = Opal.send, $to_a = Opal.to_a, $Kernel = Opal.Kernel, $return_ivar = Opal.return_ivar, $eqeq = Opal.eqeq, $thrower = Opal.thrower, $module = Opal.module, $const_set = Opal.const_set, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('js_eval,call,raise,inspect,include?,==,receiver,eval,attr_reader,new'); (function($base, $super) { var self = $klass($base, $super, 'Binding'); var $proto = self.$$prototype; $proto.jseval = $proto.scope_variables = nil; $def(self, '$initialize', function $$initialize(jseval, scope_variables, receiver, source_location) { var $a, self = this; if (scope_variables == null) scope_variables = []; ; if (source_location == null) source_location = nil; $a = [jseval, scope_variables, receiver, source_location], (self.jseval = $a[0]), (self.scope_variables = $a[1]), (self.receiver = $a[2]), (self.source_location = $a[3]), $a; if ($truthy(typeof receiver !== undefined)) { return nil } else { return (receiver = self.$js_eval("self")) }; }, -2); $def(self, '$js_eval', function $$js_eval($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; if ($truthy(self.jseval)) { return $send(self.jseval, 'call', $to_a(args)) } else { return $Kernel.$raise("Evaluation on a Proc#binding is not supported") }; }, -1); $def(self, '$local_variable_get', function $$local_variable_get(symbol) { var self = this; try { return self.$js_eval(symbol) } catch ($err) { if (Opal.rescue($err, [$$$('Exception')])) { try { return $Kernel.$raise($$$('NameError'), "local variable `" + (symbol) + "' is not defined for " + (self.$inspect())) } finally { Opal.pop_exception($err); } } else { throw $err; } } }); $def(self, '$local_variable_set', function $$local_variable_set(symbol, value) { var self = this; Opal.Binding.tmp_value = value; self.$js_eval("" + (symbol) + " = Opal.Binding.tmp_value"); delete Opal.Binding.tmp_value; return value; }); $def(self, '$local_variables', $return_ivar("scope_variables")); $def(self, '$local_variable_defined?', function $Binding_local_variable_defined$ques$1(value) { var self = this; return self.scope_variables['$include?'](value) }); $def(self, '$eval', function $Binding_eval$2(str, file, line) {try { var self = this; if (file == null) file = nil; if (line == null) line = nil; if ($eqeq(str, "self")) { return self.$receiver() }; return $Kernel.$eval(str, self, file, line);} catch($e) { if ($e === Opal.t_eval_return) return $e.$v; throw $e; } }, -2); return self.$attr_reader("receiver", "source_location"); })('::', null); (function($base) { var self = $module($base, 'Kernel'); return $def(self, '$binding', function $$binding() { return $Kernel.$raise("Opal doesn't support dynamic calls to binding") }) })('::'); return $const_set($nesting[0], 'TOPLEVEL_BINDING', $$$('Binding').$new( function(js) { return (new Function("self", "return " + js))(self); } , [], self, ["
", 0])); }; Opal.modules["corelib/irb"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $truthy = Opal.truthy, $Kernel = Opal.Kernel, $defs = Opal.defs, $gvars = Opal.gvars, $lambda = Opal.lambda, $hash_rehash = Opal.hash_rehash, $send = Opal.send, $rb_plus = Opal.rb_plus, $const_set = Opal.const_set, $klass = Opal.klass, $def = Opal.def, $Opal = Opal.Opal, $range = Opal.range, $eqeq = Opal.eqeq, $thrower = Opal.thrower, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('include?,raise,attr_accessor,singleton_class,output=,browser?,each,dup,write_proc=,proc,+,output,join,last,split,end_with?,call,write_proc,tty=,read_proc,read_proc=,freeze,new,string,ensure_loaded,prepare_console,loop,print,gets,puts,start_with?,[],==,silence,message,empty?,warnings,warn,full_message,eval_and_print,irb'); (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'IRB'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs(self, '$ensure_loaded', function $$ensure_loaded(library) { var version = nil, url = nil; if ($truthy((Opal.loaded_features)['$include?'](library))) { return nil }; version = ($truthy($$('RUBY_ENGINE_VERSION')['$include?']("dev")) ? ("master") : ($$('RUBY_ENGINE_VERSION'))); url = "https://cdn.opalrb.com/opal/" + (version) + "/" + (library) + ".js"; var libcode; if (typeof XMLHttpRequest !== 'undefined') { // Browser var r = new XMLHttpRequest(); r.open("GET", url, false); r.send(''); libcode = r.responseText; } else { $Kernel.$raise("You need to provision " + (library) + " yourself in this environment") } (new Function('Opal', libcode))(Opal); Opal.require(library); ; if ($truthy((Opal.loaded_features)['$include?'](library))) { return nil } else { return $Kernel.$raise("Could not load " + (library) + " for some reason") }; }); self.$singleton_class().$attr_accessor("output"); $defs(self, '$prepare_console', function $$prepare_console() { var block = $$prepare_console.$$p || nil, $a, self = this, original = nil, original_read_proc = nil; if ($gvars.stdout == null) $gvars.stdout = nil; if ($gvars.stderr == null) $gvars.stderr = nil; if ($gvars.stdin == null) $gvars.stdin = nil; $$prepare_console.$$p = null; ; return (function() { try { self['$output='](""); original = $hash_rehash(new Map([[$gvars.stdout, $lambda(function $$1(i){ if (i == null) i = nil; return ($gvars.stdout = i);})], [$gvars.stderr, $lambda(function $$2(i){ if (i == null) i = nil; return ($gvars.stderr = i);})]])); if ($truthy(self['$browser?']())) { $send(original, 'each', [], function $$3(pipe, pipe_setter){var self = $$3.$$s == null ? this : $$3.$$s, new_pipe = nil; if (pipe == null) pipe = nil; if (pipe_setter == null) pipe_setter = nil; new_pipe = pipe.$dup(); new_pipe['$write_proc=']($send(self, 'proc', [], function $$4(str){var self = $$4.$$s == null ? this : $$4.$$s; if (str == null) str = nil; self['$output=']($rb_plus(self.$output(), str)); self['$output='](self.$output().$split("\n").$last(30).$join("\n")); if ($truthy(str['$end_with?']("\n"))) { self['$output=']($rb_plus(self.$output(), "\n")) }; return pipe.$write_proc().$call(str);}, {$$s: self})); new_pipe['$tty='](false); return pipe_setter.$call(new_pipe);}, {$$s: self}); original_read_proc = $gvars.stdin.$read_proc(); $gvars.stdin['$read_proc='](function(s) { var p = prompt(self.$output()); if (p !== null) return p + "\n"; return nil; }); }; return Opal.yieldX(block, []);; } finally { ($send(original, 'each', [], function $$5(pipe, pipe_setter){ if (pipe == null) pipe = nil; if (pipe_setter == null) pipe_setter = nil; return pipe_setter.$call(pipe);}), ($a = [original_read_proc], $send($gvars.stdin, 'read_proc=', $a), $a[$a.length - 1]), ($a = [""], $send(self, 'output=', $a), $a[$a.length - 1])) }; })(); }); $defs(self, '$browser?', function $IRB_browser$ques$6() { return typeof(document) !== 'undefined' && typeof(prompt) !== 'undefined'; }); $const_set($nesting[0], 'LINEBREAKS', ["unexpected token $end", "unterminated string meets end of file"].$freeze()); return (function($base, $super) { var self = $klass($base, $super, 'Silencer'); var $proto = self.$$prototype; $proto.collector = $proto.stderr = nil; $def(self, '$initialize', function $$initialize() { var self = this; if ($gvars.stderr == null) $gvars.stderr = nil; return (self.stderr = $gvars.stderr) }); $def(self, '$silence', function $$silence() { var $yield = $$silence.$$p || nil, self = this; $$silence.$$p = null; return (function() { try { self.collector = $$$('StringIO').$new(); $gvars.stderr = self.collector; return Opal.yieldX($yield, []);; } finally { ($gvars.stderr = self.stderr) }; })() }); return $def(self, '$warnings', function $$warnings() { var self = this; return self.collector.$string() }); })($nesting[0], null); })($nesting[0], $nesting) })($nesting[0], $nesting); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Binding'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $def(self, '$irb', function $$irb() {try { var $t_return = $thrower('return'); var self = this, silencer = nil; $$$($Opal, 'IRB').$ensure_loaded("opal-replutils"); silencer = $$$($$$($Opal, 'IRB'), 'Silencer').$new(); return $send($$$($Opal, 'IRB'), 'prepare_console', [], function $$7(){var self = $$7.$$s == null ? this : $$7.$$s; return (function(){try { var $t_break = $thrower('break'); return $send(self, 'loop', [], function $$8(){var self = $$8.$$s == null ? this : $$8.$$s, line = nil, code = nil, mode = nil, js_code = nil, e = nil; self.$print(">> "); line = self.$gets(); if (!$truthy(line)) { $t_break.$throw(nil, $$8.$$is_lambda) }; code = ""; if ($truthy($$$($Opal, 'IRB')['$browser?']())) { self.$puts(line) }; if ($truthy(line['$start_with?']("ls "))) { code = line['$[]']($range(3, -1, false)); mode = "ls"; } else if ($eqeq(line, "ls\n")) { code = "self"; mode = "ls"; } else if ($truthy(line['$start_with?']("show "))) { code = line['$[]']($range(5, -1, false)); mode = "show"; } else { code = line; mode = "inspect"; }; js_code = nil; do { try { $send(silencer, 'silence', [], function $$9(){ return (js_code = Opal.compile(code, {irb: true}))}) } catch ($err) { if (Opal.rescue($err, [$$('SyntaxError')])) {(e = $err) try { if ($truthy($$$($$$($Opal, 'IRB'), 'LINEBREAKS')['$include?'](e.$message()))) { self.$print(".. "); line = self.$gets(); if (!$truthy(line)) { $t_return.$throw(nil, $$8.$$is_lambda) }; if ($truthy($$$($Opal, 'IRB')['$browser?']())) { self.$puts(line) }; code = $rb_plus(code, line); continue; } else if ($truthy(silencer.$warnings()['$empty?']())) { self.$warn(e.$full_message()) } else { self.$warn(silencer.$warnings()) } } finally { Opal.pop_exception($err); } } else { throw $err; } } break; } while(1);; if ($eqeq(mode, "show")) { self.$puts(js_code); $t_return.$throw(nil, $$8.$$is_lambda); }; return self.$puts($$$('REPLUtils').$eval_and_print(js_code, mode, false, self));}, {$$s: self, $$ret: $t_return})} catch($e) { if ($e === $t_break) return $e.$v; throw $e; } finally {$t_break.is_orphan = true;}})()}, {$$s: self});} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }) })('::', null, $nesting); // Run in WebTools console with: Opal.irb(c => eval(c)) Opal.irb = function(fun) { $$$('Binding').$new(fun).$irb() } Opal.load_parser = function() { Opal.Opal.IRB.$ensure_loaded('opal-parser'); } if (typeof Opal.eval === 'undefined') { Opal.eval = function(str) { Opal.load_parser(); return Opal.eval(str); } } if (typeof Opal.compile === 'undefined') { Opal.compile = function(str, options) { Opal.load_parser(); return Opal.compile(str, options); } } ; }; Opal.modules["opal"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $Object = Opal.Object, nil = Opal.nil; Opal.add_stubs('require,autoload'); $Object.$require("opal/base"); $Object.$require("opal/mini"); $Object.$require("corelib/kernel/format"); $Object.$require("corelib/string/encoding"); $Object.$autoload("Math", "corelib/math"); $Object.$require("corelib/complex/base"); $Object.$autoload("Complex", "corelib/complex"); $Object.$require("corelib/rational/base"); $Object.$autoload("Rational", "corelib/rational"); $Object.$require("corelib/time"); $Object.$autoload("Struct", "corelib/struct"); $Object.$autoload("Set", "corelib/set"); $Object.$autoload("Dir", "corelib/dir"); $Object.$autoload("File", "corelib/file"); $Object.$require("corelib/process/base"); $Object.$autoload("Process", "corelib/process"); $Object.$autoload("Random", "corelib/random"); $Object.$require("corelib/unsupported"); $Object.$require("corelib/binding"); return $Object.$require("corelib/irb"); }; Opal.modules["native"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $hash_put = Opal.hash_put, $module = Opal.module, $defs = Opal.defs, $slice = Opal.slice, $truthy = Opal.truthy, $send = Opal.send, $Kernel = Opal.Kernel, $extract_kwargs = Opal.extract_kwargs, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $range = Opal.range, $to_a = Opal.to_a, $def = Opal.def, $return_ivar = Opal.return_ivar, $alias = Opal.alias, $klass = Opal.klass, $rb_minus = Opal.rb_minus, $return_val = Opal.return_val, $send2 = Opal.send2, $find_super = Opal.find_super, $eqeqeq = Opal.eqeqeq, $rb_ge = Opal.rb_ge, $return_self = Opal.return_self, $gvars = Opal.gvars, self = Opal.top, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('try_convert,native?,respond_to?,to_n,raise,inspect,Native,proc,map!,end_with?,define_method,[],convert,call,to_proc,new,each,native_reader,native_writer,extend,warn,include,is_a?,map,Array,to_a,_Array,method_missing,bind,instance_method,[]=,slice,-,length,has_key?,enum_for,===,>=,<<,each_pair,method_defined?,initialize,_initialize,name,native_module'); (function($base, $parent_nesting) { var self = $module($base, 'Native'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs(self, '$is_a?', function $Native_is_a$ques$1(object, klass) { var self = this; try { return object instanceof self.$try_convert(klass); } catch (e) { return false; } }); $defs(self, '$try_convert', function $$try_convert(value, default$) { var self = this; if (default$ == null) default$ = nil; if (self['$native?'](value)) { return value; } else if (value['$respond_to?']("to_n")) { return value.$to_n(); } else { return default$; } ; }, -2); $defs(self, '$convert', function $$convert(value) { var self = this; if (self['$native?'](value)) { return value; } else if (value['$respond_to?']("to_n")) { return value.$to_n(); } else { self.$raise($$('ArgumentError'), "" + (value.$inspect()) + " isn't native"); } }); $defs(self, '$call', function $$call(obj, key, $a) { var block = $$call.$$p || nil, $post_args, args, self = this; $$call.$$p = null; ; $post_args = $slice(arguments, 2); args = $post_args; var prop = obj[key]; if (prop instanceof Function) { var converted = new Array(args.length); for (var i = 0, l = args.length; i < l; i++) { var item = args[i], conv = self.$try_convert(item); converted[i] = conv === nil ? item : conv; } if (block !== nil) { converted.push(block); } return self.$Native(prop.apply(obj, converted)); } else { return self.$Native(prop); } ; }, -3); $defs(self, '$proc', function $$proc() { var block = $$proc.$$p || nil, self = this; $$proc.$$p = null; ; if (!$truthy(block)) { self.$raise($$('LocalJumpError'), "no block given") }; return $send($Kernel, 'proc', [], function $$2($a){var $post_args, args, self = $$2.$$s == null ? this : $$2.$$s, instance = nil; $post_args = $slice(arguments); args = $post_args; $send(args, 'map!', [], function $$3(arg){var self = $$3.$$s == null ? this : $$3.$$s; if (arg == null) arg = nil; return self.$Native(arg);}, {$$s: self}); instance = self.$Native(this); // if global is current scope, run the block in the scope it was defined if (this === Opal.global) { return block.apply(self, args); } var self_ = block.$$s; block.$$s = null; try { return block.apply(instance, args); } finally { block.$$s = self_; } ;}, {$$arity: -1, $$s: self}); }); (function($base, $parent_nesting) { var self = $module($base, 'Helpers'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$alias_native', function $$alias_native(new$, $a, $b) { var $post_args, $kwargs, old, as, $yield = $$alias_native.$$p || nil, self = this; $$alias_native.$$p = null; $post_args = $slice(arguments, 1); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); if ($post_args.length > 0) old = $post_args.shift();if (old == null) old = new$; as = $hash_get($kwargs, "as");if (as == null) as = nil; if ($truthy(old['$end_with?']("="))) { return $send(self, 'define_method', [new$], function $$4(value){var self = $$4.$$s == null ? this : $$4.$$s; if (self["native"] == null) self["native"] = nil; if (value == null) value = nil; self["native"][old['$[]']($range(0, -2, false))] = $$('Native').$convert(value); return value;}, {$$s: self}) } else if ($truthy(as)) { return $send(self, 'define_method', [new$], function $$5($c){var block = $$5.$$p || nil, $post_args, args, self = $$5.$$s == null ? this : $$5.$$s, value = nil; if (self["native"] == null) self["native"] = nil; $$5.$$p = null; ; $post_args = $slice(arguments); args = $post_args; value = $send($$('Native'), 'call', [self["native"], old].concat($to_a(args)), block.$to_proc()); if ($truthy(value)) { return as.$new(value.$to_n()) } else { return nil };}, {$$arity: -1, $$s: self}) } else { return $send(self, 'define_method', [new$], function $$6($c){var block = $$6.$$p || nil, $post_args, args, self = $$6.$$s == null ? this : $$6.$$s; if (self["native"] == null) self["native"] = nil; $$6.$$p = null; ; $post_args = $slice(arguments); args = $post_args; return $send($$('Native'), 'call', [self["native"], old].concat($to_a(args)), block.$to_proc());}, {$$arity: -1, $$s: self}) }; }, -2); $def(self, '$native_reader', function $$native_reader($a) { var $post_args, names, self = this; $post_args = $slice(arguments); names = $post_args; return $send(names, 'each', [], function $$7(name){var self = $$7.$$s == null ? this : $$7.$$s; if (name == null) name = nil; return $send(self, 'define_method', [name], function $$8(){var self = $$8.$$s == null ? this : $$8.$$s; if (self["native"] == null) self["native"] = nil; return self.$Native(self["native"][name])}, {$$s: self});}, {$$s: self}); }, -1); $def(self, '$native_writer', function $$native_writer($a) { var $post_args, names, self = this; $post_args = $slice(arguments); names = $post_args; return $send(names, 'each', [], function $$9(name){var self = $$9.$$s == null ? this : $$9.$$s; if (name == null) name = nil; return $send(self, 'define_method', ["" + (name) + "="], function $$10(value){var self = $$10.$$s == null ? this : $$10.$$s; if (self["native"] == null) self["native"] = nil; if (value == null) value = nil; return self.$Native(self["native"][name] = value);}, {$$s: self});}, {$$s: self}); }, -1); return $def(self, '$native_accessor', function $$native_accessor($a) { var $post_args, names, self = this; $post_args = $slice(arguments); names = $post_args; $send(self, 'native_reader', $to_a(names)); return $send(self, 'native_writer', $to_a(names)); }, -1); })($nesting[0], $nesting); (function($base, $parent_nesting) { var self = $module($base, 'Wrapper'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$initialize', function $$initialize(native$) { var self = this; if (!$truthy($Kernel['$native?'](native$))) { $Kernel.$raise($$('ArgumentError'), "" + (native$.$inspect()) + " isn't native") }; return (self["native"] = native$); }); $def(self, '$to_n', $return_ivar("native")); return $defs(self, '$included', function $$included(klass) { return klass.$extend($$('Helpers')) }); })($nesting[0], $nesting); return $defs(self, '$included', function $$included(base) { var self = this; self.$warn("Including ::Native is deprecated. Please include Native::Wrapper instead."); return base.$include($$('Wrapper')); }); })($nesting[0], $nesting); (function($base, $parent_nesting) { var self = $module($base, 'Kernel'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$native?', function $Kernel_native$ques$11(value) { return value == null || !value.$$class; }); $def(self, '$Native', function $$Native(obj) { var $yield = $$Native.$$p || nil, self = this; $$Native.$$p = null; if ($truthy(obj == null)) { return nil } else if ($truthy(self['$native?'](obj))) { return $$$($$('Native'), 'Object').$new(obj) } else if ($truthy(obj['$is_a?']($$('Array')))) { return $send(obj, 'map', [], function $$12(o){var self = $$12.$$s == null ? this : $$12.$$s; if (o == null) o = nil; return self.$Native(o);}, {$$s: self}) } else if ($truthy(obj['$is_a?']($$('Proc')))) { return $send(self, 'proc', [], function $$13($a){var block = $$13.$$p || nil, $post_args, args, self = $$13.$$s == null ? this : $$13.$$s; $$13.$$p = null; ; $post_args = $slice(arguments); args = $post_args; return self.$Native($send(obj, 'call', $to_a(args), block.$to_proc()));}, {$$arity: -1, $$s: self}) } else { return obj } }); $alias(self, "_Array", "Array"); return $def(self, '$Array', function $$Array(object, $a) { var block = $$Array.$$p || nil, $post_args, args, self = this; $$Array.$$p = null; ; $post_args = $slice(arguments, 1); args = $post_args; if ($truthy(self['$native?'](object))) { return $send($$$($$('Native'), 'Array'), 'new', [object].concat($to_a(args)), block.$to_proc()).$to_a() }; return self.$_Array(object); }, -2); })($nesting[0], $nesting); (function($base, $super) { var self = $klass($base, $super, 'Object'); var $proto = self.$$prototype; $proto["native"] = nil; self.$include($$$($$$('Native'), 'Wrapper')); $def(self, '$==', function $Object_$eq_eq$14(other) { var self = this; return self["native"] === $$$('Native').$try_convert(other) }); $def(self, '$has_key?', function $Object_has_key$ques$15(name) { var self = this; return Opal.hasOwnProperty.call(self["native"], name) }); $def(self, '$each', function $$each($a) { var $post_args, args, $yield = $$each.$$p || nil, self = this; $$each.$$p = null; $post_args = $slice(arguments); args = $post_args; if (($yield !== nil)) { for (var key in self["native"]) { Opal.yieldX($yield, [key, self["native"][key]]) } ; return self; } else { return $send(self, 'method_missing', ["each"].concat($to_a(args))) }; }, -1); $def(self, '$[]', function $Object_$$$16(key) { var self = this; var prop = self["native"][key]; if (prop instanceof Function) { return prop; } else { return $$$('Native').$call(self["native"], key) } }); $def(self, '$[]=', function $Object_$$$eq$17(key, value) { var self = this, native$ = nil; native$ = $$$('Native').$try_convert(value); if ($truthy(native$ === nil)) { return self["native"][key] = value } else { return self["native"][key] = native$ }; }); $def(self, '$merge!', function $Object_merge$excl$18(other) { var self = this; other = $$$('Native').$convert(other); for (var prop in other) { self["native"][prop] = other[prop]; } ; return self; }); $def(self, '$respond_to?', function $Object_respond_to$ques$19(name, include_all) { var self = this; if (include_all == null) include_all = false; return $Kernel.$instance_method("respond_to?").$bind(self).$call(name, include_all); }, -2); $def(self, '$respond_to_missing?', function $Object_respond_to_missing$ques$20(name, include_all) { var self = this; if (include_all == null) include_all = false; return Opal.hasOwnProperty.call(self["native"], name); }, -2); $def(self, '$method_missing', function $$method_missing(mid, $a) { var block = $$method_missing.$$p || nil, $post_args, args, $b, self = this; $$method_missing.$$p = null; ; $post_args = $slice(arguments, 1); args = $post_args; if (mid.charAt(mid.length - 1) === '=') { return ($b = [mid.$slice(0, $rb_minus(mid.$length(), 1)), args['$[]'](0)], $send(self, '[]=', $b), $b[$b.length - 1]); } else { return $send($$$('Native'), 'call', [self["native"], mid].concat($to_a(args)), block.$to_proc()); } ; }, -2); $def(self, '$nil?', $return_val(false)); $def(self, '$is_a?', function $Object_is_a$ques$21(klass) { var self = this; return Opal.is_a(self, klass); }); $def(self, '$instance_of?', function $Object_instance_of$ques$22(klass) { var self = this; return self.$$class === klass; }); $def(self, '$class', function $Object_class$23() { var self = this; return self.$$class; }); $def(self, '$to_a', function $$to_a(options) { var block = $$to_a.$$p || nil, self = this; $$to_a.$$p = null; ; if (options == null) options = (new Map()); return $send($$$($$$('Native'), 'Array'), 'new', [self["native"], options], block.$to_proc()).$to_a(); }, -1); $def(self, '$inspect', function $$inspect() { var self = this; return "#" }); $alias(self, "include?", "has_key?"); $alias(self, "key?", "has_key?"); $alias(self, "kind_of?", "is_a?"); return $alias(self, "member?", "has_key?"); })($$('Native'), $$('BasicObject')); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Array'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.named = $proto["native"] = $proto.get = $proto.block = $proto.set = $proto.length = nil; self.$include($$$($$('Native'), 'Wrapper')); self.$include($$('Enumerable')); $def(self, '$initialize', function $$initialize(native$, options) { var block = $$initialize.$$p || nil, self = this, $ret_or_1 = nil; $$initialize.$$p = null; ; if (options == null) options = (new Map()); $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [native$], null); self.get = ($truthy(($ret_or_1 = options['$[]']("get"))) ? ($ret_or_1) : (options['$[]']("access"))); self.named = options['$[]']("named"); self.set = ($truthy(($ret_or_1 = options['$[]']("set"))) ? ($ret_or_1) : (options['$[]']("access"))); self.length = ($truthy(($ret_or_1 = options['$[]']("length"))) ? ($ret_or_1) : ("length")); self.block = block; if ($truthy(self.$length() == null)) { return self.$raise($$('ArgumentError'), "no length found on the array-like object") } else { return nil }; }, -2); $def(self, '$each', function $$each() { var block = $$each.$$p || nil, self = this; $$each.$$p = null; ; if (!$truthy(block)) { return self.$enum_for("each") }; for (var i = 0, length = self.$length(); i < length; i++) { Opal.yield1(block, self['$[]'](i)); } ; return self; }); $def(self, '$[]', function $Array_$$$24(index) { var self = this, result = nil, $ret_or_1 = nil; result = (($eqeqeq($$('String'), ($ret_or_1 = index)) || ($eqeqeq($$('Symbol'), $ret_or_1))) ? (($truthy(self.named) ? (self["native"][self.named](index)) : (self["native"][index]))) : ($eqeqeq($$('Integer'), $ret_or_1) ? (($truthy(self.get) ? (self["native"][self.get](index)) : (self["native"][index]))) : (nil))); if ($truthy(result)) { if ($truthy(self.block)) { return self.block.$call(result) } else { return self.$Native(result) } } else { return nil }; }); $def(self, '$[]=', function $Array_$$$eq$25(index, value) { var self = this; if ($truthy(self.set)) { return self["native"][self.set](index, $$('Native').$convert(value)) } else { return self["native"][index] = $$('Native').$convert(value) } }); $def(self, '$last', function $$last(count) { var self = this, index = nil, result = nil; if (count == null) count = nil; if ($truthy(count)) { index = $rb_minus(self.$length(), 1); result = []; while ($truthy($rb_ge(index, 0))) { result['$<<'](self['$[]'](index)); index = $rb_minus(index, 1); }; return result; } else { return self['$[]']($rb_minus(self.$length(), 1)) }; }, -1); $def(self, '$length', function $$length() { var self = this; return self["native"][self.length] }); $def(self, '$inspect', function $$inspect() { var self = this; return self.$to_a().$inspect() }); return $alias(self, "to_ary", "to_a"); })($$('Native'), null, $nesting); (function($base, $super) { var self = $klass($base, $super, 'Numeric'); return $def(self, '$to_n', function $$to_n() { var self = this; return self.valueOf(); }) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'Proc'); return $def(self, '$to_n', $return_self) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'String'); return $def(self, '$to_n', function $$to_n() { var self = this; return self.valueOf(); }) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'Regexp'); return $def(self, '$to_n', function $$to_n() { var self = this; return self.valueOf(); }) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'MatchData'); return $def(self, '$to_n', $return_ivar("matches")) })($nesting[0], null); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Struct'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $def(self, '$to_n', function $$to_n() { var self = this, result = nil; result = {}; $send(self, 'each_pair', [], function $$26(name, value){ if (name == null) name = nil; if (value == null) value = nil; return result[name] = $$('Native').$try_convert(value, value);}); return result; }) })($nesting[0], null, $nesting); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Array'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $def(self, '$to_n', function $$to_n() { var self = this; var result = []; for (var i = 0, length = self.length; i < length; i++) { var obj = self[i]; result.push($$('Native').$try_convert(obj, obj)); } return result; }) })($nesting[0], null, $nesting); (function($base, $super) { var self = $klass($base, $super, 'Boolean'); return $def(self, '$to_n', function $$to_n() { var self = this; return self.valueOf(); }) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'Time'); return $def(self, '$to_n', $return_self) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'NilClass'); return $def(self, '$to_n', function $$to_n() { return null; }) })($nesting[0], null); if (!$truthy($$('Hash')['$method_defined?']("_initialize"))) { (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Hash'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $alias(self, "_initialize", "initialize"); function $hash_convert_and_put_value(hash, key, value) { if (value && (value.constructor === undefined || value.constructor === Object || value instanceof Map)) { $hash_put(hash, key, $$('Hash').$new(value)); } else if (value && value.$$is_array) { value = value.map(function(item) { if (item && (item.constructor === undefined || item.constructor === Object || value instanceof Map)) { return $$('Hash').$new(item); } return self.$Native(item); }); $hash_put(hash, key, value) } else { $hash_put(hash, key, self.$Native(value)); } } ; $def(self, '$initialize', function $$initialize(defaults) { var block = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; ; ; if (defaults != null) { if (defaults.constructor === undefined || defaults.constructor === Object) { var key, value; for (key in defaults) { value = defaults[key]; $hash_convert_and_put_value(self, key, value); } return self; } else if (defaults instanceof Map) { Opal.hash_each(defaults, false, function(key, value) { $hash_convert_and_put_value(self, key, value); return [false, false]; }); } } return $send(self, '_initialize', [defaults], block.$to_proc()); ; }, -1); return $def(self, '$to_n', function $$to_n() { var self = this; var result = {}; Opal.hash_each(self, false, function(key, value) { result[$$('Native').$try_convert(key, key)] = $$('Native').$try_convert(value, value); return [false, false]; }); return result; }); })($nesting[0], null, $nesting) }; (function($base, $super) { var self = $klass($base, $super, 'Module'); return $def(self, '$native_module', function $$native_module() { var self = this; return Opal.global[self.$name()] = self }) })($nesting[0], null); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Class'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$native_alias', function $$native_alias(new_jsid, existing_mid) { var self = this; var aliased = self.prototype[Opal.jsid(existing_mid)]; if (!aliased) { self.$raise($$('NameError').$new("undefined method `" + (existing_mid) + "' for class `" + (self.$inspect()) + "'", existing_mid)); } self.prototype[new_jsid] = aliased; }); return $def(self, '$native_class', function $$native_class() { var self = this; self.$native_module(); return self["new"] = self.$new;; }); })($nesting[0], null, $nesting); return ($gvars.$ = ($gvars.global = self.$Native(Opal.global))); }; Opal.modules["console"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $def = Opal.def, $slice = Opal.slice, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $send = Opal.send, $gvars = Opal.gvars, self = Opal.top, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,raise,==,arity,instance_exec,to_proc,new'); self.$require("native"); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Console'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto["native"] = nil; self.$include($$$($$('Native'), 'Wrapper')); $def(self, '$clear', function $$clear() { var self = this; return self["native"].clear() }); $def(self, '$trace', function $$trace() { var self = this; return self["native"].trace() }); $def(self, '$log', function $$log($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return self["native"].log.apply(self["native"], args); }, -1); $def(self, '$info', function $$info($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return self["native"].info.apply(self["native"], args); }, -1); $def(self, '$warn', function $$warn($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return self["native"].warn.apply(self["native"], args); }, -1); $def(self, '$error', function $$error($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return self["native"].error.apply(self["native"], args); }, -1); $def(self, '$time', function $$time(label) { var block = $$time.$$p || nil, self = this; $$time.$$p = null; ; if (!$truthy(block)) { self.$raise($$('ArgumentError'), "no block given") }; self["native"].time(label); return (function() { try { if ($eqeq(block.$arity(), 0)) { return $send(self, 'instance_exec', [], block.$to_proc()) } else { return Opal.yield1(block, self); } } finally { self["native"].timeEnd() }; })();; }); $def(self, '$group', function $$group($a) { var block = $$group.$$p || nil, $post_args, args, self = this; $$group.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if (!$truthy(block)) { self.$raise($$('ArgumentError'), "no block given") }; self["native"].group.apply(self["native"], args); return (function() { try { if ($eqeq(block.$arity(), 0)) { return $send(self, 'instance_exec', [], block.$to_proc()) } else { return Opal.yield1(block, self); } } finally { self["native"].groupEnd() }; })();; }, -1); return $def(self, '$group!', function $Console_group$excl$1($a) { var block = $Console_group$excl$1.$$p || nil, $post_args, args, self = this; $Console_group$excl$1.$$p = null; ; $post_args = $slice(arguments); args = $post_args; if (!(block !== nil)) { return nil }; self["native"].groupCollapsed.apply(self["native"], args); return (function() { try { if ($eqeq(block.$arity(), 0)) { return $send(self, 'instance_exec', [], block.$to_proc()) } else { return Opal.yield1(block, self); } } finally { self["native"].groupEnd() }; })();; }, -1); })($nesting[0], null, $nesting); if ($truthy((typeof(Opal.global.console) !== "undefined"))) { return ($gvars.console = $$('Console').$new(Opal.global.console)) } else { return nil }; }; Opal.modules["dxopal/constants/colors"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $const_set = Opal.const_set, $nesting = [], nil = Opal.nil; return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Constants'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Colors'); var $nesting = [self].concat($parent_nesting); $const_set($nesting[0], 'C_BLACK', [255, 0, 0, 0]); $const_set($nesting[0], 'C_RED', [255, 255, 0, 0]); $const_set($nesting[0], 'C_GREEN', [255, 0, 255, 0]); $const_set($nesting[0], 'C_BLUE', [255, 0, 0, 255]); $const_set($nesting[0], 'C_YELLOW', [255, 255, 255, 0]); $const_set($nesting[0], 'C_CYAN', [255, 0, 255, 255]); $const_set($nesting[0], 'C_MAGENTA', [255, 255, 0, 255]); $const_set($nesting[0], 'C_WHITE', [255, 255, 255, 255]); return $const_set($nesting[0], 'C_DEFAULT', [0, 0, 0, 0]); })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["dxopal/font"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $class_variable_set = Opal.class_variable_set, $truthy = Opal.truthy, $class_variable_get = Opal.class_variable_get, $defs = Opal.defs, $def = Opal.def, $return_ivar = Opal.return_ivar, $nesting = [], nil = Opal.nil; Opal.add_stubs('new,Native,width,measureText,getContext'); return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Font'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.size = $proto.fontname = nil; $defs(self, '$default', function $Font_default$1() { var $a, $ret_or_1 = nil; return $class_variable_set($nesting[0], '@@default', ($truthy((($a = $nesting[0].$$cvars['@@default'], $a != null) ? 'class variable' : nil)) ? (($truthy(($ret_or_1 = $class_variable_get($nesting[0], '@@default', false))) ? ($ret_or_1) : ($$('Font').$new(24)))) : ($$('Font').$new(24)))) }); $defs(self, '$default=', function $Font_default$eq$2(f) { return $class_variable_set($nesting[0], '@@default', f) }); $def(self, '$initialize', function $$initialize(size, fontname, option) { var self = this, $ret_or_1 = nil; if (fontname == null) fontname = nil; if (option == null) option = (new Map()); self.size = size; self.orig_fontname = fontname; return (self.fontname = ($truthy(($ret_or_1 = fontname)) ? ($ret_or_1) : ("sans-serif"))); }, -2); $def(self, '$size', $return_ivar("size")); $def(self, '$fontname', $return_ivar("orig_fontname")); $def(self, '$get_width', function $$get_width(string) { var self = this, canvas = nil; canvas = self.$Native(document.getElementById('dxopal-canvas')); return canvas.$getContext("2d").$measureText(string).$width(); }); return $def(self, '$_spec_str', function $$_spec_str() { var self = this; return "" + (self.size) + "px " + (self.fontname) }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["dxopal/input"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $const_set = Opal.const_set, $class_variable_get = Opal.class_variable_get, $defs = Opal.defs, $class_variable_set = Opal.class_variable_set, $truthy = Opal.truthy, $send = Opal.send, $rb_plus = Opal.rb_plus, $rb_minus = Opal.rb_minus, $alias = Opal.alias, $rb_lt = Opal.rb_lt, $klass = Opal.klass, $def = Opal.def, $assign_ivar = Opal.assign_ivar, $nesting = [], nil = Opal.nil; Opal.add_stubs('_init_mouse_events,_init_touch_events,keyevent_target,keyevent_target=,+,_update_touch_info,key_down?,-,_pressing_keys,class_variable_defined?,mouse_x,mouse_y,raise,_move,[],new,[]=,push,_released,delete_if,released?,<,_released_at,touch_x,touch_y,attr_reader,!,released_at,id,x,y,inspect,data,values'); return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Input'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $parent_nesting) { var self = $module($base, 'MouseCodes'); var $nesting = [self].concat($parent_nesting); $const_set($nesting[0], 'M_LBUTTON', 1); $const_set($nesting[0], 'M_RBUTTON', 2); $const_set($nesting[0], 'M_MBUTTON', 4); $const_set($nesting[0], 'M_4TH_BUTTON', 8); return $const_set($nesting[0], 'M_5TH_BUTTON', 16); })($nesting[0], $nesting); $defs(self, '$_pressing_keys', function $$_pressing_keys() { return $class_variable_get($nesting[0], '@@pressing_keys', false) }); $defs(self, '$_init', function $$_init(canvas) { var $a, self = this, rect = nil; $class_variable_set($nesting[0], '@@tick', 0); $class_variable_set($nesting[0], '@@pressing_keys', new Object()); $class_variable_set($nesting[0], '@@mouse_info', {x: 0, y: 0}); $class_variable_set($nesting[0], '@@pressing_mouse_buttons', new Object()); $class_variable_set($nesting[0], '@@touch_info', {x: 0, y: 0}); $class_variable_set($nesting[0], '@@pressing_touch', new Object()); $class_variable_set($nesting[0], '@@canvas', canvas); rect = canvas.getBoundingClientRect(); $class_variable_set($nesting[0], '@@canvas_x', rect.left + window.pageXOffset); $class_variable_set($nesting[0], '@@canvas_y', rect.top + window.pageYOffset); self.$_init_mouse_events(); self.$_init_touch_events(); if ($truthy($$('Input').$keyevent_target())) { return nil } else { return ($a = [window], $send(self, 'keyevent_target=', $a), $a[$a.length - 1]) }; }); $defs(self, '$_on_tick', function $$_on_tick() { var self = this; $class_variable_set($nesting[0], '@@tick', $rb_plus($class_variable_get($nesting[0], '@@tick', false), 1)); return self.$_update_touch_info(); }); $defs(self, '$x', function $$x(pad_number) { var self = this, ret = nil; if (pad_number == null) pad_number = 0; ret = 0; if ($truthy(self['$key_down?']($$('K_RIGHT')))) { ret = $rb_plus(ret, 1) }; if ($truthy(self['$key_down?']($$('K_LEFT')))) { ret = $rb_minus(ret, 1) }; return ret; }, -1); $defs(self, '$y', function $$y(pad_number) { var self = this, ret = nil; if (pad_number == null) pad_number = 0; ret = 0; if ($truthy(self['$key_down?']($$('K_DOWN')))) { ret = $rb_plus(ret, 1) }; if ($truthy(self['$key_down?']($$('K_UP')))) { ret = $rb_minus(ret, 1) }; return ret; }, -1); $defs(self, '$key_down?', function $Input_key_down$ques$1(code) { return $class_variable_get($nesting[0], '@@pressing_keys', false)[code] > 0 }); $defs(self, '$key_push?', function $Input_key_push$ques$2(code) { return $class_variable_get($nesting[0], '@@pressing_keys', false)[code] == $class_variable_get($nesting[0], '@@tick', false)-1 }); $defs(self, '$key_release?', function $Input_key_release$ques$3(code) { return $class_variable_get($nesting[0], '@@pressing_keys', false)[code] == -($class_variable_get($nesting[0], '@@tick', false)-1) }); $const_set($nesting[0], 'ON_KEYDOWN_', function(ev){ $$('Input').$_pressing_keys()[ev.code] = $class_variable_get($nesting[0], '@@tick', false); ev.preventDefault(); ev.stopPropagation(); } ); $const_set($nesting[0], 'ON_KEYUP_', function(ev){ $$('Input').$_pressing_keys()[ev.code] = -$class_variable_get($nesting[0], '@@tick', false); ev.preventDefault(); ev.stopPropagation(); } ); $defs(self, '$keyevent_target=', function $Input_keyevent_target$eq$4(target) { var self = this; if ($truthy(self.$keyevent_target())) { $class_variable_get($nesting[0], '@@keyevent_target', false).removeEventListener('keydown', $$('ON_KEYDOWN_')); $class_variable_get($nesting[0], '@@keyevent_target', false).removeEventListener('keyup', $$('ON_KEYUP_')); }; $class_variable_set($nesting[0], '@@keyevent_target', target); if ($class_variable_get($nesting[0], '@@keyevent_target', false).tagName == "CANVAS") { $class_variable_get($nesting[0], '@@keyevent_target', false).setAttribute('tabindex', 0); } $class_variable_get($nesting[0], '@@keyevent_target', false).addEventListener('keydown', $$('ON_KEYDOWN_')); $class_variable_get($nesting[0], '@@keyevent_target', false).addEventListener('keyup', $$('ON_KEYUP_')); ; }); $defs(self, '$keyevent_target', function $$keyevent_target() { var self = this; if (!$truthy(self['$class_variable_defined?']("@@keyevent_target"))) { return nil }; return $class_variable_get($nesting[0], '@@keyevent_target', false); }); $defs(self, '$_init_mouse_events', function $$_init_mouse_events() { document.addEventListener('mousemove', function(ev){ $class_variable_get($nesting[0], '@@mouse_info', false).x = ev.pageX - $class_variable_get($nesting[0], '@@canvas_x', false); $class_variable_get($nesting[0], '@@mouse_info', false).y = ev.pageY - $class_variable_get($nesting[0], '@@canvas_y', false); }); document.addEventListener('mousedown', function(ev){ $class_variable_get($nesting[0], '@@mouse_info', false).x = ev.pageX - $class_variable_get($nesting[0], '@@canvas_x', false); $class_variable_get($nesting[0], '@@mouse_info', false).y = ev.pageY - $class_variable_get($nesting[0], '@@canvas_y', false); for (var k=1; k<=16; k<<=1) { if (ev.buttons & k) { $class_variable_get($nesting[0], '@@pressing_mouse_buttons', false)[k] = $class_variable_get($nesting[0], '@@tick', false); } } }); document.addEventListener('mouseup', function(ev){ $class_variable_get($nesting[0], '@@mouse_info', false).x = ev.pageX - $class_variable_get($nesting[0], '@@canvas_x', false); $class_variable_get($nesting[0], '@@mouse_info', false).y = ev.pageY - $class_variable_get($nesting[0], '@@canvas_y', false); // ev.button => ev.buttons table = { 0: 1, 1: 4, 2: 2, 3: 8, 4: 16 }; for (var k=1; k<=16; k<<=1) { if ($class_variable_get($nesting[0], '@@pressing_mouse_buttons', false)[k]) { $class_variable_get($nesting[0], '@@pressing_mouse_buttons', false)[table[ev.button]] = -$class_variable_get($nesting[0], '@@tick', false); } } }); }); $defs(self, '$mouse_x', function $$mouse_x() { return $class_variable_get($nesting[0], '@@mouse_info', false).x }); $defs(self, '$mouse_y', function $$mouse_y() { return $class_variable_get($nesting[0], '@@mouse_info', false).y }); (function(self, $parent_nesting) { $alias(self, "mouse_pos_x", "mouse_x"); return $alias(self, "mouse_pos_y", "mouse_y"); })(Opal.get_singleton_class(self), $nesting); $defs(self, '$mouse_down?', function $Input_mouse_down$ques$5(mouse_code) { var self = this; if (!$truthy(mouse_code)) { self.$raise("missing argument of `mouse_down?'") }; return $class_variable_get($nesting[0], '@@pressing_mouse_buttons', false)[mouse_code] > 0; }); $defs(self, '$mouse_push?', function $Input_mouse_push$ques$6(mouse_code) { var self = this; if (!$truthy(mouse_code)) { self.$raise("missing argument of `mouse_push?'") }; return $class_variable_get($nesting[0], '@@pressing_mouse_buttons', false)[mouse_code] == -($class_variable_get($nesting[0], '@@tick', false)-1); }); $defs(self, '$mouse_release?', function $Input_mouse_release$ques$7(mouse_code) { var self = this; if (!$truthy(mouse_code)) { self.$raise("missing argument of `mouse_release?'") }; return $class_variable_get($nesting[0], '@@pressing_mouse_buttons', false)[mouse_code] == -($class_variable_get($nesting[0], '@@tick', false)-1); }); $defs(self, '$_init_touch_events', function $$_init_touch_events() { var $a, $b, new_touch = nil; $class_variable_set($nesting[0], '@@touches', (new Map())); $class_variable_set($nesting[0], '@@new_touches', []); $class_variable_get($nesting[0], '@@canvas', false).addEventListener('touchmove', function(ev){ ev.preventDefault(); ev.stopPropagation(); $class_variable_get($nesting[0], '@@touch_info', false).x = ev.changedTouches[0].pageX - $class_variable_get($nesting[0], '@@canvas_x', false); $class_variable_get($nesting[0], '@@touch_info', false).y = ev.changedTouches[0].pageY - $class_variable_get($nesting[0], '@@canvas_y', false); for (var touch of ev.changedTouches) { const id = touch.identifier; const x = touch.pageX - $class_variable_get($nesting[0], '@@canvas_x', false); const y = touch.pageY - $class_variable_get($nesting[0], '@@canvas_y', false); ($a = $class_variable_get($nesting[0], '@@touches', false)['$[]'](id), ($a === nil || $a == null) ? nil : $a.$_move(x, y)) } }); $class_variable_get($nesting[0], '@@canvas', false).addEventListener('touchstart', function(ev){ ev.preventDefault(); ev.stopPropagation(); $class_variable_get($nesting[0], '@@touch_info', false).x = ev.changedTouches[0].pageX - $class_variable_get($nesting[0], '@@canvas_x', false); $class_variable_get($nesting[0], '@@touch_info', false).y = ev.changedTouches[0].pageY - $class_variable_get($nesting[0], '@@canvas_y', false); $class_variable_get($nesting[0], '@@pressing_touch', false)[0] = $class_variable_get($nesting[0], '@@tick', false); for (var touch of ev.changedTouches) { const id = touch.identifier; const x = touch.pageX - $class_variable_get($nesting[0], '@@canvas_x', false); const y = touch.pageY - $class_variable_get($nesting[0], '@@canvas_y', false); ((new_touch = $$('Touch').$new(id, x, y)), ($b = [id, new_touch], $send($class_variable_get($nesting[0], '@@touches', false), '[]=', $b), $b[$b.length - 1]), $class_variable_get($nesting[0], '@@new_touches', false).$push(new_touch)) } }); $class_variable_get($nesting[0], '@@canvas', false).addEventListener('touchend', function(ev){ ev.preventDefault(); ev.stopPropagation(); $class_variable_get($nesting[0], '@@touch_info', false).x = ev.changedTouches[0].pageX - $class_variable_get($nesting[0], '@@canvas_x', false); $class_variable_get($nesting[0], '@@touch_info', false).y = ev.changedTouches[0].pageY - $class_variable_get($nesting[0], '@@canvas_y', false); $class_variable_get($nesting[0], '@@pressing_touch', false)[0] = -$class_variable_get($nesting[0], '@@tick', false); for (var touch of ev.changedTouches) { const id = touch.identifier; ($b = $class_variable_get($nesting[0], '@@touches', false)['$[]'](id), ($b === nil || $b == null) ? nil : $b.$_released($class_variable_get($nesting[0], '@@tick', false))) } }); ; }); $defs(self, '$_update_touch_info', function $$_update_touch_info() { return $send($class_variable_get($nesting[0], '@@touches', false), 'delete_if', [], function $$8(id, t){var $ret_or_1 = nil; if (id == null) id = nil; if (t == null) t = nil; if ($truthy(($ret_or_1 = t['$released?']()))) { return $rb_lt(t.$_released_at(), $rb_minus($class_variable_get($nesting[0], '@@tick', false), 1)) } else { return $ret_or_1 };}) }); $defs(self, '$touch_x', function $$touch_x() { return $class_variable_get($nesting[0], '@@touch_info', false).x }); $defs(self, '$touch_y', function $$touch_y() { return $class_variable_get($nesting[0], '@@touch_info', false).y }); (function(self, $parent_nesting) { $alias(self, "touch_pos_x", "touch_x"); return $alias(self, "touch_pos_y", "touch_y"); })(Opal.get_singleton_class(self), $nesting); $defs(self, '$touch_down?', function $Input_touch_down$ques$9() { return $class_variable_get($nesting[0], '@@pressing_touch', false)[0] > 0 }); $defs(self, '$touch_push?', function $Input_touch_push$ques$10() { return $class_variable_get($nesting[0], '@@pressing_touch', false)[0] == -($class_variable_get($nesting[0], '@@tick', false)-1) }); $defs(self, '$touch_release?', function $Input_touch_release$ques$11() { return $class_variable_get($nesting[0], '@@pressing_touch', false)[0] == -($class_variable_get($nesting[0], '@@tick', false)-1) }); (function($base, $super) { var self = $klass($base, $super, 'Touch'); var $proto = self.$$prototype; $proto._released_at = nil; $def(self, '$initialize', function $$initialize(id, x, y) { var self = this; self.id = id; self.$_move(x, y); self._released_at = nil; return (self.data = (new Map())); }); self.$attr_reader("id", "x", "y", "data", "_released_at"); $def(self, '$released?', function $Touch_released$ques$12() { var self = this; return self._released_at['$!']()['$!']() }); $def(self, '$inspect', function $$inspect() { var self = this, rel = nil; rel = ($truthy(self.$released_at()) ? (" released_at=" + (self.$released_at())) : ("")); return "#"; }); $def(self, '$_move', function $$_move(x, y) { var self = this; self.x = x; return (self.y = y); }); return $def(self, '$_released', $assign_ivar("_released_at")); })($nesting[0], null); $defs(self, '$touches', function $$touches() { return $class_variable_get($nesting[0], '@@touches', false).$values() }); return $defs(self, '$new_touches', function $$new_touches() { var ret = nil; ret = $class_variable_get($nesting[0], '@@new_touches', false); $class_variable_set($nesting[0], '@@new_touches', []); return ret; }); })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["dxopal/input/key_codes"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $const_set = Opal.const_set, $nesting = [], nil = Opal.nil; return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Input'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'KeyCodes'); var $nesting = [self].concat($parent_nesting); $const_set($nesting[0], 'K_ESCAPE', "Escape"); $const_set($nesting[0], 'K_1', "Digit1"); $const_set($nesting[0], 'K_2', "Digit2"); $const_set($nesting[0], 'K_3', "Digit3"); $const_set($nesting[0], 'K_4', "Digit4"); $const_set($nesting[0], 'K_5', "Digit5"); $const_set($nesting[0], 'K_6', "Digit6"); $const_set($nesting[0], 'K_7', "Digit7"); $const_set($nesting[0], 'K_8', "Digit8"); $const_set($nesting[0], 'K_9', "Digit9"); $const_set($nesting[0], 'K_0', "Digit0"); $const_set($nesting[0], 'K_MINUS', "Minus"); $const_set($nesting[0], 'K_EQUALS', "Equal"); $const_set($nesting[0], 'K_BACK', "Backspace"); $const_set($nesting[0], 'K_TAB', "Tab"); $const_set($nesting[0], 'K_Q', "KeyQ"); $const_set($nesting[0], 'K_W', "KeyW"); $const_set($nesting[0], 'K_E', "KeyE"); $const_set($nesting[0], 'K_R', "KeyR"); $const_set($nesting[0], 'K_T', "KeyT"); $const_set($nesting[0], 'K_Y', "KeyY"); $const_set($nesting[0], 'K_U', "KeyU"); $const_set($nesting[0], 'K_I', "KeyI"); $const_set($nesting[0], 'K_O', "KeyO"); $const_set($nesting[0], 'K_P', "KeyP"); $const_set($nesting[0], 'K_LBRACKET', "BracketLeft"); $const_set($nesting[0], 'K_RBRACKET', "BracketRight"); $const_set($nesting[0], 'K_RETURN', "Enter"); $const_set($nesting[0], 'K_ENTER', "Enter"); $const_set($nesting[0], 'K_LCONTROL', "ControlLeft"); $const_set($nesting[0], 'K_A', "KeyA"); $const_set($nesting[0], 'K_S', "KeyS"); $const_set($nesting[0], 'K_D', "KeyD"); $const_set($nesting[0], 'K_F', "KeyF"); $const_set($nesting[0], 'K_G', "KeyG"); $const_set($nesting[0], 'K_H', "KeyH"); $const_set($nesting[0], 'K_J', "KeyJ"); $const_set($nesting[0], 'K_K', "KeyK"); $const_set($nesting[0], 'K_L', "KeyL"); $const_set($nesting[0], 'K_SEMICOLON', "Semicolon"); $const_set($nesting[0], 'K_APOSTROPHE', "Quote"); $const_set($nesting[0], 'K_GRAVE', "Backquote"); $const_set($nesting[0], 'K_LSHIFT', "ShiftLeft"); $const_set($nesting[0], 'K_BACKSLASH', "BackSlash"); $const_set($nesting[0], 'K_Z', "KeyZ"); $const_set($nesting[0], 'K_X', "KeyX"); $const_set($nesting[0], 'K_C', "KeyC"); $const_set($nesting[0], 'K_V', "KeyV"); $const_set($nesting[0], 'K_B', "KeyB"); $const_set($nesting[0], 'K_N', "KeyN"); $const_set($nesting[0], 'K_M', "KeyM"); $const_set($nesting[0], 'K_COMMA', "Comma"); $const_set($nesting[0], 'K_PERIOD', "Period"); $const_set($nesting[0], 'K_SLASH', "Slash"); $const_set($nesting[0], 'K_RSHIFT', "ShiftRight"); $const_set($nesting[0], 'K_MULTIPLY', "NumpadMultiply"); $const_set($nesting[0], 'K_SPACE', "Space"); $const_set($nesting[0], 'K_F1', "F1"); $const_set($nesting[0], 'K_F2', "F2"); $const_set($nesting[0], 'K_F3', "F3"); $const_set($nesting[0], 'K_F4', "F4"); $const_set($nesting[0], 'K_F5', "F5"); $const_set($nesting[0], 'K_F6', "F6"); $const_set($nesting[0], 'K_F7', "F7"); $const_set($nesting[0], 'K_F8', "F8"); $const_set($nesting[0], 'K_F9', "F9"); $const_set($nesting[0], 'K_F10', "F10"); $const_set($nesting[0], 'K_NUMLOCK', "NumLock"); $const_set($nesting[0], 'K_SCROLL', "ScrollLock"); $const_set($nesting[0], 'K_NUMPAD7', "Numpad7"); $const_set($nesting[0], 'K_NUMPAD8', "Numpad8"); $const_set($nesting[0], 'K_NUMPAD9', "Numpad9"); $const_set($nesting[0], 'K_SUBTRACT', "NumpadSubtract"); $const_set($nesting[0], 'K_NUMPAD4', "Numpad4"); $const_set($nesting[0], 'K_NUMPAD5', "Numpad5"); $const_set($nesting[0], 'K_NUMPAD6', "Numpad6"); $const_set($nesting[0], 'K_ADD', "NumpadAdd"); $const_set($nesting[0], 'K_NUMPAD1', "Numpad1"); $const_set($nesting[0], 'K_NUMPAD2', "Numpad2"); $const_set($nesting[0], 'K_NUMPAD3', "Numpad3"); $const_set($nesting[0], 'K_NUMPAD0', "Numpad0"); $const_set($nesting[0], 'K_DECIMAL', "NumpadDecimal"); $const_set($nesting[0], 'K_F11', "F11"); $const_set($nesting[0], 'K_F12', "F12"); $const_set($nesting[0], 'K_F13', "F13"); $const_set($nesting[0], 'K_F14', "F14"); $const_set($nesting[0], 'K_F15', "F15"); $const_set($nesting[0], 'K_KANA', "KanaMode"); $const_set($nesting[0], 'K_CONVERT', "Convert"); $const_set($nesting[0], 'K_NOCONVERT', "NonConvert"); $const_set($nesting[0], 'K_YEN', "IntlYen"); $const_set($nesting[0], 'K_COLON', "Colon"); $const_set($nesting[0], 'K_UNDERLINE', "IntlRo"); $const_set($nesting[0], 'K_NUMPADENTER', "NumpadEnter"); $const_set($nesting[0], 'K_RCONTROL', "ControlRight"); $const_set($nesting[0], 'K_MUTE', "VolumeMute"); $const_set($nesting[0], 'K_VOLUMEDOWN', "VolumeDown"); $const_set($nesting[0], 'K_VOLUMEUP', "VolumeUp"); $const_set($nesting[0], 'K_WEBHOME', "BrowserHome"); $const_set($nesting[0], 'K_DIVIDE', "NumpadDivide"); $const_set($nesting[0], 'K_PAUSE', "Pause"); $const_set($nesting[0], 'K_HOME', "Home"); $const_set($nesting[0], 'K_UP', "ArrowUp"); $const_set($nesting[0], 'K_LEFT', "ArrowLeft"); $const_set($nesting[0], 'K_RIGHT', "ArrowRight"); $const_set($nesting[0], 'K_END', "End"); $const_set($nesting[0], 'K_DOWN', "ArrowDown"); $const_set($nesting[0], 'K_INSERT', "Insert"); $const_set($nesting[0], 'K_DELETE', "Delete"); $const_set($nesting[0], 'K_WEBSEARCH', "BrowserSearch"); $const_set($nesting[0], 'K_WEBFAVORITES', "BrowserFavorites"); $const_set($nesting[0], 'K_WEBREFRESH', "BrowserRefresh"); $const_set($nesting[0], 'K_WEBSTOP', "BrowserStop"); $const_set($nesting[0], 'K_WEBFORWARD', "BrowserForward"); $const_set($nesting[0], 'K_WEBBACK', "BrowserBack"); $const_set($nesting[0], 'K_BACKSPACE', "Backspace"); $const_set($nesting[0], 'K_NUMPADSTAR', "NumpadMultiply"); $const_set($nesting[0], 'K_LALT', "AltLeft"); $const_set($nesting[0], 'K_CAPSLOCK', "CapsLock"); $const_set($nesting[0], 'K_NUMPADMINUS', "NumpadSubtract"); $const_set($nesting[0], 'K_NUMPADPLUS', "NumpadAdd"); $const_set($nesting[0], 'K_NUMPADPERIOD', "NumpadDecimal"); $const_set($nesting[0], 'K_NUMPADSLASH', "NumpadDivide"); $const_set($nesting[0], 'K_RALT', "AltRight"); $const_set($nesting[0], 'K_UPARROW', "ArrowUp"); $const_set($nesting[0], 'K_PGUP', "PageUp"); $const_set($nesting[0], 'K_LEFTARROW', "ArrowLeft"); $const_set($nesting[0], 'K_RIGHTARROW', "ArrowRight"); $const_set($nesting[0], 'K_DOWNARROW', "ArrowDown"); return $const_set($nesting[0], 'K_PGDN', "PageDown"); })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["dxopal/remote_resource"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $class_variable_set = Opal.class_variable_set, $send = Opal.send, $class_variable_get = Opal.class_variable_get, $defs = Opal.defs, $slice = Opal.slice, $truthy = Opal.truthy, $to_ary = Opal.to_ary, $not = Opal.not, $to_a = Opal.to_a, $rb_plus = Opal.rb_plus, $rb_lt = Opal.rb_lt, $nesting = [], nil = Opal.nil; Opal.add_stubs('new,[]=,_klass_name,[],raise,inspect,each,!,_load,to_proc,_update_loading_status,flat_map,values,call,last,split,name,+,join,map,count,<'); return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'RemoteResource'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $class_variable_set($nesting[0], '@@resources', $send($$('Hash'), 'new', [], function $RemoteResource$1(h, k){var $a; if (h == null) h = nil; if (k == null) k = nil; return ($a = [k, (new Map())], $send(h, '[]=', $a), $a[$a.length - 1]);})); $class_variable_set($nesting[0], '@@promises', $send($$('Hash'), 'new', [], function $RemoteResource$2(h, k){var $a; if (h == null) h = nil; if (k == null) k = nil; return ($a = [k, (new Map())], $send(h, '[]=', $a), $a[$a.length - 1]);})); $class_variable_set($nesting[0], '@@instances', $send($$('Hash'), 'new', [], function $RemoteResource$3(h, k){var $a; if (h == null) h = nil; if (k == null) k = nil; return ($a = [k, (new Map())], $send(h, '[]=', $a), $a[$a.length - 1]);})); $class_variable_set($nesting[0], '@@loaded', $send($$('Hash'), 'new', [], function $RemoteResource$4(h, k){var $a; if (h == null) h = nil; if (k == null) k = nil; return ($a = [k, (new Map())], $send(h, '[]=', $a), $a[$a.length - 1]);})); $class_variable_set($nesting[0], '@@klasses', (new Map())); $defs(self, '$add_class', function $$add_class(subklass) { var $a; return ($a = [subklass.$_klass_name(), subklass], $send($class_variable_get($nesting[0], '@@klasses', false), '[]=', $a), $a[$a.length - 1]) }); $defs(self, '$register', function $$register(name, $a) { var block = $$register.$$p || nil, $post_args, args, $b, self = this, $ret_or_1 = nil; $$register.$$p = null; ; $post_args = $slice(arguments, 1); args = $post_args; if ($truthy(($ret_or_1 = $class_variable_get($nesting[0], '@@resources', false)['$[]'](self.$_klass_name())))) { $ret_or_1 } else { $class_variable_get($nesting[0], '@@resources', false)['$[]='](self.$_klass_name(), (new Map())) }; return ($b = [name, [block, args]], $send($class_variable_get($nesting[0], '@@resources', false)['$[]'](self.$_klass_name()), '[]=', $b), $b[$b.length - 1]); }, -2); $defs(self, '$[]', function $RemoteResource_$$$5(name) { var self = this, ret = nil; if ($truthy((ret = $class_variable_get($nesting[0], '@@instances', false)['$[]'](self.$_klass_name())['$[]'](name)))) { return ret } else { return self.$raise("" + (self.$_klass_name()) + " " + (name.$inspect()) + " is not registered") } }); $defs(self, '$_load_resources', function $$_load_resources() { var block = $$_load_resources.$$p || nil, promises = nil; $$_load_resources.$$p = null; ; $send($class_variable_get($nesting[0], '@@resources', false), 'each', [], function $$6(klass_name, items){var klass = nil; if (klass_name == null) klass_name = nil; if (items == null) items = nil; klass = $class_variable_get($nesting[0], '@@klasses', false)['$[]'](klass_name); return $send(items, 'each', [], function $$7(name, $mlhs_tmp1){var $a, $b, block2 = nil, args = nil, instance = nil, promise = nil; if (name == null) name = nil; if ($mlhs_tmp1 == null) $mlhs_tmp1 = nil; $b = $mlhs_tmp1, $a = $to_ary($b), (block2 = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), $b; if ($not($class_variable_get($nesting[0], '@@promises', false)['$[]'](klass_name)['$[]'](name))) { $b = $send(klass, '_load', $to_a(args), block2.$to_proc()), $a = $to_ary($b), (instance = ($a[0] == null ? nil : $a[0])), (promise = ($a[1] == null ? nil : $a[1])), $b; $class_variable_get($nesting[0], '@@instances', false)['$[]'](klass_name)['$[]='](name, instance); $class_variable_get($nesting[0], '@@loaded', false)['$[]'](klass_name)['$[]='](name, false); return ($a = [name, promise.then(function $$8(){ $class_variable_get($nesting[0], '@@loaded', false)['$[]'](klass_name)['$[]='](name, true); return $$('RemoteResource').$_update_loading_status();})], $send($class_variable_get($nesting[0], '@@promises', false)['$[]'](klass_name), '[]=', $a), $a[$a.length - 1]); } else { return nil };}, {$$has_top_level_mlhs_arg: true});}); promises = $send($class_variable_get($nesting[0], '@@promises', false).$values(), 'flat_map', [], "values".$to_proc()); Promise.all(promises).then(function() { block.$call() }); ; }); $defs(self, '$_load', function $$_load($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return self.$raise("override me"); }, -1); $defs(self, '$_klass_name', function $$_klass_name() { var self = this; return self.$name().$split(/::/).$last() }); return $defs(self, '$_update_loading_status', function $$_update_loading_status() { var done = nil, report = nil, div = nil; done = true; report = $rb_plus("DXOpal loading...\n", $send($class_variable_get($nesting[0], '@@promises', false), 'map', [], function $$9(klass_name, promises){var n_total = nil, n_loaded = nil; if (klass_name == null) klass_name = nil; if (promises == null) promises = nil; n_total = $class_variable_get($nesting[0], '@@resources', false)['$[]'](klass_name).$count(); n_loaded = $class_variable_get($nesting[0], '@@loaded', false)['$[]'](klass_name).$values().$count(true); if ($truthy($rb_lt(n_loaded, n_total))) { done = false }; return "" + (klass_name) + ": " + (n_loaded) + "/" + (n_total) + "\n";}).$join()); div = document.getElementById('dxopal-loading'); if ($truthy(div)) { let pre = div.firstChild; if (!pre) { pre = document.createElement('pre'); div.appendChild(pre); } pre.textContent = report; if (done) { div.style.display = 'none'; } } else { return nil }; }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["dxopal/image"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $rb_lt = Opal.rb_lt, $rb_times = Opal.rb_times, $rb_plus = Opal.rb_plus, $rb_divide = Opal.rb_divide, $rb_minus = Opal.rb_minus, $eqeqeq = Opal.eqeqeq, $range = Opal.range, $defs = Opal.defs, $def = Opal.def, $slice = Opal.slice, $extract_kwargs = Opal.extract_kwargs, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $const_set = Opal.const_set, $send = Opal.send, $to_ary = Opal.to_ary, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,add_class,<,*,+,/,-,===,new,attr_accessor,loaded,load,call,_resize,box_fill,attr_reader,canvas,draw_ex,[],width,height,_spec_str,_rgba,_rgba_ary,fill,_image_data,_put_image_data,flat_map,map,slice,length,raise,inspect,join'); self.$require("dxopal/remote_resource"); return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Image'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.promise = $proto.canvas = $proto.width = $proto.height = $proto.ctx = nil; $$('RemoteResource').$add_class($$('Image')); $defs(self, '$hsl2rgb', function $$hsl2rgb(h, s, l) { var max = nil, min = nil, $ret_or_1 = nil; if ($truthy($rb_lt(l, 50))) { max = $rb_times(2.55, $rb_plus(l, $rb_times(l, $rb_divide(s, 100.0)))); min = $rb_times(2.55, $rb_minus(l, $rb_times(l, $rb_divide(s, 100.0)))); } else { max = $rb_times(2.55, $rb_plus(l, $rb_times($rb_minus(100, l), $rb_divide(s, 100.0)))); min = $rb_times(2.55, $rb_minus(l, $rb_times($rb_minus(100, l), $rb_divide(s, 100.0)))); }; if ($eqeqeq($range(0, 60, true), ($ret_or_1 = h))) { return [max, $rb_plus($rb_times($rb_divide(h, 60.0), $rb_minus(max, min)), min), min] } else if ($eqeqeq($range(60, 120, true), $ret_or_1)) { return [$rb_plus($rb_times($rb_divide($rb_minus(120, h), 60.0), $rb_minus(max, min)), min), max, min] } else if ($eqeqeq($range(120, 180, true), $ret_or_1)) { return [min, max, $rb_plus($rb_times($rb_divide($rb_minus(h, 120), 60.0), $rb_minus(max, min)), min)] } else if ($eqeqeq($range(180, 240, true), $ret_or_1)) { return [min, $rb_plus($rb_times($rb_divide($rb_minus(240, h), 60.0), $rb_minus(max, min)), min), max] } else if ($eqeqeq($range(240, 300, true), $ret_or_1)) { return [$rb_plus($rb_times($rb_divide($rb_minus(h, 240), 60.0), $rb_minus(max, min)), min), min, max] } else { return [max, min, $rb_plus($rb_times($rb_divide($rb_minus(360, h), 60.0), $rb_minus(max, min)), min)] }; }); $defs(self, '$_load', function $$_load(path_or_url) { var self = this, raw_img = nil, img_promise = nil, img = nil; raw_img = new Image(); img_promise = new Promise(function(resolve, reject) { raw_img.onload = function() { resolve(raw_img); }; raw_img.src = path_or_url; }); ; img = self.$new(0, 0); img_promise.then(function(raw_img){ img.$_resize(raw_img.width, raw_img.height); img.$_draw_raw_image(0, 0, raw_img); }); ; return [img, img_promise]; }); self.$attr_accessor("promise", "loaded"); $def(self, '$loaded?', function $Image_loaded$ques$1() { var self = this; return self.$loaded() }); $defs(self, '$load', function $$load(path_or_url) { var self = this; return self.$new(1, 1).$load(path_or_url) }); $def(self, '$load', function $$load(path_or_url) { var self = this, raw_img = nil; raw_img = new Image(); self.promise = new Promise(function(resolve, reject) { raw_img.onload = function() { self.$_resize(raw_img.width, raw_img.height); self.$_draw_raw_image(0, 0, raw_img); self.loaded = true; resolve(); }; raw_img.src = path_or_url; }); ; return self; }); $def(self, '$onload', function $$onload() { var block = $$onload.$$p || nil, self = this; $$onload.$$p = null; ; self.promise.then(function(response){ block.$call() }); ; }); $def(self, '$initialize', function $$initialize(width, height, $a, $b) { var $post_args, $kwargs, color, canvas, $c, self = this, $ret_or_1 = nil; $post_args = $slice(arguments, 2); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); if ($post_args.length > 0) color = $post_args.shift();if (color == null) color = $$('C_DEFAULT'); canvas = $hash_get($kwargs, "canvas");if (canvas == null) canvas = nil; $c = [width, height], (self.width = $c[0]), (self.height = $c[1]), $c; self.canvas = ($truthy(($ret_or_1 = canvas)) ? ($ret_or_1) : (document.createElement("canvas"))); self.ctx = self.canvas.getContext('2d'); self.$_resize(self.width, self.height); return self.$box_fill(0, 0, self.width, self.height, color); }, -3); self.$attr_reader("ctx", "canvas", "width", "height"); $def(self, '$_resize', function $$_resize(w, h) { var $a, self = this; $a = [w, h], (self.width = $a[0]), (self.height = $a[1]), $a; self.canvas.width = w; self.canvas.height = h; ; }); $def(self, '$draw', function $$draw(x, y, image) { var self = this; self.ctx.drawImage(image.$canvas(), x, y); ; return self; }); $def(self, '$draw_scale', function $$draw_scale(x, y, image, scale_x, scale_y, center_x, center_y) { var self = this; if (center_x == null) center_x = nil; if (center_y == null) center_y = nil; return self.$draw_ex(x, y, image, (new Map([["scale_x", scale_x], ["scale_y", scale_y], ["center_x", center_x], ["center_y", center_y]]))); }, -6); $def(self, '$draw_rot', function $$draw_rot(x, y, image, angle, center_x, center_y) { var self = this; if (center_x == null) center_x = nil; if (center_y == null) center_y = nil; return self.$draw_ex(x, y, image, (new Map([["angle", angle], ["center_x", center_x], ["center_y", center_y]]))); }, -5); $const_set($nesting[0], 'BLEND_TYPES', (new Map([["alpha", "source-over"], ["add", "lighter"]]))); $def(self, '$draw_ex', function $$draw_ex(x, y, image, options) { var self = this, scale_x = nil, $ret_or_1 = nil, scale_y = nil, center_x = nil, center_y = nil, alpha = nil, blend = nil, angle = nil, cx = nil, cy = nil; if (options == null) options = (new Map()); scale_x = ($truthy(($ret_or_1 = options['$[]']("scale_x"))) ? ($ret_or_1) : (1)); scale_y = ($truthy(($ret_or_1 = options['$[]']("scale_y"))) ? ($ret_or_1) : (1)); center_x = ($truthy(($ret_or_1 = options['$[]']("center_x"))) ? ($ret_or_1) : ($rb_divide(image.$width(), 2))); center_y = ($truthy(($ret_or_1 = options['$[]']("center_y"))) ? ($ret_or_1) : ($rb_divide(image.$height(), 2))); alpha = ($truthy(($ret_or_1 = options['$[]']("alpha"))) ? ($ret_or_1) : (255)); blend = ($truthy(($ret_or_1 = options['$[]']("blend"))) ? ($ret_or_1) : ("alpha")); angle = ($truthy(($ret_or_1 = options['$[]']("angle"))) ? ($ret_or_1) : (0)); cx = $rb_plus(x, center_x); cy = $rb_plus(y, center_y); self.ctx.translate(cx, cy); self.ctx.rotate(angle * Math.PI / 180.0); self.ctx.scale(scale_x, scale_y); self.ctx.save(); self.ctx.globalAlpha = alpha / 255; self.ctx.globalCompositeOperation = $$('BLEND_TYPES')['$[]'](blend); self.ctx.drawImage(image.$canvas(), x-cx, y-cy); self.ctx.restore(); self.ctx.setTransform(1, 0, 0, 1, 0, 0); // reset ; return self; }, -4); $def(self, '$draw_font', function $$draw_font(x, y, string, font, color) { var self = this, ctx = nil; if (color == null) color = [255, 255, 255]; ctx = self.ctx; ctx.font = font.$_spec_str(); ctx.textBaseline = 'top'; ctx.fillStyle = self.$_rgba(color); ctx.fillText(string, x, y); ; return self; }, -5); $def(self, '$[]', function $Image_$$$2(x, y) { var self = this, ctx = nil, ret = nil; ctx = self.ctx; ret = nil; var pixel = ctx.getImageData(x, y, 1, 1); var rgba = pixel.data; ret = [rgba[3], rgba[0], rgba[1], rgba[2]]; ; return ret; }); $def(self, '$[]=', function $Image_$$$eq$3(x, y, color) { var self = this; return self.$box_fill(x, y, $rb_plus(x, 1), $rb_plus(y, 1), color) }); $def(self, '$compare', function $$compare(x, y, color) { var self = this, ctx = nil, rgba1 = nil, rgba2 = nil, ret = nil; ctx = self.ctx; rgba1 = self.$_rgba_ary(color); rgba2 = nil; ret = nil; var pixel = ctx.getImageData(x, y, 1, 1); rgba2 = pixel.data; // TODO: what is the right way to compare an Array and an Uint8ClampedArray? ret = rgba1[0] == rgba2[0] && rgba1[1] == rgba2[1] && rgba1[2] == rgba2[2] && rgba1[3] == rgba2[3] ; return ret; }); $def(self, '$line', function $$line(x1, y1, x2, y2, color) { var self = this, ctx = nil; ctx = self.ctx; ctx.beginPath(); ctx.strokeStyle = self.$_rgba(color); ctx.moveTo(x1+0.5, y1+0.5); ctx.lineTo(x2+0.5, y2+0.5); ctx.stroke(); ; return self; }); $def(self, '$box', function $$box(x1, y1, x2, y2, color) { var self = this, ctx = nil; ctx = self.ctx; ctx.beginPath(); ctx.strokeStyle = self.$_rgba(color); ctx.rect(x1+0.5, y1+0.5, x2-x1, y2-y1); ctx.stroke(); ; return self; }); $def(self, '$box_fill', function $$box_fill(x1, y1, x2, y2, color) { var self = this, ctx = nil; ctx = self.ctx; ctx.beginPath(); ctx.fillStyle = self.$_rgba(color); ctx.fillRect(x1, y1, x2-x1, y2-y1); ; return self; }); $def(self, '$circle', function $$circle(x, y, r, color) { var self = this, ctx = nil; ctx = self.ctx; ctx.beginPath(); ctx.strokeStyle = self.$_rgba(color); ctx.arc(x+0.5, y+0.5, r, 0, Math.PI*2, false) ctx.stroke(); ; return self; }); $def(self, '$circle_fill', function $$circle_fill(x, y, r, color) { var self = this, ctx = nil; ctx = self.ctx; ctx.beginPath(); ctx.fillStyle = self.$_rgba(color); ctx.arc(x, y, r, 0, Math.PI*2, false) ctx.fill(); ; return self; }); $def(self, '$triangle', function $$triangle(x1, y1, x2, y2, x3, y3, color) { var self = this, ctx = nil; ctx = self.ctx; ctx.beginPath(); ctx.strokeStyle = self.$_rgba(color); ctx.moveTo(x1+0.5, y1+0.5); ctx.lineTo(x2+0.5, y2+0.5); ctx.lineTo(x3+0.5, y3+0.5); ctx.lineTo(x1+0.5, y1+0.5); ctx.stroke(); ; return self; }); $def(self, '$triangle_fill', function $$triangle_fill(x1, y1, x2, y2, x3, y3, color) { var self = this, ctx = nil; ctx = self.ctx; ctx.beginPath(); ctx.fillStyle = self.$_rgba(color); ctx.moveTo(x1, y1); ctx.lineTo(x2, y2); ctx.lineTo(x3, y3); ctx.fill(); ; return self; }); $def(self, '$fill', function $$fill(color) { var self = this; return self.$box_fill(0, 0, $rb_minus(self.width, 1), $rb_minus(self.height, 1), color) }); $def(self, '$clear', function $$clear() { var self = this; return self.$fill([0, 0, 0, 0]) }); $def(self, '$slice', function $$slice(x, y, width, height) { var self = this, newimg = nil, data = nil; newimg = $$('Image').$new(width, height); data = self.$_image_data(x, y, width, height); newimg.$_put_image_data(data); return newimg; }); $def(self, '$slice_tiles', function $$slice_tiles(xcount, ycount) { var self = this, tile_w = nil, tile_h = nil; tile_w = $rb_divide(self.width, xcount); tile_h = $rb_divide(self.height, ycount); return $send(Opal.Range.$new(0,ycount, true), 'flat_map', [], function $$4(v){var self = $$4.$$s == null ? this : $$4.$$s; if (v == null) v = nil; return $send(Opal.Range.$new(0,xcount, true), 'map', [], function $$5(u){var self = $$5.$$s == null ? this : $$5.$$s; if (u == null) u = nil; return self.$slice($rb_times(tile_w, u), $rb_times(tile_h, v), tile_w, tile_h);}, {$$s: self});}, {$$s: self}); }); $def(self, '$set_color_key', function $$set_color_key(color) { var $a, $b, self = this, r = nil, g = nil, b = nil, _ = nil, data = nil; $b = self.$_rgba_ary(color), $a = $to_ary($b), (r = ($a[0] == null ? nil : $a[0])), (g = ($a[1] == null ? nil : $a[1])), (b = ($a[2] == null ? nil : $a[2])), (_ = ($a[3] == null ? nil : $a[3])), $b; data = self.$_image_data(); var buf = data.data; for(var i = 0; i < buf.length; i += 4){ if (buf[i] == r && buf[i+1] == g && buf[i+2] == b) { buf[i+3] = 0 } } ; return self.$_put_image_data(data); }); $def(self, '$_draw_raw_image', function $$_draw_raw_image(x, y, raw_img) { var self = this; self.ctx.drawImage(raw_img, x, y); }); $def(self, '$_image_data', function $$_image_data(x, y, w, h) { var self = this; if (x == null) x = 0; if (y == null) y = 0; if (w == null) w = self.width; if (h == null) h = self.height; return self.ctx.getImageData(x, y, w, h); }, -1); $def(self, '$_put_image_data', function $$_put_image_data(image_data, x, y) { var self = this; if (x == null) x = 0; if (y == null) y = 0; return self.ctx.putImageData(image_data, x, y); }, -2); $def(self, '$_rgb', function $$_rgb(color) { var self = this, rgb = nil; switch (color.$length().valueOf()) { case 4: rgb = color['$[]'](1, 3) break; case 3: rgb = color break; default: self.$raise("invalid color: " + (color.$inspect())) }; return $rb_plus($rb_plus("rgb(", rgb.$join(", ")), ")"); }); $def(self, '$_rgba', function $$_rgba(color) { var self = this; return $rb_plus($rb_plus("rgba(", self.$_rgba_ary(color).$join(", ")), ")") }); return $def(self, '$_rgba_ary', function $$_rgba_ary(color) { var self = this; switch (color.$length().valueOf()) { case 4: return $rb_plus(color['$[]'](1, 3), [$rb_divide(color['$[]'](0), 255.0)]) case 3: return $rb_plus(color, [1.0]) default: return self.$raise("invalid color: " + (color.$inspect())) } }); })($nesting[0], $$('RemoteResource'), $nesting) })($nesting[0], $nesting); }; Opal.modules["dxopal/sound"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $class_variable_set = Opal.class_variable_set, $truthy = Opal.truthy, $class_variable_get = Opal.class_variable_get, $defs = Opal.defs, $assign_ivar = Opal.assign_ivar, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,add_class,new,audio_context,attr_accessor,raise,path_or_url'); self.$require("dxopal/remote_resource"); return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Sound'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.decoded = $proto.source = nil; $$('RemoteResource').$add_class($$('Sound')); $defs(self, '$audio_context', function $$audio_context() { var $a, $ret_or_1 = nil; return $class_variable_set($nesting[0], '@@audio_context', ($truthy((($a = $nesting[0].$$cvars['@@audio_context'], $a != null) ? 'class variable' : nil)) ? (($truthy(($ret_or_1 = $class_variable_get($nesting[0], '@@audio_context', false))) ? ($ret_or_1) : ( new (window.AudioContext||window.webkitAudioContext)))) : ( new (window.AudioContext||window.webkitAudioContext)))) }); $defs(self, '$_load', function $$_load(path_or_url) { var self = this, snd = nil, snd_promise = nil; snd = self.$new(path_or_url); snd_promise = new Promise(function(resolve, reject) { var request = new XMLHttpRequest(); request.open('GET', path_or_url, true); request.responseType = 'arraybuffer'; request.onload = function() { var audioData = request.response; var context = $$('Sound').$audio_context(); context.decodeAudioData(audioData, function(decoded) { snd['$decoded='](decoded); resolve(); }); }; request.send(); }); ; return [snd, snd_promise]; }); $def(self, '$initialize', $assign_ivar("path_or_url")); self.$attr_accessor("decoded"); $def(self, '$play', function $$play(loop_) { var self = this, source = nil; if (loop_ == null) loop_ = false; if (!$truthy(self.decoded)) { self.$raise("Sound " + (self.$path_or_url()) + " is not loaded yet") }; source = nil; var context = $$('Sound').$audio_context(); source = context.createBufferSource(); source.buffer = self.decoded; if (loop_) { source.loop = true; } source.connect(context.destination); source.start(0); ; return (self.source = source); }, -1); return $def(self, '$stop', function $$stop() { var self = this; if (!$truthy(self.decoded)) { return nil }; if (!$truthy(self.source)) { return nil }; return self.source.stop(); }); })($nesting[0], $$('RemoteResource'), $nesting) })($nesting[0], $nesting); }; Opal.modules["dxopal/sound_effect"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $rb_divide = Opal.rb_divide, $rb_plus = Opal.rb_plus, $defs = Opal.defs, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('add_class,new,audio_context,/,call,raise,+,inspect'); return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'SoundEffect'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $$('RemoteResource').$add_class($$('SoundEffect')); (function($base, $parent_nesting) { var self = $module($base, 'WaveTypes'); var $nesting = [self].concat($parent_nesting); $const_set($nesting[0], 'WAVE_SIN', "sine"); $const_set($nesting[0], 'WAVE_SAW', "sawtooth"); $const_set($nesting[0], 'WAVE_TRI', "triangle"); return $const_set($nesting[0], 'WAVE_RECT', "square"); })($nesting[0], $nesting); $defs(self, '$_load', function $$_load(time, wave_type, resolution) { var block = $$_load.$$p || nil, self = this, snd = nil, snd_promise = nil; $$_load.$$p = null; ; if (wave_type == null) wave_type = $$('WAVE_RECT'); if (resolution == null) resolution = 1000; snd = self.$new("(soundeffect)"); snd_promise = new Promise(function(resolve, reject){ var n_channels = 1; var context = $$('Sound').$audio_context(); var n_ticks = time; var totalSeconds = $rb_divide(time, resolution); var valuesPerSecond = context.sampleRate; var n_values = totalSeconds * valuesPerSecond; var myArrayBuffer = context.createBuffer(n_channels, n_values, valuesPerSecond); var values = myArrayBuffer.getChannelData(0); var n = 0; for (var i = 0; i < n_ticks; i++) { var ret = block.$call(); var freq = ret[0], volume = ret[1]; if (freq < 0) freq = 0; if (freq > 44100) freq = 44100; if (volume < 0) volume = 0; if (volume > 255) volume = 255; var vol = volume / 255; // 0.0~1.0 var period = valuesPerSecond * 1 / freq; for (; n < ((i+1) / n_ticks * n_values); n++) { var phase = (n % period) / period; // 0.0~1.0 var value; // -1.0~1.0 switch(wave_type) { case "sine": value = Math.sin(2 * Math.PI * phase) * 2 - 1; break; case "sawtooth": value = phase * 2 - 1; break; case "triangle": value = phase < 0.25 ? 0+phase*4 : phase < 0.5 ? 1-(phase-0.25)*4 : phase < 0.75 ? 0-(phase-0.5)*4 : -1+(phase-0.75)*4; break; case "square": value = (phase < 0.5 ? 1 : -1); break; default: self.$raise($rb_plus("unknown wave_type: ", wave_type.$inspect())); } values[n] = value * vol; } } snd['$decoded='](myArrayBuffer); resolve(); }); ; return [snd, snd_promise]; }, -2); return $def(self, '$add', function $$add(wave_type, resolution) { if (wave_type == null) wave_type = $$('WAVE_RECT'); if (resolution == null) resolution = 1000; return $$('TODO'); }, -1); })($nesting[0], $$('Sound'), $nesting) })($nesting[0], $nesting) }; Opal.modules["dxopal/sprite/collision_checker"] = function(Opal) {/* Generated by Opal 1.8.2 */ var nil = Opal.nil; (function(){ var intersect = function(x1, y1, x2, y2, x3, y3, x4, y4){ return ((x1 - x2) * (y3 - y1) + (y1 - y2) * (x1 - x3)) * ((x1 - x2) * (y4 - y1) + (y1 - y2) * (x1 - x4)); }; var check_line_line = function(x1, y1, x2, y2, x3, y3, x4, y4){ return !((((x1 - x2) * (y3 - y1) + (y1 - y2) * (x1 - x3)) * ((x1 - x2) * (y4 - y1) + (y1 - y2) * (x1 - x4)) > 0.0) || (((x3 - x4) * (y1 - y3) + (y3 - y4) * (x3 - x1)) * ((x3 - x4) * (y2 - y3) + (y3 - y4) * (x3 - x2)) > 0.0 )); }; var check_circle_line = function(x, y, r, x1, y1, x2, y2) { var vx = x2-x1, vy = y2-y1; var cx = x-x1, cy = y-y1; if (vx == 0 && vy == 0 ) return CCk.check_point_circle(x, y, r, x1, y1); var n1 = vx * cx + vy * cy; if (n1 < 0) return cx*cx + cy*cy < r * r; var n2 = vx * vx + vy * vy; if (n1 > n2) { var len = (x2 - x)*(x2 - x) + (y2 - y)*(y2 - y); return len < r * r; } else { var n3 = cx * cx + cy * cy; return n3-(n1/n2)*n1 < r * r; } }; var CCk = { check_point_circle: function(px, py, cx, cy, cr) { return (cr*cr) >= ((cx-px) * (cx-px) + (cy-py) * (cy-py)); }, check_point_straight_rect: function(x, y, x1, y1, x2, y2) { return ((x) >= (x1) && (y) >= (y1) && (x) < (x2) && (y) < (y2)); }, check_point_triangle: function(x, y, x1, y1, x2, y2, x3, y3){ if ((x1 - x3) * (y1 - y2) == (x1 - x2) * (y1 - y3)) return false; var cx = (x1 + x2 + x3) / 3, cy = (y1 + y2 + y3) / 3; if (intersect( x1, y1, x2, y2, x, y, cx, cy ) < 0.0 || intersect( x2, y2, x3, y3, x, y, cx, cy ) < 0.0 || intersect( x3, y3, x1, y1, x, y, cx, cy ) < 0.0 ) { return false; } return true; }, check_circle_circle: function(ox, oy, or, dx, dy, dr) { return ((or+dr) * (or+dr) >= (ox-dx) * (ox-dx) + (oy-dy) * (oy-dy)); }, check_ellipse_ellipse: function(E1, E2) { var DefAng = E1.fAngle-E2.fAngle; var Cos = Math.cos( DefAng ); var Sin = Math.sin( DefAng ); var nx = E2.fRad_X * Cos; var ny = -E2.fRad_X * Sin; var px = E2.fRad_Y * Sin; var py = E2.fRad_Y * Cos; var ox = Math.cos( E1.fAngle )*(E2.fCx-E1.fCx) + Math.sin(E1.fAngle)*(E2.fCy-E1.fCy); var oy = -Math.sin( E1.fAngle )*(E2.fCx-E1.fCx) + Math.cos(E1.fAngle)*(E2.fCy-E1.fCy); var rx_pow2 = 1/(E1.fRad_X*E1.fRad_X); var ry_pow2 = 1/(E1.fRad_Y*E1.fRad_Y); var A = rx_pow2*nx*nx + ry_pow2*ny*ny; var B = rx_pow2*px*px + ry_pow2*py*py; var D = 2*rx_pow2*nx*px + 2*ry_pow2*ny*py; var E = 2*rx_pow2*nx*ox + 2*ry_pow2*ny*oy; var F = 2*rx_pow2*px*ox + 2*ry_pow2*py*oy; var G = (ox/E1.fRad_X)*(ox/E1.fRad_X) + (oy/E1.fRad_Y)*(oy/E1.fRad_Y) - 1; var tmp1 = 1/(D*D-4*A*B); var h = (F*D-2*E*B)*tmp1; var k = (E*D-2*A*F)*tmp1; var Th = (B-A)==0 ? 0 : Math.atan( D/(B-A) ) * 0.5; var CosTh = Math.cos(Th); var SinTh = Math.sin(Th); var A_tt = A*CosTh*CosTh + B*SinTh*SinTh - D*CosTh*SinTh; var B_tt = A*SinTh*SinTh + B*CosTh*CosTh + D*CosTh*SinTh; var KK = A*h*h + B*k*k + D*h*k - E*h - F*k + G > 0 ? 0 : A*h*h + B*k*k + D*h*k - E*h - F*k + G; var Rx_tt = 1+Math.sqrt(-KK/A_tt); var Ry_tt = 1+Math.sqrt(-KK/B_tt); var x_tt = CosTh*h-SinTh*k; var y_tt = SinTh*h+CosTh*k; var JudgeValue = x_tt*x_tt/(Rx_tt*Rx_tt) + y_tt*y_tt/(Ry_tt*Ry_tt); return (JudgeValue <= 1); }, check_circle_tilted_rect: function(cx, cy, cr, x1, y1, x2, y2, x3, y3, x4, y4){ return CCk.check_point_triangle(cx, cy, x1, y1, x2, y2, x3, y3) || CCk.check_point_triangle(cx, cy, x1, y1, x3, y3, x4, y4) || check_circle_line(cx, cy, cr, x1, y1, x2, y2) || check_circle_line(cx, cy, cr, x2, y2, x3, y3) || check_circle_line(cx, cy, cr, x3, y3, x4, y4) || check_circle_line(cx, cy, cr, x4, y4, x1, y1); }, check_circle_triangle: function(cx, cy, cr, x1, y1, x2, y2, x3, y3) { return CCk.check_point_triangle(cx, cy, x1, y1, x2, y2, x3, y3) || check_circle_line(cx, cy, cr, x1, y1, x2, y2) || check_circle_line(cx, cy, cr, x2, y2, x3, y3) || check_circle_line(cx, cy, cr, x3, y3, x1, y1); }, check_rect_rect: function(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) { return ax1 < bx2 && ay1 < by2 && bx1 < ax2 && by1 < ay2; }, // Rect(may be tilted) vs Triangle check_tilted_rect_triangle: function(ox1, oy1, ox2, oy2, ox3, oy3, ox4, oy4, dx1, dy1, dx2, dy2, dx3, dy3) { return check_line_line(ox1, oy1, ox2, oy2, dx1, dy1, dx2, dy2) || check_line_line(ox1, oy1, ox2, oy2, dx2, dy2, dx3, dy3) || check_line_line(ox1, oy1, ox2, oy2, dx3, dy3, dx1, dy1) || check_line_line(ox2, oy2, ox3, oy3, dx1, dy1, dx2, dy2) || check_line_line(ox2, oy2, ox3, oy3, dx2, dy2, dx3, dy3) || check_line_line(ox2, oy2, ox3, oy3, dx3, dy3, dx1, dy1) || check_line_line(ox3, oy3, ox4, oy4, dx1, dy1, dx2, dy2) || check_line_line(ox3, oy3, ox4, oy4, dx2, dy2, dx3, dy3) || check_line_line(ox3, oy3, ox4, oy4, dx3, dy3, dx1, dy1) || check_line_line(ox4, oy4, ox1, oy1, dx1, dy1, dx2, dy2) || check_line_line(ox4, oy4, ox1, oy1, dx2, dy2, dx3, dy3) || check_line_line(ox4, oy4, ox1, oy1, dx3, dy3, dx1, dy1) || CCk.check_point_triangle(dx1, dy1, ox1, oy1, ox2, oy2, ox3, oy3) || CCk.check_point_triangle(dx1, dy1, ox1, oy1, ox3, oy3, ox4, oy4) || CCk.check_point_triangle(ox1, oy1, dx1, dy1, dx2, dy2, dx3, dy3); }, // Triangle vs Triangle check_triangle_triangle: function(ox1, oy1, ox2, oy2, ox3, oy3, dx1, dy1, dx2, dy2, dx3, dy3) { return check_line_line(ox1, oy1, ox2, oy2, dx2, dy2, dx3, dy3) || check_line_line(ox1, oy1, ox2, oy2, dx3, dy3, dx1, dy1) || check_line_line(ox2, oy2, ox3, oy3, dx1, dy1, dx2, dy2) || check_line_line(ox2, oy2, ox3, oy3, dx3, dy3, dx1, dy1) || check_line_line(ox3, oy3, ox1, oy1, dx1, dy1, dx2, dy2) || check_line_line(ox3, oy3, ox1, oy1, dx2, dy2, dx3, dy3) || CCk.check_point_triangle(ox1, oy1, dx1, dy1, dx2, dy2, dx3, dy3) || CCk.check_point_triangle(dx1, dy1, ox1, oy1, ox2, oy2, ox3, oy3); } }; Opal.DXOpal.CollisionChecker = CCk; Opal.DXOpal.CCk = CCk; // Alias })(); }; Opal.modules["dxopal/sprite/collision_area"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $not = Opal.not, $send = Opal.send, $to_ary = Opal.to_ary, $rb_plus = Opal.rb_plus, $send2 = Opal.send2, $find_super = Opal.find_super, $return_val = Opal.return_val, $to_a = Opal.to_a, $truthy = Opal.truthy, $rb_divide = Opal.rb_divide, $rb_times = Opal.rb_times, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,attr_reader,raise,x,y,!,collision_sync,map,+,angle,center_x,center_y,scale_x,scale_y,first,absolute,transback,-@,type,==,absolute_pos,transback1,sprite,absolute_norot_pos,r,absolute_norot_poss,absolute_poss,absolute1,collides?,collides_circle?,private,circle?,/,*,aabb'); self.$require("dxopal/sprite/collision_checker"); return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Sprite'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'CollisionArea'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Base'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.sprite = nil; self.$attr_reader("sprite"); $def(self, '$type', function $$type() { var self = this; return self.$raise("override me") }); $def(self, '$absolute', function $$absolute(poss) { var self = this, ox = nil, oy = nil, angle = nil, cx = nil, cy = nil, sx = nil, sy = nil, ret = nil; ox = self.sprite.$x(); oy = self.sprite.$y(); if ($not(self.sprite.$collision_sync())) { return $send(poss, 'map', [], function $$1($mlhs_tmp1){var $a, $b, x = nil, y = nil; if ($mlhs_tmp1 == null) $mlhs_tmp1 = nil; $b = $mlhs_tmp1, $a = $to_ary($b), (x = ($a[0] == null ? nil : $a[0])), (y = ($a[1] == null ? nil : $a[1])), $b; return [$rb_plus(x, ox), $rb_plus(y, oy)];}, {$$has_top_level_mlhs_arg: true}) }; angle = self.sprite.$angle(); cx = self.sprite.$center_x(); cy = self.sprite.$center_y(); sx = self.sprite.$scale_x(); sy = self.sprite.$scale_y(); ret = []; var rad = Math.PI / 180.0 * angle; var sin = Math.sin(rad); var cos = Math.cos(rad); poss.forEach(function(pos){ var x = pos[0], y = pos[1]; x2 = (x - cx) * sx * cos - (y - cy) * sy * sin + cx + ox; y2 = (x - cx) * sx * sin + (y - cy) * sy * cos + cy + oy; ret.push([x2, y2]); }); ; return ret; }); $def(self, '$absolute1', function $$absolute1(pos) { var self = this; return self.$absolute([pos]).$first() }); $def(self, '$transback', function $$transback(poss, sprite) { var angle = nil, cx = nil, cy = nil, sx = nil, sy = nil, ret = nil; if ($not(sprite.$collision_sync())) { return poss }; angle = sprite.$angle(); cx = $rb_plus(sprite.$x(), sprite.$center_x()); cy = $rb_plus(sprite.$y(), sprite.$center_y()); sx = sprite.$scale_x(); sy = sprite.$scale_y(); ret = []; var rad = Math.PI / 180.0 * -angle; var sin = Math.sin(rad); var cos = Math.cos(rad); poss.forEach(function(pos){ var x = pos[0], y = pos[1]; x2 = ((x - cx) * cos - (y - cy) * sin) / sx + cx; y2 = ((x - cx) * sin + (y - cy) * cos) / sy + cy; ret.push([x2, y2]); }); ; return ret; }); $def(self, '$transback1', function $$transback1(pos, sprite) { var self = this; return self.$transback([pos], sprite).$first() }); return $def(self, '$aabb', function $$aabb(poss) { var x1 = nil, y1 = nil, x2 = nil, y2 = nil; x1 = (y1 = $$$($$('Float'), 'INFINITY')); x2 = (y2 = $$$($$('Float'), 'INFINITY')['$-@']()); for(var i=0; i x2) x2 = poss[i][0]; if (poss[i][1] > y2) y2 = poss[i][1]; } ; return [[x1, y1], [x2, y2]]; }); })($nesting[0], null, $nesting); (function($base, $super) { var self = $klass($base, $super, 'Point'); var $proto = self.$$prototype; $proto.x = $proto.y = nil; $def(self, '$initialize', function $$initialize(sprite, x, y) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $a = [sprite, x, y], (self.sprite = $a[0]), (self.x = $a[1]), (self.y = $a[2]), $a; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [], null); }); $def(self, '$type', $return_val("Point")); $def(self, '$collides?', function $Point_collides$ques$2(other) { var $a, $b, self = this, x = nil, y = nil, cx = nil, cy = nil, x1 = nil, y1 = nil, x2 = nil, y2 = nil, x3 = nil, y3 = nil; switch (other.$type().valueOf()) { case "Point": return self.$absolute_pos()['$=='](other.$absolute_pos()) case "Circle": $a = [].concat($to_a(self.$transback1(self.$absolute_pos(), other.$sprite()))), (x = ($a[0] == null ? nil : $a[0])), (y = ($a[1] == null ? nil : $a[1])), $a; $a = [].concat($to_a(other.$absolute_norot_pos())), (cx = ($a[0] == null ? nil : $a[0])), (cy = ($a[1] == null ? nil : $a[1])), $a; return Opal.DXOpal.CCk.check_point_circle(x, y, cx, cy, other.$r()); break; case "Rect": $a = [].concat($to_a(self.$transback1(self.$absolute_pos(), other.$sprite()))), (x = ($a[0] == null ? nil : $a[0])), (y = ($a[1] == null ? nil : $a[1])), $a; $a = [].concat($to_a(other.$absolute_norot_poss())), ($b = $to_ary(($a[0] == null ? nil : $a[0])), (x1 = ($b[0] == null ? nil : $b[0])), (y1 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[1] == null ? nil : $a[1])), (x2 = ($b[0] == null ? nil : $b[0])), (y2 = ($b[1] == null ? nil : $b[1]))), $a; return Opal.DXOpal.CCk.check_point_straight_rect(x, y, x1, y1, x2, y2);; break; case "Triangle": $a = [].concat($to_a(self.$absolute_pos())), (x = ($a[0] == null ? nil : $a[0])), (y = ($a[1] == null ? nil : $a[1])), $a; $a = [].concat($to_a(other.$absolute_poss())), ($b = $to_ary(($a[0] == null ? nil : $a[0])), (x1 = ($b[0] == null ? nil : $b[0])), (y1 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[1] == null ? nil : $a[1])), (x2 = ($b[0] == null ? nil : $b[0])), (y2 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[2] == null ? nil : $a[2])), (x3 = ($b[0] == null ? nil : $b[0])), (y3 = ($b[1] == null ? nil : $b[1]))), $a; return Opal.DXOpal.CCk.check_point_triangle(x, y, x1, y1, x2, y2, x3, y3);; break; default: return self.$raise() } }); return $def(self, '$absolute_pos', function $$absolute_pos() { var self = this; return self.$absolute1([self.x, self.y]) }); })($nesting[0], $$('Base')); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Circle'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.sprite = $proto.r = $proto.x = $proto.y = nil; $def(self, '$initialize', function $$initialize(sprite, x, y, r) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $a = [sprite, x, y, r], (self.sprite = $a[0]), (self.x = $a[1]), (self.y = $a[2]), (self.r = $a[3]), $a; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [], null); }); self.$attr_reader("r"); $def(self, '$type', $return_val("Circle")); $def(self, '$circle?', function $Circle_circle$ques$3() { var self = this; return self.sprite.$scale_x()['$=='](self.sprite.$scale_y()) }); $def(self, '$collides?', function $Circle_collides$ques$4(other) { var $a, $b, self = this, cx = nil, cy = nil, x1 = nil, y1 = nil, x2 = nil, y2 = nil, x3 = nil, y3 = nil, x4 = nil, y4 = nil; switch (other.$type().valueOf()) { case "Point": return other['$collides?'](self) case "Circle": return self['$collides_circle?'](other) case "Rect": $a = [].concat($to_a(self.$absolute_norot_pos())), (cx = ($a[0] == null ? nil : $a[0])), (cy = ($a[1] == null ? nil : $a[1])), $a; $a = [].concat($to_a(self.$transback(other.$absolute_poss(), self.sprite))), ($b = $to_ary(($a[0] == null ? nil : $a[0])), (x1 = ($b[0] == null ? nil : $b[0])), (y1 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[1] == null ? nil : $a[1])), (x2 = ($b[0] == null ? nil : $b[0])), (y2 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[2] == null ? nil : $a[2])), (x3 = ($b[0] == null ? nil : $b[0])), (y3 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[3] == null ? nil : $a[3])), (x4 = ($b[0] == null ? nil : $b[0])), (y4 = ($b[1] == null ? nil : $b[1]))), $a; return Opal.DXOpal.CCk.check_circle_tilted_rect(cx, cy, self.r, x1, y1, x2, y2, x3, y3, x4, y4); break; case "Triangle": $a = [].concat($to_a(self.$absolute_norot_pos())), (cx = ($a[0] == null ? nil : $a[0])), (cy = ($a[1] == null ? nil : $a[1])), $a; $a = [].concat($to_a(self.$transback(other.$absolute_poss(), self.sprite))), ($b = $to_ary(($a[0] == null ? nil : $a[0])), (x1 = ($b[0] == null ? nil : $b[0])), (y1 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[1] == null ? nil : $a[1])), (x2 = ($b[0] == null ? nil : $b[0])), (y2 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[2] == null ? nil : $a[2])), (x3 = ($b[0] == null ? nil : $b[0])), (y3 = ($b[1] == null ? nil : $b[1]))), $a; return Opal.DXOpal.CCk.check_circle_triangle(cx, cy, self.r, x1, y1, x2, y2, x3, y3); break; default: return self.$raise() } }); $def(self, '$absolute_pos', function $$absolute_pos() { var self = this; return self.$absolute1([self.x, self.y]) }); $def(self, '$absolute_norot_pos', function $$absolute_norot_pos() { var self = this; return [$rb_plus(self.x, self.sprite.$x()), $rb_plus(self.y, self.sprite.$y())] }); self.$private(); return $def(self, '$collides_circle?', function $Circle_collides_circle$ques$5(other) { var $a, self = this, x1 = nil, y1 = nil, r1 = nil, x2 = nil, y2 = nil, r2 = nil, scale_x1 = nil, scale_y1 = nil, angle1 = nil, scale_x2 = nil, scale_y2 = nil, angle2 = nil, ret = nil; $a = [].concat($to_a(self.$absolute_pos())), (x1 = ($a[0] == null ? nil : $a[0])), (y1 = ($a[1] == null ? nil : $a[1])), $a; r1 = self.r; $a = [].concat($to_a(other.$absolute_pos())), (x2 = ($a[0] == null ? nil : $a[0])), (y2 = ($a[1] == null ? nil : $a[1])), $a; r2 = other.$r(); if (($truthy(self['$circle?']()) && ($truthy(other['$circle?']())))) { return Opal.DXOpal.CCk.check_circle_circle(x1, y1, self.r, x2, y2, other.$r()) } else { if ($truthy(self.sprite.$collision_sync())) { scale_x1 = self.sprite.$scale_x(); scale_y1 = self.sprite.$scale_y(); angle1 = $rb_divide($rb_times(self.sprite.$angle(), $$$($$('Math'), 'PI')), 180); } else { scale_x1 = 1; scale_y1 = 1; angle1 = 0; }; if ($truthy(other.$sprite().$collision_sync())) { scale_x2 = other.$sprite().$scale_x(); scale_y2 = other.$sprite().$scale_y(); angle2 = $rb_divide($rb_times(other.$sprite().$angle(), $$$($$('Math'), 'PI')), 180); } else { scale_x2 = 1; scale_y2 = 1; angle2 = 0; }; ret = nil; var e1 = { fRad_X: scale_x1 * r1, fRad_Y: scale_y1 * r1, fAngle: angle1, fCx: x1, fCy: y1, } var e2 = { fRad_X: scale_x2 * r2, fRad_Y: scale_y2 * r2, fAngle: angle2, fCx: x2, fCy: y2, } ret = Opal.DXOpal.CCk.check_ellipse_ellipse(e1, e2); ; return ret; }; }); })($nesting[0], $$('Base'), $nesting); (function($base, $super) { var self = $klass($base, $super, 'Rect'); var $proto = self.$$prototype; $proto.x1 = $proto.y1 = $proto.x2 = $proto.y2 = $proto.sprite = $proto.poss = nil; $def(self, '$initialize', function $$initialize(sprite, x1, y1, x2, y2) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $a = [sprite, x1, y1, x2, y2], (self.sprite = $a[0]), (self.x1 = $a[1]), (self.y1 = $a[2]), (self.x2 = $a[3]), (self.y2 = $a[4]), $a; self.poss = [[x1, y1], [x2, y1], [x2, y2], [x1, y2]]; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [], null); }); $def(self, '$type', $return_val("Rect")); $def(self, '$inspect', function $$inspect() { var self = this; return "#" }); $def(self, '$collides?', function $Rect_collides$ques$6(other) { var $a, $b, $c, self = this, ox1 = nil, oy1 = nil, ox2 = nil, oy2 = nil, dx1 = nil, dy1 = nil, dx2 = nil, dy2 = nil, ox3 = nil, oy3 = nil, ox4 = nil, oy4 = nil, dx3 = nil, dy3 = nil; switch (other.$type().valueOf()) { case "Point": case "Circle": return other['$collides?'](self) case "Rect": $b = self.$absolute_norot_poss(), $a = $to_ary($b), ($c = $to_ary(($a[0] == null ? nil : $a[0])), (ox1 = ($c[0] == null ? nil : $c[0])), (oy1 = ($c[1] == null ? nil : $c[1]))), ($c = $to_ary(($a[1] == null ? nil : $a[1])), (ox2 = ($c[0] == null ? nil : $c[0])), (oy2 = ($c[1] == null ? nil : $c[1]))), $b; $b = self.$aabb(self.$transback(other.$absolute_poss(), self.sprite)), $a = $to_ary($b), ($c = $to_ary(($a[0] == null ? nil : $a[0])), (dx1 = ($c[0] == null ? nil : $c[0])), (dy1 = ($c[1] == null ? nil : $c[1]))), ($c = $to_ary(($a[1] == null ? nil : $a[1])), (dx2 = ($c[0] == null ? nil : $c[0])), (dy2 = ($c[1] == null ? nil : $c[1]))), $b; if (!$truthy(Opal.DXOpal.CCk.check_rect_rect(ox1, oy1, ox2, oy2, dx1, dy1, dx2, dy2))) { return false }; $b = other.$absolute_norot_poss(), $a = $to_ary($b), ($c = $to_ary(($a[0] == null ? nil : $a[0])), (ox1 = ($c[0] == null ? nil : $c[0])), (oy1 = ($c[1] == null ? nil : $c[1]))), ($c = $to_ary(($a[1] == null ? nil : $a[1])), (ox2 = ($c[0] == null ? nil : $c[0])), (oy2 = ($c[1] == null ? nil : $c[1]))), $b; $b = self.$aabb(self.$transback(self.$absolute_poss(), other.$sprite())), $a = $to_ary($b), ($c = $to_ary(($a[0] == null ? nil : $a[0])), (dx1 = ($c[0] == null ? nil : $c[0])), (dy1 = ($c[1] == null ? nil : $c[1]))), ($c = $to_ary(($a[1] == null ? nil : $a[1])), (dx2 = ($c[0] == null ? nil : $c[0])), (dy2 = ($c[1] == null ? nil : $c[1]))), $b; if (!$truthy(Opal.DXOpal.CCk.check_rect_rect(ox1, oy1, ox2, oy2, dx1, dy1, dx2, dy2))) { return false }; return true; case "Triangle": $a = [].concat($to_a(self.$absolute_poss())), ($b = $to_ary(($a[0] == null ? nil : $a[0])), (ox1 = ($b[0] == null ? nil : $b[0])), (oy1 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[1] == null ? nil : $a[1])), (ox2 = ($b[0] == null ? nil : $b[0])), (oy2 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[2] == null ? nil : $a[2])), (ox3 = ($b[0] == null ? nil : $b[0])), (oy3 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[3] == null ? nil : $a[3])), (ox4 = ($b[0] == null ? nil : $b[0])), (oy4 = ($b[1] == null ? nil : $b[1]))), $a; $a = [].concat($to_a(other.$absolute_poss())), ($b = $to_ary(($a[0] == null ? nil : $a[0])), (dx1 = ($b[0] == null ? nil : $b[0])), (dy1 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[1] == null ? nil : $a[1])), (dx2 = ($b[0] == null ? nil : $b[0])), (dy2 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[2] == null ? nil : $a[2])), (dx3 = ($b[0] == null ? nil : $b[0])), (dy3 = ($b[1] == null ? nil : $b[1]))), $a; Opal.DXOpal.CCk.check_tilted_rect_triangle(ox1, oy1, ox2, oy2, ox3, oy3, ox4, oy4, dx1, dy1, dx2, dy2, dx3, dy3); break; default: return self.$raise() } }); $def(self, '$absolute_poss', function $$absolute_poss() { var self = this; return self.$absolute(self.poss) }); return $def(self, '$absolute_norot_poss', function $$absolute_norot_poss() { var self = this; return [[$rb_plus(self.x1, self.sprite.$x()), $rb_plus(self.y1, self.sprite.$y())], [$rb_plus(self.x2, self.sprite.$x()), $rb_plus(self.y2, self.sprite.$y())]] }); })($nesting[0], $$('Base')); return (function($base, $super) { var self = $klass($base, $super, 'Triangle'); var $proto = self.$$prototype; $proto.poss = nil; $def(self, '$initialize', function $$initialize(sprite, x1, y1, x2, y2, x3, y3) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.sprite = sprite; self.poss = [[x1, y1], [x2, y2], [x3, y3]]; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [], null); }); $def(self, '$type', $return_val("Triangle")); $def(self, '$collides?', function $Triangle_collides$ques$7(other) { var $a, $b, self = this, ox1 = nil, oy1 = nil, ox2 = nil, oy2 = nil, ox3 = nil, oy3 = nil, dx1 = nil, dy1 = nil, dx2 = nil, dy2 = nil, dx3 = nil, dy3 = nil; switch (other.$type().valueOf()) { case "Point": case "Circle": case "Rect": return other['$collides?'](self) case "Triangle": $a = [].concat($to_a(self.$absolute_poss())), ($b = $to_ary(($a[0] == null ? nil : $a[0])), (ox1 = ($b[0] == null ? nil : $b[0])), (oy1 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[1] == null ? nil : $a[1])), (ox2 = ($b[0] == null ? nil : $b[0])), (oy2 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[2] == null ? nil : $a[2])), (ox3 = ($b[0] == null ? nil : $b[0])), (oy3 = ($b[1] == null ? nil : $b[1]))), $a; $a = [].concat($to_a(other.$absolute_poss())), ($b = $to_ary(($a[0] == null ? nil : $a[0])), (dx1 = ($b[0] == null ? nil : $b[0])), (dy1 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[1] == null ? nil : $a[1])), (dx2 = ($b[0] == null ? nil : $b[0])), (dy2 = ($b[1] == null ? nil : $b[1]))), ($b = $to_ary(($a[2] == null ? nil : $a[2])), (dx3 = ($b[0] == null ? nil : $b[0])), (dy3 = ($b[1] == null ? nil : $b[1]))), $a; Opal.DXOpal.CCk.check_triangle_triangle(ox1, oy1, ox2, oy2, ox3, oy3, dx1, dy1, dx2, dy2, dx3, dy3); break; default: return self.$raise() } }); return $def(self, '$absolute_poss', function $$absolute_poss() { var self = this; return self.$absolute(self.poss) }); })($nesting[0], $$('Base')); })($nesting[0], $nesting) })($nesting[0], null, $nesting) })($nesting[0], $nesting); }; Opal.modules["dxopal/sprite/collision_check"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $send = Opal.send, $def = Opal.def, $return_val = Opal.return_val, $eqeqeq = Opal.eqeqeq, $to_a = Opal.to_a, $not = Opal.not, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,Array,equal?,select,is_a?,length,===,[],__send__,nil?,new,width,height,attr_accessor,attr_reader,raise,inspect,x,any?,check,_collides?,_collision_area,!,_collidable?,collides?'); self.$require("dxopal/sprite/collision_area"); return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Sprite'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'CollisionCheck'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $parent_nesting) { var self = $module($base, 'ClassMethods'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $def(self, '$check', function $$check(offences, defences, shot, hit) { var self = this, i = nil, j = nil, sprites = nil, n = nil; if (shot == null) shot = "shot"; if (hit == null) hit = "hit"; offences = self.$Array(offences); defences = self.$Array(defences); i = (j = 0); if ($truthy(offences['$equal?'](defences))) { sprites = $send(offences, 'select', [], function $$1(x){ if (x == null) x = nil; return x['$is_a?']($$('Sprite'));}); n = sprites.$length(); for (var i=0; i { var [type, sprite, info] = $$('Sprite').$_matter_sprites()['$[]'](body.id); switch(type) { case "rectangle": var [width, height] = info; sprite['$_move_to_matter_body'](body.position.x, body.position.y); sprite['$angle='](body.angle / Math.PI * 180); break; default: `self.$raise("unknown type: " + (self.$type()))` } }); }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["dxopal/sprite"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send = Opal.send, $not = Opal.not, $truthy = Opal.truthy, $defs = Opal.defs, $rb_divide = Opal.rb_divide, $def = Opal.def, $return_ivar = Opal.return_ivar, $rb_minus = Opal.rb_minus, $assign_ivar_val = Opal.assign_ivar_val, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,extend,include,each,!,respond_to?,vanished?,update,reject!,nil?,sort_by,flatten,to_proc,draw,/,width,height,_init_collision_info,attr_accessor,attr_reader,_move_matter_body,collision=,-,raise,draw_ex'); self.$require("dxopal/sprite/collision_check"); self.$require("dxopal/sprite/physics"); return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Sprite'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.image = $proto._matter_body = $proto.collision = $proto.center_x = $proto.visible = $proto.x = $proto.y = $proto.scale_x = $proto.scale_y = $proto.alpha = $proto.blend = $proto.angle = $proto.center_y = nil; self.$extend($$$($$$($$$($$('DXOpal'), 'Sprite'), 'CollisionCheck'), 'ClassMethods')); self.$include($$$($$$($$('DXOpal'), 'Sprite'), 'CollisionCheck')); self.$include($$$($$$($$('DXOpal'), 'Sprite'), 'Physics')); $defs(self, '$update', function $$update(sprites) { return $send(sprites, 'each', [], function $$1(sprite){ if (sprite == null) sprite = nil; if ($not(sprite['$respond_to?']("update"))) { return nil }; if (($truthy(sprite['$respond_to?']("vanished?")) && ($truthy(sprite['$vanished?']())))) { return nil }; return sprite.$update();}) }); $defs(self, '$clean', function $$clean(sprites) { return $send(sprites, 'reject!', [], function $$2(sprite){var $ret_or_1 = nil; if (sprite == null) sprite = nil; if ($truthy(($ret_or_1 = sprite['$nil?']()))) { return $ret_or_1 } else { return sprite['$vanished?']() };}) }); $defs(self, '$draw', function $$draw(sprites) { return $send($send(sprites.$flatten(), 'sort_by', [], "z".$to_proc()), 'each', [], function $$3(sprite){ if (sprite == null) sprite = nil; if (($truthy(sprite['$respond_to?']("vanished?")) && ($truthy(sprite['$vanished?']())))) { return nil }; return sprite.$draw();}) }); $def(self, '$initialize', function $$initialize(x, y, image) { var $a, self = this; if (x == null) x = 0; if (y == null) y = 0; if (image == null) image = nil; $a = [x, y, image], (self.x = $a[0]), (self.y = $a[1]), (self.image = $a[2]), $a; self.z = 0; self.angle = 0; self.scale_x = (self.scale_y = 1.0); if ($truthy(image)) { self.center_x = $rb_divide(image.$width(), 2); self.center_y = $rb_divide(image.$height(), 2); }; self.visible = true; self.vanished = false; return self.$_init_collision_info(self.image); }, -1); self.$attr_accessor("z", "visible"); self.$attr_accessor("angle"); self.$attr_accessor("scale_x", "scale_y"); self.$attr_accessor("center_x", "center_y"); self.$attr_accessor("alpha"); self.$attr_accessor("blend"); self.$attr_reader("x", "y"); $def(self, '$x=', function $Sprite_x$eq$4(newx) { var self = this; self.x = newx; if ($truthy(self._matter_body)) { return self.$_move_matter_body() } else { return nil }; }); $def(self, '$y=', function $Sprite_y$eq$5(newy) { var self = this; self.y = newy; if ($truthy(self._matter_body)) { return self.$_move_matter_body() } else { return nil }; }); $def(self, '$image', $return_ivar("image")); $def(self, '$image=', function $Sprite_image$eq$6(img) { var self = this; self.image = img; if ($truthy(self.collision['$nil?']())) { self['$collision=']([0, 0, $rb_minus(img.$width(), 1), $rb_minus(img.$height(), 1)]) }; if ($truthy(self.center_x['$nil?']())) { self.center_x = $rb_divide(img.$width(), 2); return (self.center_y = $rb_divide(img.$height(), 2)); } else { return nil }; }); $def(self, '$vanish', $assign_ivar_val("vanished", true)); $def(self, '$vanished?', $return_ivar("vanished")); return $def(self, '$draw', function $$draw() { var self = this; if ($truthy(self.image['$nil?']())) { self.$raise("image not set to Sprite") }; if ($not(self.visible)) { return nil }; return $$('Window').$draw_ex(self.x, self.y, self.image, (new Map([["scale_x", self.scale_x], ["scale_y", self.scale_y], ["alpha", self.alpha], ["blend", self.blend], ["angle", self.angle], ["center_x", self.center_x], ["center_y", self.center_y]]))); }); })($nesting[0], null, $nesting) })($nesting[0], $nesting); }; Opal.modules["dxopal/window"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $class_variable_set = Opal.class_variable_set, $send = Opal.send, $defs = Opal.defs, $class_variable_get = Opal.class_variable_get, $truthy = Opal.truthy, $rb_divide = Opal.rb_divide, $rb_minus = Opal.rb_minus, $rb_plus = Opal.rb_plus, $rb_ge = Opal.rb_ge, $eqeq = Opal.eqeq, $to_a = Opal.to_a, $slice = Opal.slice, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,now,_load_resources,dump_error,to_proc,!,_loop,clear,draw_pause_screen,nil?,raise,loop,draw_box_fill,width,height,draw_font,default,_init,/,-,+,>=,matter_enabled?,matter_tick,_on_tick,box_fill,sort,==,[],<=>,each,draw,drop,draw_rot,draw_scale,draw_ex,[]=,line,box,circle,circle_fill,triangle,triangle_fill,width=,height=,new,enqueue_draw,push,length'); self.$require("dxopal/constants/colors"); return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Window'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $class_variable_set($nesting[0], '@@fps', 60); $class_variable_set($nesting[0], '@@fps_ts', nil); $class_variable_set($nesting[0], '@@fps_ct', 0); $class_variable_set($nesting[0], '@@real_fps', 0); $class_variable_set($nesting[0], '@@real_fps_ct', 1); $class_variable_set($nesting[0], '@@real_fps_t', $$('Time').$now()); $class_variable_set($nesting[0], '@@width', 640); $class_variable_set($nesting[0], '@@height', 480); $class_variable_set($nesting[0], '@@block', nil); $class_variable_set($nesting[0], '@@paused', false); $defs(self, '$load_resources', function $$load_resources() { var block = $$load_resources.$$p || nil; $$load_resources.$$p = null; ; return $send($$('RemoteResource'), '_load_resources', [], function $$1(){ return $send($$('DXOpal'), 'dump_error', [], block.$to_proc())}); }); $defs(self, '$loop', function $$loop() { var block = $$loop.$$p || nil, self = this, already_running = nil, self_ = nil; $$loop.$$p = null; ; already_running = $class_variable_get($nesting[0], '@@block', false)['$!']()['$!'](); $class_variable_set($nesting[0], '@@block', block); if ($truthy(already_running)) { return nil }; self_ = self; return (window).requestAnimationFrame(function $$2(time){ if (time == null) time = nil; return self_.$_loop(time);}); }); $defs(self, '$pause', function $$pause() { var self = this; $class_variable_set($nesting[0], '@@paused', true); $class_variable_get($nesting[0], '@@draw_queue', false).$clear(); return self.$draw_pause_screen(); }); $defs(self, '$paused?', function $Window_paused$ques$3() { return $class_variable_get($nesting[0], '@@paused', false) }); $defs(self, '$resume', function $$resume() { var self = this; if ($truthy($class_variable_get($nesting[0], '@@block', false)['$nil?']())) { self.$raise("Window.resume is called before Window.loop") }; $class_variable_set($nesting[0], '@@paused', false); return $send($$('Window'), 'loop', [], $class_variable_get($nesting[0], '@@block', false).$to_proc()); }); $defs(self, '$draw_pause_screen', function $$draw_pause_screen() { $$('Window').$draw_box_fill(0, 0, $$('Window').$width(), $$('Window').$height(), $$('C_BLACK')); return $$('Window').$draw_font(0, 0, "...PAUSE...", $$('Font').$default(), (new Map([["color", $$('C_WHITE')]]))); }); $defs(self, '$_loop', function $$_loop(timestamp) { var $a, $b, self = this, $ret_or_1 = nil, frame_msec = nil, passed_msec = nil, self_ = nil, t = nil, sorted = nil; $class_variable_set($nesting[0], '@@img', ($truthy((($a = $nesting[0].$$cvars['@@img'], $a != null) ? 'class variable' : nil)) ? (($truthy(($ret_or_1 = $class_variable_get($nesting[0], '@@img', false))) ? ($ret_or_1) : (self.$_init()))) : (self.$_init()))); frame_msec = $rb_divide(1000.0, $class_variable_get($nesting[0], '@@fps', false)); $class_variable_set($nesting[0], '@@fps_ts', ($truthy((($b = $nesting[0].$$cvars['@@fps_ts'], $b != null) ? 'class variable' : nil)) ? (($truthy(($ret_or_1 = $class_variable_get($nesting[0], '@@fps_ts', false))) ? ($ret_or_1) : (timestamp))) : (timestamp))); passed_msec = $rb_minus(timestamp, $class_variable_get($nesting[0], '@@fps_ts', false)); $class_variable_set($nesting[0], '@@fps_ts', timestamp); $class_variable_set($nesting[0], '@@fps_ct', $rb_plus($class_variable_get($nesting[0], '@@fps_ct', false), passed_msec)); if ($truthy($rb_ge($class_variable_get($nesting[0], '@@fps_ct', false), frame_msec))) { $class_variable_set($nesting[0], '@@fps_ct', $rb_minus($class_variable_get($nesting[0], '@@fps_ct', false), frame_msec)) } else { self_ = self; (window).requestAnimationFrame(function $$4(time){ if (time == null) time = nil; return self_.$_loop(time);}); return nil; }; t = $$('Time').$now(); if ($truthy($rb_ge($rb_minus(t, $class_variable_get($nesting[0], '@@real_fps_t', false)), 1.0))) { $class_variable_set($nesting[0], '@@real_fps', $class_variable_get($nesting[0], '@@real_fps_ct', false)); $class_variable_set($nesting[0], '@@real_fps_ct', 1); $class_variable_set($nesting[0], '@@real_fps_t', t); } else { $class_variable_set($nesting[0], '@@real_fps_ct', $rb_plus($class_variable_get($nesting[0], '@@real_fps_ct', false), 1)) }; if ($truthy($$('Sprite')['$matter_enabled?']())) { $$('Sprite').$matter_tick(timestamp) }; $$('Input').$_on_tick(); $class_variable_set($nesting[0], '@@draw_queue', []); if ($truthy($class_variable_get($nesting[0], '@@paused', false))) { $$('Window').$draw_pause_screen() } else { $send($$('DXOpal'), 'dump_error', [], $class_variable_get($nesting[0], '@@block', false).$to_proc()) }; $class_variable_get($nesting[0], '@@img', false).$box_fill(0, 0, $class_variable_get($nesting[0], '@@width', false), $class_variable_get($nesting[0], '@@height', false), $class_variable_get($nesting[0], '@@bgcolor', false)); sorted = $send($class_variable_get($nesting[0], '@@draw_queue', false), 'sort', [], function $$5(a, b){ if (a == null) a = nil; if (b == null) b = nil; if ($eqeq(a['$[]'](0), b['$[]'](0))) { return a['$[]'](1)['$<=>'](b['$[]'](1)) } else { return a['$[]'](0)['$<=>'](b['$[]'](0)) };}); $send(sorted, 'each', [], function $$6(item){var $c; if (item == null) item = nil; switch (item['$[]'](2).valueOf()) { case "image": return $send($class_variable_get($nesting[0], '@@img', false), 'draw', $to_a(item.$drop(3))) case "image_rot": return $send($class_variable_get($nesting[0], '@@img', false), 'draw_rot', $to_a(item.$drop(3))) case "image_scale": return $send($class_variable_get($nesting[0], '@@img', false), 'draw_scale', $to_a(item.$drop(3))) case "draw_ex": return $send($class_variable_get($nesting[0], '@@img', false), 'draw_ex', $to_a(item.$drop(3))) case "font": return $send($class_variable_get($nesting[0], '@@img', false), 'draw_font', $to_a(item.$drop(3))) case "pixel": return ($c = $to_a(item.$drop(3)), $send($class_variable_get($nesting[0], '@@img', false), '[]=', $c), $c[$c.length - 1]) case "line": return $send($class_variable_get($nesting[0], '@@img', false), 'line', $to_a(item.$drop(3))) case "box": return $send($class_variable_get($nesting[0], '@@img', false), 'box', $to_a(item.$drop(3))) case "box_fill": return $send($class_variable_get($nesting[0], '@@img', false), 'box_fill', $to_a(item.$drop(3))) case "circle": return $send($class_variable_get($nesting[0], '@@img', false), 'circle', $to_a(item.$drop(3))) case "circle_fill": return $send($class_variable_get($nesting[0], '@@img', false), 'circle_fill', $to_a(item.$drop(3))) case "triangle": return $send($class_variable_get($nesting[0], '@@img', false), 'triangle', $to_a(item.$drop(3))) case "triangle_fill": return $send($class_variable_get($nesting[0], '@@img', false), 'triangle_fill', $to_a(item.$drop(3))) default: return nil };}); self_ = self; return (window).requestAnimationFrame(function $$7(time){ if (time == null) time = nil; return self_.$_loop(time);}); }); $defs(self, '$_init', function $$_init() { var self = this, canvas = nil, img = nil; canvas = document.getElementById("dxopal-canvas"); self['$width=']($class_variable_get($nesting[0], '@@width', false)); self['$height=']($class_variable_get($nesting[0], '@@height', false)); img = $$('Image').$new(self.$width(), self.$height(), (new Map([["canvas", canvas]]))); $$('Input').$_init(canvas); return img; }); $defs(self, '$_img', function $$_img() { return $class_variable_get($nesting[0], '@@img', false) }); $defs(self, '$fps', function $$fps() { return $class_variable_get($nesting[0], '@@fps', false) }); $defs(self, '$fps=', function $Window_fps$eq$8(w) { return $class_variable_set($nesting[0], '@@fps', w) }); $defs(self, '$real_fps', function $$real_fps() { return $class_variable_get($nesting[0], '@@real_fps', false) }); $defs(self, '$width', function $$width() { return $class_variable_get($nesting[0], '@@width', false) }); $defs(self, '$width=', function $Window_width$eq$9(w) { var canvas = nil, $ret_or_1 = nil; canvas = document.getElementById("dxopal-canvas"); $class_variable_set($nesting[0], '@@width', ($truthy(($ret_or_1 = w)) ? ($ret_or_1) : (window.innerWidth))); canvas.width = $class_variable_get($nesting[0], '@@width', false); return canvas.style.width = $class_variable_get($nesting[0], '@@width', false); }); $defs(self, '$height', function $$height() { return $class_variable_get($nesting[0], '@@height', false) }); $defs(self, '$height=', function $Window_height$eq$10(h) { var canvas = nil, $ret_or_1 = nil; canvas = document.getElementById("dxopal-canvas"); $class_variable_set($nesting[0], '@@height', ($truthy(($ret_or_1 = h)) ? ($ret_or_1) : (window.innerHeight))); canvas.height = $class_variable_get($nesting[0], '@@height', false); return canvas.style.height = $class_variable_get($nesting[0], '@@height', false); }); $class_variable_set($nesting[0], '@@bgcolor', $$$($$$($$('Constants'), 'Colors'), 'C_BLACK')); $defs(self, '$bgcolor', function $$bgcolor() { return $class_variable_get($nesting[0], '@@bgcolor', false) }); $defs(self, '$bgcolor=', function $Window_bgcolor$eq$11(col) { return $class_variable_set($nesting[0], '@@bgcolor', col) }); $defs(self, '$draw', function $$draw(x, y, image, z) { var self = this; if (z == null) z = 0; return self.$enqueue_draw(z, "image", x, y, image); }, -4); $defs(self, '$draw_scale', function $$draw_scale(x, y, image, scale_x, scale_y, center_x, center_y, z) { var self = this; if (center_x == null) center_x = nil; if (center_y == null) center_y = nil; if (z == null) z = 0; return self.$enqueue_draw(z, "image_scale", x, y, image, scale_x, scale_y, center_x, center_y); }, -6); $defs(self, '$draw_rot', function $$draw_rot(x, y, image, angle, center_x, center_y, z) { var self = this; if (center_x == null) center_x = nil; if (center_y == null) center_y = nil; if (z == null) z = 0; return self.$enqueue_draw(z, "image_rot", x, y, image, angle, center_x, center_y); }, -5); $defs(self, '$draw_ex', function $$draw_ex(x, y, image, options) { var self = this, $ret_or_1 = nil; if (options == null) options = (new Map()); return self.$enqueue_draw(($truthy(($ret_or_1 = options['$[]']("z"))) ? ($ret_or_1) : (0)), "draw_ex", x, y, image, options); }, -4); $defs(self, '$draw_font', function $$draw_font(x, y, string, font, option) { var self = this, z = nil, $ret_or_1 = nil, color = nil; if (option == null) option = (new Map()); z = ($truthy(($ret_or_1 = option['$[]']("z"))) ? ($ret_or_1) : (0)); color = ($truthy(($ret_or_1 = option['$[]']("color"))) ? ($ret_or_1) : ([255, 255, 255])); return self.$enqueue_draw(z, "font", x, y, string, font, color); }, -5); $defs(self, '$draw_pixel', function $$draw_pixel(x, y, color, z) { var self = this; if (z == null) z = 0; return self.$enqueue_draw(z, "pixel", x, y, color); }, -4); $defs(self, '$draw_line', function $$draw_line(x1, y1, x2, y2, color, z) { var self = this; if (z == null) z = 0; return self.$enqueue_draw(z, "line", x1, y1, x2, y2, color); }, -6); $defs(self, '$draw_box', function $$draw_box(x1, y1, x2, y2, color, z) { var self = this; if (z == null) z = 0; return self.$enqueue_draw(z, "box", x1, y1, x2, y2, color); }, -6); $defs(self, '$draw_box_fill', function $$draw_box_fill(x1, y1, x2, y2, color, z) { var self = this; if (z == null) z = 0; return self.$enqueue_draw(z, "box_fill", x1, y1, x2, y2, color); }, -6); $defs(self, '$draw_circle', function $$draw_circle(x, y, r, color, z) { var self = this; if (z == null) z = 0; return self.$enqueue_draw(z, "circle", x, y, r, color); }, -5); $defs(self, '$draw_circle_fill', function $$draw_circle_fill(x, y, r, color, z) { var self = this; if (z == null) z = 0; return self.$enqueue_draw(z, "circle_fill", x, y, r, color); }, -5); $defs(self, '$draw_triangle', function $$draw_triangle(x1, y1, x2, y2, x3, y3, color, z) { var self = this; if (z == null) z = 0; return self.$enqueue_draw(z, "triangle", x1, y1, x2, y2, x3, y3, color); }, -8); $defs(self, '$draw_triangle_fill', function $$draw_triangle_fill(x1, y1, x2, y2, x3, y3, color, z) { var self = this; if (z == null) z = 0; return self.$enqueue_draw(z, "triangle_fill", x1, y1, x2, y2, x3, y3, color); }, -8); return $defs(self, '$enqueue_draw', function $$enqueue_draw(z, $a) { var $post_args, args; $post_args = $slice(arguments, 1); args = $post_args; return $class_variable_get($nesting[0], '@@draw_queue', false).$push([z, $class_variable_get($nesting[0], '@@draw_queue', false).$length()].concat($to_a(args))); }, -2); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["dxopal/version"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $const_set = Opal.const_set, $nesting = [], nil = Opal.nil; return (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting); return $const_set($nesting[0], 'VERSION', "1.6.0") })($nesting[0], $nesting) }; Opal.modules["base64"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $defs = Opal.defs, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $truthy = Opal.truthy, $nesting = [], nil = Opal.nil; Opal.add_stubs('raise,delete'); return (function($base, $parent_nesting) { var self = $module($base, 'Base64'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; var encode, decode; // encoder // [https://gist.github.com/999166] by [https://github.com/nignag] encode = function (input) { var str = String(input); /* eslint-disable */ for ( // initialize result and counter var block, charCode, idx = 0, map = chars, output = ''; // if the next str index does not exist: // change the mapping table to "=" // check if d has no fractional digits str.charAt(idx | 0) || (map = '=', idx % 1); // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8 output += map.charAt(63 & block >> 8 - idx % 1 * 8) ) { charCode = str.charCodeAt(idx += 3/4); if (charCode > 0xFF) { self.$raise($$('ArgumentError'), "invalid character (failed: The string to be encoded contains characters outside of the Latin1 range.)"); } block = block << 8 | charCode; } return output; /* eslint-enable */ }; // decoder // [https://gist.github.com/1020396] by [https://github.com/atk] decode = function (input) { var str = String(input).replace(/=+$/, ''); if (str.length % 4 == 1) { self.$raise($$('ArgumentError'), "invalid base64 (failed: The string to be decoded is not correctly encoded.)"); } /* eslint-disable */ for ( // initialize result and counters var bc = 0, bs, buffer, idx = 0, output = ''; // get next character buffer = str.charAt(idx++); // character found in table? initialize bit storage and add its ascii value; ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, // and if not first of each 4 characters, // convert the first 8 bits to one ascii character bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0 ) { // try to find character in table (0-63, not found => -1) buffer = chars.indexOf(buffer); } return output; /* eslint-enable */ }; ; $defs(self, '$decode64', function $$decode64(string) { return decode(string.replace(/\r?\n/g, '')); }); $defs(self, '$encode64', function $$encode64(string) { return encode(string).replace(/(.{60})/g, "$1\n").replace(/([^\n])$/g, "$1\n"); }); $defs(self, '$strict_decode64', function $$strict_decode64(string) { return decode(string); }); $defs(self, '$strict_encode64', function $$strict_encode64(string) { return encode(string); }); $defs(self, '$urlsafe_decode64', function $$urlsafe_decode64(string) { return decode(string.replace(/\-/g, '+').replace(/_/g, '/')); }); return $defs(self, '$urlsafe_encode64', function $$urlsafe_encode64(string, $kwargs) { var padding, str = nil; $kwargs = $ensure_kwargs($kwargs); padding = $hash_get($kwargs, "padding");if (padding == null) padding = true; str = encode(string).replace(/\+/g, '-').replace(/\//g, '_'); if (!$truthy(padding)) { str = str.$delete("=") }; return str; }, -2); })($nesting[0], $nesting) }; Opal.modules["corelib/pack_unpack/format_string_parser"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $Kernel = Opal.Kernel, nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('raise'); return (function($base) { var self = $module($base, 'PackUnpack'); var directives = [ // Integer 'C', 'S', 'L', 'Q', 'J', 'c', 's', 'l', 'q', 'j', 'n', 'N', 'v', 'V', 'U', 'w', // Float 'D', 'd', 'F', 'f', 'E', 'e', 'G', 'g', // String 'A', 'a', 'Z', 'B', 'b', 'H', 'h', 'u', 'M', 'm', 'P', 'p', // Misc '@', 'X', 'x' ]; var modifiers = [ '!', // ignored '_', // ignored '>', // big endian '<' // little endian ]; self.eachDirectiveAndCount = function(format, callback) { var currentDirective, currentCount, currentModifiers, countSpecified; function reset() { currentDirective = null; currentCount = 0; currentModifiers = []; countSpecified = false; } reset(); function yieldAndReset() { if (currentDirective == null) { reset(); return; } var directiveSupportsModifiers = /[sSiIlLqQjJ]/.test(currentDirective); if (!directiveSupportsModifiers && currentModifiers.length > 0) { $Kernel.$raise($$$('ArgumentError'), "'" + (currentModifiers[0]) + "' allowed only after types sSiIlLqQjJ") } if (currentModifiers.indexOf('<') !== -1 && currentModifiers.indexOf('>') !== -1) { $Kernel.$raise($$$('RangeError'), "Can't use both '<' and '>'") } if (!countSpecified) { currentCount = 1; } if (currentModifiers.indexOf('>') !== -1) { currentDirective = currentDirective + '>'; } callback(currentDirective, currentCount); reset(); } for (var i = 0; i < format.length; i++) { var currentChar = format[i]; if (directives.indexOf(currentChar) !== -1) { // Directive char always resets current state yieldAndReset(); currentDirective = currentChar; } else if (currentDirective) { if (/\d/.test(currentChar)) { // Count can be represented as a sequence of digits currentCount = currentCount * 10 + parseInt(currentChar, 10); countSpecified = true; } else if (currentChar === '*' && countSpecified === false) { // Count can be represented by a star character currentCount = Infinity; countSpecified = true; } else if (modifiers.indexOf(currentChar) !== -1 && countSpecified === false) { // Directives can be specified only after directive and before count currentModifiers.push(currentChar); } else { yieldAndReset(); } } } yieldAndReset(); } })('::') }; Opal.modules["corelib/string/unpack"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $Kernel = Opal.Kernel, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $truthy = Opal.truthy, $rb_lt = Opal.rb_lt, $Opal = Opal.Opal, $rb_gt = Opal.rb_gt, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,flatten,decode64,raise,<,delete,gsub,coerce_to!,>,length,inspect,[],unpack'); self.$require("base64"); self.$require("corelib/pack_unpack/format_string_parser"); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'String'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), expected = nil, given = nil; // Format Parser var eachDirectiveAndCount = Opal.PackUnpack.eachDirectiveAndCount; function flattenArray(callback) { return function(data) { var array = callback(data); return (array).$flatten(); } } function mapChunksToWords(callback) { return function(data) { var chunks = callback(data); return chunks.map(function(chunk) { return chunk.reverse().reduce(function(result, singleByte) { return result * 256 + singleByte; }, 0); }); } } function chunkBy(chunkSize, callback) { return function(data) { var array = callback(data), chunks = [], chunksCount = (array.length / chunkSize); for (var i = 0; i < chunksCount; i++) { var chunk = array.splice(0, chunkSize); if (chunk.length === chunkSize) { chunks.push(chunk); } } return chunks; } } function toNByteSigned(bytesCount, callback) { return function(data) { var unsignedBits = callback(data), bitsCount = bytesCount * 8, limit = Math.pow(2, bitsCount); return unsignedBits.map(function(n) { if (n >= limit / 2) { n -= limit; } return n; }); } } function bytesToAsciiChars(callback) { return function(data) { var bytes = callback(data); return bytes.map(function(singleByte) { return String.fromCharCode(singleByte); }); } } function joinChars(callback) { return function(data) { var chars = callback(data); return chars.join(''); } } function wrapIntoArray(callback) { return function(data) { var object = callback(data); return [object]; } } function filterTrailingChars(chars) { var charCodesToFilter = chars.map(function(s) { return s.charCodeAt(0); }); return function(callback) { return function(data) { var charCodes = callback(data); while (charCodesToFilter.indexOf(charCodes[charCodes.length - 1]) !== -1) { charCodes = charCodes.slice(0, charCodes.length - 1); } return charCodes; } } } var filterTrailingZerosAndSpaces = filterTrailingChars(["\u0000", " "]); function invertChunks(callback) { return function(data) { var chunks = callback(data); return chunks.map(function(chunk) { return chunk.reverse(); }); } } function uudecode(callback) { return function(data) { var bytes = callback(data); var stop = false; var i = 0, length = 0; var result = []; do { if (i < bytes.length) { var n = bytes[i] - 32 & 0x3F; ++i; if (bytes[i] === 10) { continue; } if (n > 45) { return ''; } length += n; while (n > 0) { var c1 = bytes[i]; var c2 = bytes[i + 1]; var c3 = bytes[i + 2]; var c4 = bytes[i + 3]; var b1 = (c1 - 32 & 0x3F) << 2 | (c2 - 32 & 0x3F) >> 4; var b2 = (c2 - 32 & 0x3F) << 4 | (c3 - 32 & 0x3F) >> 2; var b3 = (c3 - 32 & 0x3F) << 6 | c4 - 32 & 0x3F; result.push(b1 & 0xFF); result.push(b2 & 0xFF); result.push(b3 & 0xFF); i += 4; n -= 3; } ++i; } else { break; } } while (true); return result.slice(0, length); } } function toBits(callback) { return function(data) { var bytes = callback(data); var bits = bytes.map(function(singleByte) { return singleByte.toString(2); }); return bits; } } function decodeBERCompressedIntegers(callback) { return function(data) { var bytes = callback(data), result = [], buffer = ''; for (var i = 0; i < bytes.length; i++) { var singleByte = bytes[i], bits = singleByte.toString(2); bits = Array(8 - bits.length + 1).join('0').concat(bits); var firstBit = bits[0]; bits = bits.slice(1, bits.length); buffer = buffer.concat(bits); if (firstBit === '0') { var decoded = parseInt(buffer, 2); result.push(decoded); buffer = '' } } return result; } } function base64Decode(callback) { return function(data) { return $$('Base64').$decode64(callback(data)); } } // quoted-printable decode function qpdecode(callback) { return function(data) { var string = callback(data); return string .replace(/[\t\x20]$/gm, '') .replace(/=(?:\r\n?|\n|$)/g, '') .replace(/=([a-fA-F0-9]{2})/g, function($0, $1) { var codePoint = parseInt($1, 16); return String.fromCharCode(codePoint); }); } } function identityFunction(value) { return value; } var handlers = { // Integer 'C': identityFunction, 'S': mapChunksToWords(chunkBy(2, identityFunction)), 'L': mapChunksToWords(chunkBy(4, identityFunction)), 'Q': mapChunksToWords(chunkBy(8, identityFunction)), 'J': null, 'S>': mapChunksToWords(invertChunks(chunkBy(2, identityFunction))), 'L>': mapChunksToWords(invertChunks(chunkBy(4, identityFunction))), 'Q>': mapChunksToWords(invertChunks(chunkBy(8, identityFunction))), 'c': toNByteSigned(1, identityFunction), 's': toNByteSigned(2, mapChunksToWords(chunkBy(2, identityFunction))), 'l': toNByteSigned(4, mapChunksToWords(chunkBy(4, identityFunction))), 'q': toNByteSigned(8, mapChunksToWords(chunkBy(8, identityFunction))), 'j': null, 's>': toNByteSigned(2, mapChunksToWords(invertChunks(chunkBy(2, identityFunction)))), 'l>': toNByteSigned(4, mapChunksToWords(invertChunks(chunkBy(4, identityFunction)))), 'q>': toNByteSigned(8, mapChunksToWords(invertChunks(chunkBy(8, identityFunction)))), 'n': null, // aliased later 'N': null, // aliased later 'v': null, // aliased later 'V': null, // aliased later 'U': identityFunction, 'w': decodeBERCompressedIntegers(identityFunction), // Float 'D': null, 'd': null, 'F': null, 'f': null, 'E': null, 'e': null, 'G': null, 'g': null, // String 'A': wrapIntoArray(joinChars(bytesToAsciiChars(filterTrailingZerosAndSpaces(identityFunction)))), 'a': wrapIntoArray(joinChars(bytesToAsciiChars(identityFunction))), 'Z': joinChars(bytesToAsciiChars(identityFunction)), 'B': joinChars(identityFunction), 'b': joinChars(identityFunction), 'H': joinChars(identityFunction), 'h': joinChars(identityFunction), 'u': joinChars(bytesToAsciiChars(uudecode(identityFunction))), 'M': qpdecode(joinChars(bytesToAsciiChars(identityFunction))), 'm': base64Decode(joinChars(bytesToAsciiChars(identityFunction))), 'P': null, 'p': null }; function readBytes(n) { return function(bytes) { var chunk = bytes.slice(0, n); bytes = bytes.slice(n, bytes.length); return { chunk: chunk, rest: bytes }; } } function readUnicodeCharChunk(bytes) { var currentByteIndex = 0; var bytesLength = bytes.length; function readByte() { var result = bytes[currentByteIndex++]; bytesLength = bytes.length - currentByteIndex; return result; } var c = readByte(), extraLength; if (c >> 7 == 0) { // 0xxx xxxx return { chunk: [c], rest: bytes.slice(currentByteIndex) }; } if (c >> 6 == 0x02) { $Kernel.$raise($$$('ArgumentError'), "malformed UTF-8 character") } if (c >> 5 == 0x06) { // 110x xxxx (two bytes) extraLength = 1; } else if (c >> 4 == 0x0e) { // 1110 xxxx (three bytes) extraLength = 2; } else if (c >> 3 == 0x1e) { // 1111 0xxx (four bytes) extraLength = 3; } else if (c >> 2 == 0x3e) { // 1111 10xx (five bytes) extraLength = 4; } else if (c >> 1 == 0x7e) { // 1111 110x (six bytes) extraLength = 5; } else { $Kernel.$raise("malformed UTF-8 character") } if (extraLength > bytesLength) { ((expected = extraLength + 1), (given = bytesLength + 1), $Kernel.$raise($$$('ArgumentError'), "malformed UTF-8 character (expected " + (expected) + " bytes, given " + (given) + " bytes)")) } // Remove the UTF-8 prefix from the char var mask = (1 << (8 - extraLength - 1)) - 1, result = c & mask; for (var i = 0; i < extraLength; i++) { c = readByte(); if (c >> 6 != 0x02) { $Kernel.$raise("Invalid multibyte sequence") } result = (result << 6) | (c & 0x3f); } if (result <= 0xffff) { return { chunk: [result], rest: bytes.slice(currentByteIndex) }; } else { result -= 0x10000; var high = ((result >> 10) & 0x3ff) + 0xd800, low = (result & 0x3ff) + 0xdc00; return { chunk: [high, low], rest: bytes.slice(currentByteIndex) }; } } function readUuencodingChunk(buffer) { var length = buffer.indexOf(32); // 32 = space if (length === -1) { return { chunk: buffer, rest: [] }; } else { return { chunk: buffer.slice(0, length), rest: buffer.slice(length, buffer.length) }; } } function readNBitsLSBFirst(buffer, count) { var result = ''; while (count > 0 && buffer.length > 0) { var singleByte = buffer[0], bitsToTake = Math.min(count, 8), bytesToTake = Math.ceil(bitsToTake / 8); buffer = buffer.slice(1, buffer.length); if (singleByte != null) { var bits = singleByte.toString(2); bits = Array(8 - bits.length + 1).join('0').concat(bits).split('').reverse().join(''); for (var j = 0; j < bitsToTake; j++) { result += bits[j] || '0'; count--; } } } return { chunk: [result], rest: buffer }; } function readNBitsMSBFirst(buffer, count) { var result = ''; while (count > 0 && buffer.length > 0) { var singleByte = buffer[0], bitsToTake = Math.min(count, 8), bytesToTake = Math.ceil(bitsToTake / 8); buffer = buffer.slice(1, buffer.length); if (singleByte != null) { var bits = singleByte.toString(2); bits = Array(8 - bits.length + 1).join('0').concat(bits); for (var j = 0; j < bitsToTake; j++) { result += bits[j] || '0'; count--; } } } return { chunk: [result], rest: buffer }; } function readWhileFirstBitIsOne(buffer) { var result = []; for (var i = 0; i < buffer.length; i++) { var singleByte = buffer[i]; result.push(singleByte); if ((singleByte & 128) === 0) { break; } } return { chunk: result, rest: buffer.slice(result.length, buffer.length) }; } function readTillNullCharacter(buffer, count) { var result = []; for (var i = 0; i < count && i < buffer.length; i++) { var singleByte = buffer[i]; if (singleByte === 0) { break; } else { result.push(singleByte); } } if (count === Infinity) { count = result.length; } if (buffer[count] === 0) { count++; } buffer = buffer.slice(count, buffer.length); return { chunk: result, rest: buffer }; } function readHexCharsHighNibbleFirst(buffer, count) { var result = []; while (count > 0 && buffer.length > 0) { var singleByte = buffer[0], hex = singleByte.toString(16); buffer = buffer.slice(1, buffer.length); hex = Array(2 - hex.length + 1).join('0').concat(hex); if (count === 1) { result.push(hex[0]); count--; } else { result.push(hex[0], hex[1]); count -= 2; } } return { chunk: result, rest: buffer }; } function readHexCharsLowNibbleFirst(buffer, count) { var result = []; while (count > 0 && buffer.length > 0) { var singleByte = buffer[0], hex = singleByte.toString(16); buffer = buffer.slice(1, buffer.length); hex = Array(2 - hex.length + 1).join('0').concat(hex); if (count === 1) { result.push(hex[1]); count--; } else { result.push(hex[1], hex[0]); count -= 2; } } return { chunk: result, rest: buffer }; } function readNTimesAndMerge(callback) { return function(buffer, count) { var chunk = [], chunkData; if (count === Infinity) { while (buffer.length > 0) { chunkData = callback(buffer); buffer = chunkData.rest; chunk = chunk.concat(chunkData.chunk); } } else { for (var i = 0; i < count; i++) { chunkData = callback(buffer); buffer = chunkData.rest; chunk = chunk.concat(chunkData.chunk); } } return { chunk: chunk, rest: buffer }; } } function readAll(buffer, count) { return { chunk: buffer, rest: [] }; } var readChunk = { // Integer 'C': readNTimesAndMerge(readBytes(1)), 'S': readNTimesAndMerge(readBytes(2)), 'L': readNTimesAndMerge(readBytes(4)), 'Q': readNTimesAndMerge(readBytes(8)), 'J': null, 'S>': readNTimesAndMerge(readBytes(2)), 'L>': readNTimesAndMerge(readBytes(4)), 'Q>': readNTimesAndMerge(readBytes(8)), 'c': readNTimesAndMerge(readBytes(1)), 's': readNTimesAndMerge(readBytes(2)), 'l': readNTimesAndMerge(readBytes(4)), 'q': readNTimesAndMerge(readBytes(8)), 'j': null, 's>': readNTimesAndMerge(readBytes(2)), 'l>': readNTimesAndMerge(readBytes(4)), 'q>': readNTimesAndMerge(readBytes(8)), 'n': null, // aliased later 'N': null, // aliased later 'v': null, // aliased later 'V': null, // aliased later 'U': readNTimesAndMerge(readUnicodeCharChunk), 'w': readNTimesAndMerge(readWhileFirstBitIsOne), // Float 'D': null, 'd': null, 'F': null, 'f': null, 'E': null, 'e': null, 'G': null, 'g': null, // String 'A': readNTimesAndMerge(readBytes(1)), 'a': readNTimesAndMerge(readBytes(1)), 'Z': readTillNullCharacter, 'B': readNBitsMSBFirst, 'b': readNBitsLSBFirst, 'H': readHexCharsHighNibbleFirst, 'h': readHexCharsLowNibbleFirst, 'u': readNTimesAndMerge(readUuencodingChunk), 'M': readAll, 'm': readAll, 'P': null, 'p': null } var autocompletion = { // Integer 'C': true, 'S': true, 'L': true, 'Q': true, 'J': null, 'S>': true, 'L>': true, 'Q>': true, 'c': true, 's': true, 'l': true, 'q': true, 'j': null, 's>': true, 'l>': true, 'q>': true, 'n': null, // aliased later 'N': null, // aliased later 'v': null, // aliased later 'V': null, // aliased later 'U': false, 'w': false, // Float 'D': null, 'd': null, 'F': null, 'f': null, 'E': null, 'e': null, 'G': null, 'g': null, // String 'A': false, 'a': false, 'Z': false, 'B': false, 'b': false, 'H': false, 'h': false, 'u': false, 'M': false, 'm': false, 'P': null, 'p': null } var optimized = { 'C*': handlers['C'], 'c*': handlers['c'], 'A*': handlers['A'], 'a*': handlers['a'], 'M*': wrapIntoArray(handlers['M']), 'm*': wrapIntoArray(handlers['m']), 'S*': handlers['S'], 's*': handlers['s'], 'L*': handlers['L'], 'l*': handlers['l'], 'Q*': handlers['Q'], 'q*': handlers['q'], 'S>*': handlers['S>'], 's>*': handlers['s>'], 'L>*': handlers['L>'], 'l>*': handlers['l>'], 'Q>*': handlers['Q>'], 'q>*': handlers['q>'] } function alias(existingDirective, newDirective) { readChunk[newDirective] = readChunk[existingDirective]; handlers[newDirective] = handlers[existingDirective]; autocompletion[newDirective] = autocompletion[existingDirective]; } alias('S>', 'n'); alias('L>', 'N'); alias('S', 'v'); alias('L', 'V'); ; $def(self, '$unpack', function $$unpack(format, $kwargs) { var offset, self = this; $kwargs = $ensure_kwargs($kwargs); offset = $hash_get($kwargs, "offset");if (offset == null) offset = 0; if ($truthy($rb_lt(offset, 0))) { $Kernel.$raise($$$('ArgumentError'), "offset can't be negative") }; format = $Opal['$coerce_to!'](format, $$$('String'), "to_str").$gsub(/\s/, "").$delete("\u0000"); var output = []; // A very optimized handler for U*. if (format == "U*" && self.internal_encoding.name === "UTF-8" && typeof self.codePointAt === "function") { var cp, j = 0; output = new Array(self.length); for (var i = offset; i < self.length; i++) { cp = output[j++] = self.codePointAt(i); if (cp > 0xffff) i++; } return output.slice(0, j); } var buffer = self.$bytes(); ($truthy($rb_gt(offset, (buffer).$length())) ? ($Kernel.$raise($$$('ArgumentError'), "offset outside of string")) : nil) buffer = buffer.slice(offset); // optimization var optimizedHandler = optimized[format]; if (optimizedHandler) { return optimizedHandler(buffer); } function autocomplete(array, size) { while (array.length < size) { array.push(nil); } return array; } function processChunk(directive, count) { var chunk, chunkReader = readChunk[directive]; if (chunkReader == null) { $Kernel.$raise("Unsupported unpack directive " + ((directive).$inspect()) + " (no chunk reader defined)") } var chunkData = chunkReader(buffer, count); chunk = chunkData.chunk; buffer = chunkData.rest; var handler = handlers[directive]; if (handler == null) { $Kernel.$raise("Unsupported unpack directive " + ((directive).$inspect()) + " (no handler defined)") } return handler(chunk); } eachDirectiveAndCount(format, function(directive, count) { var part = processChunk(directive, count); if (count !== Infinity) { var shouldAutocomplete = autocompletion[directive]; if (shouldAutocomplete == null) { $Kernel.$raise("Unsupported unpack directive " + ((directive).$inspect()) + " (no autocompletion rule defined)") } if (shouldAutocomplete) { autocomplete(part, count); } } output = output.concat(part); }); return output; ; }, -2); return $def(self, '$unpack1', function $$unpack1(format, $kwargs) { var offset, self = this; $kwargs = $ensure_kwargs($kwargs); offset = $hash_get($kwargs, "offset");if (offset == null) offset = 0; format = $Opal['$coerce_to!'](format, $$$('String'), "to_str").$gsub(/\s/, "").$delete("\u0000"); return self.$unpack(format['$[]'](0), (new Map([["offset", offset]])))['$[]'](0); }, -2); })('::', null, $nesting); }; Opal.modules["set"] = Opal.return_val(Opal.nil); /* Generated by Opal 1.8.2 */ Opal.modules["ast/node"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $alias = Opal.alias, $def = Opal.def, $truthy = Opal.truthy, $send = Opal.send, $return_self = Opal.return_self, $eqeq = Opal.eqeq, $rb_plus = Opal.rb_plus, $rb_times = Opal.rb_times, $to_a = Opal.to_a, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,children,to_sym,freeze,to_a,assign_properties,hash,class,eql?,type,each,instance_variable_set,protected,dup,private,nil?,==,original_dup,send,equal?,respond_to?,to_ast,updated,+,concat,append,*,fancy_type,is_a?,to_sexp,inspect,map,to_sexp_array,gsub,to_s'); return (function($base, $parent_nesting) { var self = $module($base, 'AST'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Node'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.type = $proto.children = nil; self.$attr_reader("type"); self.$attr_reader("children"); $alias(self, "to_a", "children"); self.$attr_reader("hash"); $def(self, '$initialize', function $$initialize(type, children, properties) { var $a, self = this; if (children == null) children = []; if (properties == null) properties = (new Map()); $a = [type.$to_sym(), children.$to_a().$freeze()], (self.type = $a[0]), (self.children = $a[1]), $a; self.$assign_properties(properties); self.hash = [self.type, self.children, self.$class()].$hash(); return self.$freeze(); }, -2); $def(self, '$eql?', function $Node_eql$ques$1(other) { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.$class()['$eql?'](other.$class()))) ? (self.type['$eql?'](other.$type())) : ($ret_or_2))))) { return self.children['$eql?'](other.$children()) } else { return $ret_or_1 } }); $def(self, '$assign_properties', function $$assign_properties(properties) { var self = this; $send(properties, 'each', [], function $$2(name, value){var self = $$2.$$s == null ? this : $$2.$$s; if (name == null) name = nil; if (value == null) value = nil; return self.$instance_variable_set("@" + (name), value);}, {$$s: self}); return nil; }); self.$protected("assign_properties"); $alias(self, "original_dup", "dup"); self.$private("original_dup"); $def(self, '$dup', $return_self); $alias(self, "clone", "dup"); $def(self, '$updated', function $$updated(type, children, properties) { var self = this, new_type = nil, $ret_or_1 = nil, new_children = nil, new_properties = nil, copy = nil; if (type == null) type = nil; if (children == null) children = nil; if (properties == null) properties = nil; new_type = ($truthy(($ret_or_1 = type)) ? ($ret_or_1) : (self.type)); new_children = ($truthy(($ret_or_1 = children)) ? ($ret_or_1) : (self.children)); new_properties = ($truthy(($ret_or_1 = properties)) ? ($ret_or_1) : ((new Map()))); if ((($eqeq(self.type, new_type) && ($eqeq(self.children, new_children))) && ($truthy(properties['$nil?']())))) { return self } else { copy = self.$original_dup(); copy.$send("initialize", new_type, new_children, new_properties); return copy; }; }, -1); $def(self, '$==', function $Node_$eq_eq$3(other) { var self = this, $ret_or_1 = nil; if ($truthy(self['$equal?'](other))) { return true } else if ($truthy(other['$respond_to?']("to_ast"))) { other = other.$to_ast(); if ($truthy(($ret_or_1 = other.$type()['$=='](self.$type())))) { return other.$children()['$=='](self.$children()) } else { return $ret_or_1 }; } else { return false } }); $def(self, '$concat', function $$concat(array) { var self = this; return self.$updated(nil, $rb_plus(self.children, array.$to_a())) }); $alias(self, "+", "concat"); $def(self, '$append', function $$append(element) { var self = this; return self.$updated(nil, $rb_plus(self.children, [element])) }); $alias(self, "<<", "append"); $def(self, '$to_sexp', function $$to_sexp(indent) { var self = this, indented = nil, sexp = nil; if (indent == null) indent = 0; indented = $rb_times(" ", indent); sexp = "" + (indented) + "(" + (self.$fancy_type()); $send(self.$children(), 'each', [], function $$4(child){ if (child == null) child = nil; if ($truthy(child['$is_a?']($$('Node')))) { return (sexp = $rb_plus(sexp, "\n" + (child.$to_sexp($rb_plus(indent, 1))))) } else { return (sexp = $rb_plus(sexp, " " + (child.$inspect()))) };}); sexp = $rb_plus(sexp, ")"); return sexp; }, -1); $alias(self, "to_s", "to_sexp"); $def(self, '$inspect', function $$inspect(indent) { var self = this, indented = nil, sexp = nil; if (indent == null) indent = 0; indented = $rb_times(" ", indent); sexp = "" + (indented) + "s(:" + (self.type); $send(self.$children(), 'each', [], function $$5(child){ if (child == null) child = nil; if ($truthy(child['$is_a?']($$('Node')))) { return (sexp = $rb_plus(sexp, ",\n" + (child.$inspect($rb_plus(indent, 1))))) } else { return (sexp = $rb_plus(sexp, ", " + (child.$inspect()))) };}); sexp = $rb_plus(sexp, ")"); return sexp; }, -1); $def(self, '$to_ast', $return_self); $def(self, '$to_sexp_array', function $$to_sexp_array() { var self = this, children_sexp_arrs = nil; children_sexp_arrs = $send(self.$children(), 'map', [], function $$6(child){ if (child == null) child = nil; if ($truthy(child['$is_a?']($$('Node')))) { return child.$to_sexp_array() } else { return child };}); return [self.$type()].concat($to_a(children_sexp_arrs)); }); $def(self, '$deconstruct', function $$deconstruct() { var self = this; return [self.$type()].concat($to_a(self.$children())) }); self.$protected(); return $def(self, '$fancy_type', function $$fancy_type() { var self = this; return self.type.$to_s().$gsub("_", "-") }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["ast/processor/mixin"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $def = Opal.def, $send = Opal.send, $return_val = Opal.return_val, $nesting = [], nil = Opal.nil; Opal.add_stubs('nil?,to_ast,type,respond_to?,send,handler_missing,map,to_a,process'); return (function($base, $parent_nesting) { var self = $module($base, 'AST'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Processor'); var $nesting = [self].concat($parent_nesting); return (function($base) { var self = $module($base, 'Mixin'); $def(self, '$process', function $$process(node) { var self = this, on_handler = nil, new_node = nil; if ($truthy(node['$nil?']())) { return nil }; node = node.$to_ast(); on_handler = "on_" + (node.$type()); if ($truthy(self['$respond_to?'](on_handler))) { new_node = self.$send(on_handler, node) } else { new_node = self.$handler_missing(node) }; if ($truthy(new_node)) { node = new_node }; return node; }); $def(self, '$process_all', function $$process_all(nodes) { var self = this; return $send(nodes.$to_a(), 'map', [], function $$1(node){var self = $$1.$$s == null ? this : $$1.$$s; if (node == null) node = nil; return self.$process(node);}, {$$s: self}) }); return $def(self, '$handler_missing', $return_val(nil)); })($nesting[0]) })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["ast/processor"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,include'); return (function($base, $parent_nesting) { var self = $module($base, 'AST'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Processor'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$require("ast/processor/mixin"); return self.$include($$('Mixin')); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["ast/sexp"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $slice = Opal.slice, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('new'); return (function($base, $parent_nesting) { var self = $module($base, 'AST'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Sexp'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $def(self, '$s', function $$s(type, $a) { var $post_args, children; $post_args = $slice(arguments, 1); children = $post_args; return $$('Node').$new(type, children); }, -2) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["ast"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $nesting = [], nil = Opal.nil; Opal.add_stubs('require'); return (function($base) { var self = $module($base, 'AST'); self.$require("ast/node"); self.$require("ast/processor"); return self.$require("ast/sexp"); })($nesting[0]) }; Opal.modules["parser/ast/node"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $alias = Opal.alias, $truthy = Opal.truthy, $def = Opal.def, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_reader,location,[],frozen?,dup,node='); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'AST'); var $nesting = [self].concat($parent_nesting); return (function($base, $super) { var self = $klass($base, $super, 'Node'); self.$attr_reader("location"); $alias(self, "loc", "location"); return $def(self, '$assign_properties', function $$assign_properties(properties) { var self = this, location = nil; if ($truthy((location = properties['$[]']("location")))) { if ($truthy(location['$frozen?']())) { location = location.$dup() }; location['$node='](self); return (self.location = location); } else { return nil } }); })($nesting[0], $$$($$$('AST'), 'Node')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/ast/node"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,attr_reader,[],frozen?,dup,merge!,loc,line,column'); self.$require("ast"); self.$require("parser/ast/node"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'AST'); var $nesting = [self].concat($parent_nesting); return (function($base, $super) { var self = $klass($base, $super, 'Node'); var $proto = self.$$prototype; $proto.meta = nil; self.$attr_reader("meta"); $def(self, '$assign_properties', function $$assign_properties(properties) { var $yield = $$assign_properties.$$p || nil, self = this, meta = nil, $ret_or_1 = nil; $$assign_properties.$$p = null; if ($truthy((meta = properties['$[]']("meta")))) { if ($truthy(meta['$frozen?']())) { meta = meta.$dup() }; self.meta['$merge!'](meta); } else { self.meta = ($truthy(($ret_or_1 = self.meta)) ? ($ret_or_1) : ((new Map()))) }; return $send2(self, $find_super(self, 'assign_properties', $$assign_properties, false, true), 'assign_properties', [properties], $yield); }); $def(self, '$line', function $$line() { var self = this; if ($truthy(self.$loc())) { return self.$loc().$line() } else { return nil } }); return $def(self, '$column', function $$column() { var self = this; if ($truthy(self.$loc())) { return self.$loc().$column() } else { return nil } }); })($nesting[0], $$$($$$($$$('Parser'), 'AST'), 'Node')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["racc/parser"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $const_set = Opal.const_set, $defs = Opal.defs, $gvars = Opal.gvars, $rb_lt = Opal.rb_lt, $def = Opal.def, $to_ary = Opal.to_ary, $send = Opal.send, $neqeq = Opal.neqeq, $rb_plus = Opal.rb_plus, $eqeq = Opal.eqeq, $rb_ge = Opal.rb_ge, $rb_gt = Opal.rb_gt, $rb_minus = Opal.rb_minus, $rb_le = Opal.rb_le, $rb_times = Opal.rb_times, $assign_ivar_val = Opal.assign_ivar_val, $a, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('[],class,<,size,[]=,__send__,_racc_setup,raise,_racc_init_sysvars,catch,!=,next_token,racc_read_token,+,==,>=,_racc_evalact,!,>,-,push,racc_shift,-@,_racc_do_reduce,racc_accept,throw,on_error,<=,pop,racc_e_pop,inspect,racc_next_state,*,racc_reduce,sprintf,token_to_str,print,racc_token2str,puts,racc_print_stacks,empty?,each,racc_print_states,each_index'); (function($base, $parent_nesting) { var self = $module($base, 'Racc'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return ($klass($nesting[0], $$('StandardError'), 'ParseError'), nil) })($nesting[0], $nesting); if (!$truthy((($a = $$$('::', 'ParseError', 'skip_raise')) ? 'constant' : nil))) { $const_set($nesting[0], 'ParseError', $$$($$('Racc'), 'ParseError')) }; return (function($base, $parent_nesting) { var self = $module($base, 'Racc'); var $a, $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); if (!$truthy((($a = $$('Racc_No_Extensions', 'skip_raise')) ? 'constant' : nil))) { $const_set($nesting[0], 'Racc_No_Extensions', false) }; return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.yydebug = $proto.racc_debug_out = $proto.racc_error_status = $proto.racc_t = $proto.racc_vstack = $proto.racc_val = $proto.racc_state = $proto.racc_tstack = nil; $const_set($nesting[0], 'Racc_Runtime_Version', "1.4.6"); $const_set($nesting[0], 'Racc_Runtime_Revision', ["originalRevision:", "1.8"]['$[]'](1)); $const_set($nesting[0], 'Racc_Runtime_Core_Version_R', "1.4.6"); $const_set($nesting[0], 'Racc_Runtime_Core_Revision_R', ["originalRevision:", "1.8"]['$[]'](1)); $const_set($nesting[0], 'Racc_Main_Parsing_Routine', "_racc_do_parse_rb"); $const_set($nesting[0], 'Racc_YY_Parse_Method', "_racc_yyparse_rb"); $const_set($nesting[0], 'Racc_Runtime_Core_Version', $$('Racc_Runtime_Core_Version_R')); $const_set($nesting[0], 'Racc_Runtime_Core_Revision', $$('Racc_Runtime_Core_Revision_R')); $const_set($nesting[0], 'Racc_Runtime_Type', "ruby"); $defs($$('Parser'), '$racc_runtime_type', function $$racc_runtime_type() { return $$('Racc_Runtime_Type') }); $def(self, '$_racc_setup', function $$_racc_setup() { var $a, $b, self = this, $ret_or_1 = nil, arg = nil; if ($gvars.stderr == null) $gvars.stderr = nil; if (!$truthy($$$(self.$class(), 'Racc_debug_parser'))) { self.yydebug = false }; if (!$truthy((($a = self['yydebug'], $a != null && $a !== nil) ? 'instance-variable' : nil))) { self.yydebug = false }; if ($truthy(self.yydebug)) { if (!$truthy((($b = self['racc_debug_out'], $b != null && $b !== nil) ? 'instance-variable' : nil))) { self.racc_debug_out = $gvars.stderr }; self.racc_debug_out = ($truthy(($ret_or_1 = self.racc_debug_out)) ? ($ret_or_1) : ($gvars.stderr)); }; arg = $$$(self.$class(), 'Racc_arg'); if ($truthy($rb_lt(arg.$size(), 14))) { arg['$[]='](13, true) }; return arg; }); $def(self, '$_racc_init_sysvars', function $$_racc_init_sysvars() { var self = this; self.racc_state = [0]; self.racc_tstack = []; self.racc_vstack = []; self.racc_t = nil; self.racc_val = nil; self.racc_read_next = true; self.racc_user_yyerror = false; return (self.racc_error_status = 0); }); $def(self, '$do_parse', function $$do_parse() { var self = this; return self.$__send__($$('Racc_Main_Parsing_Routine'), self.$_racc_setup(), false) }); $def(self, '$next_token', function $$next_token() { var self = this; return self.$raise($$('NotImplementedError'), "" + (self.$class()) + "#next_token is not defined") }); $def(self, '$_racc_do_parse_rb', function $$_racc_do_parse_rb(arg, in_debug) { var $a, $b, self = this, action_table = nil, action_check = nil, action_default = nil, action_pointer = nil, _ = nil, token_table = nil, tok = nil, act = nil, i = nil; $b = arg, $a = $to_ary($b), (action_table = ($a[0] == null ? nil : $a[0])), (action_check = ($a[1] == null ? nil : $a[1])), (action_default = ($a[2] == null ? nil : $a[2])), (action_pointer = ($a[3] == null ? nil : $a[3])), (_ = ($a[4] == null ? nil : $a[4])), (_ = ($a[5] == null ? nil : $a[5])), (_ = ($a[6] == null ? nil : $a[6])), (_ = ($a[7] == null ? nil : $a[7])), (_ = ($a[8] == null ? nil : $a[8])), (_ = ($a[9] == null ? nil : $a[9])), (token_table = ($a[10] == null ? nil : $a[10])), (_ = ($a[11] == null ? nil : $a[11])), (_ = ($a[12] == null ? nil : $a[12])), (_ = ($a[13] == null ? nil : $a[13])), $b; self.$_racc_init_sysvars(); tok = (act = (i = nil)); return $send(self, 'catch', ["racc_end_parse"], function $$1(){var $c, $d, self = $$1.$$s == null ? this : $$1.$$s, $ret_or_1 = nil; if (self.racc_state == null) self.racc_state = nil; if (self.racc_read_next == null) self.racc_read_next = nil; if (self.racc_t == null) self.racc_t = nil; if (self.yydebug == null) self.yydebug = nil; if (self.racc_val == null) self.racc_val = nil; while ($truthy(true)) { if ($truthy((i = action_pointer['$[]'](self.racc_state['$[]'](-1))))) { if ($truthy(self.racc_read_next)) { if ($neqeq(self.racc_t, 0)) { $d = self.$next_token(), $c = $to_ary($d), (tok = ($c[0] == null ? nil : $c[0])), (self.racc_val = ($c[1] == null ? nil : $c[1])), $d; if ($truthy(tok)) { self.racc_t = ($truthy(($ret_or_1 = token_table['$[]'](tok))) ? ($ret_or_1) : (1)) } else { self.racc_t = 0 }; if ($truthy(self.yydebug)) { self.$racc_read_token(self.racc_t, tok, self.racc_val) }; self.racc_read_next = false; } }; i = $rb_plus(i, self.racc_t); if (!(($truthy($rb_ge(i, 0)) && ($truthy((act = action_table['$[]'](i))))) && ($eqeq(action_check['$[]'](i), self.racc_state['$[]'](-1))))) { act = action_default['$[]'](self.racc_state['$[]'](-1)) }; } else { act = action_default['$[]'](self.racc_state['$[]'](-1)) }; while ($truthy((act = self.$_racc_evalact(act, arg)))) { }; }}, {$$s: self}); }); $def(self, '$yyparse', function $$yyparse(recv, mid) { var self = this; return self.$__send__($$('Racc_YY_Parse_Method'), recv, mid, self.$_racc_setup(), true) }); $def(self, '$_racc_yyparse_rb', function $$_racc_yyparse_rb(recv, mid, arg, c_debug) { var $a, $b, self = this, action_table = nil, action_check = nil, action_default = nil, action_pointer = nil, _ = nil, token_table = nil, act = nil, i = nil; $b = arg, $a = $to_ary($b), (action_table = ($a[0] == null ? nil : $a[0])), (action_check = ($a[1] == null ? nil : $a[1])), (action_default = ($a[2] == null ? nil : $a[2])), (action_pointer = ($a[3] == null ? nil : $a[3])), (_ = ($a[4] == null ? nil : $a[4])), (_ = ($a[5] == null ? nil : $a[5])), (_ = ($a[6] == null ? nil : $a[6])), (_ = ($a[7] == null ? nil : $a[7])), (_ = ($a[8] == null ? nil : $a[8])), (_ = ($a[9] == null ? nil : $a[9])), (token_table = ($a[10] == null ? nil : $a[10])), (_ = ($a[11] == null ? nil : $a[11])), (_ = ($a[12] == null ? nil : $a[12])), (_ = ($a[13] == null ? nil : $a[13])), $b; self.$_racc_init_sysvars(); act = nil; i = nil; return $send(self, 'catch', ["racc_end_parse"], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; if (self.racc_state == null) self.racc_state = nil; while (!($truthy((i = action_pointer['$[]'](self.racc_state['$[]'](-1)))))) { while ($truthy((act = self.$_racc_evalact(action_default['$[]'](self.racc_state['$[]'](-1)), arg)))) { } }; return $send(recv, '__send__', [mid], function $$3(tok, val){var self = $$3.$$s == null ? this : $$3.$$s, $ret_or_1 = nil, $ret_or_2 = nil; if (self.racc_t == null) self.racc_t = nil; if (self.racc_state == null) self.racc_state = nil; if (self.racc_read_next == null) self.racc_read_next = nil; if (tok == null) tok = nil; if (val == null) val = nil; if ($truthy(tok)) { self.racc_t = ($truthy(($ret_or_1 = token_table['$[]'](tok))) ? ($ret_or_1) : (1)) } else { self.racc_t = 0 }; self.racc_val = val; self.racc_read_next = false; i = $rb_plus(i, self.racc_t); if (!(($truthy($rb_ge(i, 0)) && ($truthy((act = action_table['$[]'](i))))) && ($eqeq(action_check['$[]'](i), self.racc_state['$[]'](-1))))) { act = action_default['$[]'](self.racc_state['$[]'](-1)) }; while ($truthy((act = self.$_racc_evalact(act, arg)))) { }; while ($truthy(($truthy(($ret_or_1 = ($truthy(($ret_or_2 = (i = action_pointer['$[]'](self.racc_state['$[]'](-1)))['$!']())) ? ($ret_or_2) : (self.racc_read_next['$!']())))) ? ($ret_or_1) : (self.racc_t['$=='](0))))) { if (!(((($truthy(i) && ($truthy((i = $rb_plus(i, self.racc_t))))) && ($truthy($rb_ge(i, 0)))) && ($truthy((act = action_table['$[]'](i))))) && ($eqeq(action_check['$[]'](i), self.racc_state['$[]'](-1))))) { act = action_default['$[]'](self.racc_state['$[]'](-1)) }; while ($truthy((act = self.$_racc_evalact(act, arg)))) { }; };}, {$$s: self});}, {$$s: self}); }); $def(self, '$_racc_evalact', function $$_racc_evalact(act, arg) { var $a, $b, self = this, action_table = nil, action_check = nil, _ = nil, action_pointer = nil, shift_n = nil, reduce_n = nil, code = nil, i = nil; $b = arg, $a = $to_ary($b), (action_table = ($a[0] == null ? nil : $a[0])), (action_check = ($a[1] == null ? nil : $a[1])), (_ = ($a[2] == null ? nil : $a[2])), (action_pointer = ($a[3] == null ? nil : $a[3])), (_ = ($a[4] == null ? nil : $a[4])), (_ = ($a[5] == null ? nil : $a[5])), (_ = ($a[6] == null ? nil : $a[6])), (_ = ($a[7] == null ? nil : $a[7])), (_ = ($a[8] == null ? nil : $a[8])), (_ = ($a[9] == null ? nil : $a[9])), (_ = ($a[10] == null ? nil : $a[10])), (shift_n = ($a[11] == null ? nil : $a[11])), (reduce_n = ($a[12] == null ? nil : $a[12])), (_ = ($a[13] == null ? nil : $a[13])), (_ = ($a[14] == null ? nil : $a[14])), $b; if (($truthy($rb_gt(act, 0)) && ($truthy($rb_lt(act, shift_n))))) { if ($truthy($rb_gt(self.racc_error_status, 0))) { if (!$eqeq(self.racc_t, 1)) { self.racc_error_status = $rb_minus(self.racc_error_status, 1) } }; self.racc_vstack.$push(self.racc_val); self.racc_state.$push(act); self.racc_read_next = true; if ($truthy(self.yydebug)) { self.racc_tstack.$push(self.racc_t); self.$racc_shift(self.racc_t, self.racc_tstack, self.racc_vstack); }; } else if (($truthy($rb_lt(act, 0)) && ($truthy($rb_gt(act, reduce_n['$-@']()))))) { code = $send(self, 'catch', ["racc_jump"], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; if (self.racc_state == null) self.racc_state = nil; self.racc_state.$push(self.$_racc_do_reduce(arg, act)); return false;}, {$$s: self}); if ($truthy(code)) { switch (code.valueOf()) { case 1: self.racc_user_yyerror = true; return reduce_n['$-@'](); case 2: return shift_n default: self.$raise("[Racc Bug] unknown jump code") } }; } else if ($eqeq(act, shift_n)) { if ($truthy(self.yydebug)) { self.$racc_accept() }; self.$throw("racc_end_parse", self.racc_vstack['$[]'](0)); } else if ($eqeq(act, reduce_n['$-@']())) { switch (self.racc_error_status.valueOf()) { case 0: if (!$truthy(arg['$[]'](21))) { self.$on_error(self.racc_t, self.racc_val, self.racc_vstack) } break; case 3: if ($eqeq(self.racc_t, 0)) { self.$throw("racc_end_parse", nil) }; self.racc_read_next = true; break; default: nil }; self.racc_user_yyerror = false; self.racc_error_status = 3; while ($truthy(true)) { if ($truthy((i = action_pointer['$[]'](self.racc_state['$[]'](-1))))) { i = $rb_plus(i, 1); if ((($truthy($rb_ge(i, 0)) && ($truthy((act = action_table['$[]'](i))))) && ($eqeq(action_check['$[]'](i), self.racc_state['$[]'](-1))))) { break }; }; if ($truthy($rb_le(self.racc_state.$size(), 1))) { self.$throw("racc_end_parse", nil) }; self.racc_state.$pop(); self.racc_vstack.$pop(); if ($truthy(self.yydebug)) { self.racc_tstack.$pop(); self.$racc_e_pop(self.racc_state, self.racc_tstack, self.racc_vstack); }; }; return act; } else { self.$raise("[Racc Bug] unknown action " + (act.$inspect())) }; if ($truthy(self.yydebug)) { self.$racc_next_state(self.racc_state['$[]'](-1), self.racc_state) }; return nil; }); $def(self, '$_racc_do_reduce', function $$_racc_do_reduce(arg, act) { var $a, $b, self = this, _ = nil, goto_table = nil, goto_check = nil, goto_default = nil, goto_pointer = nil, nt_base = nil, reduce_table = nil, use_result = nil, state = nil, vstack = nil, tstack = nil, i = nil, len = nil, reduce_to = nil, method_id = nil, void_array = nil, tmp_t = nil, tmp_v = nil, k1 = nil, curstate = nil; $b = arg, $a = $to_ary($b), (_ = ($a[0] == null ? nil : $a[0])), (_ = ($a[1] == null ? nil : $a[1])), (_ = ($a[2] == null ? nil : $a[2])), (_ = ($a[3] == null ? nil : $a[3])), (goto_table = ($a[4] == null ? nil : $a[4])), (goto_check = ($a[5] == null ? nil : $a[5])), (goto_default = ($a[6] == null ? nil : $a[6])), (goto_pointer = ($a[7] == null ? nil : $a[7])), (nt_base = ($a[8] == null ? nil : $a[8])), (reduce_table = ($a[9] == null ? nil : $a[9])), (_ = ($a[10] == null ? nil : $a[10])), (_ = ($a[11] == null ? nil : $a[11])), (_ = ($a[12] == null ? nil : $a[12])), (use_result = ($a[13] == null ? nil : $a[13])), $b; state = self.racc_state; vstack = self.racc_vstack; tstack = self.racc_tstack; i = $rb_times(act, -3); len = reduce_table['$[]'](i); reduce_to = reduce_table['$[]']($rb_plus(i, 1)); method_id = reduce_table['$[]']($rb_plus(i, 2)); void_array = []; if ($truthy(self.yydebug)) { tmp_t = tstack['$[]'](len['$-@'](), len) }; tmp_v = vstack['$[]'](len['$-@'](), len); if ($truthy(self.yydebug)) { tstack['$[]='](len['$-@'](), len, void_array) }; vstack['$[]='](len['$-@'](), len, void_array); state['$[]='](len['$-@'](), len, void_array); if ($truthy(use_result)) { vstack.$push(self.$__send__(method_id, tmp_v, vstack, tmp_v['$[]'](0))) } else { vstack.$push(self.$__send__(method_id, tmp_v, vstack)) }; tstack.$push(reduce_to); if ($truthy(self.yydebug)) { self.$racc_reduce(tmp_t, reduce_to, tstack, vstack) }; k1 = $rb_minus(reduce_to, nt_base); if ($truthy((i = goto_pointer['$[]'](k1)))) { i = $rb_plus(i, state['$[]'](-1)); if ((($truthy($rb_ge(i, 0)) && ($truthy((curstate = goto_table['$[]'](i))))) && ($eqeq(goto_check['$[]'](i), k1)))) { return curstate }; }; return goto_default['$[]'](k1); }); $def(self, '$on_error', function $$on_error(t, val, vstack) { var self = this, $ret_or_1 = nil; return self.$raise($$('ParseError'), self.$sprintf("\nparse error on value %s (%s)", val.$inspect(), ($truthy(($ret_or_1 = self.$token_to_str(t))) ? ($ret_or_1) : ("?")))) }); $def(self, '$yyerror', function $$yyerror() { var self = this; return self.$throw("racc_jump", 1) }); $def(self, '$yyaccept', function $$yyaccept() { var self = this; return self.$throw("racc_jump", 2) }); $def(self, '$yyerrok', $assign_ivar_val("racc_error_status", 0)); $def(self, '$racc_read_token', function $$racc_read_token(t, tok, val) { var self = this; self.racc_debug_out.$print("read "); self.racc_debug_out.$print(tok.$inspect(), "(", self.$racc_token2str(t), ") "); self.racc_debug_out.$puts(val.$inspect()); return self.racc_debug_out.$puts(); }); $def(self, '$racc_shift', function $$racc_shift(tok, tstack, vstack) { var self = this; self.racc_debug_out.$puts("shift " + (self.$racc_token2str(tok))); self.$racc_print_stacks(tstack, vstack); return self.racc_debug_out.$puts(); }); $def(self, '$racc_reduce', function $$racc_reduce(toks, sim, tstack, vstack) { var self = this, out = nil; out = self.racc_debug_out; out.$print("reduce "); if ($truthy(toks['$empty?']())) { out.$print(" ") } else { $send(toks, 'each', [], function $$5(t){var self = $$5.$$s == null ? this : $$5.$$s; if (t == null) t = nil; return out.$print(" ", self.$racc_token2str(t));}, {$$s: self}) }; out.$puts(" --> " + (self.$racc_token2str(sim))); self.$racc_print_stacks(tstack, vstack); return self.racc_debug_out.$puts(); }); $def(self, '$racc_accept', function $$racc_accept() { var self = this; self.racc_debug_out.$puts("accept"); return self.racc_debug_out.$puts(); }); $def(self, '$racc_e_pop', function $$racc_e_pop(state, tstack, vstack) { var self = this; self.racc_debug_out.$puts("error recovering mode: pop token"); self.$racc_print_states(state); self.$racc_print_stacks(tstack, vstack); return self.racc_debug_out.$puts(); }); $def(self, '$racc_next_state', function $$racc_next_state(curstate, state) { var self = this; self.racc_debug_out.$puts("goto " + (curstate)); self.$racc_print_states(state); return self.racc_debug_out.$puts(); }); $def(self, '$racc_print_stacks', function $$racc_print_stacks(t, v) { var self = this, out = nil; out = self.racc_debug_out; out.$print(" ["); $send(t, 'each_index', [], function $$6(i){var self = $$6.$$s == null ? this : $$6.$$s; if (i == null) i = nil; return out.$print(" (", self.$racc_token2str(t['$[]'](i)), " ", v['$[]'](i).$inspect(), ")");}, {$$s: self}); return out.$puts(" ]"); }); $def(self, '$racc_print_states', function $$racc_print_states(s) { var self = this, out = nil; out = self.racc_debug_out; out.$print(" ["); $send(s, 'each', [], function $$7(st){ if (st == null) st = nil; return out.$print(" ", st);}); return out.$puts(" ]"); }); $def(self, '$racc_token2str', function $$racc_token2str(tok) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = $$$(self.$class(), 'Racc_token_to_s_table')['$[]'](tok)))) { return $ret_or_1 } else { return self.$raise("[Racc Bug] can't convert token " + (tok) + " to string") } }); return $def(self, '$token_to_str', function $$token_to_str(t) { var self = this; return $$$(self.$class(), 'Racc_token_to_s_table')['$[]'](t) }); })($nesting[0], null, $nesting); })($nesting[0], $nesting); }; Opal.modules["racc/parser"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $const_set = Opal.const_set, $defs = Opal.defs, $gvars = Opal.gvars, $rb_lt = Opal.rb_lt, $def = Opal.def, $to_ary = Opal.to_ary, $send = Opal.send, $neqeq = Opal.neqeq, $rb_plus = Opal.rb_plus, $eqeq = Opal.eqeq, $rb_ge = Opal.rb_ge, $rb_gt = Opal.rb_gt, $rb_minus = Opal.rb_minus, $rb_le = Opal.rb_le, $rb_times = Opal.rb_times, $assign_ivar_val = Opal.assign_ivar_val, $a, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('[],class,<,size,[]=,__send__,_racc_setup,raise,_racc_init_sysvars,catch,!=,next_token,racc_read_token,+,==,>=,_racc_evalact,!,>,-,push,racc_shift,-@,_racc_do_reduce,racc_accept,throw,on_error,<=,pop,racc_e_pop,inspect,racc_next_state,*,racc_reduce,sprintf,token_to_str,print,racc_token2str,puts,racc_print_stacks,empty?,each,racc_print_states,each_index'); (function($base, $parent_nesting) { var self = $module($base, 'Racc'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return ($klass($nesting[0], $$('StandardError'), 'ParseError'), nil) })($nesting[0], $nesting); if (!$truthy((($a = $$$('::', 'ParseError', 'skip_raise')) ? 'constant' : nil))) { $const_set($nesting[0], 'ParseError', $$$($$('Racc'), 'ParseError')) }; return (function($base, $parent_nesting) { var self = $module($base, 'Racc'); var $a, $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); if (!$truthy((($a = $$('Racc_No_Extensions', 'skip_raise')) ? 'constant' : nil))) { $const_set($nesting[0], 'Racc_No_Extensions', false) }; return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.yydebug = $proto.racc_debug_out = $proto.racc_error_status = $proto.racc_t = $proto.racc_vstack = $proto.racc_val = $proto.racc_state = $proto.racc_tstack = nil; $const_set($nesting[0], 'Racc_Runtime_Version', "1.4.6"); $const_set($nesting[0], 'Racc_Runtime_Revision', ["originalRevision:", "1.8"]['$[]'](1)); $const_set($nesting[0], 'Racc_Runtime_Core_Version_R', "1.4.6"); $const_set($nesting[0], 'Racc_Runtime_Core_Revision_R', ["originalRevision:", "1.8"]['$[]'](1)); $const_set($nesting[0], 'Racc_Main_Parsing_Routine', "_racc_do_parse_rb"); $const_set($nesting[0], 'Racc_YY_Parse_Method', "_racc_yyparse_rb"); $const_set($nesting[0], 'Racc_Runtime_Core_Version', $$('Racc_Runtime_Core_Version_R')); $const_set($nesting[0], 'Racc_Runtime_Core_Revision', $$('Racc_Runtime_Core_Revision_R')); $const_set($nesting[0], 'Racc_Runtime_Type', "ruby"); $defs($$('Parser'), '$racc_runtime_type', function $$racc_runtime_type() { return $$('Racc_Runtime_Type') }); $def(self, '$_racc_setup', function $$_racc_setup() { var $a, $b, self = this, $ret_or_1 = nil, arg = nil; if ($gvars.stderr == null) $gvars.stderr = nil; if (!$truthy($$$(self.$class(), 'Racc_debug_parser'))) { self.yydebug = false }; if (!$truthy((($a = self['yydebug'], $a != null && $a !== nil) ? 'instance-variable' : nil))) { self.yydebug = false }; if ($truthy(self.yydebug)) { if (!$truthy((($b = self['racc_debug_out'], $b != null && $b !== nil) ? 'instance-variable' : nil))) { self.racc_debug_out = $gvars.stderr }; self.racc_debug_out = ($truthy(($ret_or_1 = self.racc_debug_out)) ? ($ret_or_1) : ($gvars.stderr)); }; arg = $$$(self.$class(), 'Racc_arg'); if ($truthy($rb_lt(arg.$size(), 14))) { arg['$[]='](13, true) }; return arg; }); $def(self, '$_racc_init_sysvars', function $$_racc_init_sysvars() { var self = this; self.racc_state = [0]; self.racc_tstack = []; self.racc_vstack = []; self.racc_t = nil; self.racc_val = nil; self.racc_read_next = true; self.racc_user_yyerror = false; return (self.racc_error_status = 0); }); $def(self, '$do_parse', function $$do_parse() { var self = this; return self.$__send__($$('Racc_Main_Parsing_Routine'), self.$_racc_setup(), false) }); $def(self, '$next_token', function $$next_token() { var self = this; return self.$raise($$('NotImplementedError'), "" + (self.$class()) + "#next_token is not defined") }); $def(self, '$_racc_do_parse_rb', function $$_racc_do_parse_rb(arg, in_debug) { var $a, $b, self = this, action_table = nil, action_check = nil, action_default = nil, action_pointer = nil, _ = nil, token_table = nil, tok = nil, act = nil, i = nil; $b = arg, $a = $to_ary($b), (action_table = ($a[0] == null ? nil : $a[0])), (action_check = ($a[1] == null ? nil : $a[1])), (action_default = ($a[2] == null ? nil : $a[2])), (action_pointer = ($a[3] == null ? nil : $a[3])), (_ = ($a[4] == null ? nil : $a[4])), (_ = ($a[5] == null ? nil : $a[5])), (_ = ($a[6] == null ? nil : $a[6])), (_ = ($a[7] == null ? nil : $a[7])), (_ = ($a[8] == null ? nil : $a[8])), (_ = ($a[9] == null ? nil : $a[9])), (token_table = ($a[10] == null ? nil : $a[10])), (_ = ($a[11] == null ? nil : $a[11])), (_ = ($a[12] == null ? nil : $a[12])), (_ = ($a[13] == null ? nil : $a[13])), $b; self.$_racc_init_sysvars(); tok = (act = (i = nil)); return $send(self, 'catch', ["racc_end_parse"], function $$1(){var $c, $d, self = $$1.$$s == null ? this : $$1.$$s, $ret_or_1 = nil; if (self.racc_state == null) self.racc_state = nil; if (self.racc_read_next == null) self.racc_read_next = nil; if (self.racc_t == null) self.racc_t = nil; if (self.yydebug == null) self.yydebug = nil; if (self.racc_val == null) self.racc_val = nil; while ($truthy(true)) { if ($truthy((i = action_pointer['$[]'](self.racc_state['$[]'](-1))))) { if ($truthy(self.racc_read_next)) { if ($neqeq(self.racc_t, 0)) { $d = self.$next_token(), $c = $to_ary($d), (tok = ($c[0] == null ? nil : $c[0])), (self.racc_val = ($c[1] == null ? nil : $c[1])), $d; if ($truthy(tok)) { self.racc_t = ($truthy(($ret_or_1 = token_table['$[]'](tok))) ? ($ret_or_1) : (1)) } else { self.racc_t = 0 }; if ($truthy(self.yydebug)) { self.$racc_read_token(self.racc_t, tok, self.racc_val) }; self.racc_read_next = false; } }; i = $rb_plus(i, self.racc_t); if (!(($truthy($rb_ge(i, 0)) && ($truthy((act = action_table['$[]'](i))))) && ($eqeq(action_check['$[]'](i), self.racc_state['$[]'](-1))))) { act = action_default['$[]'](self.racc_state['$[]'](-1)) }; } else { act = action_default['$[]'](self.racc_state['$[]'](-1)) }; while ($truthy((act = self.$_racc_evalact(act, arg)))) { }; }}, {$$s: self}); }); $def(self, '$yyparse', function $$yyparse(recv, mid) { var self = this; return self.$__send__($$('Racc_YY_Parse_Method'), recv, mid, self.$_racc_setup(), true) }); $def(self, '$_racc_yyparse_rb', function $$_racc_yyparse_rb(recv, mid, arg, c_debug) { var $a, $b, self = this, action_table = nil, action_check = nil, action_default = nil, action_pointer = nil, _ = nil, token_table = nil, act = nil, i = nil; $b = arg, $a = $to_ary($b), (action_table = ($a[0] == null ? nil : $a[0])), (action_check = ($a[1] == null ? nil : $a[1])), (action_default = ($a[2] == null ? nil : $a[2])), (action_pointer = ($a[3] == null ? nil : $a[3])), (_ = ($a[4] == null ? nil : $a[4])), (_ = ($a[5] == null ? nil : $a[5])), (_ = ($a[6] == null ? nil : $a[6])), (_ = ($a[7] == null ? nil : $a[7])), (_ = ($a[8] == null ? nil : $a[8])), (_ = ($a[9] == null ? nil : $a[9])), (token_table = ($a[10] == null ? nil : $a[10])), (_ = ($a[11] == null ? nil : $a[11])), (_ = ($a[12] == null ? nil : $a[12])), (_ = ($a[13] == null ? nil : $a[13])), $b; self.$_racc_init_sysvars(); act = nil; i = nil; return $send(self, 'catch', ["racc_end_parse"], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; if (self.racc_state == null) self.racc_state = nil; while (!($truthy((i = action_pointer['$[]'](self.racc_state['$[]'](-1)))))) { while ($truthy((act = self.$_racc_evalact(action_default['$[]'](self.racc_state['$[]'](-1)), arg)))) { } }; return $send(recv, '__send__', [mid], function $$3(tok, val){var self = $$3.$$s == null ? this : $$3.$$s, $ret_or_1 = nil, $ret_or_2 = nil; if (self.racc_t == null) self.racc_t = nil; if (self.racc_state == null) self.racc_state = nil; if (self.racc_read_next == null) self.racc_read_next = nil; if (tok == null) tok = nil; if (val == null) val = nil; if ($truthy(tok)) { self.racc_t = ($truthy(($ret_or_1 = token_table['$[]'](tok))) ? ($ret_or_1) : (1)) } else { self.racc_t = 0 }; self.racc_val = val; self.racc_read_next = false; i = $rb_plus(i, self.racc_t); if (!(($truthy($rb_ge(i, 0)) && ($truthy((act = action_table['$[]'](i))))) && ($eqeq(action_check['$[]'](i), self.racc_state['$[]'](-1))))) { act = action_default['$[]'](self.racc_state['$[]'](-1)) }; while ($truthy((act = self.$_racc_evalact(act, arg)))) { }; while ($truthy(($truthy(($ret_or_1 = ($truthy(($ret_or_2 = (i = action_pointer['$[]'](self.racc_state['$[]'](-1)))['$!']())) ? ($ret_or_2) : (self.racc_read_next['$!']())))) ? ($ret_or_1) : (self.racc_t['$=='](0))))) { if (!(((($truthy(i) && ($truthy((i = $rb_plus(i, self.racc_t))))) && ($truthy($rb_ge(i, 0)))) && ($truthy((act = action_table['$[]'](i))))) && ($eqeq(action_check['$[]'](i), self.racc_state['$[]'](-1))))) { act = action_default['$[]'](self.racc_state['$[]'](-1)) }; while ($truthy((act = self.$_racc_evalact(act, arg)))) { }; };}, {$$s: self});}, {$$s: self}); }); $def(self, '$_racc_evalact', function $$_racc_evalact(act, arg) { var $a, $b, self = this, action_table = nil, action_check = nil, _ = nil, action_pointer = nil, shift_n = nil, reduce_n = nil, code = nil, i = nil; $b = arg, $a = $to_ary($b), (action_table = ($a[0] == null ? nil : $a[0])), (action_check = ($a[1] == null ? nil : $a[1])), (_ = ($a[2] == null ? nil : $a[2])), (action_pointer = ($a[3] == null ? nil : $a[3])), (_ = ($a[4] == null ? nil : $a[4])), (_ = ($a[5] == null ? nil : $a[5])), (_ = ($a[6] == null ? nil : $a[6])), (_ = ($a[7] == null ? nil : $a[7])), (_ = ($a[8] == null ? nil : $a[8])), (_ = ($a[9] == null ? nil : $a[9])), (_ = ($a[10] == null ? nil : $a[10])), (shift_n = ($a[11] == null ? nil : $a[11])), (reduce_n = ($a[12] == null ? nil : $a[12])), (_ = ($a[13] == null ? nil : $a[13])), (_ = ($a[14] == null ? nil : $a[14])), $b; if (($truthy($rb_gt(act, 0)) && ($truthy($rb_lt(act, shift_n))))) { if ($truthy($rb_gt(self.racc_error_status, 0))) { if (!$eqeq(self.racc_t, 1)) { self.racc_error_status = $rb_minus(self.racc_error_status, 1) } }; self.racc_vstack.$push(self.racc_val); self.racc_state.$push(act); self.racc_read_next = true; if ($truthy(self.yydebug)) { self.racc_tstack.$push(self.racc_t); self.$racc_shift(self.racc_t, self.racc_tstack, self.racc_vstack); }; } else if (($truthy($rb_lt(act, 0)) && ($truthy($rb_gt(act, reduce_n['$-@']()))))) { code = $send(self, 'catch', ["racc_jump"], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; if (self.racc_state == null) self.racc_state = nil; self.racc_state.$push(self.$_racc_do_reduce(arg, act)); return false;}, {$$s: self}); if ($truthy(code)) { switch (code.valueOf()) { case 1: self.racc_user_yyerror = true; return reduce_n['$-@'](); case 2: return shift_n default: self.$raise("[Racc Bug] unknown jump code") } }; } else if ($eqeq(act, shift_n)) { if ($truthy(self.yydebug)) { self.$racc_accept() }; self.$throw("racc_end_parse", self.racc_vstack['$[]'](0)); } else if ($eqeq(act, reduce_n['$-@']())) { switch (self.racc_error_status.valueOf()) { case 0: if (!$truthy(arg['$[]'](21))) { self.$on_error(self.racc_t, self.racc_val, self.racc_vstack) } break; case 3: if ($eqeq(self.racc_t, 0)) { self.$throw("racc_end_parse", nil) }; self.racc_read_next = true; break; default: nil }; self.racc_user_yyerror = false; self.racc_error_status = 3; while ($truthy(true)) { if ($truthy((i = action_pointer['$[]'](self.racc_state['$[]'](-1))))) { i = $rb_plus(i, 1); if ((($truthy($rb_ge(i, 0)) && ($truthy((act = action_table['$[]'](i))))) && ($eqeq(action_check['$[]'](i), self.racc_state['$[]'](-1))))) { break }; }; if ($truthy($rb_le(self.racc_state.$size(), 1))) { self.$throw("racc_end_parse", nil) }; self.racc_state.$pop(); self.racc_vstack.$pop(); if ($truthy(self.yydebug)) { self.racc_tstack.$pop(); self.$racc_e_pop(self.racc_state, self.racc_tstack, self.racc_vstack); }; }; return act; } else { self.$raise("[Racc Bug] unknown action " + (act.$inspect())) }; if ($truthy(self.yydebug)) { self.$racc_next_state(self.racc_state['$[]'](-1), self.racc_state) }; return nil; }); $def(self, '$_racc_do_reduce', function $$_racc_do_reduce(arg, act) { var $a, $b, self = this, _ = nil, goto_table = nil, goto_check = nil, goto_default = nil, goto_pointer = nil, nt_base = nil, reduce_table = nil, use_result = nil, state = nil, vstack = nil, tstack = nil, i = nil, len = nil, reduce_to = nil, method_id = nil, void_array = nil, tmp_t = nil, tmp_v = nil, k1 = nil, curstate = nil; $b = arg, $a = $to_ary($b), (_ = ($a[0] == null ? nil : $a[0])), (_ = ($a[1] == null ? nil : $a[1])), (_ = ($a[2] == null ? nil : $a[2])), (_ = ($a[3] == null ? nil : $a[3])), (goto_table = ($a[4] == null ? nil : $a[4])), (goto_check = ($a[5] == null ? nil : $a[5])), (goto_default = ($a[6] == null ? nil : $a[6])), (goto_pointer = ($a[7] == null ? nil : $a[7])), (nt_base = ($a[8] == null ? nil : $a[8])), (reduce_table = ($a[9] == null ? nil : $a[9])), (_ = ($a[10] == null ? nil : $a[10])), (_ = ($a[11] == null ? nil : $a[11])), (_ = ($a[12] == null ? nil : $a[12])), (use_result = ($a[13] == null ? nil : $a[13])), $b; state = self.racc_state; vstack = self.racc_vstack; tstack = self.racc_tstack; i = $rb_times(act, -3); len = reduce_table['$[]'](i); reduce_to = reduce_table['$[]']($rb_plus(i, 1)); method_id = reduce_table['$[]']($rb_plus(i, 2)); void_array = []; if ($truthy(self.yydebug)) { tmp_t = tstack['$[]'](len['$-@'](), len) }; tmp_v = vstack['$[]'](len['$-@'](), len); if ($truthy(self.yydebug)) { tstack['$[]='](len['$-@'](), len, void_array) }; vstack['$[]='](len['$-@'](), len, void_array); state['$[]='](len['$-@'](), len, void_array); if ($truthy(use_result)) { vstack.$push(self.$__send__(method_id, tmp_v, vstack, tmp_v['$[]'](0))) } else { vstack.$push(self.$__send__(method_id, tmp_v, vstack)) }; tstack.$push(reduce_to); if ($truthy(self.yydebug)) { self.$racc_reduce(tmp_t, reduce_to, tstack, vstack) }; k1 = $rb_minus(reduce_to, nt_base); if ($truthy((i = goto_pointer['$[]'](k1)))) { i = $rb_plus(i, state['$[]'](-1)); if ((($truthy($rb_ge(i, 0)) && ($truthy((curstate = goto_table['$[]'](i))))) && ($eqeq(goto_check['$[]'](i), k1)))) { return curstate }; }; return goto_default['$[]'](k1); }); $def(self, '$on_error', function $$on_error(t, val, vstack) { var self = this, $ret_or_1 = nil; return self.$raise($$('ParseError'), self.$sprintf("\nparse error on value %s (%s)", val.$inspect(), ($truthy(($ret_or_1 = self.$token_to_str(t))) ? ($ret_or_1) : ("?")))) }); $def(self, '$yyerror', function $$yyerror() { var self = this; return self.$throw("racc_jump", 1) }); $def(self, '$yyaccept', function $$yyaccept() { var self = this; return self.$throw("racc_jump", 2) }); $def(self, '$yyerrok', $assign_ivar_val("racc_error_status", 0)); $def(self, '$racc_read_token', function $$racc_read_token(t, tok, val) { var self = this; self.racc_debug_out.$print("read "); self.racc_debug_out.$print(tok.$inspect(), "(", self.$racc_token2str(t), ") "); self.racc_debug_out.$puts(val.$inspect()); return self.racc_debug_out.$puts(); }); $def(self, '$racc_shift', function $$racc_shift(tok, tstack, vstack) { var self = this; self.racc_debug_out.$puts("shift " + (self.$racc_token2str(tok))); self.$racc_print_stacks(tstack, vstack); return self.racc_debug_out.$puts(); }); $def(self, '$racc_reduce', function $$racc_reduce(toks, sim, tstack, vstack) { var self = this, out = nil; out = self.racc_debug_out; out.$print("reduce "); if ($truthy(toks['$empty?']())) { out.$print(" ") } else { $send(toks, 'each', [], function $$5(t){var self = $$5.$$s == null ? this : $$5.$$s; if (t == null) t = nil; return out.$print(" ", self.$racc_token2str(t));}, {$$s: self}) }; out.$puts(" --> " + (self.$racc_token2str(sim))); self.$racc_print_stacks(tstack, vstack); return self.racc_debug_out.$puts(); }); $def(self, '$racc_accept', function $$racc_accept() { var self = this; self.racc_debug_out.$puts("accept"); return self.racc_debug_out.$puts(); }); $def(self, '$racc_e_pop', function $$racc_e_pop(state, tstack, vstack) { var self = this; self.racc_debug_out.$puts("error recovering mode: pop token"); self.$racc_print_states(state); self.$racc_print_stacks(tstack, vstack); return self.racc_debug_out.$puts(); }); $def(self, '$racc_next_state', function $$racc_next_state(curstate, state) { var self = this; self.racc_debug_out.$puts("goto " + (curstate)); self.$racc_print_states(state); return self.racc_debug_out.$puts(); }); $def(self, '$racc_print_stacks', function $$racc_print_stacks(t, v) { var self = this, out = nil; out = self.racc_debug_out; out.$print(" ["); $send(t, 'each_index', [], function $$6(i){var self = $$6.$$s == null ? this : $$6.$$s; if (i == null) i = nil; return out.$print(" (", self.$racc_token2str(t['$[]'](i)), " ", v['$[]'](i).$inspect(), ")");}, {$$s: self}); return out.$puts(" ]"); }); $def(self, '$racc_print_states', function $$racc_print_states(s) { var self = this, out = nil; out = self.racc_debug_out; out.$print(" ["); $send(s, 'each', [], function $$7(st){ if (st == null) st = nil; return out.$print(" ", st);}); return out.$puts(" ]"); }); $def(self, '$racc_token2str', function $$racc_token2str(tok) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = $$$(self.$class(), 'Racc_token_to_s_table')['$[]'](tok)))) { return $ret_or_1 } else { return self.$raise("[Racc Bug] can't convert token " + (tok) + " to string") } }); return $def(self, '$token_to_str', function $$token_to_str(t) { var self = this; return $$$(self.$class(), 'Racc_token_to_s_table')['$[]'](t) }); })($nesting[0], null, $nesting); })($nesting[0], $nesting); }; Opal.modules["parser/version"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $const_set = Opal.const_set, $nesting = [], nil = Opal.nil; return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return $const_set($nesting[0], 'VERSION', "3.3.3.0") })($nesting[0], $nesting) }; Opal.modules["parser/messages"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $const_set = Opal.const_set, $truthy = Opal.truthy, $eqeqeq = Opal.eqeqeq, $defs = Opal.defs, $nesting = [], nil = Opal.nil; Opal.add_stubs('freeze,[],empty?,===,format'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); $const_set($nesting[0], 'MESSAGES', (new Map([["unicode_point_too_large", "invalid Unicode codepoint (too large)"], ["invalid_escape", "invalid escape character syntax"], ["incomplete_escape", "incomplete character syntax"], ["invalid_hex_escape", "invalid hex escape"], ["invalid_unicode_escape", "invalid Unicode escape"], ["unterminated_unicode", "unterminated Unicode escape"], ["escape_eof", "escape sequence meets end of file"], ["string_eof", "unterminated string meets end of file"], ["regexp_options", "unknown regexp options: %{options}"], ["cvar_name", "`%{name}' is not allowed as a class variable name"], ["ivar_name", "`%{name}' is not allowed as an instance variable name"], ["gvar_name", "`%{name}' is not allowed as a global variable name"], ["trailing_in_number", "trailing `%{character}' in number"], ["empty_numeric", "numeric literal without digits"], ["invalid_octal", "invalid octal digit"], ["no_dot_digit_literal", "no . floating literal anymore; put 0 before dot"], ["bare_backslash", "bare backslash only allowed before newline"], ["unexpected", "unexpected `%{character}'"], ["embedded_document", "embedded document meets end of file (and they embark on a romantic journey)"], ["heredoc_id_has_newline", "here document identifier across newlines, never match"], ["heredoc_id_ends_with_nl", "here document identifier ends with a newline"], ["unterminated_heredoc_id", "unterminated heredoc id"], ["invalid_escape_use", "invalid character syntax; use ?%{escape}"], ["ambiguous_literal", "ambiguous first argument; put parentheses or a space even after the operator"], ["ambiguous_regexp", "ambiguity between regexp and two divisions: wrap regexp in parentheses or add a space after `/' operator"], ["ambiguous_prefix", "`%{prefix}' interpreted as argument prefix"], ["triple_dot_at_eol", "... at EOL, should be parenthesized"], ["nth_ref_alias", "cannot define an alias for a back-reference variable"], ["begin_in_method", "BEGIN in method"], ["backref_assignment", "cannot assign to a back-reference variable"], ["invalid_assignment", "cannot assign to a keyword"], ["module_name_const", "class or module name must be a constant literal"], ["unexpected_token", "unexpected token %{token}"], ["argument_const", "formal argument cannot be a constant"], ["argument_ivar", "formal argument cannot be an instance variable"], ["argument_gvar", "formal argument cannot be a global variable"], ["argument_cvar", "formal argument cannot be a class variable"], ["duplicate_argument", "duplicate argument name"], ["empty_symbol", "empty symbol literal"], ["odd_hash", "odd number of entries for a hash"], ["singleton_literal", "cannot define a singleton method for a literal"], ["dynamic_const", "dynamic constant assignment"], ["const_reassignment", "constant re-assignment"], ["module_in_def", "module definition in method body"], ["class_in_def", "class definition in method body"], ["unexpected_percent_str", "%{type}: unknown type of percent-literal"], ["block_and_blockarg", "both block argument and literal block are passed"], ["masgn_as_condition", "multiple assignment in conditional context"], ["block_given_to_yield", "block given to yield"], ["invalid_regexp", "%{message}"], ["invalid_return", "Invalid return in class/module body"], ["csend_in_lhs_of_masgn", "&. inside multiple assignment destination"], ["cant_assign_to_numparam", "cannot assign to numbered parameter %{name}"], ["reserved_for_numparam", "%{name} is reserved for numbered parameter"], ["ordinary_param_defined", "ordinary parameter is defined"], ["numparam_used_in_outer_scope", "numbered parameter is already used in an outer scope"], ["circular_argument_reference", "circular argument reference %{var_name}"], ["pm_interp_in_var_name", "symbol literal with interpolation is not allowed"], ["lvar_name", "`%{name}' is not allowed as a local variable name"], ["undefined_lvar", "no such local variable: `%{name}'"], ["duplicate_variable_name", "duplicate variable name %{name}"], ["duplicate_pattern_key", "duplicate hash pattern key %{name}"], ["endless_setter", "setter method cannot be defined in an endless method definition"], ["invalid_id_to_get", "identifier %{identifier} is not valid to get"], ["forward_arg_after_restarg", "... after rest argument"], ["no_anonymous_blockarg", "no anonymous block parameter"], ["no_anonymous_restarg", "no anonymous rest parameter"], ["no_anonymous_kwrestarg", "no anonymous keyword rest parameter"], ["ambiguous_anonymous_restarg", "anonymous rest parameter is also used within block"], ["ambiguous_anonymous_kwrestarg", "anonymous keyword rest parameter is also used within block"], ["ambiguous_anonymous_blockarg", "anonymous block parameter is also used within block"], ["useless_else", "else without rescue is useless"], ["duplicate_hash_key", "key is duplicated and overwritten"], ["ambiguous_it_call", "`it` calls without arguments refers to the first block param"], ["invalid_encoding", "literal contains escape sequences incompatible with UTF-8"], ["invalid_action", "cannot %{action}"], ["clobbered", "clobbered by: %{action}"], ["different_replacements", "different replacements: %{replacement} vs %{other_replacement}"], ["swallowed_insertions", "this replacement:"], ["swallowed_insertions_conflict", "swallows some inner rewriting actions:"], ["crossing_deletions", "the deletion of:"], ["crossing_deletions_conflict", "is crossing:"], ["crossing_insertions", "the rewriting action on:"], ["crossing_insertions_conflict", "is crossing that on:"]])).$freeze()); return (function($base, $parent_nesting) { var self = $module($base, 'Messages'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $defs(self, '$compile', function $$compile(reason, arguments$) { var self = this, template = nil; template = $$('MESSAGES')['$[]'](reason); if (($eqeqeq($$('Hash'), arguments$) && ($truthy(arguments$['$empty?']())))) { return template }; return self.$format(template, arguments$); }) })($nesting[0], $nesting); })($nesting[0], $nesting) }; Opal.modules["parser/deprecation"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $truthy = Opal.truthy, $def = Opal.def, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_writer,warn'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base) { var self = $module($base, 'Deprecation'); self.$attr_writer("warned_of_deprecation"); return $def(self, '$warn_of_deprecation', function $$warn_of_deprecation() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if (self.warned_of_deprecation == null) self.warned_of_deprecation = nil; return (self.warned_of_deprecation = ($truthy(($ret_or_1 = self.warned_of_deprecation)) ? ($ret_or_1) : ($truthy(($ret_or_2 = self.$warn($$$(self, 'DEPRECATION_WARNING')))) ? ($ret_or_2) : (true)))) }); })($nesting[0]) })($nesting[0], $nesting) }; Opal.modules["parser/ast/processor"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $alias = Opal.alias, $to_a = Opal.to_a, $not = Opal.not, $truthy = Opal.truthy, $slice = Opal.slice, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('include,updated,process_all,process_regular_node,on_var,process_variable_node,!,nil?,process,on_vasgn,process_var_asgn_node,on_argument,process_argument_node,is_a?,[],children,on_send,warn'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'AST'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Processor'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$include($$$($$$($$$('AST'), 'Processor'), 'Mixin')); $def(self, '$process_regular_node', function $$process_regular_node(node) { var self = this; return node.$updated(nil, self.$process_all(node)) }); $alias(self, "on_dstr", "process_regular_node"); $alias(self, "on_dsym", "process_regular_node"); $alias(self, "on_regexp", "process_regular_node"); $alias(self, "on_xstr", "process_regular_node"); $alias(self, "on_splat", "process_regular_node"); $alias(self, "on_kwsplat", "process_regular_node"); $alias(self, "on_array", "process_regular_node"); $alias(self, "on_pair", "process_regular_node"); $alias(self, "on_hash", "process_regular_node"); $alias(self, "on_kwargs", "process_regular_node"); $alias(self, "on_irange", "process_regular_node"); $alias(self, "on_erange", "process_regular_node"); $def(self, '$on_var', function $$on_var(node) { return node }); $def(self, '$process_variable_node', function $$process_variable_node(node) { var self = this; return self.$on_var(node) }); $alias(self, "on_lvar", "process_variable_node"); $alias(self, "on_ivar", "process_variable_node"); $alias(self, "on_gvar", "process_variable_node"); $alias(self, "on_cvar", "process_variable_node"); $alias(self, "on_back_ref", "process_variable_node"); $alias(self, "on_nth_ref", "process_variable_node"); $def(self, '$on_vasgn', function $$on_vasgn(node) { var $a, self = this, name = nil, value_node = nil; $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), (value_node = ($a[1] == null ? nil : $a[1])), $a; if ($not(value_node['$nil?']())) { return node.$updated(nil, [name, self.$process(value_node)]) } else { return node }; }); $def(self, '$process_var_asgn_node', function $$process_var_asgn_node(node) { var self = this; return self.$on_vasgn(node) }); $alias(self, "on_lvasgn", "process_var_asgn_node"); $alias(self, "on_ivasgn", "process_var_asgn_node"); $alias(self, "on_gvasgn", "process_var_asgn_node"); $alias(self, "on_cvasgn", "process_var_asgn_node"); $alias(self, "on_and_asgn", "process_regular_node"); $alias(self, "on_or_asgn", "process_regular_node"); $def(self, '$on_op_asgn', function $$on_op_asgn(node) { var $a, self = this, var_node = nil, method_name = nil, value_node = nil; $a = [].concat($to_a(node)), (var_node = ($a[0] == null ? nil : $a[0])), (method_name = ($a[1] == null ? nil : $a[1])), (value_node = ($a[2] == null ? nil : $a[2])), $a; return node.$updated(nil, [self.$process(var_node), method_name, self.$process(value_node)]); }); $alias(self, "on_mlhs", "process_regular_node"); $alias(self, "on_masgn", "process_regular_node"); $def(self, '$on_const', function $$on_const(node) { var $a, self = this, scope_node = nil, name = nil; $a = [].concat($to_a(node)), (scope_node = ($a[0] == null ? nil : $a[0])), (name = ($a[1] == null ? nil : $a[1])), $a; return node.$updated(nil, [self.$process(scope_node), name]); }); $def(self, '$on_casgn', function $$on_casgn(node) { var $a, self = this, scope_node = nil, name = nil, value_node = nil; $a = [].concat($to_a(node)), (scope_node = ($a[0] == null ? nil : $a[0])), (name = ($a[1] == null ? nil : $a[1])), (value_node = ($a[2] == null ? nil : $a[2])), $a; if ($not(value_node['$nil?']())) { return node.$updated(nil, [self.$process(scope_node), name, self.$process(value_node)]) } else { return node.$updated(nil, [self.$process(scope_node), name]) }; }); $alias(self, "on_args", "process_regular_node"); $def(self, '$on_argument', function $$on_argument(node) { var $a, self = this, arg_name = nil, value_node = nil; $a = [].concat($to_a(node)), (arg_name = ($a[0] == null ? nil : $a[0])), (value_node = ($a[1] == null ? nil : $a[1])), $a; if ($not(value_node['$nil?']())) { return node.$updated(nil, [arg_name, self.$process(value_node)]) } else { return node }; }); $def(self, '$process_argument_node', function $$process_argument_node(node) { var self = this; return self.$on_argument(node) }); $alias(self, "on_arg", "process_argument_node"); $alias(self, "on_optarg", "process_argument_node"); $alias(self, "on_restarg", "process_argument_node"); $alias(self, "on_blockarg", "process_argument_node"); $alias(self, "on_shadowarg", "process_argument_node"); $alias(self, "on_kwarg", "process_argument_node"); $alias(self, "on_kwoptarg", "process_argument_node"); $alias(self, "on_kwrestarg", "process_argument_node"); $alias(self, "on_forward_arg", "process_argument_node"); $def(self, '$on_procarg0', function $$on_procarg0(node) { var self = this; if ($truthy(node.$children()['$[]'](0)['$is_a?']($$('Symbol')))) { return self.$on_argument(node) } else { return self.$process_regular_node(node) } }); $alias(self, "on_arg_expr", "process_regular_node"); $alias(self, "on_restarg_expr", "process_regular_node"); $alias(self, "on_blockarg_expr", "process_regular_node"); $alias(self, "on_block_pass", "process_regular_node"); $alias(self, "on_forwarded_restarg", "process_regular_node"); $alias(self, "on_forwarded_kwrestarg", "process_regular_node"); $alias(self, "on_module", "process_regular_node"); $alias(self, "on_class", "process_regular_node"); $alias(self, "on_sclass", "process_regular_node"); $def(self, '$on_def', function $$on_def(node) { var $a, self = this, name = nil, args_node = nil, body_node = nil; $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), (args_node = ($a[1] == null ? nil : $a[1])), (body_node = ($a[2] == null ? nil : $a[2])), $a; return node.$updated(nil, [name, self.$process(args_node), self.$process(body_node)]); }); $def(self, '$on_defs', function $$on_defs(node) { var $a, self = this, definee_node = nil, name = nil, args_node = nil, body_node = nil; $a = [].concat($to_a(node)), (definee_node = ($a[0] == null ? nil : $a[0])), (name = ($a[1] == null ? nil : $a[1])), (args_node = ($a[2] == null ? nil : $a[2])), (body_node = ($a[3] == null ? nil : $a[3])), $a; return node.$updated(nil, [self.$process(definee_node), name, self.$process(args_node), self.$process(body_node)]); }); $alias(self, "on_undef", "process_regular_node"); $alias(self, "on_alias", "process_regular_node"); $def(self, '$on_send', function $$on_send(node) { var $a, self = this, receiver_node = nil, method_name = nil, arg_nodes = nil; $a = [].concat($to_a(node)), (receiver_node = ($a[0] == null ? nil : $a[0])), (method_name = ($a[1] == null ? nil : $a[1])), (arg_nodes = $slice($a, 2)), $a; if ($truthy(receiver_node)) { receiver_node = self.$process(receiver_node) }; return node.$updated(nil, [receiver_node, method_name].concat($to_a(self.$process_all(arg_nodes)))); }); $alias(self, "on_csend", "on_send"); $alias(self, "on_index", "process_regular_node"); $alias(self, "on_indexasgn", "process_regular_node"); $alias(self, "on_block", "process_regular_node"); $alias(self, "on_lambda", "process_regular_node"); $def(self, '$on_numblock', function $$on_numblock(node) { var $a, self = this, method_call = nil, max_numparam = nil, body = nil; $a = [].concat($to_a(node)), (method_call = ($a[0] == null ? nil : $a[0])), (max_numparam = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), $a; return node.$updated(nil, [self.$process(method_call), max_numparam, self.$process(body)]); }); $alias(self, "on_while", "process_regular_node"); $alias(self, "on_while_post", "process_regular_node"); $alias(self, "on_until", "process_regular_node"); $alias(self, "on_until_post", "process_regular_node"); $alias(self, "on_for", "process_regular_node"); $alias(self, "on_return", "process_regular_node"); $alias(self, "on_break", "process_regular_node"); $alias(self, "on_next", "process_regular_node"); $alias(self, "on_redo", "process_regular_node"); $alias(self, "on_retry", "process_regular_node"); $alias(self, "on_super", "process_regular_node"); $alias(self, "on_yield", "process_regular_node"); $alias(self, "on_defined?", "process_regular_node"); $alias(self, "on_not", "process_regular_node"); $alias(self, "on_and", "process_regular_node"); $alias(self, "on_or", "process_regular_node"); $alias(self, "on_if", "process_regular_node"); $alias(self, "on_when", "process_regular_node"); $alias(self, "on_case", "process_regular_node"); $alias(self, "on_iflipflop", "process_regular_node"); $alias(self, "on_eflipflop", "process_regular_node"); $alias(self, "on_match_current_line", "process_regular_node"); $alias(self, "on_match_with_lvasgn", "process_regular_node"); $alias(self, "on_resbody", "process_regular_node"); $alias(self, "on_rescue", "process_regular_node"); $alias(self, "on_ensure", "process_regular_node"); $alias(self, "on_begin", "process_regular_node"); $alias(self, "on_kwbegin", "process_regular_node"); $alias(self, "on_preexe", "process_regular_node"); $alias(self, "on_postexe", "process_regular_node"); $alias(self, "on_case_match", "process_regular_node"); $alias(self, "on_in_match", "process_regular_node"); $alias(self, "on_match_pattern", "process_regular_node"); $alias(self, "on_match_pattern_p", "process_regular_node"); $alias(self, "on_in_pattern", "process_regular_node"); $alias(self, "on_if_guard", "process_regular_node"); $alias(self, "on_unless_guard", "process_regular_node"); $alias(self, "on_match_var", "process_variable_node"); $alias(self, "on_match_rest", "process_regular_node"); $alias(self, "on_pin", "process_regular_node"); $alias(self, "on_match_alt", "process_regular_node"); $alias(self, "on_match_as", "process_regular_node"); $alias(self, "on_array_pattern", "process_regular_node"); $alias(self, "on_array_pattern_with_tail", "process_regular_node"); $alias(self, "on_hash_pattern", "process_regular_node"); $alias(self, "on_const_pattern", "process_regular_node"); $alias(self, "on_find_pattern", "process_regular_node"); $def(self, '$process_variable_node', function $$process_variable_node(node) { var self = this; self.$warn("Parser::AST::Processor#process_variable_node is deprecated as a" + " public API and will be removed. Please use " + "Parser::AST::Processor#on_var instead."); return self.$on_var(node); }); $def(self, '$process_var_asgn_node', function $$process_var_asgn_node(node) { var self = this; self.$warn("Parser::AST::Processor#process_var_asgn_node is deprecated as a" + " public API and will be removed. Please use " + "Parser::AST::Processor#on_vasgn instead."); return self.$on_vasgn(node); }); $def(self, '$process_argument_node', function $$process_argument_node(node) { var self = this; self.$warn("Parser::AST::Processor#process_argument_node is deprecated as a" + " public API and will be removed. Please use " + "Parser::AST::Processor#on_argument instead."); return self.$on_argument(node); }); return $def(self, '$on_empty_else', function $$on_empty_else(node) { return node }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/meta"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $const_set = Opal.const_set, $nesting = [], nil = Opal.nil; Opal.add_stubs('freeze,to_set'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Meta'); var $nesting = [self].concat($parent_nesting); return $const_set($nesting[0], 'NODE_TYPES', Opal.large_array_unpack("true,false,nil,int,float,str,dstr,sym,dsym,xstr,regopt,regexp,array,splat,pair,kwsplat,hash,irange,erange,self,lvar,ivar,cvar,gvar,const,defined?,lvasgn,ivasgn,cvasgn,gvasgn,casgn,mlhs,masgn,op_asgn,and_asgn,ensure,rescue,arg_expr,or_asgn,back_ref,nth_ref,match_with_lvasgn,match_current_line,module,class,sclass,def,defs,undef,alias,args,cbase,arg,optarg,restarg,blockarg,block_pass,kwarg,kwoptarg,kwrestarg,kwnilarg,send,csend,super,zsuper,yield,block,and,not,or,if,when,case,while,until,while_post,until_post,for,break,next,redo,return,resbody,kwbegin,begin,retry,preexe,postexe,iflipflop,eflipflop,shadowarg,complex,rational,__FILE__,__LINE__,__ENCODING__,ident,lambda,indexasgn,index,procarg0,restarg_expr,blockarg_expr,objc_kwarg,objc_restarg,objc_varargs,numargs,numblock,forward_args,forwarded_args,forward_arg,case_match,in_match,in_pattern,match_var,pin,match_alt,match_as,match_rest,array_pattern,match_with_trailing_comma,array_pattern_with_tail,hash_pattern,const_pattern,if_guard,unless_guard,match_nil_pattern,empty_else,find_pattern,kwargs,match_pattern_p,match_pattern,forwarded_restarg,forwarded_kwrestarg").$to_set().$freeze()) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/buffer"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $regexp = Opal.regexp, $enc = Opal.enc, $truthy = Opal.truthy, $gvars = Opal.gvars, $eqeq = Opal.eqeq, $neqeq = Opal.neqeq, $defs = Opal.defs, $slice = Opal.slice, $extract_kwargs = Opal.extract_kwargs, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $send = Opal.send, $def = Opal.def, $not = Opal.not, $rb_plus = Opal.rb_plus, $rb_minus = Opal.rb_minus, $rb_ge = Opal.rb_ge, $rb_lt = Opal.rb_lt, $send2 = Opal.send2, $find_super = Opal.find_super, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_reader,empty?,=~,start_with?,freeze,==,[],!=,nil?,match,find,raise,message,encoding,recognize_encoding,force_encoding,encode,to_s,source=,open,read,frozen?,dup,reencode_string,class,valid_encoding?,name,raw_source=,gsub,!,ascii_only?,is_a?,size,begin,line_index_for_position,line_begins,+,-,to_a,lines,end_with?,<<,each,chomp!,fetch,source_lines,>=,<,new,source,source_range,private,index,bsearch,[]=,method_defined?,bsearch_index'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Buffer'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.name = $proto.source = $proto.slice_source = $proto.first_line = $proto.lines = $proto.source_range = $proto.line_begins = $proto.line_index_for_position = $proto.line_range = nil; self.$attr_reader("name", "first_line"); $const_set($nesting[0], 'ENCODING_RE', $regexp([$enc("[\\s#](en)?coding\\s*[:=]\\s*", "ASCII-8BIT"), $enc("(", "ASCII-8BIT"), $enc("", "ASCII-8BIT"), $enc("(utf8-mac)", "ASCII-8BIT"), $enc("|", "ASCII-8BIT"), $enc("", "ASCII-8BIT"), $enc("([A-Za-z0-9_-]+?)(-unix|-dos|-mac)", "ASCII-8BIT"), $enc("|", "ASCII-8BIT"), $enc("([A-Za-z0-9_-]+)", "ASCII-8BIT"), $enc(")", "ASCII-8BIT"), $enc("", "ASCII-8BIT")])); $defs(self, '$recognize_encoding', function $$recognize_encoding(string) { var $a, $b, self = this, first_line = nil, second_line = nil, encoding_line = nil, result = nil, $ret_or_1 = nil, $ret_or_2 = nil, e = nil; if ($truthy(string['$empty?']())) { return nil }; string['$=~'](/^(.*)\n?(.*\n)?/); $a = [(($b = $gvars['~']) === nil ? nil : $b['$[]'](1)), (($b = $gvars['~']) === nil ? nil : $b['$[]'](2))], (first_line = $a[0]), (second_line = $a[1]), $a; if ($truthy(first_line['$start_with?']($enc("\xEF\xBB\xBF", "ASCII-8BIT").$freeze()))) { return $$$($$('Encoding'), 'UTF_8') } else if ($eqeq(first_line['$[]'](0, 2), $enc("#!", "ASCII-8BIT").$freeze())) { encoding_line = second_line } else { encoding_line = first_line }; if (($truthy(encoding_line['$nil?']()) || ($neqeq(encoding_line['$[]'](0), $enc("#", "ASCII-8BIT"))))) { return nil }; if ($truthy((result = $$('ENCODING_RE').$match(encoding_line)))) { try { return $$('Encoding').$find(($truthy(($ret_or_1 = ($truthy(($ret_or_2 = result['$[]'](3))) ? ($ret_or_2) : (result['$[]'](4))))) ? ($ret_or_1) : (result['$[]'](6)))) } catch ($err) { if (Opal.rescue($err, [$$('ArgumentError')])) {(e = $err) try { return self.$raise($$$($$('Parser'), 'UnknownEncodingInMagicComment'), e.$message()) } finally { Opal.pop_exception($err); } } else { throw $err; } }; } else { return nil }; }); $defs(self, '$reencode_string', function $$reencode_string(input) { var self = this, original_encoding = nil, detected_encoding = nil; original_encoding = input.$encoding(); detected_encoding = self.$recognize_encoding(input.$force_encoding($$$($$('Encoding'), 'BINARY'))); if ($truthy(detected_encoding['$nil?']())) { return input.$force_encoding(original_encoding) } else if ($eqeq(detected_encoding, $$$($$('Encoding'), 'BINARY'))) { return input } else { return input.$force_encoding(detected_encoding).$encode($$$($$('Encoding'), 'UTF_8')) }; }); $def(self, '$initialize', function $$initialize(name, $a, $b) { var $post_args, $kwargs, first_line, source, $c, self = this; $post_args = $slice(arguments, 1); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); if ($post_args.length > 0) first_line = $post_args.shift();if (first_line == null) first_line = 1; source = $hash_get($kwargs, "source");if (source == null) source = nil; self.name = name.$to_s(); self.source = nil; self.first_line = first_line; self.lines = nil; self.line_begins = nil; self.slice_source = nil; self.line_index_for_position = (new Map()); if ($truthy(source)) { return ($c = [source], $send(self, 'source=', $c), $c[$c.length - 1]) } else { return nil }; }, -2); $def(self, '$read', function $$read() { var self = this; $send($$('File'), 'open', [self.name, $enc("rb", "ASCII-8BIT")], function $$1(io){var $a, self = $$1.$$s == null ? this : $$1.$$s; if (io == null) io = nil; return ($a = [io.$read()], $send(self, 'source=', $a), $a[$a.length - 1]);}, {$$s: self}); return self; }); $def(self, '$source', function $$source() { var self = this; if ($truthy(self.source['$nil?']())) { self.$raise($$('RuntimeError'), $enc("Cannot extract source from uninitialized Source::Buffer", "ASCII-8BIT")) }; return self.source; }); $def(self, '$source=', function $Buffer_source$eq$2(input) { var $a, self = this; if ($truthy(input['$frozen?']())) { input = input.$dup() }; input = self.$class().$reencode_string(input); if (!$truthy(input['$valid_encoding?']())) { self.$raise($$('EncodingError'), $enc("invalid byte sequence in ", "ASCII-8BIT") + (input.$encoding().$name())) }; return ($a = [input], $send(self, 'raw_source=', $a), $a[$a.length - 1]); }); $def(self, '$raw_source=', function $Buffer_raw_source$eq$3(input) { var self = this; if ($truthy(self.source)) { self.$raise($$('ArgumentError'), $enc("Source::Buffer is immutable", "ASCII-8BIT")) }; self.source = input.$gsub($enc("\r\n", "ASCII-8BIT").$freeze(), $enc("\n", "ASCII-8BIT").$freeze()).$freeze(); if ((($not(self.source['$ascii_only?']()) && ($neqeq(self.source.$encoding(), $$$($$('Encoding'), 'UTF_32LE')))) && ($neqeq(self.source.$encoding(), $$$($$('Encoding'), 'BINARY'))))) { return (self.slice_source = self.source.$encode($$$($$('Encoding'), 'UTF_32LE'))) } else { return nil }; }); $def(self, '$slice', function $$slice(start, length) { var self = this; if (length == null) length = nil; if ($truthy(length['$nil?']())) { if ($truthy(start['$is_a?']($$$('Range')))) { length = start.$size(); start = start.$begin(); } else { length = 1 } }; if ($truthy(self.slice_source['$nil?']())) { return self.source['$[]'](start, length) } else { return self.slice_source['$[]'](start, length).$encode(self.source.$encoding()) }; }, -2); $def(self, '$decompose_position', function $$decompose_position(position) { var self = this, line_index = nil, line_begin = nil; line_index = self.$line_index_for_position(position); line_begin = self.$line_begins()['$[]'](line_index); return [$rb_plus(self.first_line, line_index), $rb_minus(position, line_begin)]; }); $def(self, '$line_for_position', function $$line_for_position(position) { var self = this; return $rb_plus(self.$line_index_for_position(position), self.first_line) }); $def(self, '$column_for_position', function $$column_for_position(position) { var self = this, line_index = nil; line_index = self.$line_index_for_position(position); return $rb_minus(position, self.$line_begins()['$[]'](line_index)); }); $def(self, '$source_lines', function $$source_lines() { var self = this, $ret_or_1 = nil, lines = nil; return (self.lines = ($truthy(($ret_or_1 = self.lines)) ? ($ret_or_1) : (((lines = self.source.$lines().$to_a()), ($truthy(self.source['$end_with?']($enc("\n", "ASCII-8BIT").$freeze())) ? (lines['$<<']($enc("", "ASCII-8BIT").$dup())) : nil), $send(lines, 'each', [], function $$4(line){ if (line == null) line = nil; line['$chomp!']($enc("\n", "ASCII-8BIT").$freeze()); return line.$freeze();}), lines.$freeze())))) }); $def(self, '$source_line', function $$source_line(lineno) { var self = this; return self.$source_lines().$fetch($rb_minus(lineno, self.first_line)).$dup() }); $def(self, '$line_range', function $$line_range(lineno) { var self = this, index = nil; index = $rb_minus(lineno, self.first_line); if (($truthy($rb_lt(index, 0)) || ($truthy($rb_ge($rb_plus(index, 1), self.$line_begins().$size()))))) { return self.$raise($$('IndexError'), $enc("Parser::Source::Buffer: range for line ", "ASCII-8BIT") + ("" + (lineno) + $enc(" requested, valid line numbers are ", "ASCII-8BIT") + (self.first_line) + $enc("..", "ASCII-8BIT")) + ("" + ($rb_minus($rb_plus(self.first_line, self.$line_begins().$size()), 2)))) } else { return $$('Range').$new(self, self.$line_begins()['$[]'](index), $rb_minus(self.$line_begins()['$[]']($rb_plus(index, 1)), 1)) }; }); $def(self, '$source_range', function $$source_range() { var self = this, $ret_or_1 = nil; return (self.source_range = ($truthy(($ret_or_1 = self.source_range)) ? ($ret_or_1) : ($$('Range').$new(self, 0, self.$source().$size())))) }); $def(self, '$last_line', function $$last_line() { var self = this; return $rb_minus($rb_plus(self.$line_begins().$size(), self.first_line), 2) }); $def(self, '$freeze', function $$freeze() { var $yield = $$freeze.$$p || nil, self = this; $$freeze.$$p = null; self.$source_lines(); self.$line_begins(); self.$source_range(); return $send2(self, $find_super(self, 'freeze', $$freeze, false, true), 'freeze', [], $yield); }); $def(self, '$inspect', function $$inspect() { var self = this; return $enc("#<", "ASCII-8BIT") + (self.$class()) + $enc(" ", "ASCII-8BIT") + (self.$name()) + $enc(">", "ASCII-8BIT") }); self.$private(); $def(self, '$line_begins', function $$line_begins() { var self = this, $ret_or_1 = nil, begins = nil, index = nil; return (self.line_begins = ($truthy(($ret_or_1 = self.line_begins)) ? ($ret_or_1) : ((function() { (begins = [0]); (index = 0); (function() {while ($truthy((index = self.source.$index($enc("\n", "ASCII-8BIT").$freeze(), index)))) { index = $rb_plus(index, 1); begins['$<<'](index); }; return nil; })(); begins['$<<']($rb_plus(self.source.$size(), 1)); return begins;})()))) }); $def(self, '$line_index_for_position', function $$line_index_for_position(position) { var self = this, $ret_or_1 = nil, index = nil; if ($truthy(($ret_or_1 = self.line_index_for_position['$[]'](position)))) { return $ret_or_1 } else { index = $rb_minus(self.$bsearch(self.$line_begins(), position), 1); if (!$truthy(self.line_index_for_position['$frozen?']())) { self.line_index_for_position['$[]='](position, index) }; return index; } }); if ($truthy($$('Array')['$method_defined?']("bsearch_index"))) { return $def(self, '$bsearch', function $$bsearch(line_begins, position) { var $ret_or_1 = nil; if ($truthy(($ret_or_1 = $send(line_begins, 'bsearch_index', [], function $$5(line_begin){ if (line_begin == null) line_begin = nil; return $rb_lt(position, line_begin);})))) { return $ret_or_1 } else { return $rb_minus(line_begins.$size(), 1) } }) } else { return $def(self, '$bsearch', function $$bsearch(line_begins, position) { var self = this, $ret_or_1 = nil; self.line_range = ($truthy(($ret_or_1 = self.line_range)) ? ($ret_or_1) : (Opal.Range.$new(0,line_begins.$size(), true))); if ($truthy(($ret_or_1 = $send(self.line_range, 'bsearch', [], function $$6(i){ if (i == null) i = nil; return $rb_lt(position, line_begins['$[]'](i));})))) { return $ret_or_1 } else { return $rb_minus(line_begins.$size(), 1) }; }) }; })($nesting[0], null, $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/range"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $rb_lt = Opal.rb_lt, $def = Opal.def, $rb_minus = Opal.rb_minus, $alias = Opal.alias, $neqeq = Opal.neqeq, $slice = Opal.slice, $to_ary = Opal.to_ary, $rb_plus = Opal.rb_plus, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $rb_ge = Opal.rb_ge, $rb_times = Opal.rb_times, $eqeq = Opal.eqeq, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('include,attr_reader,<,raise,nil?,freeze,with,-,size,line_for_position,alias_method,column_for_position,!=,line,last_line,inspect,column,last_column,source_line,slice,include?,source,to_a,begin_pos,end_pos,decompose_position,join,name,+,new,min,max,disjoint?,empty?,>=,!,<=>,contains?,overlaps?,==,*,source_buffer,is_a?,nonzero?,hash'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Range'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.begin_pos = $proto.end_pos = $proto.source_buffer = nil; self.$include($$('Comparable')); self.$attr_reader("source_buffer"); self.$attr_reader("begin_pos", "end_pos"); $def(self, '$initialize', function $$initialize(source_buffer, begin_pos, end_pos) { var $a, self = this; if ($truthy($rb_lt(end_pos, begin_pos))) { self.$raise($$('ArgumentError'), "Parser::Source::Range: end_pos must not be less than begin_pos") }; if ($truthy(source_buffer['$nil?']())) { self.$raise($$('ArgumentError'), "Parser::Source::Range: source_buffer must not be nil") }; self.source_buffer = source_buffer; $a = [begin_pos, end_pos], (self.begin_pos = $a[0]), (self.end_pos = $a[1]), $a; return self.$freeze(); }); $def(self, '$begin', function $$begin() { var self = this; return self.$with((new Map([["end_pos", self.begin_pos]]))) }); $def(self, '$end', function $$end() { var self = this; return self.$with((new Map([["begin_pos", self.end_pos]]))) }); $def(self, '$size', function $$size() { var self = this; return $rb_minus(self.end_pos, self.begin_pos) }); $alias(self, "length", "size"); $def(self, '$line', function $$line() { var self = this; return self.source_buffer.$line_for_position(self.begin_pos) }); self.$alias_method("first_line", "line"); $def(self, '$column', function $$column() { var self = this; return self.source_buffer.$column_for_position(self.begin_pos) }); $def(self, '$last_line', function $$last_line() { var self = this; return self.source_buffer.$line_for_position(self.end_pos) }); $def(self, '$last_column', function $$last_column() { var self = this; return self.source_buffer.$column_for_position(self.end_pos) }); $def(self, '$column_range', function $$column_range() { var self = this; if ($neqeq(self.$line(), self.$last_line())) { self.$raise($$('RangeError'), "" + (self.$inspect()) + " spans more than one line") }; return Opal.Range.$new(self.$column(),self.$last_column(), true); }); $def(self, '$source_line', function $$source_line() { var self = this; return self.source_buffer.$source_line(self.$line()) }); $def(self, '$source', function $$source() { var self = this; return self.source_buffer.$slice(self.begin_pos, $rb_minus(self.end_pos, self.begin_pos)) }); $def(self, '$is?', function $Range_is$ques$1($a) { var $post_args, what, self = this; $post_args = $slice(arguments); what = $post_args; return what['$include?'](self.$source()); }, -1); $def(self, '$to_a', function $$to_a() { var self = this; return Opal.Range.$new(self.begin_pos,self.end_pos, true).$to_a() }); $def(self, '$to_range', function $$to_range() { var self = this; return Opal.Range.$new(self.$begin_pos(),self.$end_pos(), true) }); $def(self, '$to_s', function $$to_s() { var $a, $b, self = this, line = nil, column = nil; $b = self.source_buffer.$decompose_position(self.begin_pos), $a = $to_ary($b), (line = ($a[0] == null ? nil : $a[0])), (column = ($a[1] == null ? nil : $a[1])), $b; return [self.source_buffer.$name(), line, $rb_plus(column, 1)].$join(":"); }); $def(self, '$with', function $Range_with$2($kwargs) { var begin_pos, end_pos, self = this; $kwargs = $ensure_kwargs($kwargs); begin_pos = $hash_get($kwargs, "begin_pos");if (begin_pos == null) begin_pos = self.begin_pos; end_pos = $hash_get($kwargs, "end_pos");if (end_pos == null) end_pos = self.end_pos; return $$('Range').$new(self.source_buffer, begin_pos, end_pos); }, -1); $def(self, '$adjust', function $$adjust($kwargs) { var begin_pos, end_pos, self = this; $kwargs = $ensure_kwargs($kwargs); begin_pos = $hash_get($kwargs, "begin_pos");if (begin_pos == null) begin_pos = 0; end_pos = $hash_get($kwargs, "end_pos");if (end_pos == null) end_pos = 0; return $$('Range').$new(self.source_buffer, $rb_plus(self.begin_pos, begin_pos), $rb_plus(self.end_pos, end_pos)); }, -1); $def(self, '$resize', function $$resize(new_size) { var self = this; return self.$with((new Map([["end_pos", $rb_plus(self.begin_pos, new_size)]]))) }); $def(self, '$join', function $$join(other) { var self = this; return $$('Range').$new(self.source_buffer, [self.begin_pos, other.$begin_pos()].$min(), [self.end_pos, other.$end_pos()].$max()) }); $def(self, '$intersect', function $$intersect(other) { var self = this; if ($truthy(self['$disjoint?'](other))) { return nil } else { return $$('Range').$new(self.source_buffer, [self.begin_pos, other.$begin_pos()].$max(), [self.end_pos, other.$end_pos()].$min()) } }); $def(self, '$disjoint?', function $Range_disjoint$ques$3(other) { var self = this, $ret_or_1 = nil; if (($truthy(self['$empty?']()) && ($truthy(other['$empty?']())))) { return self.begin_pos['$!='](other.$begin_pos()) } else if ($truthy(($ret_or_1 = $rb_ge(self.begin_pos, other.$end_pos())))) { return $ret_or_1 } else { return $rb_ge(other.$begin_pos(), self.end_pos) } }); $def(self, '$overlaps?', function $Range_overlaps$ques$4(other) { var self = this; return self['$disjoint?'](other)['$!']() }); $def(self, '$contains?', function $Range_contains$ques$5(other) { var self = this; return $rb_ge($rb_plus(other.$begin_pos()['$<=>'](self.begin_pos), self.end_pos['$<=>'](other.$end_pos())), ($truthy(other['$empty?']()) ? (2) : (1))) }); $def(self, '$contained?', function $Range_contained$ques$6(other) { var self = this; return other['$contains?'](self) }); $def(self, '$crossing?', function $Range_crossing$ques$7(other) { var self = this; if (!$truthy(self['$overlaps?'](other))) { return false }; return $rb_times(self.begin_pos['$<=>'](other.$begin_pos()), self.end_pos['$<=>'](other.$end_pos()))['$=='](1); }); $def(self, '$empty?', function $Range_empty$ques$8() { var self = this; return self.begin_pos['$=='](self.end_pos) }); $def(self, '$<=>', function $Range_$lt_eq_gt$9(other) { var self = this, $ret_or_1 = nil; if (!($truthy(other['$is_a?']($$$($$$($$$('Parser'), 'Source'), 'Range'))) && ($eqeq(self.source_buffer, other.$source_buffer())))) { return nil }; if ($truthy(($ret_or_1 = self.begin_pos['$<=>'](other.$begin_pos())['$nonzero?']()))) { return $ret_or_1 } else { return self.end_pos['$<=>'](other.$end_pos()); }; }); self.$alias_method("eql?", "=="); $def(self, '$hash', function $$hash() { var self = this; return [self.source_buffer, self.begin_pos, self.end_pos].$hash() }); return $def(self, '$inspect', function $$inspect() { var self = this; return "#" }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/comment"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $defs = Opal.defs, $def = Opal.def, $truthy = Opal.truthy, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_reader,alias_method,new,associate,associate_locations,associate_by_identity,freeze,source,start_with?,text,==,type,is_a?,location,to_s,expression,inspect'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Comment'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.location = nil; self.$attr_reader("text"); self.$attr_reader("location"); self.$alias_method("loc", "location"); $defs(self, '$associate', function $$associate(ast, comments) { var associator = nil; associator = $$('Associator').$new(ast, comments); return associator.$associate(); }); $defs(self, '$associate_locations', function $$associate_locations(ast, comments) { var associator = nil; associator = $$('Associator').$new(ast, comments); return associator.$associate_locations(); }); $defs(self, '$associate_by_identity', function $$associate_by_identity(ast, comments) { var associator = nil; associator = $$('Associator').$new(ast, comments); return associator.$associate_by_identity(); }); $def(self, '$initialize', function $$initialize(range) { var self = this; self.location = $$$($$$($$('Parser'), 'Source'), 'Map').$new(range); self.text = range.$source().$freeze(); return self.$freeze(); }); $def(self, '$type', function $$type() { var self = this; if ($truthy(self.$text()['$start_with?']("#".$freeze()))) { return "inline" } else if ($truthy(self.$text()['$start_with?']("=begin".$freeze()))) { return "document" } else { return nil } }); $def(self, '$inline?', function $Comment_inline$ques$1() { var self = this; return self.$type()['$==']("inline") }); $def(self, '$document?', function $Comment_document$ques$2() { var self = this; return self.$type()['$==']("document") }); $def(self, '$==', function $Comment_$eq_eq$3(other) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = other['$is_a?']($$$($$('Source'), 'Comment'))))) { return self.location['$=='](other.$location()) } else { return $ret_or_1 } }); return $def(self, '$inspect', function $$inspect() { var self = this; return "#" }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/comment/associator"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $const_set = Opal.const_set, $truthy = Opal.truthy, $send = Opal.send, $eqeq = Opal.eqeq, $rb_le = Opal.rb_le, $rb_plus = Opal.rb_plus, $not = Opal.not, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_accessor,do_associate,private,freeze,[],include?,type,sort_by,compact,children,begin_pos,expression,loc,select,is_a?,new,[]=,==,compare_by_identity,advance_comment,advance_through_directives,visit,process_leading_comments,location,<=,line,last_line,each,children_in_source_order,process_trailing_comments,current_comment_before?,associate_and_advance_comment,current_comment_before_end?,current_comment_decorates?,+,!,end_pos,<<,start_with?,text,=~'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Associator'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.map_using = $proto.mapping = $proto.skip_directives = $proto.ast = $proto.current_comment = $proto.comment_num = $proto.comments = nil; self.$attr_accessor("skip_directives"); $def(self, '$initialize', function $$initialize(ast, comments) { var self = this; self.ast = ast; self.comments = comments; return (self.skip_directives = true); }); $def(self, '$associate', function $$associate() { var self = this; self.map_using = "eql"; return self.$do_associate(); }); $def(self, '$associate_locations', function $$associate_locations() { var self = this; self.map_using = "location"; return self.$do_associate(); }); $def(self, '$associate_by_identity', function $$associate_by_identity() { var self = this; self.map_using = "identity"; return self.$do_associate(); }); self.$private(); $const_set($nesting[0], 'POSTFIX_TYPES', $$('Set')['$[]']("if", "while", "while_post", "until", "until_post", "masgn").$freeze()); $def(self, '$children_in_source_order', function $$children_in_source_order(node) { if ($truthy($$('POSTFIX_TYPES')['$include?'](node.$type()))) { return $send(node.$children().$compact(), 'sort_by', [], function $$1(child){ if (child == null) child = nil; return child.$loc().$expression().$begin_pos();}) } else { return $send(node.$children(), 'select', [], function $$2(child){var $ret_or_1 = nil, $ret_or_2 = nil; if (child == null) child = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = child['$is_a?']($$$($$('AST'), 'Node')))) ? (child.$loc()) : ($ret_or_2))))) { return child.$loc().$expression() } else { return $ret_or_1 };}) } }); $def(self, '$do_associate', function $$do_associate() { var self = this; self.mapping = $send($$('Hash'), 'new', [], function $$3(h, k){var $a; if (h == null) h = nil; if (k == null) k = nil; return ($a = [k, []], $send(h, '[]=', $a), $a[$a.length - 1]);}); if ($eqeq(self.map_using, "identity")) { self.mapping.$compare_by_identity() }; self.comment_num = -1; self.$advance_comment(); if ($truthy(self.skip_directives)) { self.$advance_through_directives() }; if ($truthy(self.ast)) { self.$visit(self.ast) }; return self.mapping; }); $def(self, '$visit', function $$visit(node) { var self = this, node_loc = nil; self.$process_leading_comments(node); if (!$truthy(self.current_comment)) { return nil }; node_loc = node.$location(); if (($truthy($rb_le(self.current_comment.$location().$line(), node_loc.$last_line())) || ($truthy(node_loc['$is_a?']($$$($$('Map'), 'Heredoc')))))) { $send(self.$children_in_source_order(node), 'each', [], function $$4(child){var self = $$4.$$s == null ? this : $$4.$$s; if (child == null) child = nil; return self.$visit(child);}, {$$s: self}); return self.$process_trailing_comments(node); } else { return nil }; }); $def(self, '$process_leading_comments', function $$process_leading_comments(node) { var self = this; if ($eqeq(node.$type(), "begin")) { return nil }; while ($truthy(self['$current_comment_before?'](node))) { self.$associate_and_advance_comment(node) }; }); $def(self, '$process_trailing_comments', function $$process_trailing_comments(node) { var self = this; while ($truthy(self['$current_comment_before_end?'](node))) { self.$associate_and_advance_comment(node) }; while ($truthy(self['$current_comment_decorates?'](node))) { self.$associate_and_advance_comment(node) }; }); $def(self, '$advance_comment', function $$advance_comment() { var self = this; self.comment_num = $rb_plus(self.comment_num, 1); return (self.current_comment = self.comments['$[]'](self.comment_num)); }); $def(self, '$current_comment_before?', function $Associator_current_comment_before$ques$5(node) { var self = this, comment_loc = nil, node_loc = nil; if ($not(self.current_comment)) { return false }; comment_loc = self.current_comment.$location().$expression(); node_loc = node.$location().$expression(); return $rb_le(comment_loc.$end_pos(), node_loc.$begin_pos()); }); $def(self, '$current_comment_before_end?', function $Associator_current_comment_before_end$ques$6(node) { var self = this, comment_loc = nil, node_loc = nil; if ($not(self.current_comment)) { return false }; comment_loc = self.current_comment.$location().$expression(); node_loc = node.$location().$expression(); return $rb_le(comment_loc.$end_pos(), node_loc.$end_pos()); }); $def(self, '$current_comment_decorates?', function $Associator_current_comment_decorates$ques$7(node) { var self = this; if ($not(self.current_comment)) { return false }; return self.current_comment.$location().$line()['$=='](node.$location().$last_line()); }); $def(self, '$associate_and_advance_comment', function $$associate_and_advance_comment(node) { var self = this, key = nil; key = ($eqeq(self.map_using, "location") ? (node.$location()) : (node)); self.mapping['$[]'](key)['$<<'](self.current_comment); return self.$advance_comment(); }); $const_set($nesting[0], 'MAGIC_COMMENT_RE', /^#\s*(-\*-|)\s*(frozen_string_literal|warn_indent|warn_past_scope):.*\1$/); return $def(self, '$advance_through_directives', function $$advance_through_directives() { var self = this; if (($truthy(self.current_comment) && ($truthy(self.current_comment.$text()['$start_with?']("#!".$freeze()))))) { self.$advance_comment() }; if (($truthy(self.current_comment) && ($truthy(self.current_comment.$text()['$=~']($$('MAGIC_COMMENT_RE')))))) { self.$advance_comment() }; if (($truthy(self.current_comment) && ($truthy(self.current_comment.$text()['$=~']($$$($$('Buffer'), 'ENCODING_RE')))))) { return self.$advance_comment() } else { return nil }; }); })($$('Comment'), null, $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/rewriter"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send = Opal.send, $gvars = Opal.gvars, $def = Opal.def, $rb_minus = Opal.rb_minus, $rb_plus = Opal.rb_plus, $truthy = Opal.truthy, $not = Opal.not, $neqeq = Opal.neqeq, $rb_le = Opal.rb_le, $rb_ge = Opal.rb_ge, $rb_lt = Opal.rb_lt, $const_set = Opal.const_set, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_reader,warn_of_deprecation,class,new,consumer=,lambda,puts,render,append,freeze,begin,end,-,+,in_transaction?,raise,dup,source,each,sort,begin_pos,range,length,[]=,replacement,private,empty?,clobbered_insertion?,!,allow_multiple_insertions?,raise_clobber_error,record_insertion,adjacent_updates?,find,overlaps?,replace_compatible_with_insertion?,merge_actions!,<<,active_queue,adjacent_insertions?,merge_actions,delete,can_merge?,record_replace,active_insertions=,|,active_insertions,active_clobber=,active_clobber,clobbered_position_mask,size,!=,&,<=,end_pos,adjacent_insertion_mask,select,adjacent?,adjacent_position_mask,>=,==,[],all?,intersect,nil?,max,sort_by,push,join,first,max_by,merge_replacements,replace_actions,disjoint?,<,process,extend'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Rewriter'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.diagnostics = $proto.insert_before_multi_order = $proto.insert_after_multi_order = $proto.source_buffer = $proto.queue = $proto.clobber = $proto.insertions = $proto.pending_queue = $proto.pending_clobber = $proto.pending_insertions = nil; self.$attr_reader("source_buffer"); self.$attr_reader("diagnostics"); $def(self, '$initialize', function $$initialize(source_buffer) { var self = this; self.$class().$warn_of_deprecation(); self.diagnostics = $$$($$('Diagnostic'), 'Engine').$new(); self.diagnostics['$consumer=']($send(self, 'lambda', [], function $$1(diag){ if ($gvars.stderr == null) $gvars.stderr = nil; if (diag == null) diag = nil; return $gvars.stderr.$puts(diag.$render());})); self.source_buffer = source_buffer; self.queue = []; self.clobber = 0; self.insertions = 0; self.insert_before_multi_order = 0; self.insert_after_multi_order = 0; self.pending_queue = nil; self.pending_clobber = nil; return (self.pending_insertions = nil); }); $def(self, '$remove', function $$remove(range) { var self = this; return self.$append($$$($$('Rewriter'), 'Action').$new(range, "".$freeze())) }); $def(self, '$insert_before', function $$insert_before(range, content) { var self = this; return self.$append($$$($$('Rewriter'), 'Action').$new(range.$begin(), content)) }); $def(self, '$wrap', function $$wrap(range, before, after) { var self = this; self.$append($$$($$('Rewriter'), 'Action').$new(range.$begin(), before)); return self.$append($$$($$('Rewriter'), 'Action').$new(range.$end(), after)); }); $def(self, '$insert_before_multi', function $$insert_before_multi(range, content) { var self = this; self.insert_before_multi_order = $rb_minus(self.insert_before_multi_order, 1); return self.$append($$$($$('Rewriter'), 'Action').$new(range.$begin(), content, true, self.insert_before_multi_order)); }); $def(self, '$insert_after', function $$insert_after(range, content) { var self = this; return self.$append($$$($$('Rewriter'), 'Action').$new(range.$end(), content)) }); $def(self, '$insert_after_multi', function $$insert_after_multi(range, content) { var self = this; self.insert_after_multi_order = $rb_plus(self.insert_after_multi_order, 1); return self.$append($$$($$('Rewriter'), 'Action').$new(range.$end(), content, true, self.insert_after_multi_order)); }); $def(self, '$replace', function $$replace(range, content) { var self = this; return self.$append($$$($$('Rewriter'), 'Action').$new(range, content)) }); $def(self, '$process', function $$process() { var self = this, adjustment = nil, source = nil; if ($truthy(self['$in_transaction?']())) { self.$raise("Do not call " + (self.$class()) + "#" + ("process") + " inside a transaction") }; adjustment = 0; source = self.source_buffer.$source().$dup(); $send(self.queue.$sort(), 'each', [], function $$2(action){var begin_pos = nil, end_pos = nil; if (action == null) action = nil; begin_pos = $rb_plus(action.$range().$begin_pos(), adjustment); end_pos = $rb_plus(begin_pos, action.$range().$length()); source['$[]='](Opal.Range.$new(begin_pos,end_pos, true), action.$replacement()); return (adjustment = $rb_plus(adjustment, $rb_minus(action.$replacement().$length(), action.$range().$length())));}); return source; }); $def(self, '$transaction', function $$transaction() { var $yield = $$transaction.$$p || nil, self = this; $$transaction.$$p = null; return (function() { try { if (!($yield !== nil)) { self.$raise("" + (self.$class()) + "#" + ("transaction") + " requires block") }; if ($truthy(self['$in_transaction?']())) { self.$raise("Nested transaction is not supported") }; self.pending_queue = self.queue.$dup(); self.pending_clobber = self.clobber; self.pending_insertions = self.insertions; Opal.yieldX($yield, []); self.queue = self.pending_queue; self.clobber = self.pending_clobber; self.insertions = self.pending_insertions; return self; } finally { ((self.pending_queue = nil), (self.pending_clobber = nil), (self.pending_insertions = nil)) }; })() }); self.$private(); $def(self, '$append', function $$append(action) { var self = this, range = nil, conflicting = nil, adjacent = nil, insertions = nil; range = action.$range(); if ($truthy(range['$empty?']())) { if ($truthy(action.$replacement()['$empty?']())) { return self }; if (($not(action['$allow_multiple_insertions?']()) && ($truthy((conflicting = self['$clobbered_insertion?'](range)))))) { self.$raise_clobber_error(action, [conflicting]) }; self.$record_insertion(range); if ($truthy((adjacent = self['$adjacent_updates?'](range)))) { conflicting = $send(adjacent, 'find', [], function $$3(a){var self = $$3.$$s == null ? this : $$3.$$s, $ret_or_1 = nil; if (a == null) a = nil; if ($truthy(($ret_or_1 = a.$range()['$overlaps?'](range)))) { return self['$replace_compatible_with_insertion?'](a, action)['$!']() } else { return $ret_or_1 };}, {$$s: self}); if ($truthy(conflicting)) { self.$raise_clobber_error(action, [conflicting]) }; self['$merge_actions!'](action, adjacent); } else { self.$active_queue()['$<<'](action) }; } else { if ($truthy((insertions = self['$adjacent_insertions?'](range)))) { $send(insertions, 'each', [], function $$4(insertion){var self = $$4.$$s == null ? this : $$4.$$s; if (insertion == null) insertion = nil; if (($truthy(range['$overlaps?'](insertion.$range())) && ($not(self['$replace_compatible_with_insertion?'](action, insertion))))) { return self.$raise_clobber_error(action, [insertion]) } else { action = self.$merge_actions(action, [insertion]); return self.$active_queue().$delete(insertion); };}, {$$s: self}) }; if ($truthy((adjacent = self['$adjacent_updates?'](range)))) { if ($truthy(self['$can_merge?'](action, adjacent))) { self.$record_replace(range); self['$merge_actions!'](action, adjacent); } else { self.$raise_clobber_error(action, adjacent) } } else { self.$record_replace(range); self.$active_queue()['$<<'](action); }; }; return self; }); $def(self, '$record_insertion', function $$record_insertion(range) { var $a, self = this; return ($a = [self.$active_insertions()['$|']((1)['$<<'](range.$begin_pos()))], $send(self, 'active_insertions=', $a), $a[$a.length - 1]) }); $def(self, '$record_replace', function $$record_replace(range) { var $a, self = this; return ($a = [self.$active_clobber()['$|'](self.$clobbered_position_mask(range))], $send(self, 'active_clobber=', $a), $a[$a.length - 1]) }); $def(self, '$clobbered_position_mask', function $$clobbered_position_mask(range) { return $rb_minus((1)['$<<'](range.$size()), 1)['$<<'](range.$begin_pos()) }); $def(self, '$adjacent_position_mask', function $$adjacent_position_mask(range) { return $rb_minus((1)['$<<']($rb_plus(range.$size(), 2)), 1)['$<<']($rb_minus(range.$begin_pos(), 1)) }); $def(self, '$adjacent_insertion_mask', function $$adjacent_insertion_mask(range) { return $rb_minus((1)['$<<']($rb_plus(range.$size(), 1)), 1)['$<<'](range.$begin_pos()) }); $def(self, '$clobbered_insertion?', function $Rewriter_clobbered_insertion$ques$5(insertion) { var self = this, insertion_pos = nil; insertion_pos = insertion.$begin_pos(); if ($neqeq(self.$active_insertions()['$&']((1)['$<<'](insertion_pos)), 0)) { return $send(self.$active_queue(), 'find', [], function $$6(a){var $ret_or_1 = nil; if (a == null) a = nil; if ($truthy(($ret_or_1 = $rb_le(a.$range().$begin_pos(), insertion_pos)))) { return $rb_le(insertion_pos, a.$range().$end_pos()) } else { return $ret_or_1 };}) } else { return nil }; }); $def(self, '$adjacent_insertions?', function $Rewriter_adjacent_insertions$ques$7(range) { var self = this, result = nil; if ($neqeq(self.$active_insertions()['$&'](self.$adjacent_insertion_mask(range)), 0)) { result = $send(self.$active_queue(), 'select', [], function $$8(a){var self = $$8.$$s == null ? this : $$8.$$s, $ret_or_1 = nil; if (a == null) a = nil; if ($truthy(($ret_or_1 = a.$range()['$empty?']()))) { return self['$adjacent?'](range, a.$range()) } else { return $ret_or_1 };}, {$$s: self}); if ($truthy(result['$empty?']())) { return nil } else { return result }; } else { return nil } }); $def(self, '$adjacent_updates?', function $Rewriter_adjacent_updates$ques$9(range) { var self = this; if ($neqeq(self.$active_clobber()['$&'](self.$adjacent_position_mask(range)), 0)) { return $send(self.$active_queue(), 'select', [], function $$10(a){var self = $$10.$$s == null ? this : $$10.$$s; if (a == null) a = nil; return self['$adjacent?'](range, a.$range());}, {$$s: self}) } else { return nil } }); $def(self, '$replace_compatible_with_insertion?', function $Rewriter_replace_compatible_with_insertion$ques$11(replace, insertion) { var $ret_or_1 = nil, $ret_or_2 = nil, offset = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = $rb_ge($rb_minus(replace.$replacement().$length(), replace.$range().$size()), insertion.$range().$size()))) ? ((offset = $rb_minus(insertion.$range().$begin_pos(), replace.$range().$begin_pos()))) : ($ret_or_2))))) { return replace.$replacement()['$[]'](offset, insertion.$replacement().$length())['$=='](insertion.$replacement()) } else { return $ret_or_1 } }); $def(self, '$can_merge?', function $Rewriter_can_merge$ques$12(action, existing) { var range = nil; range = action.$range(); return $send(existing, 'all?', [], function $$13(other){var overlap = nil, repl1_offset = nil, repl2_offset = nil, repl1_length = nil, repl2_length = nil, replacement1 = nil, $ret_or_1 = nil, replacement2 = nil; if (other == null) other = nil; overlap = range.$intersect(other.$range()); if ($truthy(overlap['$nil?']())) { return true }; repl1_offset = $rb_minus(overlap.$begin_pos(), range.$begin_pos()); repl2_offset = $rb_minus(overlap.$begin_pos(), other.$range().$begin_pos()); repl1_length = [$rb_minus(other.$range().$length(), repl2_offset), $rb_minus(other.$replacement().$length(), repl2_offset)].$max(); repl2_length = [$rb_minus(range.$length(), repl1_offset), $rb_minus(action.$replacement().$length(), repl1_offset)].$max(); replacement1 = ($truthy(($ret_or_1 = action.$replacement()['$[]'](repl1_offset, repl1_length))) ? ($ret_or_1) : ("".$freeze())); replacement2 = ($truthy(($ret_or_1 = other.$replacement()['$[]'](repl2_offset, repl2_length))) ? ($ret_or_1) : ("".$freeze())); return replacement1['$=='](replacement2);}); }); $def(self, '$merge_actions', function $$merge_actions(action, existing) { var self = this, actions = nil, range = nil; actions = $send(existing.$push(action), 'sort_by', [], function $$14(a){ if (a == null) a = nil; return [a.$range().$begin_pos(), a.$range().$end_pos()];}); range = actions.$first().$range().$join($send(actions, 'max_by', [], function $$15(a){ if (a == null) a = nil; return a.$range().$end_pos();}).$range()); return $$$($$('Rewriter'), 'Action').$new(range, self.$merge_replacements(actions)); }); $def(self, '$merge_actions!', function $Rewriter_merge_actions$excl$16(action, existing) { var self = this, new_action = nil; new_action = self.$merge_actions(action, existing); self.$active_queue().$delete(action); return self.$replace_actions(existing, new_action); }); $def(self, '$merge_replacements', function $$merge_replacements(actions) { var result = nil, prev_act = nil; result = "".$dup(); prev_act = nil; $send(actions, 'each', [], function $$17(act){var prev_end = nil, offset = nil; if (act == null) act = nil; if (($not(prev_act) || ($truthy(act.$range()['$disjoint?'](prev_act.$range()))))) { result['$<<'](act.$replacement()) } else { prev_end = [$rb_plus(prev_act.$range().$begin_pos(), prev_act.$replacement().$length()), prev_act.$range().$end_pos()].$max(); offset = $rb_minus(prev_end, act.$range().$begin_pos()); if ($truthy($rb_lt(offset, act.$replacement().$size()))) { result['$<<'](act.$replacement()['$[]'](Opal.Range.$new(offset, -1, false))) }; }; return (prev_act = act);}); return result; }); $def(self, '$replace_actions', function $$replace_actions(old, updated) { var self = this; $send(old, 'each', [], function $$18(act){var self = $$18.$$s == null ? this : $$18.$$s; if (act == null) act = nil; return self.$active_queue().$delete(act);}, {$$s: self}); return self.$active_queue()['$<<'](updated); }); $def(self, '$raise_clobber_error', function $$raise_clobber_error(action, existing) { var self = this, diagnostic = nil; diagnostic = $$('Diagnostic').$new("error", "invalid_action", (new Map([["action", action]])), action.$range()); self.diagnostics.$process(diagnostic); diagnostic = $$('Diagnostic').$new("note", "clobbered", (new Map([["action", existing['$[]'](0)]])), existing['$[]'](0).$range()); self.diagnostics.$process(diagnostic); return self.$raise($$('ClobberingError'), "Parser::Source::Rewriter detected clobbering"); }); $def(self, '$in_transaction?', function $Rewriter_in_transaction$ques$19() { var self = this; return self.pending_queue['$nil?']()['$!']() }); $def(self, '$active_queue', function $$active_queue() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.pending_queue))) { return $ret_or_1 } else { return self.queue } }); $def(self, '$active_clobber', function $$active_clobber() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.pending_clobber))) { return $ret_or_1 } else { return self.clobber } }); $def(self, '$active_insertions', function $$active_insertions() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.pending_insertions))) { return $ret_or_1 } else { return self.insertions } }); $def(self, '$active_clobber=', function $Rewriter_active_clobber$eq$20(value) { var self = this; if ($truthy(self.pending_clobber)) { return (self.pending_clobber = value) } else { return (self.clobber = value) } }); $def(self, '$active_insertions=', function $Rewriter_active_insertions$eq$21(value) { var self = this; if ($truthy(self.pending_insertions)) { return (self.pending_insertions = value) } else { return (self.insertions = value) } }); $def(self, '$adjacent?', function $Rewriter_adjacent$ques$22(range1, range2) { var $ret_or_1 = nil; if ($truthy(($ret_or_1 = $rb_le(range1.$begin_pos(), range2.$end_pos())))) { return $rb_le(range2.$begin_pos(), range1.$end_pos()) } else { return $ret_or_1 } }); $const_set($nesting[0], 'DEPRECATION_WARNING', ["Parser::Source::Rewriter is deprecated.", "Please update your code to use Parser::Source::TreeRewriter instead"].$join("\n").$freeze()); return self.$extend($$('Deprecation')); })($nesting[0], null, $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/rewriter/action"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $nesting = [], nil = Opal.nil; Opal.add_stubs('include,attr_reader,alias_method,freeze,<=>,begin_pos,range,zero?,order,empty?,==,length,inspect'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Action'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.replacement = $proto.range = nil; self.$include($$('Comparable')); self.$attr_reader("range", "replacement", "allow_multiple_insertions", "order"); self.$alias_method("allow_multiple_insertions?", "allow_multiple_insertions"); $def(self, '$initialize', function $$initialize(range, replacement, allow_multiple_insertions, order) { var self = this; if (replacement == null) replacement = ""; if (allow_multiple_insertions == null) allow_multiple_insertions = false; if (order == null) order = 0; self.range = range; self.replacement = replacement; self.allow_multiple_insertions = allow_multiple_insertions; self.order = order; return self.$freeze(); }, -2); $def(self, '$<=>', function $Action_$lt_eq_gt$1(other) { var self = this, result = nil; result = self.$range().$begin_pos()['$<=>'](other.$range().$begin_pos()); if (!$truthy(result['$zero?']())) { return result }; return self.$order()['$<=>'](other.$order()); }); return $def(self, '$to_s', function $$to_s() { var self = this; if (($eqeq(self.range.$length(), 0) && ($truthy(self.replacement['$empty?']())))) { return "do nothing" } else if ($eqeq(self.range.$length(), 0)) { return "insert " + (self.replacement.$inspect()) } else if ($truthy(self.replacement['$empty?']())) { return "remove " + (self.range.$length()) + " character(s)" } else { return "replace " + (self.range.$length()) + " character(s) with " + (self.replacement.$inspect()) } }); })($$('Rewriter'), null, $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/tree_rewriter"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $lambda = Opal.lambda, $gvars = Opal.gvars, $def = Opal.def, $eqeq = Opal.eqeq, $truthy = Opal.truthy, $rb_plus = Opal.rb_plus, $send = Opal.send, $return_ivar = Opal.return_ivar, $const_set = Opal.const_set, $eqeqeq = Opal.eqeqeq, $range = Opal.range, $to_ary = Opal.to_ary, $rb_minus = Opal.rb_minus, $rb_gt = Opal.rb_gt, $rb_lt = Opal.rb_lt, $kwrestargs = Opal.kwrestargs, $slice = Opal.slice, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_reader,new,consumer=,puts,render,freeze,check_policy_validity,method,adjust,source_range,empty?,==,source_buffer,raise,combine,action_root,merge!,dup,contract,+,begin_pos,range,end_pos,check_range_validity,moved,to_s,replace,wrap,source,each,ordered_replacements,<<,[],length,join,nested_actions,class,name,action_summary,warn_of_deprecation,insert_before,insert_after,extend,protected,private,as_replacements,===,size,first,map,to_range,inspect,-,values,>,<,trigger_policy,process'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'TreeRewriter'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.diagnostics = $proto.source_buffer = $proto.enforcer = $proto.action_root = $proto.in_transaction = $proto.policy = nil; self.$attr_reader("source_buffer"); self.$attr_reader("diagnostics"); $def(self, '$initialize', function $$initialize(source_buffer, $kwargs) { var crossing_deletions, different_replacements, swallowed_insertions, self = this, all_encompassing_range = nil; $kwargs = $ensure_kwargs($kwargs); crossing_deletions = $hash_get($kwargs, "crossing_deletions");if (crossing_deletions == null) crossing_deletions = "accept"; different_replacements = $hash_get($kwargs, "different_replacements");if (different_replacements == null) different_replacements = "accept"; swallowed_insertions = $hash_get($kwargs, "swallowed_insertions");if (swallowed_insertions == null) swallowed_insertions = "accept"; self.diagnostics = $$$($$('Diagnostic'), 'Engine').$new(); self.diagnostics['$consumer=']($lambda(function $$1(diag){ if ($gvars.stderr == null) $gvars.stderr = nil; if (diag == null) diag = nil; return $gvars.stderr.$puts(diag.$render());})); self.source_buffer = source_buffer; self.in_transaction = false; self.policy = (new Map([["crossing_deletions", crossing_deletions], ["different_replacements", different_replacements], ["swallowed_insertions", swallowed_insertions]])).$freeze(); self.$check_policy_validity(); self.enforcer = self.$method("enforce_policy"); all_encompassing_range = self.source_buffer.$source_range().$adjust((new Map([["begin_pos", -1], ["end_pos", 1]]))); return (self.action_root = $$$($$('TreeRewriter'), 'Action').$new(all_encompassing_range, self.enforcer)); }, -2); $def(self, '$empty?', function $TreeRewriter_empty$ques$2() { var self = this; return self.action_root['$empty?']() }); $def(self, '$merge!', function $TreeRewriter_merge$excl$3(with$) { var self = this; if (!$eqeq(self.$source_buffer(), with$.$source_buffer())) { self.$raise("TreeRewriter are not for the same source_buffer") }; self.action_root = self.action_root.$combine(with$.$action_root()); return self; }); $def(self, '$merge', function $$merge(with$) { var self = this; return self.$dup()['$merge!'](with$) }); $def(self, '$import!', function $TreeRewriter_import$excl$4(foreign_rewriter, $kwargs) { var offset, self = this, contracted = nil, merge_effective_range = nil, merge_with = nil; $kwargs = $ensure_kwargs($kwargs); offset = $hash_get($kwargs, "offset");if (offset == null) offset = 0; if ($truthy(foreign_rewriter['$empty?']())) { return self }; contracted = foreign_rewriter.$action_root().$contract(); merge_effective_range = $$$($$$($$$('Parser'), 'Source'), 'Range').$new(self.source_buffer, $rb_plus(contracted.$range().$begin_pos(), offset), $rb_plus(contracted.$range().$end_pos(), offset)); self.$check_range_validity(merge_effective_range); merge_with = contracted.$moved(self.source_buffer, offset); self.action_root = self.action_root.$combine(merge_with); return self; }, -2); $def(self, '$replace', function $$replace(range, content) { var self = this; return self.$combine(range, (new Map([["replacement", content]]))) }); $def(self, '$wrap', function $$wrap(range, insert_before, insert_after) { var self = this; return self.$combine(range, (new Map([["insert_before", insert_before.$to_s()], ["insert_after", insert_after.$to_s()]]))) }); $def(self, '$remove', function $$remove(range) { var self = this; return self.$replace(range, "".$freeze()) }); $def(self, '$insert_before', function $$insert_before(range, content) { var self = this; return self.$wrap(range, content, nil) }); $def(self, '$insert_after', function $$insert_after(range, content) { var self = this; return self.$wrap(range, nil, content) }); $def(self, '$process', function $$process() { var self = this, source = nil, chunks = nil, last_end = nil; source = self.source_buffer.$source(); chunks = []; last_end = 0; $send(self.action_root.$ordered_replacements(), 'each', [], function $$5(range, replacement){ if (range == null) range = nil; if (replacement == null) replacement = nil; chunks['$<<'](source['$[]'](Opal.Range.$new(last_end,range.$begin_pos(), true)))['$<<'](replacement); return (last_end = range.$end_pos());}); chunks['$<<'](source['$[]'](Opal.Range.$new(last_end,source.$length(), true))); return chunks.$join(); }); $def(self, '$as_replacements', function $$as_replacements() { var self = this; return self.action_root.$ordered_replacements() }); $def(self, '$as_nested_actions', function $$as_nested_actions() { var self = this; return self.action_root.$nested_actions() }); $def(self, '$transaction', function $$transaction() { var $yield = $$transaction.$$p || nil, self = this, previous = nil, restore_root = nil; $$transaction.$$p = null; return (function() { try { if (!($yield !== nil)) { self.$raise("" + (self.$class()) + "#" + ("transaction") + " requires block") }; previous = self.in_transaction; self.in_transaction = true; restore_root = self.action_root; Opal.yieldX($yield, []); restore_root = nil; return self; } finally { (($truthy(restore_root) ? ((self.action_root = restore_root)) : nil), (self.in_transaction = previous)) }; })() }); $def(self, '$in_transaction?', $return_ivar("in_transaction")); $def(self, '$inspect', function $$inspect() { var self = this; return "#<" + (self.$class()) + " " + (self.$source_buffer().$name()) + ": " + (self.$action_summary()) + ">" }); $def(self, '$insert_before_multi', function $$insert_before_multi(range, text) { var self = this; self.$class().$warn_of_deprecation(); return self.$insert_before(range, text); }); $def(self, '$insert_after_multi', function $$insert_after_multi(range, text) { var self = this; self.$class().$warn_of_deprecation(); return self.$insert_after(range, text); }); $const_set($nesting[0], 'DEPRECATION_WARNING', ["TreeRewriter#insert_before_multi and insert_before_multi exist only for legacy compatibility.", "Please update your code to use `wrap`, `insert_before` or `insert_after` instead."].$join("\n").$freeze()); self.$extend($$('Deprecation')); self.$protected(); self.$attr_reader("action_root"); self.$private(); $def(self, '$action_summary', function $$action_summary() { var self = this, replacements = nil, $ret_or_1 = nil, suffix = nil, parts = nil; replacements = self.$as_replacements(); if ($eqeqeq(0, ($ret_or_1 = replacements.$size()))) { return "empty" } else if (!$eqeqeq($range(1, 3, false), $ret_or_1)) { replacements = replacements.$first(3); suffix = "…"; }; parts = $send(replacements, 'map', [], function $$6($mlhs_tmp1){var $a, $b, range = nil, str = nil; if ($mlhs_tmp1 == null) $mlhs_tmp1 = nil; $b = $mlhs_tmp1, $a = $to_ary($b), (range = ($a[0] == null ? nil : $a[0])), (str = ($a[1] == null ? nil : $a[1])), $b; if ($truthy(str['$empty?']())) { return "-" + (range.$to_range()) } else if ($eqeq(range.$size(), 0)) { return "+" + (str.$inspect()) + "@" + (range.$begin_pos()) } else { return "^" + (str.$inspect()) + "@" + (range.$to_range()) };}, {$$has_top_level_mlhs_arg: true}); if ($truthy(suffix)) { parts['$<<'](suffix) }; return parts.$join(", "); }); $const_set($nesting[0], 'ACTIONS', ["accept", "warn", "raise"].$freeze()); $def(self, '$check_policy_validity', function $$check_policy_validity() { var self = this, invalid = nil; invalid = $rb_minus(self.policy.$values(), $$('ACTIONS')); if ($truthy(invalid['$empty?']())) { return nil } else { return self.$raise($$('ArgumentError'), "Invalid policy: " + (invalid.$join(", "))) }; }); $def(self, '$combine', function $$combine(range, attributes) { var self = this, action = nil; range = self.$check_range_validity(range); action = $$$($$('TreeRewriter'), 'Action').$new(range, self.enforcer, Opal.to_hash(attributes)); self.action_root = self.action_root.$combine(action); return self; }); $def(self, '$check_range_validity', function $$check_range_validity(range) { var self = this; if (($truthy($rb_lt(range.$begin_pos(), 0)) || ($truthy($rb_gt(range.$end_pos(), self.source_buffer.$source().$size()))))) { self.$raise($$('IndexError'), "The range " + (range.$to_range()) + " is outside the bounds of the source") }; return range; }); $def(self, '$enforce_policy', function $$enforce_policy(event) { var $yield = $$enforce_policy.$$p || nil, self = this, values = nil; $$enforce_policy.$$p = null; if ($eqeq(self.policy['$[]'](event), "accept")) { return nil }; if (!$truthy((values = Opal.yieldX($yield, [])))) { return nil }; return self.$trigger_policy(event, Opal.to_hash(values)); }); $const_set($nesting[0], 'POLICY_TO_LEVEL', (new Map([["warn", "warning"], ["raise", "error"]])).$freeze()); return $def(self, '$trigger_policy', function $$trigger_policy(event, $kwargs) { var range, conflict, arguments$, $a, $b, self = this, action = nil, $ret_or_1 = nil, diag = nil, highlights = nil; $kwargs = $ensure_kwargs($kwargs); range = $hash_get($kwargs, "range");if (range == null) range = self.$raise(); conflict = $hash_get($kwargs, "conflict");if (conflict == null) conflict = nil; arguments$ = $kwrestargs($kwargs, {'range': true,'conflict': true}); action = ($truthy(($ret_or_1 = self.policy['$[]'](event))) ? ($ret_or_1) : ("raise")); diag = $$$($$('Parser'), 'Diagnostic').$new($$('POLICY_TO_LEVEL')['$[]'](action), event, arguments$, range); self.diagnostics.$process(diag); if ($truthy(conflict)) { $b = conflict, $a = $to_ary($b), (range = ($a[0] == null ? nil : $a[0])), (highlights = $slice($a, 1)), $b; diag = $$$($$('Parser'), 'Diagnostic').$new($$('POLICY_TO_LEVEL')['$[]'](action), "" + (event) + "_conflict", arguments$, range, highlights); self.diagnostics.$process(diag); }; if ($eqeq(action, "raise")) { return self.$raise($$$($$('Parser'), 'ClobberingError'), "Parser::Source::TreeRewriter detected clobbering") } else { return nil }; }, -2); })($nesting[0], null, $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/tree_rewriter/action"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $def = Opal.def, $truthy = Opal.truthy, $send = Opal.send, $not = Opal.not, $rb_plus = Opal.rb_plus, $eqeq = Opal.eqeq, $to_a = Opal.to_a, $rb_gt = Opal.rb_gt, $rb_minus = Opal.rb_minus, $rb_ge = Opal.rb_ge, $rb_le = Opal.rb_le, $rb_lt = Opal.rb_lt, $slice = Opal.slice, $neqeq = Opal.neqeq, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_reader,freeze,empty?,do_combine,==,<<,begin,concat,flat_map,to_proc,end,!,insert_before,insert_after,replacement,raise,insertion?,with,begin_pos,range,first,children,end_pos,last,new,+,map,moved,protected,swallow,class,merge,place_in_hierarchy,analyse_hierarchy,[],fuse_deletions,combine_children,inject,size,bsearch,bsearch_child_index,>,-,>=,<=>,<=,check_fusible,<,shift,pop,compact!,each,call,call_enforcer_for_merge,!=,select'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Action'); var $proto = self.$$prototype; $proto.insert_before = $proto.insert_after = $proto.children = $proto.replacement = $proto.range = $proto.enforcer = nil; self.$attr_reader("range", "replacement", "insert_before", "insert_after"); $def(self, '$initialize', function $$initialize(range, enforcer, $kwargs) { var insert_before, replacement, insert_after, children, $a, self = this; $kwargs = $ensure_kwargs($kwargs); insert_before = $hash_get($kwargs, "insert_before");if (insert_before == null) insert_before = ""; replacement = $hash_get($kwargs, "replacement");if (replacement == null) replacement = nil; insert_after = $hash_get($kwargs, "insert_after");if (insert_after == null) insert_after = ""; children = $hash_get($kwargs, "children");if (children == null) children = []; $a = [range, enforcer, children.$freeze(), insert_before.$freeze(), replacement, insert_after.$freeze()], (self.range = $a[0]), (self.enforcer = $a[1]), (self.children = $a[2]), (self.insert_before = $a[3]), (self.replacement = $a[4]), (self.insert_after = $a[5]), $a; return self.$freeze(); }, -3); $def(self, '$combine', function $$combine(action) { var self = this; if ($truthy(action['$empty?']())) { return self }; return self.$do_combine(action); }); $def(self, '$empty?', function $Action_empty$ques$1() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil, $ret_or_3 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = ($truthy(($ret_or_3 = self.insert_before['$empty?']())) ? (self.insert_after['$empty?']()) : ($ret_or_3)))) ? (self.children['$empty?']()) : ($ret_or_2))))) { if ($truthy(($ret_or_2 = self.replacement['$=='](nil)))) { return $ret_or_2 } else { if ($truthy(($ret_or_3 = self.replacement['$empty?']()))) { return self.range['$empty?']() } else { return $ret_or_3 }; }; } else { return $ret_or_1 } }); $def(self, '$ordered_replacements', function $$ordered_replacements() { var self = this, reps = nil; reps = []; if (!$truthy(self.insert_before['$empty?']())) { reps['$<<']([self.range.$begin(), self.insert_before]) }; if ($truthy(self.replacement)) { reps['$<<']([self.range, self.replacement]) }; reps.$concat($send(self.children, 'flat_map', [], "ordered_replacements".$to_proc())); if (!$truthy(self.insert_after['$empty?']())) { reps['$<<']([self.range.$end(), self.insert_after]) }; return reps; }); $def(self, '$nested_actions', function $$nested_actions() { var self = this, actions = nil; actions = []; if (($not(self.insert_before['$empty?']()) || ($not(self.insert_after['$empty?']())))) { actions['$<<'](["wrap", self.range, self.insert_before, self.insert_after]) }; if ($truthy(self.replacement)) { actions['$<<'](["replace", self.range, self.replacement]) }; return actions.$concat($send(self.children, 'flat_map', [], "nested_actions".$to_proc())); }); $def(self, '$insertion?', function $Action_insertion$ques$2() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.$insert_before()['$empty?']()['$!']())) ? ($ret_or_2) : (self.$insert_after()['$empty?']()['$!']()))))) { return $ret_or_1 } else { if ($truthy(($ret_or_2 = self.$replacement()))) { return self.$replacement()['$empty?']()['$!']() } else { return $ret_or_2 }; } }); $def(self, '$contract', function $$contract() { var self = this, range = nil; if ($truthy(self['$empty?']())) { self.$raise("Empty actions can not be contracted") }; if ($truthy(self['$insertion?']())) { return self }; range = self.range.$with((new Map([["begin_pos", self.$children().$first().$range().$begin_pos()], ["end_pos", self.$children().$last().$range().$end_pos()]]))); return self.$with((new Map([["range", range]]))); }); $def(self, '$moved', function $$moved(source_buffer, offset) { var self = this, moved_range = nil; moved_range = $$$($$$($$$('Parser'), 'Source'), 'Range').$new(source_buffer, $rb_plus(self.range.$begin_pos(), offset), $rb_plus(self.range.$end_pos(), offset)); return self.$with((new Map([["range", moved_range], ["children", $send(self.$children(), 'map', [], function $$3(child){ if (child == null) child = nil; return child.$moved(source_buffer, offset);})]]))); }); self.$protected(); self.$attr_reader("children"); $def(self, '$with', function $Action_with$4($kwargs) { var range, enforcer, children, insert_before, replacement, insert_after, self = this; $kwargs = $ensure_kwargs($kwargs); range = $hash_get($kwargs, "range");if (range == null) range = self.range; enforcer = $hash_get($kwargs, "enforcer");if (enforcer == null) enforcer = self.enforcer; children = $hash_get($kwargs, "children");if (children == null) children = self.children; insert_before = $hash_get($kwargs, "insert_before");if (insert_before == null) insert_before = self.insert_before; replacement = $hash_get($kwargs, "replacement");if (replacement == null) replacement = self.replacement; insert_after = $hash_get($kwargs, "insert_after");if (insert_after == null) insert_after = self.insert_after; if ($truthy(replacement)) { children = self.$swallow(children) }; return self.$class().$new(range, enforcer, (new Map([["children", children], ["insert_before", insert_before], ["replacement", replacement], ["insert_after", insert_after]]))); }, -1); $def(self, '$do_combine', function $$do_combine(action) { var self = this; if ($eqeq(action.$range(), self.range)) { return self.$merge(action) } else { return self.$place_in_hierarchy(action) } }); $def(self, '$place_in_hierarchy', function $$place_in_hierarchy(action) { var self = this, family = nil, extra_sibbling = nil; family = self.$analyse_hierarchy(action); if ($truthy(family['$[]']("fusible"))) { return self.$fuse_deletions(action, family['$[]']("fusible"), [].concat($to_a(family['$[]']("sibbling_left"))).concat($to_a(family['$[]']("child"))).concat($to_a(family['$[]']("sibbling_right")))) } else { extra_sibbling = ($truthy(family['$[]']("parent")) ? (family['$[]']("parent").$do_combine(action)) : ($truthy(family['$[]']("child")) ? (action.$with((new Map([["children", family['$[]']("child")], ["enforcer", self.enforcer]]))).$combine_children(action.$children())) : (action))); return self.$with((new Map([["children", [].concat($to_a(family['$[]']("sibbling_left"))).concat([extra_sibbling]).concat($to_a(family['$[]']("sibbling_right")))]]))); }; }); $def(self, '$combine_children', function $$combine_children(more_children) { var self = this; return $send(more_children, 'inject', [self], function $$5(parent, new_child){ if (parent == null) parent = nil; if (new_child == null) new_child = nil; return parent.$place_in_hierarchy(new_child);}) }); $def(self, '$fuse_deletions', function $$fuse_deletions(action, fusible, other_sibblings) { var self = this, without_fusible = nil, fused_range = nil, fused_deletion = nil; without_fusible = self.$with((new Map([["children", other_sibblings]]))); fused_range = $send([action].concat($to_a(fusible)), 'map', [], "range".$to_proc()).$inject("join"); fused_deletion = action.$with((new Map([["range", fused_range]]))); return without_fusible.$do_combine(fused_deletion); }); $def(self, '$bsearch_child_index', function $$bsearch_child_index(from) { var $yield = $$bsearch_child_index.$$p || nil, self = this, size = nil, $ret_or_1 = nil; $$bsearch_child_index.$$p = null; if (from == null) from = 0; size = self.children.$size(); if ($truthy(($ret_or_1 = $send(Opal.Range.$new(from,size, true), 'bsearch', [], function $$6(i){var self = $$6.$$s == null ? this : $$6.$$s; if (self.children == null) self.children = nil; if (i == null) i = nil; return Opal.yield1($yield, self.children['$[]'](i));;}, {$$s: self})))) { return $ret_or_1 } else { return size }; }, -1); $def(self, '$analyse_hierarchy', function $$analyse_hierarchy(action) { var self = this, r = nil, left_index = nil, start = nil, right_index = nil, center = nil, parent = nil, overlap_left = nil, overlap_right = nil, contained = nil, fusible = nil; r = action.$range(); left_index = $send(self, 'bsearch_child_index', [], function $$7(child){ if (child == null) child = nil; return $rb_gt(child.$range().$end_pos(), r.$begin_pos());}); start = ($eqeq(left_index, 0) ? (0) : ($rb_minus(left_index, 1))); right_index = $send(self, 'bsearch_child_index', [start], function $$8(child){ if (child == null) child = nil; return $rb_ge(child.$range().$begin_pos(), r.$end_pos());}); center = $rb_minus(right_index, left_index); switch (center.valueOf()) { case 0: break; case -1: left_index = $rb_minus(left_index, 1); right_index = $rb_plus(right_index, 1); parent = self.children['$[]'](left_index); break; default: overlap_left = self.children['$[]'](left_index).$range().$begin_pos()['$<=>'](r.$begin_pos()); overlap_right = self.children['$[]']($rb_minus(right_index, 1)).$range().$end_pos()['$<=>'](r.$end_pos()); if ((($eqeq(center, 1) && ($truthy($rb_le(overlap_left, 0)))) && ($truthy($rb_ge(overlap_right, 0))))) { parent = self.children['$[]'](left_index) } else { contained = self.children['$[]'](Opal.Range.$new(left_index,right_index, true)); fusible = self.$check_fusible(action, ($truthy($rb_lt(overlap_left, 0)) ? (contained.$shift()) : nil), ($truthy($rb_gt(overlap_right, 0)) ? (contained.$pop()) : nil)); }; }; return (new Map([["parent", parent], ["sibbling_left", self.children['$[]'](Opal.Range.$new(0,left_index, true))], ["sibbling_right", self.children['$[]'](Opal.Range.$new(right_index,self.children.$size(), true))], ["fusible", fusible], ["child", contained]])); }); $def(self, '$check_fusible', function $$check_fusible(action, $a) { var $post_args, fusible, self = this; $post_args = $slice(arguments, 1); fusible = $post_args; fusible['$compact!'](); if ($truthy(fusible['$empty?']())) { return nil }; $send(fusible, 'each', [], function $$9(child){var self = $$9.$$s == null ? this : $$9.$$s, kind = nil; if (self.enforcer == null) self.enforcer = nil; if (child == null) child = nil; kind = (($truthy(action['$insertion?']()) || ($truthy(child['$insertion?']()))) ? ("crossing_insertions") : ("crossing_deletions")); return $send(self.enforcer, 'call', [kind], function $$10(){ return (new Map([["range", action.$range()], ["conflict", child.$range()]]))});}, {$$s: self}); return fusible; }, -2); $def(self, '$merge', function $$merge(action) { var self = this, $ret_or_1 = nil; self.$call_enforcer_for_merge(action); return self.$with((new Map([["insert_before", "" + (action.$insert_before()) + (self.$insert_before())], ["replacement", ($truthy(($ret_or_1 = action.$replacement())) ? ($ret_or_1) : (self.replacement))], ["insert_after", "" + (self.$insert_after()) + (action.$insert_after())]]))).$combine_children(action.$children()); }); $def(self, '$call_enforcer_for_merge', function $$call_enforcer_for_merge(action) { var self = this; return $send(self.enforcer, 'call', ["different_replacements"], function $$11(){var self = $$11.$$s == null ? this : $$11.$$s; if (self.replacement == null) self.replacement = nil; if (self.range == null) self.range = nil; if ((($truthy(self.replacement) && ($truthy(action.$replacement()))) && ($neqeq(self.replacement, action.$replacement())))) { return (new Map([["range", self.range], ["replacement", action.$replacement()], ["other_replacement", self.replacement]])) } else { return nil }}, {$$s: self}) }); return $def(self, '$swallow', function $$swallow(children) { var self = this; $send(self.enforcer, 'call', ["swallowed_insertions"], function $$12(){var self = $$12.$$s == null ? this : $$12.$$s, insertions = nil; if (self.range == null) self.range = nil; insertions = $send(children, 'select', [], "insertion?".$to_proc()); if ($truthy(insertions['$empty?']())) { return nil } else { return (new Map([["range", self.range], ["conflict", $send(insertions, 'map', [], "range".$to_proc())]])) };}, {$$s: self}); return []; }); })($$('TreeRewriter'), null) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $assign_ivar = Opal.assign_ivar, $def = Opal.def, $send2 = Opal.send2, $find_super = Opal.find_super, $send = Opal.send, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $range = Opal.range, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,freeze,line,alias_method,column,last_line,last_column,with,update_expression,==,class,reduce,map,instance_variables,instance_variable_get,send,inject,to_sym,[]=,[],protected,tap,dup,to_proc'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting); return (function($base, $super) { var self = $klass($base, $super, 'Map'); var $proto = self.$$prototype; $proto.node = $proto.expression = nil; self.$attr_reader("node"); self.$attr_reader("expression"); $def(self, '$initialize', $assign_ivar("expression")); $def(self, '$initialize_copy', function $$initialize_copy(other) { var $yield = $$initialize_copy.$$p || nil, self = this; $$initialize_copy.$$p = null; $send2(self, $find_super(self, 'initialize_copy', $$initialize_copy, false, true), 'initialize_copy', [other], $yield); return (self.node = nil); }); $def(self, '$node=', function $Map_node$eq$1(node) { var self = this; self.node = node; self.$freeze(); return self.node; }); $def(self, '$line', function $$line() { var self = this; return self.expression.$line() }); self.$alias_method("first_line", "line"); $def(self, '$column', function $$column() { var self = this; return self.expression.$column() }); $def(self, '$last_line', function $$last_line() { var self = this; return self.expression.$last_line() }); $def(self, '$last_column', function $$last_column() { var self = this; return self.expression.$last_column() }); $def(self, '$with_expression', function $$with_expression(expression_l) { var self = this; return $send(self, 'with', [], function $$2(map){ if (map == null) map = nil; return map.$update_expression(expression_l);}) }); $def(self, '$==', function $Map_$eq_eq$3(other) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = other.$class()['$=='](self.$class())))) { return $send(self.$instance_variables(), 'map', [], function $$4(ivar){var self = $$4.$$s == null ? this : $$4.$$s; if (ivar == null) ivar = nil; return self.$instance_variable_get(ivar)['$=='](other.$send("instance_variable_get", ivar));}, {$$s: self}).$reduce("&") } else { return $ret_or_1 } }); $def(self, '$to_hash', function $$to_hash() { var self = this; return $send(self.$instance_variables(), 'inject', [(new Map())], function $$5(hash, ivar){var self = $$5.$$s == null ? this : $$5.$$s; if (hash == null) hash = nil; if (ivar == null) ivar = nil; if ($eqeq(ivar.$to_sym(), "@node")) { return hash }; hash['$[]='](ivar['$[]']($range(1, -1, false)).$to_sym(), self.$instance_variable_get(ivar)); return hash;}, {$$s: self}) }); self.$protected(); $def(self, '$with', function $Map_with$6() { var block = $Map_with$6.$$p || nil, self = this; $Map_with$6.$$p = null; ; return $send(self.$dup(), 'tap', [], block.$to_proc()); }); return $def(self, '$update_expression', $assign_ivar("expression")); })($nesting[0], null) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/operator"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Operator'); self.$attr_reader("operator"); return $def(self, '$initialize', function $$initialize(operator, expression) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.operator = operator; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression], null); }); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/collection"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Collection'); self.$attr_reader("begin"); self.$attr_reader("end"); return $def(self, '$initialize', function $$initialize(begin_l, end_l, expression_l) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $a = [begin_l, end_l], (self.begin = $a[0]), (self.end = $a[1]), $a; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression_l], null); }); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/constant"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $send = Opal.send, $assign_ivar = Opal.assign_ivar, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,with,update_operator,protected'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Constant'); self.$attr_reader("double_colon"); self.$attr_reader("name"); self.$attr_reader("operator"); $def(self, '$initialize', function $$initialize(double_colon, name, expression) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $a = [double_colon, name], (self.double_colon = $a[0]), (self.name = $a[1]), $a; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression], null); }); $def(self, '$with_operator', function $$with_operator(operator_l) { var self = this; return $send(self, 'with', [], function $$1(map){ if (map == null) map = nil; return map.$update_operator(operator_l);}) }); self.$protected(); return $def(self, '$update_operator', $assign_ivar("operator")); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/variable"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $send = Opal.send, $assign_ivar = Opal.assign_ivar, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,with,update_operator,protected'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Variable'); self.$attr_reader("name"); self.$attr_reader("operator"); $def(self, '$initialize', function $$initialize(name_l, expression_l) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; if (expression_l == null) expression_l = name_l; self.name = name_l; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression_l], null); }, -2); $def(self, '$with_operator', function $$with_operator(operator_l) { var self = this; return $send(self, 'with', [], function $$1(map){ if (map == null) map = nil; return map.$update_operator(operator_l);}) }); self.$protected(); return $def(self, '$update_operator', $assign_ivar("operator")); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/keyword"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Keyword'); self.$attr_reader("keyword"); self.$attr_reader("begin"); self.$attr_reader("end"); return $def(self, '$initialize', function $$initialize(keyword_l, begin_l, end_l, expression_l) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.keyword = keyword_l; $a = [begin_l, end_l], (self.begin = $a[0]), (self.end = $a[1]), $a; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression_l], null); }); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/definition"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,join'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Definition'); var $proto = self.$$prototype; $proto.keyword = $proto.end = nil; self.$attr_reader("keyword"); self.$attr_reader("operator"); self.$attr_reader("name"); self.$attr_reader("end"); return $def(self, '$initialize', function $$initialize(keyword_l, operator_l, name_l, end_l) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.keyword = keyword_l; self.operator = operator_l; self.name = name_l; self.end = end_l; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [self.keyword.$join(self.end)], null); }); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/method_definition"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $truthy = Opal.truthy, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,join'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'MethodDefinition'); var $proto = self.$$prototype; $proto.keyword = nil; self.$attr_reader("keyword"); self.$attr_reader("operator"); self.$attr_reader("name"); self.$attr_reader("end"); self.$attr_reader("assignment"); return $def(self, '$initialize', function $$initialize(keyword_l, operator_l, name_l, end_l, assignment_l, body_l) { var $yield = $$initialize.$$p || nil, self = this, $ret_or_1 = nil; $$initialize.$$p = null; self.keyword = keyword_l; self.operator = operator_l; self.name = name_l; self.end = end_l; self.assignment = assignment_l; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [self.keyword.$join(($truthy(($ret_or_1 = end_l)) ? ($ret_or_1) : (body_l)))], null); }); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/send"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $send = Opal.send, $assign_ivar = Opal.assign_ivar, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,with,update_operator,protected'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Send'); self.$attr_reader("dot"); self.$attr_reader("selector"); self.$attr_reader("operator"); self.$attr_reader("begin"); self.$attr_reader("end"); $def(self, '$initialize', function $$initialize(dot_l, selector_l, begin_l, end_l, expression_l) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.dot = dot_l; self.selector = selector_l; $a = [begin_l, end_l], (self.begin = $a[0]), (self.end = $a[1]), $a; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression_l], null); }); $def(self, '$with_operator', function $$with_operator(operator_l) { var self = this; return $send(self, 'with', [], function $$1(map){ if (map == null) map = nil; return map.$update_operator(operator_l);}) }); self.$protected(); return $def(self, '$update_operator', $assign_ivar("operator")); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/index"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $send = Opal.send, $assign_ivar = Opal.assign_ivar, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,with,update_operator,protected'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Index'); self.$attr_reader("begin"); self.$attr_reader("end"); self.$attr_reader("operator"); $def(self, '$initialize', function $$initialize(begin_l, end_l, expression_l) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $a = [begin_l, end_l], (self.begin = $a[0]), (self.end = $a[1]), $a; self.operator = nil; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression_l], null); }); $def(self, '$with_operator', function $$with_operator(operator_l) { var self = this; return $send(self, 'with', [], function $$1(map){ if (map == null) map = nil; return map.$update_operator(operator_l);}) }); self.$protected(); return $def(self, '$update_operator', $assign_ivar("operator")); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/condition"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Condition'); self.$attr_reader("keyword"); self.$attr_reader("begin"); self.$attr_reader("else"); self.$attr_reader("end"); return $def(self, '$initialize', function $$initialize(keyword_l, begin_l, else_l, end_l, expression_l) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.keyword = keyword_l; $a = [begin_l, else_l, end_l], (self.begin = $a[0]), (self["else"] = $a[1]), (self.end = $a[2]), $a; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression_l], null); }); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/ternary"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Ternary'); self.$attr_reader("question"); self.$attr_reader("colon"); return $def(self, '$initialize', function $$initialize(question_l, colon_l, expression_l) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $a = [question_l, colon_l], (self.question = $a[0]), (self.colon = $a[1]), $a; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression_l], null); }); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/for"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'For'); self.$attr_reader("keyword", "in"); self.$attr_reader("begin", "end"); return $def(self, '$initialize', function $$initialize(keyword_l, in_l, begin_l, end_l, expression_l) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $a = [keyword_l, in_l], (self.keyword = $a[0]), (self["in"] = $a[1]), $a; $a = [begin_l, end_l], (self.begin = $a[0]), (self.end = $a[1]), $a; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression_l], null); }); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/rescue_body"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'RescueBody'); self.$attr_reader("keyword"); self.$attr_reader("assoc"); self.$attr_reader("begin"); return $def(self, '$initialize', function $$initialize(keyword_l, assoc_l, begin_l, expression_l) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.keyword = keyword_l; self.assoc = assoc_l; self.begin = begin_l; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression_l], null); }); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/heredoc"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Heredoc'); self.$attr_reader("heredoc_body"); self.$attr_reader("heredoc_end"); return $def(self, '$initialize', function $$initialize(begin_l, body_l, end_l) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.heredoc_body = body_l; self.heredoc_end = end_l; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [begin_l], null); }); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/source/map/objc_kwarg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Source'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ObjcKwarg'); self.$attr_reader("keyword"); self.$attr_reader("operator"); self.$attr_reader("argument"); return $def(self, '$initialize', function $$initialize(keyword_l, operator_l, argument_l, expression_l) { var $a, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $a = [keyword_l, operator_l, argument_l], (self.keyword = $a[0]), (self.operator = $a[1]), (self.argument = $a[2]), $a; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [expression_l], null); }); })($$('Map'), $$('Map')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/syntax_error"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,message'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'SyntaxError'); self.$attr_reader("diagnostic"); return $def(self, '$initialize', function $$initialize(diagnostic) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.diagnostic = diagnostic; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [diagnostic.$message()], null); }); })($nesting[0], $$('StandardError')) })($nesting[0], $nesting) }; Opal.modules["parser/clobbering_error"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $nesting = [], nil = Opal.nil; return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return ($klass($nesting[0], $$('RuntimeError'), 'ClobberingError'), nil) })($nesting[0], $nesting) }; Opal.modules["parser/unknown_encoding_in_magic_comment_error"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $nesting = [], nil = Opal.nil; return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return ($klass($nesting[0], $$('ArgumentError'), 'UnknownEncodingInMagicComment'), nil) })($nesting[0], $nesting) }; Opal.modules["parser/diagnostic"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $truthy = Opal.truthy, $def = Opal.def, $eqeq = Opal.eqeq, $rb_plus = Opal.rb_plus, $rb_minus = Opal.rb_minus, $to_ary = Opal.to_ary, $rb_gt = Opal.rb_gt, $rb_times = Opal.rb_times, $send = Opal.send, $rb_ge = Opal.rb_ge, $not = Opal.not, $neqeq = Opal.neqeq, $nesting = [], nil = Opal.nil; Opal.add_stubs('freeze,attr_reader,include?,raise,join,inspect,dup,compile,is?,==,line,last_line,+,message,render_line,first_line_only,last_line_only,-,source_buffer,decompose_position,end_pos,>,private,source_line,*,length,each,line_range,intersect,[]=,column_range,size,>=,!,map,name,!=,resize,=~,source,adjust'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Diagnostic'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.reason = $proto["arguments"] = $proto.location = $proto.level = $proto.highlights = nil; $const_set($nesting[0], 'LEVELS', ["note", "warning", "error", "fatal"].$freeze()); self.$attr_reader("level", "reason", "arguments"); self.$attr_reader("location", "highlights"); $def(self, '$initialize', function $$initialize(level, reason, arguments$, location, highlights) { var self = this, $ret_or_1 = nil; if (highlights == null) highlights = []; if (!$truthy($$('LEVELS')['$include?'](level))) { self.$raise($$('ArgumentError'), "" + ("Diagnostic#level must be one of " + ($$('LEVELS').$join(", ")) + "; ") + ("" + (level.$inspect()) + " provided.")) }; if (!$truthy(location)) { self.$raise("Expected a location") }; self.level = level; self.reason = reason; self["arguments"] = ($truthy(($ret_or_1 = arguments$)) ? ($ret_or_1) : ((new Map()))).$dup().$freeze(); self.location = location; self.highlights = highlights.$dup().$freeze(); return self.$freeze(); }, -5); $def(self, '$message', function $$message() { var self = this; return $$('Messages').$compile(self.reason, self["arguments"]) }); $def(self, '$render', function $$render() { var $a, $b, self = this, first_line = nil, last_line = nil, num_lines = nil, buffer = nil, last_lineno = nil, last_column = nil; if (($eqeq(self.location.$line(), self.location.$last_line()) || ($truthy(self.location['$is?']("\n"))))) { return $rb_plus(["" + (self.location) + ": " + (self.level) + ": " + (self.$message())], self.$render_line(self.location)) } else { first_line = self.$first_line_only(self.location); last_line = self.$last_line_only(self.location); num_lines = $rb_plus($rb_minus(self.location.$last_line(), self.location.$line()), 1); buffer = self.location.$source_buffer(); $b = buffer.$decompose_position(self.location.$end_pos()), $a = $to_ary($b), (last_lineno = ($a[0] == null ? nil : $a[0])), (last_column = ($a[1] == null ? nil : $a[1])), $b; return $rb_plus($rb_plus(["" + (self.location) + "-" + (last_lineno) + ":" + (last_column) + ": " + (self.level) + ": " + (self.$message())], self.$render_line(first_line, $rb_gt(num_lines, 2), false)), self.$render_line(last_line, false, true)); } }); self.$private(); $def(self, '$render_line', function $$render_line(range, ellipsis, range_end) { var self = this, source_line = nil, highlight_line = nil; if (ellipsis == null) ellipsis = false; if (range_end == null) range_end = false; source_line = range.$source_line(); highlight_line = $rb_times(" ", source_line.$length()); $send(self.highlights, 'each', [], function $$1(highlight){var $a, line_range = nil; if (highlight == null) highlight = nil; line_range = range.$source_buffer().$line_range(range.$line()); if ($truthy((highlight = highlight.$intersect(line_range)))) { return ($a = [highlight.$column_range(), $rb_times("~", highlight.$size())], $send(highlight_line, '[]=', $a), $a[$a.length - 1]) } else { return nil };}); if ($truthy(range['$is?']("\n"))) { highlight_line = $rb_plus(highlight_line, "^") } else if (($not(range_end) && ($truthy($rb_ge(range.$size(), 1))))) { highlight_line['$[]='](range.$column_range(), $rb_plus("^", $rb_times("~", $rb_minus(range.$size(), 1)))) } else { highlight_line['$[]='](range.$column_range(), $rb_times("~", range.$size())) }; if ($truthy(ellipsis)) { highlight_line = $rb_plus(highlight_line, "...") }; return $send([source_line, highlight_line], 'map', [], function $$2(line){ if (line == null) line = nil; return "" + (range.$source_buffer().$name()) + ":" + (range.$line()) + ": " + (line);}); }, -2); $def(self, '$first_line_only', function $$first_line_only(range) { if ($neqeq(range.$line(), range.$last_line())) { return range.$resize(range.$source()['$=~'](/\n/)) } else { return range } }); return $def(self, '$last_line_only', function $$last_line_only(range) { if ($neqeq(range.$line(), range.$last_line())) { return range.$adjust((new Map([["begin_pos", range.$source()['$=~'](/[^\n]*$/)]]))) } else { return range } }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/diagnostic/engine"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $truthy = Opal.truthy, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_accessor,ignore?,call,raise?,raise,protected,==,level'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Engine'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.consumer = $proto.ignore_warnings = $proto.all_errors_are_fatal = nil; self.$attr_accessor("consumer"); self.$attr_accessor("all_errors_are_fatal"); self.$attr_accessor("ignore_warnings"); $def(self, '$initialize', function $$initialize(consumer) { var self = this; if (consumer == null) consumer = nil; self.consumer = consumer; self.all_errors_are_fatal = false; return (self.ignore_warnings = false); }, -1); $def(self, '$process', function $$process(diagnostic) { var self = this; if (!$truthy(self['$ignore?'](diagnostic))) { if ($truthy(self.consumer)) { self.consumer.$call(diagnostic) } }; if ($truthy(self['$raise?'](diagnostic))) { self.$raise($$$($$('Parser'), 'SyntaxError'), diagnostic) }; return self; }); self.$protected(); $def(self, '$ignore?', function $Engine_ignore$ques$1(diagnostic) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.ignore_warnings))) { return diagnostic.$level()['$==']("warning") } else { return $ret_or_1 } }); return $def(self, '$raise?', function $Engine_raise$ques$2(diagnostic) { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.all_errors_are_fatal)) ? (diagnostic.$level()['$==']("error")) : ($ret_or_2))))) { return $ret_or_1 } else { return diagnostic.$level()['$==']("fatal") } }); })($$('Diagnostic'), null, $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/static_environment"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $def = Opal.def, $truthy = Opal.truthy, $send = Opal.send, $nesting = [], nil = Opal.nil; Opal.add_stubs('reset,[],push,dup,delete,add,pop,to_sym,include?,declare,declared?,any?,empty?'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'StaticEnvironment'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.stack = $proto.variables = nil; $const_set($nesting[0], 'FORWARD_ARGS', "FORWARD_ARGS"); $const_set($nesting[0], 'ANONYMOUS_RESTARG_IN_CURRENT_SCOPE', "ANONYMOUS_RESTARG_IN_CURRENT_SCOPE"); $const_set($nesting[0], 'ANONYMOUS_RESTARG_INHERITED', "ANONYMOUS_RESTARG_INHERITED"); $const_set($nesting[0], 'ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE', "ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE"); $const_set($nesting[0], 'ANONYMOUS_KWRESTARG_INHERITED', "ANONYMOUS_KWRESTARG_INHERITED"); $const_set($nesting[0], 'ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE', "ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE"); $const_set($nesting[0], 'ANONYMOUS_BLOCKARG_INHERITED', "ANONYMOUS_BLOCKARG_INHERITED"); $def(self, '$initialize', function $$initialize() { var self = this; return self.$reset() }); $def(self, '$reset', function $$reset() { var self = this; self.variables = $$('Set')['$[]'](); return (self.stack = []); }); $def(self, '$extend_static', function $$extend_static() { var self = this; self.stack.$push(self.variables); self.variables = $$('Set')['$[]'](); return self; }); $def(self, '$extend_dynamic', function $$extend_dynamic() { var self = this; self.stack.$push(self.variables); self.variables = self.variables.$dup(); if ($truthy(self.variables.$delete($$('ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE')))) { self.variables.$add($$('ANONYMOUS_BLOCKARG_INHERITED')) }; if ($truthy(self.variables.$delete($$('ANONYMOUS_RESTARG_IN_CURRENT_SCOPE')))) { self.variables.$add($$('ANONYMOUS_RESTARG_INHERITED')) }; if ($truthy(self.variables.$delete($$('ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE')))) { self.variables.$add($$('ANONYMOUS_KWRESTARG_INHERITED')) }; return self; }); $def(self, '$unextend', function $$unextend() { var self = this; self.variables = self.stack.$pop(); return self; }); $def(self, '$declare', function $$declare(name) { var self = this; self.variables.$add(name.$to_sym()); return self; }); $def(self, '$declared?', function $StaticEnvironment_declared$ques$1(name) { var self = this; return self.variables['$include?'](name.$to_sym()) }); $def(self, '$declare_forward_args', function $$declare_forward_args() { var self = this; return self.$declare($$('FORWARD_ARGS')) }); $def(self, '$declared_forward_args?', function $StaticEnvironment_declared_forward_args$ques$2() { var self = this; return self['$declared?']($$('FORWARD_ARGS')) }); $def(self, '$declare_anonymous_blockarg', function $$declare_anonymous_blockarg() { var self = this; return self.$declare($$('ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE')) }); $def(self, '$declared_anonymous_blockarg?', function $StaticEnvironment_declared_anonymous_blockarg$ques$3() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$declared?']($$('ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE'))))) { return $ret_or_1 } else { return self['$declared?']($$('ANONYMOUS_BLOCKARG_INHERITED')) } }); $def(self, '$declared_anonymous_blockarg_in_current_scpe?', function $StaticEnvironment_declared_anonymous_blockarg_in_current_scpe$ques$4() { var self = this; return self['$declared?']($$('ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE')) }); $def(self, '$parent_has_anonymous_blockarg?', function $StaticEnvironment_parent_has_anonymous_blockarg$ques$5() { var self = this; return $send(self.stack, 'any?', [], function $$6(variables){ if (variables == null) variables = nil; return variables['$include?']($$('ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE'));}) }); $def(self, '$declare_anonymous_restarg', function $$declare_anonymous_restarg() { var self = this; return self.$declare($$('ANONYMOUS_RESTARG_IN_CURRENT_SCOPE')) }); $def(self, '$declared_anonymous_restarg?', function $StaticEnvironment_declared_anonymous_restarg$ques$7() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$declared?']($$('ANONYMOUS_RESTARG_IN_CURRENT_SCOPE'))))) { return $ret_or_1 } else { return self['$declared?']($$('ANONYMOUS_RESTARG_INHERITED')) } }); $def(self, '$declared_anonymous_restarg_in_current_scope?', function $StaticEnvironment_declared_anonymous_restarg_in_current_scope$ques$8() { var self = this; return self['$declared?']($$('ANONYMOUS_RESTARG_IN_CURRENT_SCOPE')) }); $def(self, '$parent_has_anonymous_restarg?', function $StaticEnvironment_parent_has_anonymous_restarg$ques$9() { var self = this; return $send(self.stack, 'any?', [], function $$10(variables){ if (variables == null) variables = nil; return variables['$include?']($$('ANONYMOUS_RESTARG_IN_CURRENT_SCOPE'));}) }); $def(self, '$declare_anonymous_kwrestarg', function $$declare_anonymous_kwrestarg() { var self = this; return self.$declare($$('ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE')) }); $def(self, '$declared_anonymous_kwrestarg?', function $StaticEnvironment_declared_anonymous_kwrestarg$ques$11() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$declared?']($$('ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE'))))) { return $ret_or_1 } else { return self['$declared?']($$('ANONYMOUS_KWRESTARG_INHERITED')) } }); $def(self, '$declared_anonymous_kwrestarg_in_current_scope?', function $StaticEnvironment_declared_anonymous_kwrestarg_in_current_scope$ques$12() { var self = this; return self['$declared?']($$('ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE')) }); $def(self, '$parent_has_anonymous_kwrestarg?', function $StaticEnvironment_parent_has_anonymous_kwrestarg$ques$13() { var self = this; return $send(self.stack, 'any?', [], function $$14(variables){ if (variables == null) variables = nil; return variables['$include?']($$('ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE'));}) }); return $def(self, '$empty?', function $StaticEnvironment_empty$ques$15() { var self = this; return self.stack['$empty?']() }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/lexer-F0"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $truthy = Opal.truthy, $send = Opal.send, $rb_minus = Opal.rb_minus, $def = Opal.def, $eqeq = Opal.eqeq, $const_set = Opal.const_set, $rb_plus = Opal.rb_plus, $to_ary = Opal.to_ary, $rb_le = Opal.rb_le, $rb_gt = Opal.rb_gt, $neqeq = Opal.neqeq, $eqeqeq = Opal.eqeqeq, $range = Opal.range, $rb_ge = Opal.rb_ge, $not = Opal.not, $rb_lt = Opal.rb_lt, $gvars = Opal.gvars, $slice = Opal.slice, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_accessor,private,_lex_actions=,_lex_trans_keys=,_lex_key_spans=,_lex_index_offsets=,_lex_indicies=,_lex_trans_targs=,_lex_trans_actions=,_lex_to_state_actions=,_lex_from_state_actions=,_lex_eof_trans=,lex_start=,lex_error=,lex_en_expr_variable=,lex_en_expr_fname=,lex_en_expr_endfn=,lex_en_expr_dot=,lex_en_expr_arg=,lex_en_expr_cmdarg=,lex_en_expr_endarg=,lex_en_expr_mid=,lex_en_expr_beg=,lex_en_expr_labelarg=,lex_en_expr_value=,lex_en_expr_end=,lex_en_leading_dot=,lex_en_line_comment=,lex_en_line_begin=,lex_en_inside_string=,attr_reader,respond_to?,class,send,lambda,emit,Rational,Complex,-,Float,reset,lex_en_line_begin,new,source,==,encoding,unpack,[],source_buffer=,source_pts=,lex_en_expr_dot,lex_en_expr_fname,lex_en_expr_value,lex_en_expr_beg,lex_en_expr_mid,lex_en_expr_arg,lex_en_expr_cmdarg,lex_en_expr_end,lex_en_expr_endarg,lex_en_expr_endfn,lex_en_expr_labelarg,lex_en_inside_string,fetch,invert,push,count,pop,dedent_level,empty?,shift,+,size,<=,>,<<,!=,===,e_lbrace,close_interp_on_current_literal,on_newline,emit_comment_from_range,version?,tok,emit_global_var,stack_pop,emit_class_var,emit_instance_var,emit_table,[]=,chr,push_literal,in_argdef,>=,freeze,arg_or_cmdarg,check_ambiguous_slash,last,diagnostic,range,active?,emit_do,slice,length,start_with?,read_character_constant,=~,declared?,!,nil?,any?,<,end_with?,rstrip,herebody_s,herebody_s=,emit_colon_with_digits,in_kwarg,emit_singleton_class,inspect,numeric_literal_int,to_i,call,emit_rbrace_rparen_rbrack,to_f,emit_comment,advance,lex_error,protected,include?,process,literal,start_interp_brace,index,lexpop,each,upcase'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Lexer'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.version = $proto.source_buffer = $proto.source_pts = $proto.strings = $proto.cs = $proto.cmdarg_stack = $proto.cmdarg = $proto.cond_stack = $proto.cond = $proto.token_queue = $proto._lex_actions = $proto.p = $proto.command_start = $proto.emit_integer = $proto.emit_rational = $proto.emit_imaginary = $proto.emit_imaginary_rational = $proto.emit_integer_re = $proto.emit_integer_if = $proto.emit_integer_rescue = $proto.emit_float = $proto.emit_imaginary_float = $proto.emit_float_if = $proto.emit_float_rescue = $proto.paren_nest = $proto.ts = $proto.te = $proto.stack = $proto.top = $proto.act = $proto.context = $proto.lambda_stack = $proto.static_env = $proto.newline_s = $proto.num_base = $proto.num_suffix_s = $proto.num_xfrm = $proto.eq_begin_s = $proto.cs_before_block_comment = $proto.tokens = $proto.comments = $proto.sharp_s = $proto.diagnostics = $proto.num_digits_s = nil; (function(self, $parent_nesting) { self.$attr_accessor("_lex_actions"); return self.$private("_lex_actions", "_lex_actions="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_actions='](Opal.large_array_unpack("0,1,0,1,16,1,17,1,18,1,19,1,32,1,33,1,34,1,35,1,37,1,38,1,39,1,40,1,41,1,42,1,43,1,44,1,45,1,46,1,47,1,48,1,49,1,50,1,51,1,52,1,53,1,54,1,55,1,56,1,57,1,61,1,62,1,63,1,64,1,65,1,66,1,67,1,68,1,69,1,70,1,71,1,72,1,73,1,74,1,75,1,76,1,77,1,78,1,79,1,80,1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,93,1,94,1,95,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,107,1,112,1,113,1,114,1,115,1,116,1,119,1,120,1,121,1,122,1,125,1,126,1,128,1,129,1,130,1,131,1,132,1,133,1,135,1,136,1,139,1,140,1,141,1,142,1,144,1,145,1,155,1,156,1,157,1,158,1,159,1,160,1,161,1,162,1,163,1,164,1,165,1,166,1,168,1,169,1,170,1,171,1,172,1,173,1,174,1,176,1,178,1,179,1,180,1,184,1,186,1,187,1,189,1,190,1,191,1,192,1,193,1,194,1,195,1,196,1,197,1,198,1,199,1,200,1,201,1,203,1,204,1,205,1,206,1,207,1,208,1,210,1,211,1,230,1,231,1,232,1,233,1,234,1,235,1,236,1,237,1,238,1,240,1,241,1,242,1,243,1,244,1,246,1,247,1,248,1,250,1,252,1,254,1,255,1,256,1,258,1,259,1,260,1,263,1,264,1,266,1,267,1,268,1,269,1,270,1,271,1,274,1,275,1,276,1,277,1,278,1,279,1,280,1,281,1,282,1,283,1,286,1,287,1,288,1,289,1,290,1,291,1,292,1,293,1,294,1,295,1,296,2,0,18,2,0,100,2,0,104,2,0,105,2,0,167,2,0,169,2,0,239,2,0,284,2,0,285,2,0,288,2,0,289,2,2,249,2,3,249,2,4,249,2,5,249,2,6,249,2,7,249,2,9,251,2,10,251,2,11,251,2,12,251,2,13,251,2,14,111,2,14,134,2,14,181,2,14,245,2,15,261,2,16,0,2,16,32,2,16,33,2,16,34,2,16,75,2,16,84,2,16,94,2,16,105,2,16,116,2,16,118,2,16,135,2,16,142,2,16,143,2,16,155,2,16,168,2,16,190,2,16,201,2,16,202,2,16,208,2,16,209,2,16,264,2,16,265,2,16,292,2,17,18,2,18,0,2,18,75,2,18,84,2,18,94,2,18,117,2,18,135,2,18,142,2,18,190,2,18,201,2,18,208,2,18,264,2,18,292,2,19,92,2,19,177,2,19,188,2,19,271,2,20,92,2,20,177,2,20,188,2,20,257,2,21,177,2,21,188,2,22,177,2,22,188,2,23,177,2,23,188,2,24,177,2,24,198,2,25,177,2,25,188,2,26,177,2,27,253,2,28,110,2,28,182,2,28,262,2,29,261,2,30,108,2,30,109,2,30,127,2,30,183,2,30,260,2,31,261,2,35,0,2,36,175,2,37,179,2,38,179,2,39,185,2,41,47,2,42,47,2,43,47,2,44,47,2,45,47,2,46,47,2,47,1,2,53,0,2,53,49,2,53,58,2,53,59,2,53,60,2,53,96,2,53,97,2,53,98,2,53,99,2,53,123,2,53,124,2,53,137,2,53,138,2,53,147,2,53,148,2,53,149,2,53,150,2,53,151,2,53,152,2,53,153,2,53,154,2,53,212,2,53,213,2,53,215,2,53,216,2,53,217,2,53,218,2,53,219,2,53,220,2,53,221,2,53,223,2,53,224,2,53,225,2,53,226,2,53,227,2,53,228,2,53,229,2,53,272,2,53,273,3,17,18,0,3,17,18,75,3,17,18,84,3,17,18,94,3,17,18,117,3,17,18,135,3,17,18,142,3,17,18,190,3,17,18,201,3,17,18,208,3,17,18,264,3,17,18,292,3,45,47,1,3,46,47,1,3,47,1,249,3,48,8,251,3,49,8,251,3,53,0,99,3,53,16,98,3,53,16,124,3,53,16,272,3,53,18,146,3,53,18,214,3,53,18,272,3,53,33,97,3,53,39,152,3,53,39,153,3,53,45,221,4,41,47,1,249,4,42,47,1,249,4,43,47,1,249,4,44,47,1,249,4,45,47,1,249,4,46,47,1,249,4,53,16,33,97,4,53,17,18,146,4,53,17,18,272,4,53,47,1,222,5,53,45,47,1,222,5,53,46,47,1,222")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_trans_keys"); return self.$private("_lex_trans_keys", "_lex_trans_keys="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_trans_keys='](Opal.large_array_unpack("0,0,0,127,0,127,0,127,0,127,0,127,0,127,0,127,58,58,58,58,46,46,0,127,58,58,60,60,62,62,10,10,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,115,115,99,99,117,117,101,101,108,116,101,101,115,115,115,115,105,105,108,108,105,105,108,108,58,58,0,127,10,10,0,127,9,92,10,10,9,92,58,58,98,98,101,101,103,103,105,105,110,110,0,127,61,61,9,92,9,92,9,92,9,92,9,92,10,10,0,127,0,127,61,126,93,93,0,127,0,127,10,10,34,34,10,10,39,39,0,127,10,96,96,96,0,127,0,127,0,127,0,127,0,127,0,127,58,58,58,58,0,127,43,57,48,57,48,57,48,57,48,57,115,115,99,99,117,117,101,101,99,99,117,117,101,101,0,127,58,58,9,92,9,92,9,92,9,92,9,92,9,92,60,60,10,10,9,92,9,92,10,10,10,10,10,10,10,10,46,46,101,101,103,103,105,105,110,110,69,69,78,78,68,68,95,95,95,95,0,26,0,0,36,64,0,127,48,57,0,127,0,127,0,127,0,127,9,32,0,0,61,126,10,10,10,10,0,127,0,127,48,57,115,115,38,38,42,42,64,64,58,58,60,61,62,62,61,126,61,61,61,62,0,127,0,127,0,127,0,127,0,127,0,127,0,127,93,93,10,10,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,124,124,0,127,0,127,9,32,10,10,10,10,46,46,10,10,0,0,0,127,0,127,61,61,0,0,9,32,0,0,61,126,10,10,10,10,38,38,42,42,64,64,60,61,62,62,61,126,61,61,61,62,0,127,93,93,10,10,124,124,0,126,0,127,0,61,9,61,9,61,0,0,9,61,9,62,46,46,46,46,58,58,9,32,0,0,0,127,0,0,9,124,0,0,10,10,10,10,0,0,9,61,58,58,60,60,62,62,9,32,10,10,0,127,102,102,101,101,110,110,104,104,0,127,0,127,0,127,0,0,0,127,10,10,0,123,9,32,10,10,10,10,10,10,0,0,111,111,0,0,0,127,0,127,9,32,0,0,10,10,10,10,10,10,0,0,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,58,61,0,0,61,126,61,61,0,0,0,0,0,0,9,32,61,61,9,32,61,126,10,10,10,10,0,127,38,61,0,0,42,61,61,61,9,92,9,92,9,92,46,46,46,46,10,10,0,26,0,127,0,127,61,61,0,0,61,126,61,62,0,0,0,0,0,0,0,0,61,126,0,127,48,57,38,38,42,42,64,64,60,61,62,62,61,61,61,62,0,127,48,57,0,127,124,124,64,64,60,61,0,0,10,34,10,39,96,96,62,62,61,126,61,62,0,26,0,127,0,127,0,127,0,0,10,10,0,0,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,61,126,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,0,61,124,0,92,9,32,0,0,10,10,10,10,10,10,0,0,0,127,0,127,9,32,0,0,10,10,10,10,10,10,0,0,0,127,0,127,61,61,0,0,9,32,0,0,61,126,10,10,10,10,0,127,0,127,48,57,61,61,38,61,0,0,0,0,42,61,61,62,46,57,46,46,10,10,48,101,48,95,46,120,48,114,43,57,48,105,102,102,0,0,101,105,0,0,0,0,48,114,48,114,48,114,48,114,105,114,102,102,0,0,101,105,115,115,0,0,0,0,48,114,48,114,48,114,48,114,48,114,48,114,48,114,48,114,46,114,48,114,46,114,48,114,58,58,60,61,62,62,61,126,61,61,61,62,0,127,0,127,0,0,0,127,0,127,0,127,0,127,0,127,0,127,0,0,10,10,0,0,0,0,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,9,92,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,0,61,124,0,0,9,92,9,92,9,92,46,46,46,46,10,10,46,46,10,10,10,61,10,10,10,101,10,110,10,100,10,10,0,95,9,32,0,0,10,10,10,10,98,98,9,32,10,10,95,95,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_key_spans"); return self.$private("_lex_key_spans", "_lex_key_spans="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_key_spans='](Opal.large_array_unpack("0,128,128,128,128,128,128,128,1,1,1,128,1,1,1,1,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,1,1,1,1,9,1,1,1,1,1,1,1,1,128,1,128,84,1,84,1,1,1,1,1,1,128,1,84,84,84,84,84,1,128,128,66,1,128,128,1,1,1,1,128,87,1,128,128,128,128,128,128,1,1,128,15,10,10,10,10,1,1,1,1,1,1,1,128,1,84,84,84,84,84,84,1,1,84,84,1,1,1,1,1,1,1,1,1,1,1,1,1,1,27,0,29,128,10,128,128,128,128,24,0,66,1,1,128,128,10,1,1,1,1,1,2,1,66,1,2,128,128,128,128,128,128,128,1,1,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,1,128,128,24,1,1,1,1,0,128,128,1,0,24,0,66,1,1,1,1,1,2,1,66,1,2,128,1,1,1,127,128,62,53,53,0,53,54,1,1,1,24,0,128,0,116,0,1,1,0,53,1,1,1,24,1,128,1,1,1,1,128,128,128,0,128,1,124,24,1,1,1,0,1,0,128,128,24,0,1,1,1,0,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,4,0,66,1,0,0,0,24,1,24,66,1,1,128,24,0,20,1,84,84,84,1,1,1,27,128,128,1,0,66,2,0,0,0,0,66,128,10,1,1,1,2,1,1,2,128,10,128,1,1,2,0,25,30,1,1,66,2,27,128,128,128,0,1,0,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,66,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,0,64,93,24,0,1,1,1,0,128,128,24,0,1,1,1,0,128,128,1,0,24,0,66,1,1,128,128,10,1,24,0,0,20,2,12,1,1,54,48,75,67,15,58,1,0,5,0,0,67,67,67,67,10,1,0,5,1,0,0,67,67,67,67,67,67,67,67,69,67,69,67,1,2,1,66,1,2,128,128,0,128,128,128,128,128,128,0,1,0,0,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,84,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,0,64,0,84,84,84,1,1,1,1,1,52,1,92,101,91,1,96,24,0,1,1,1,24,1,1")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_index_offsets"); return self.$private("_lex_index_offsets", "_lex_index_offsets="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_index_offsets='](Opal.large_array_unpack("0,0,129,258,387,516,645,774,903,905,907,909,1038,1040,1042,1044,1046,1175,1304,1433,1562,1691,1820,1949,2078,2207,2336,2465,2594,2723,2852,2981,3110,3239,3368,3370,3372,3374,3376,3386,3388,3390,3392,3394,3396,3398,3400,3402,3531,3533,3662,3747,3749,3834,3836,3838,3840,3842,3844,3846,3975,3977,4062,4147,4232,4317,4402,4404,4533,4662,4729,4731,4860,4989,4991,4993,4995,4997,5126,5214,5216,5345,5474,5603,5732,5861,5990,5992,5994,6123,6139,6150,6161,6172,6183,6185,6187,6189,6191,6193,6195,6197,6326,6328,6413,6498,6583,6668,6753,6838,6840,6842,6927,7012,7014,7016,7018,7020,7022,7024,7026,7028,7030,7032,7034,7036,7038,7040,7068,7069,7099,7228,7239,7368,7497,7626,7755,7780,7781,7848,7850,7852,7981,8110,8121,8123,8125,8127,8129,8131,8134,8136,8203,8205,8208,8337,8466,8595,8724,8853,8982,9111,9113,9115,9244,9373,9502,9631,9760,9889,10018,10147,10276,10405,10534,10663,10792,10921,11050,11179,11308,11437,11566,11695,11824,11953,12082,12211,12340,12469,12598,12727,12856,12985,13114,13243,13372,13501,13630,13759,13888,14017,14146,14275,14404,14533,14662,14791,14920,15049,15178,15307,15436,15565,15694,15823,15952,16081,16210,16339,16468,16597,16726,16855,16984,17113,17242,17371,17500,17629,17758,17887,18016,18145,18274,18403,18532,18661,18790,18919,19048,19177,19306,19435,19564,19693,19822,19824,19953,20082,20107,20109,20111,20113,20115,20116,20245,20374,20376,20377,20402,20403,20470,20472,20474,20476,20478,20480,20483,20485,20552,20554,20557,20686,20688,20690,20692,20820,20949,21012,21066,21120,21121,21175,21230,21232,21234,21236,21261,21262,21391,21392,21509,21510,21512,21514,21515,21569,21571,21573,21575,21600,21602,21731,21733,21735,21737,21739,21868,21997,22126,22127,22256,22258,22383,22408,22410,22412,22414,22415,22417,22418,22547,22676,22701,22702,22704,22706,22708,22709,22838,22967,23096,23225,23354,23483,23612,23741,23870,23999,24128,24257,24386,24515,24644,24773,24902,25031,25036,25037,25104,25106,25107,25108,25109,25134,25136,25161,25228,25230,25232,25361,25386,25387,25408,25410,25495,25580,25665,25667,25669,25671,25699,25828,25957,25959,25960,26027,26030,26031,26032,26033,26034,26101,26230,26241,26243,26245,26247,26250,26252,26254,26257,26386,26397,26526,26528,26530,26533,26534,26560,26591,26593,26595,26662,26665,26693,26822,26951,27080,27081,27083,27084,27213,27342,27471,27600,27729,27858,27987,28116,28245,28374,28503,28632,28761,28890,29019,29148,29277,29406,29535,29664,29793,29922,30051,30180,30309,30438,30567,30696,30825,30954,31083,31212,31341,31470,31599,31728,31857,31986,32115,32244,32373,32502,32631,32760,32889,33018,33147,33276,33405,33534,33663,33792,33921,34050,34179,34308,34437,34566,34695,34824,34953,35020,35149,35278,35407,35536,35665,35794,35923,36052,36181,36310,36439,36568,36697,36826,36955,37084,37213,37342,37471,37600,37729,37858,37987,38116,38245,38246,38311,38405,38430,38431,38433,38435,38437,38438,38567,38696,38721,38722,38724,38726,38728,38729,38858,38987,38989,38990,39015,39016,39083,39085,39087,39216,39345,39356,39358,39383,39384,39385,39406,39409,39422,39424,39426,39481,39530,39606,39674,39690,39749,39751,39752,39758,39759,39760,39828,39896,39964,40032,40043,40045,40046,40052,40054,40055,40056,40124,40192,40260,40328,40396,40464,40532,40600,40670,40738,40808,40876,40878,40881,40883,40950,40952,40955,41084,41213,41214,41343,41472,41601,41730,41859,41988,41989,41991,41992,41993,42122,42251,42380,42509,42638,42767,42896,43025,43154,43283,43412,43541,43670,43799,43928,44057,44186,44315,44444,44573,44702,44831,44960,45089,45218,45347,45476,45605,45734,45863,45992,46121,46250,46379,46508,46637,46766,46851,46980,47109,47238,47367,47496,47625,47754,47883,48012,48141,48270,48399,48528,48657,48786,48915,49044,49173,49302,49431,49560,49689,49818,49947,50076,50205,50334,50463,50592,50721,50850,50979,51108,51237,51366,51495,51624,51753,51882,52011,52140,52269,52398,52527,52656,52785,52914,53043,53172,53301,53430,53559,53688,53817,53946,54075,54204,54333,54462,54591,54720,54849,54978,55107,55236,55237,55302,55303,55388,55473,55558,55560,55562,55564,55566,55568,55621,55623,55716,55818,55910,55912,56009,56034,56035,56037,56039,56041,56066,56068")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_indicies"); return self.$private("_lex_indicies", "_lex_indicies="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_indicies='](Opal.large_array_unpack("2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,1,1,2,2,1,1,1,3,1,1,4,4,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,2,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,1,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,5,5,2,2,2,2,2,2,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,2,2,2,5,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,2,2,2,2,5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2,7,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2,2,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,8,9,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,8,8,9,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,10,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,14,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,15,12,12,12,12,14,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,13,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,12,13,15,12,12,16,17,12,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,20,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,21,18,18,18,18,20,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,18,18,18,18,19,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,18,18,18,18,18,19,21,18,23,22,24,22,25,22,22,22,22,22,22,22,22,22,22,27,22,27,27,27,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,27,22,22,22,22,28,29,22,30,22,31,32,33,34,35,28,22,22,22,22,22,22,22,22,22,22,36,22,37,33,38,39,22,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,40,41,33,42,26,22,26,26,26,26,26,26,26,26,43,26,26,26,26,26,26,26,26,44,26,26,45,26,46,26,26,26,47,48,22,42,22,26,22,22,22,22,22,22,22,22,22,49,22,49,49,49,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,49,22,22,22,22,50,51,22,52,22,53,54,55,56,57,50,22,22,22,22,22,22,22,22,22,22,58,22,59,55,60,61,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,62,63,55,24,19,22,19,19,19,19,19,19,19,19,64,19,19,19,19,19,19,19,19,65,19,19,66,19,67,19,19,19,68,69,22,24,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,70,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,71,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,72,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,73,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,74,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,70,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,19,19,75,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,76,19,19,19,19,19,19,19,77,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,78,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,79,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,70,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,80,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,70,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,81,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,82,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,74,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,84,83,85,83,86,83,55,83,87,83,83,83,83,83,83,83,88,83,89,83,90,83,55,83,91,83,55,83,92,83,86,83,94,93,95,95,95,95,95,95,95,95,95,97,95,97,97,97,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,97,95,95,95,95,95,95,95,98,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,95,99,95,95,96,95,96,96,96,100,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,95,95,95,95,95,96,101,95,95,95,95,95,95,95,95,95,95,103,95,103,103,103,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,103,95,95,95,95,95,95,95,104,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,95,105,95,95,102,95,102,102,102,106,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,95,95,95,95,95,102,108,107,108,108,108,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,108,107,107,107,107,107,107,107,109,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,110,107,111,107,112,107,112,112,112,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,112,107,107,107,107,107,107,107,113,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,114,107,115,116,118,117,119,117,120,117,121,117,122,117,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,123,123,123,123,123,123,123,123,123,123,124,124,124,124,124,124,124,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,124,124,124,124,124,124,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,124,124,124,124,124,123,125,115,126,127,126,126,126,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,126,115,115,128,115,115,115,115,115,115,115,115,115,115,115,115,129,129,129,129,129,129,129,129,129,129,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,130,115,131,132,131,131,131,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,131,115,115,133,115,115,115,115,115,115,115,115,115,115,115,115,134,134,134,134,134,134,134,134,134,134,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,135,115,137,138,137,137,137,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,137,136,136,139,136,136,136,136,136,136,136,136,136,136,136,136,140,140,140,140,140,140,140,140,140,140,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,141,136,143,144,143,143,143,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,143,142,142,145,142,142,142,142,142,142,142,142,142,142,142,142,146,146,146,146,146,146,146,146,146,146,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,147,142,143,148,143,143,143,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,143,142,142,145,142,142,142,142,142,142,142,142,142,142,142,142,146,146,146,146,146,146,146,146,146,146,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,147,142,127,115,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,151,151,149,151,149,151,151,149,149,151,151,151,152,151,151,153,153,153,153,153,153,153,153,153,153,151,151,151,151,151,151,151,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,149,151,149,149,150,151,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,149,149,149,151,149,150,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,151,151,151,151,151,151,151,151,151,151,149,149,149,149,149,149,149,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,149,149,149,149,151,149,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,149,149,149,149,149,151,154,151,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,151,149,154,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,156,149,149,149,149,157,149,149,149,149,149,158,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,125,149,149,149,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,149,149,149,149,155,159,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,149,149,149,158,149,155,161,161,161,161,161,161,161,161,161,161,162,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,160,160,160,160,160,160,160,160,160,160,161,161,161,161,161,161,161,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,161,161,161,161,160,161,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,161,161,161,161,161,160,164,163,167,166,162,161,167,168,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,156,149,149,149,149,157,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,149,149,149,149,155,159,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,149,149,149,149,149,155,170,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,167,169,167,170,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,172,115,115,115,115,115,115,115,115,115,115,115,115,115,115,171,171,171,171,171,171,171,171,171,171,173,115,115,174,115,172,115,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,115,115,115,115,171,115,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,115,115,115,115,115,171,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,172,149,149,149,149,149,149,149,149,149,149,149,149,149,149,171,171,171,171,171,171,171,171,171,171,173,149,149,174,149,172,149,171,171,171,171,171,171,175,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,171,149,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,149,171,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,172,149,149,149,149,149,149,149,149,149,149,149,149,149,149,171,171,171,171,171,171,171,171,171,171,173,149,149,174,149,172,149,171,171,171,171,171,171,171,171,176,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,171,149,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,149,171,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,172,149,149,149,149,149,149,149,149,149,149,149,149,149,149,171,171,171,171,171,171,171,171,171,171,173,149,149,174,149,172,149,171,171,171,171,171,171,171,171,171,171,171,171,171,177,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,171,149,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,149,171,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,172,149,149,149,149,149,149,149,149,149,149,149,149,149,149,171,171,171,171,171,171,171,171,171,171,173,149,149,174,149,172,149,171,171,171,177,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,171,149,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,149,171,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,180,178,178,178,178,178,178,178,178,178,178,178,178,178,178,179,179,179,179,179,179,179,179,179,179,181,178,178,178,178,180,178,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,178,178,178,178,179,178,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,178,178,178,178,178,179,181,178,178,182,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,184,184,184,184,184,184,184,184,184,184,183,183,183,183,183,183,183,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,183,183,183,183,184,183,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,183,183,183,183,183,184,186,185,186,185,185,187,187,187,187,187,187,187,187,187,187,185,187,187,187,187,187,187,187,187,187,187,185,188,188,188,188,188,188,188,188,188,188,185,190,190,190,190,190,190,190,190,190,190,189,191,191,191,191,191,191,191,191,191,191,189,193,192,194,192,195,192,196,192,198,197,199,197,200,197,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,201,201,201,201,201,201,201,201,201,201,183,183,183,183,183,183,183,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,183,183,183,183,201,183,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,183,183,183,183,183,201,202,189,203,204,203,203,203,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,203,189,189,205,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,206,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,207,189,208,209,208,208,208,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,208,189,189,210,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,211,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,212,189,214,215,214,214,214,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,214,213,213,216,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,217,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,218,213,220,221,220,220,220,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,220,219,219,222,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,223,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,224,219,220,221,220,220,220,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,220,219,219,222,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,225,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,224,219,220,226,220,220,220,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,220,219,219,222,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,223,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,224,219,227,189,204,189,229,230,229,229,229,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,229,228,228,231,228,228,232,228,228,228,228,228,228,228,233,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,234,228,236,230,236,236,236,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,236,235,235,231,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,234,235,239,238,241,240,242,237,243,237,244,228,246,245,247,245,248,245,249,245,250,245,251,245,252,245,253,245,254,245,255,245,245,245,255,245,245,245,245,245,256,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,255,245,257,258,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,259,2,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,0,0,0,0,0,0,0,0,0,0,260,260,260,260,260,260,260,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,260,260,260,260,0,260,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,260,260,260,260,260,0,4,4,4,4,4,4,4,4,4,4,260,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,5,5,5,5,5,5,5,5,5,5,261,261,261,261,261,261,261,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,261,261,261,261,5,261,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,261,261,261,261,261,5,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,7,7,7,7,7,7,7,7,7,7,262,262,262,262,262,262,262,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,262,262,262,262,7,262,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,262,262,262,262,262,7,264,265,265,265,264,265,265,265,265,266,267,266,266,266,265,265,265,265,265,265,265,265,265,265,265,265,264,265,265,265,265,265,266,268,265,269,270,271,272,265,265,265,273,274,265,274,265,275,265,265,265,265,265,265,265,265,265,265,276,265,277,278,279,265,265,280,281,280,280,282,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,283,284,265,275,285,275,286,287,288,289,290,291,263,263,292,263,263,263,293,294,295,263,263,296,297,298,299,263,300,263,301,263,265,302,265,274,265,263,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,304,303,303,303,303,303,303,303,303,303,303,303,303,303,303,263,263,263,263,263,263,263,263,263,263,303,303,303,304,303,304,303,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,303,303,303,303,263,303,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,303,303,303,303,303,263,266,305,266,266,266,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,266,305,306,275,307,307,275,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,275,307,308,309,310,311,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,9,9,312,9,312,9,9,312,312,9,9,9,314,9,9,315,315,315,315,315,315,315,315,315,315,9,9,9,9,9,9,9,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,312,9,312,312,313,9,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,312,312,312,9,312,313,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,313,313,313,313,313,313,313,313,313,313,316,316,316,316,316,316,316,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,316,316,316,316,313,316,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,316,316,316,316,316,313,315,315,315,315,315,315,315,315,315,315,316,317,307,275,307,275,307,275,307,319,318,275,320,307,275,307,321,275,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,275,312,275,307,275,275,307,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,304,303,303,303,303,303,303,303,303,303,303,303,303,303,303,280,280,280,280,280,280,280,280,280,280,303,303,303,304,303,304,303,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,303,303,303,303,280,303,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,303,303,303,303,303,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,280,323,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,280,280,280,324,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,280,280,280,280,280,325,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,280,280,280,280,280,280,280,280,280,280,326,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,280,280,280,280,280,280,280,280,280,280,327,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,326,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,321,312,267,312,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,329,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,330,331,263,263,263,263,263,332,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,333,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,334,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,335,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,336,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,337,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,338,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,339,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,340,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,341,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,342,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,343,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,339,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,344,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,343,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,345,263,346,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,347,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,348,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,349,263,263,263,263,263,263,263,263,263,263,263,263,350,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,351,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,352,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,353,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,354,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,355,263,263,263,263,263,263,263,263,263,263,356,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,357,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,358,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,348,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,359,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,360,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,304,361,361,361,361,361,361,361,361,361,361,361,361,361,361,263,263,263,263,263,263,263,263,263,263,361,361,361,304,361,304,361,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,361,361,361,361,263,361,263,263,263,263,263,263,263,263,362,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,361,361,361,361,361,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,363,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,364,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,365,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,366,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,367,263,368,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,369,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,341,263,263,263,370,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,371,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,372,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,357,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,373,263,263,263,263,263,263,263,263,263,263,263,263,263,295,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,355,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,341,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,374,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,375,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,376,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,357,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,377,263,263,263,378,263,263,263,263,263,379,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,379,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,380,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,381,263,263,263,263,263,263,263,263,263,263,263,263,263,263,382,383,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,384,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,357,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,385,263,263,386,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,352,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,387,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,388,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,370,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,389,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,295,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,390,263,263,263,263,263,263,263,263,263,384,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,352,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,391,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,392,263,263,263,263,263,263,263,393,263,263,263,263,263,263,263,394,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,370,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,358,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,378,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,395,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,352,263,263,263,376,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,396,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,397,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,346,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,275,307,399,400,400,400,399,400,400,400,400,401,400,401,401,401,400,400,400,400,400,400,400,400,400,400,400,400,399,400,400,400,400,400,401,400,400,402,400,400,400,400,400,400,400,400,400,400,403,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,400,404,400,400,398,400,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,400,400,400,400,400,398,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,14,405,405,405,405,405,405,405,405,405,405,405,405,405,405,13,13,13,13,13,13,13,13,13,13,15,405,405,405,405,14,405,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,405,405,405,405,13,405,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,405,405,405,405,405,13,401,406,401,401,401,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,401,406,407,408,409,410,411,405,412,405,413,415,416,416,416,415,416,416,416,416,417,418,417,417,417,416,416,416,416,416,416,416,416,416,416,416,416,415,416,416,416,416,416,417,419,416,420,416,421,422,416,416,416,423,424,416,424,416,421,416,416,416,416,416,416,416,416,416,416,416,416,425,426,427,416,416,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,429,430,416,421,414,421,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,416,431,416,424,416,414,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,433,432,432,432,432,432,432,432,432,432,432,432,432,432,432,414,414,414,414,414,414,414,414,414,414,432,432,432,432,432,433,432,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,432,432,432,432,414,432,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,432,432,432,432,432,414,435,434,436,417,437,417,417,417,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,417,437,438,421,439,439,421,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,421,439,440,441,442,443,421,439,421,439,421,439,421,444,439,421,439,446,421,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,421,445,421,439,421,421,439,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,433,447,447,447,447,447,447,447,447,447,447,447,447,447,447,428,428,428,428,428,428,428,428,428,428,447,447,447,447,447,433,447,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,447,447,447,447,428,447,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,447,447,447,447,447,428,446,445,418,445,421,439,449,448,448,448,449,448,448,448,448,450,451,450,450,450,448,448,448,448,448,448,448,448,448,448,448,448,449,448,448,448,448,448,450,448,448,452,448,24,453,448,454,448,455,24,55,456,57,24,448,448,448,448,448,448,448,448,448,448,457,448,458,55,459,460,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,55,461,55,24,448,448,448,448,448,448,448,448,448,448,462,448,448,448,448,448,448,448,448,463,448,448,464,448,465,448,448,448,68,69,448,24,448,466,466,466,466,466,466,466,466,466,450,466,450,450,450,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,450,466,466,466,466,50,51,466,52,466,53,54,55,56,57,50,466,466,466,466,466,466,466,466,466,466,58,466,59,55,60,61,466,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,62,63,55,24,19,466,19,19,19,19,19,19,19,19,64,19,19,19,19,19,19,19,19,65,19,19,66,19,67,19,19,19,68,69,466,24,466,19,467,468,468,468,467,468,468,468,468,55,469,55,55,55,468,468,468,468,468,468,468,468,468,468,468,468,467,468,468,468,468,468,55,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,55,468,55,469,55,55,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,18,18,18,18,18,24,18,18,18,18,18,18,18,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,18,55,469,55,55,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,18,470,55,469,55,55,55,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,55,471,471,471,471,471,471,471,471,471,472,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,55,471,55,469,55,55,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,55,18,473,467,55,467,475,474,477,478,477,477,477,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,477,476,479,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,20,467,467,467,467,467,467,467,467,467,467,467,467,467,467,19,19,19,19,19,19,19,19,19,19,21,467,467,467,467,20,467,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,467,467,467,467,19,467,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,467,467,467,467,467,19,480,55,469,55,55,55,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,55,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,55,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,24,467,481,482,483,484,485,486,55,469,55,55,55,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,55,467,467,467,467,467,467,467,467,467,24,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,55,467,55,474,24,487,24,487,488,489,488,488,488,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,488,476,490,487,491,491,491,491,491,491,491,491,491,27,491,27,27,27,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,27,491,491,491,491,28,29,491,30,491,31,32,33,34,35,28,491,491,491,491,491,491,491,491,491,491,36,491,37,33,38,39,491,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,40,41,33,42,26,491,26,26,26,26,26,26,26,26,43,26,26,26,26,26,26,26,26,44,26,26,45,26,46,26,26,26,47,48,491,42,491,26,55,487,492,487,493,487,494,487,495,94,94,94,495,94,94,94,94,496,94,496,496,496,94,94,94,94,94,94,94,94,94,94,94,94,495,94,94,94,94,94,496,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,94,497,94,94,96,94,96,96,96,100,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,94,94,94,94,94,96,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,498,93,93,93,93,93,93,93,93,93,93,93,93,93,93,96,96,96,96,96,96,96,96,96,96,94,93,93,93,93,498,93,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,93,93,93,93,96,93,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,93,93,93,93,93,96,499,499,499,499,499,499,499,499,499,97,499,97,97,97,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,97,499,499,499,499,499,499,499,98,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,499,99,499,499,96,499,96,96,96,100,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,499,499,499,499,499,96,500,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,498,499,499,499,499,499,499,499,499,499,499,499,499,499,499,96,96,96,96,96,96,96,96,96,96,94,499,499,499,499,498,499,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,499,499,499,499,96,499,96,96,96,96,96,96,96,96,96,96,96,96,96,96,501,96,96,96,96,96,96,96,96,96,96,96,499,499,499,499,499,96,101,499,503,502,502,502,503,502,502,502,502,504,502,504,504,504,502,502,502,502,502,502,502,502,502,502,502,502,503,502,502,502,502,502,504,502,502,505,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,506,502,502,502,502,502,502,502,507,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,508,502,504,509,504,504,504,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,504,509,510,511,512,513,515,514,516,517,514,518,520,521,521,521,520,521,521,521,521,522,523,522,522,522,521,521,521,521,521,521,521,521,521,521,521,521,520,521,521,521,521,521,522,521,521,524,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,521,525,521,521,519,521,519,519,519,519,519,519,519,519,526,519,519,519,519,519,519,519,519,527,519,519,528,519,529,519,519,519,521,521,521,521,521,519,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,519,519,519,519,519,519,519,519,519,519,530,530,530,530,530,530,530,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,530,530,530,530,519,530,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,530,530,530,530,530,519,522,531,522,522,522,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,522,531,532,533,534,535,536,538,537,539,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,541,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,542,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,543,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,544,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,545,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,541,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,519,519,546,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,547,519,519,519,519,519,519,519,548,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,549,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,550,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,541,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,551,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,541,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,552,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,553,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,545,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,555,125,125,125,555,125,125,125,125,556,557,556,556,556,125,125,125,125,125,125,125,125,125,125,125,125,555,125,125,125,125,125,556,558,125,559,125,560,561,125,562,125,563,564,125,565,566,567,125,125,125,125,125,125,125,125,125,125,568,125,569,570,571,572,125,573,574,573,573,575,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,576,577,125,578,579,125,580,581,582,583,584,585,554,554,586,554,554,554,587,588,589,554,554,590,591,592,593,554,594,554,595,554,596,597,125,578,125,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,602,601,601,603,601,604,606,607,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,608,605,610,609,611,612,613,556,614,556,556,556,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,556,614,616,615,618,619,618,618,618,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,618,617,125,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,125,620,621,622,623,624,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,625,625,625,625,625,625,625,625,625,625,626,626,626,626,626,626,626,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,626,626,626,626,626,626,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,626,626,626,626,626,625,629,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,125,628,630,632,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,125,631,125,115,126,127,126,126,126,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,126,628,628,128,628,628,628,628,628,628,628,628,628,628,628,628,129,129,129,129,129,129,129,129,129,129,628,628,628,125,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,130,628,143,144,143,143,143,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,143,142,142,145,142,142,142,142,142,142,142,142,142,142,142,142,146,146,146,146,146,146,146,146,146,146,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,147,142,126,127,126,126,126,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,126,628,628,128,628,628,628,628,628,628,628,628,628,628,628,628,129,129,129,129,129,129,129,129,129,129,628,628,628,125,125,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,130,628,634,620,636,635,638,637,620,639,639,639,620,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,620,639,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,641,642,620,643,151,644,642,620,620,645,646,620,646,620,151,620,620,620,620,620,620,620,620,620,620,647,620,648,649,650,620,651,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,652,620,620,151,640,151,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,620,653,620,654,620,640,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,656,655,655,655,655,655,655,655,655,655,655,655,655,655,655,640,640,640,640,640,640,640,640,640,640,655,655,655,657,655,656,655,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,655,655,655,655,640,655,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,655,655,655,655,655,640,659,658,660,662,663,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,664,661,666,667,665,668,669,670,671,151,655,655,672,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,151,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,150,150,150,150,150,150,150,150,150,150,655,655,655,655,655,655,655,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,655,655,655,655,150,655,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,655,655,655,655,655,150,153,153,153,153,153,153,153,153,153,153,655,673,655,151,655,151,655,151,674,655,151,655,151,655,151,151,655,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,677,677,677,677,677,677,677,677,677,677,675,675,675,675,675,675,678,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,675,675,675,675,676,675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,675,675,675,675,675,676,680,680,680,680,680,680,680,680,680,680,679,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,683,683,683,683,683,683,683,683,683,683,681,681,681,681,681,681,681,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,681,681,681,681,682,681,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,681,681,681,681,681,682,673,655,672,655,684,685,620,686,166,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,167,156,168,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,167,157,167,170,125,620,578,125,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,125,620,125,629,620,690,689,689,689,690,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,690,689,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,172,115,115,115,115,115,115,115,115,115,115,115,115,115,115,171,171,171,171,171,171,171,171,171,171,173,115,115,174,115,172,115,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,115,115,115,115,171,115,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,115,115,115,115,115,171,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,172,620,620,620,620,620,620,620,620,620,620,620,620,620,620,171,171,171,171,171,171,171,171,171,171,173,620,620,174,620,172,620,171,171,171,171,691,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,620,620,620,620,171,620,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,620,620,620,620,620,171,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,172,620,620,620,620,620,620,620,620,620,620,620,620,620,620,171,171,171,171,171,171,171,171,171,171,173,620,620,174,620,172,620,171,171,171,171,171,171,171,171,171,171,171,171,171,692,171,171,171,171,171,171,171,171,171,171,171,171,620,620,620,620,171,620,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,620,620,620,620,620,171,693,694,620,615,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,695,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,696,697,554,554,554,554,554,698,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,699,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,700,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,701,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,702,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,703,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,704,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,705,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,706,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,707,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,172,115,115,115,115,115,115,115,115,115,115,115,115,115,115,554,554,554,554,554,554,554,554,554,554,173,115,115,174,115,172,115,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,115,115,115,115,554,115,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,115,115,115,115,115,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,708,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,709,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,705,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,710,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,709,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,711,554,712,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,713,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,714,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,715,554,554,554,554,554,554,554,554,554,554,554,554,716,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,717,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,718,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,719,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,720,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,721,554,554,554,554,554,554,554,554,554,554,722,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,723,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,724,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,714,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,725,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,726,554,727,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,728,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,707,554,554,554,725,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,729,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,730,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,723,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,731,554,554,554,554,554,554,554,554,554,554,554,554,554,589,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,721,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,732,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,733,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,734,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,735,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,723,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,736,554,554,554,737,554,554,554,554,554,738,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,738,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,739,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,740,554,554,554,554,554,554,554,554,554,554,554,554,554,554,741,742,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,743,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,744,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,745,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,748,746,746,746,746,746,746,746,746,746,746,746,746,746,746,747,747,747,747,747,747,747,747,747,747,749,746,746,750,746,748,746,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,746,746,746,746,747,746,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,746,746,746,746,746,747,606,751,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,608,605,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,752,554,554,753,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,718,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,754,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,755,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,725,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,756,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,589,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,757,554,554,554,554,554,554,554,554,554,758,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,718,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,723,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,759,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,760,554,554,554,554,554,554,554,761,554,554,554,554,554,554,554,762,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,725,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,763,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,764,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,732,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,765,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,732,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,766,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,718,554,554,554,767,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,768,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,732,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,769,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,770,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,712,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,771,125,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,772,620,774,773,773,773,774,773,773,773,773,775,776,775,775,775,773,773,773,773,773,773,773,773,773,773,773,773,774,773,773,773,773,773,775,773,773,777,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,778,773,775,779,775,775,775,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,775,779,780,781,782,783,784,786,785,787,789,790,790,790,789,790,790,790,790,791,792,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790,789,790,790,790,790,790,791,790,793,794,790,790,790,793,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,790,795,790,790,788,790,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,790,790,790,790,790,788,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,180,796,796,796,796,796,796,796,796,796,796,796,796,796,796,179,179,179,179,179,179,179,179,179,179,181,796,796,796,796,180,796,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,796,796,796,796,179,796,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,796,796,796,796,796,179,791,797,791,791,791,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,791,797,798,799,800,801,802,803,796,804,806,807,807,807,806,807,807,807,807,808,809,808,808,808,807,807,807,807,807,807,807,807,807,807,807,807,806,807,807,807,807,807,808,810,811,812,813,814,815,811,816,817,818,814,819,820,821,814,822,823,823,823,823,823,823,823,823,823,824,825,826,827,828,829,830,831,832,831,831,833,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,834,835,836,814,837,811,838,839,840,841,842,843,805,805,844,805,805,805,845,846,847,805,805,848,849,850,851,805,852,805,853,805,854,855,856,857,807,805,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,858,189,189,189,189,189,189,189,189,189,189,189,189,189,189,805,805,805,805,805,805,805,805,805,805,189,189,189,189,189,858,189,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,189,189,189,189,805,189,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,189,189,189,189,189,805,860,859,861,808,862,808,808,808,862,862,862,862,862,862,862,862,862,862,862,862,862,862,862,862,862,862,808,862,863,865,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,865,864,866,867,868,869,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,184,184,870,184,870,184,184,870,870,184,184,184,871,184,184,872,872,872,872,872,872,872,872,872,872,184,184,184,184,184,184,184,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,870,184,870,870,201,184,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,870,870,870,184,870,201,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,201,201,201,201,201,201,201,201,201,201,873,873,873,873,873,873,873,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,873,873,873,873,201,873,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,873,873,873,873,873,201,872,872,872,872,872,872,872,872,872,872,873,874,189,814,875,875,875,875,875,875,875,876,875,875,875,875,875,875,875,875,875,875,875,875,875,875,874,875,877,878,814,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,874,879,874,880,875,882,881,188,188,188,188,188,188,188,188,188,188,881,884,883,885,883,188,188,188,188,188,188,188,188,188,188,886,886,886,886,886,886,886,886,886,886,886,887,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,888,886,886,886,886,886,887,886,187,187,187,187,187,187,187,187,187,187,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,186,886,890,889,891,891,891,891,891,891,891,891,891,891,889,889,889,889,889,889,889,889,892,889,893,894,889,889,889,889,889,889,889,889,889,895,889,889,889,889,889,889,889,889,896,889,889,889,889,889,889,897,889,889,892,889,893,894,889,889,889,898,889,889,889,889,889,895,889,889,899,889,889,889,889,889,896,889,190,190,190,190,190,190,190,190,190,190,900,900,900,900,900,900,900,900,900,900,900,901,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,902,900,900,900,900,900,901,900,900,900,903,900,900,900,900,900,900,900,900,904,900,905,189,905,189,189,191,191,191,191,191,191,191,191,191,191,189,191,191,191,191,191,191,191,191,191,191,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,905,906,906,906,906,906,906,906,906,906,907,906,909,908,910,912,911,911,911,913,911,914,915,891,891,891,891,891,891,891,891,891,891,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,897,889,889,889,889,889,889,889,889,889,898,889,889,889,889,889,889,889,889,899,889,916,916,916,916,916,916,916,916,916,916,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,917,889,889,889,889,889,889,889,889,889,898,889,889,889,889,889,889,889,889,899,889,919,919,919,919,919,919,919,919,919,919,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,920,918,918,918,918,918,918,918,918,918,921,918,918,918,918,918,918,918,918,922,918,919,919,919,919,919,919,919,919,919,919,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,923,918,918,918,918,918,918,918,918,918,921,918,918,918,918,918,918,918,918,922,918,921,918,918,918,918,918,918,918,918,922,918,925,924,926,928,927,927,927,929,927,931,930,932,933,935,935,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,936,934,934,934,934,934,934,934,934,934,937,934,934,934,934,934,934,934,934,938,934,939,939,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,940,918,918,918,918,918,918,918,918,918,921,918,918,918,918,918,918,918,918,922,918,939,939,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,923,918,918,918,918,918,918,918,918,918,921,918,918,918,918,918,918,918,918,922,918,942,942,942,942,942,942,942,942,942,942,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,943,941,941,941,941,941,941,941,941,941,944,941,941,941,941,941,941,941,941,945,941,947,947,947,947,947,947,947,947,947,947,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,948,946,946,946,946,946,946,946,946,946,949,946,946,946,946,946,946,946,946,950,946,952,952,952,952,952,952,952,952,952,952,951,951,951,951,951,951,951,952,952,952,952,952,952,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,953,951,952,952,952,952,952,952,951,951,954,951,951,951,951,951,951,951,951,955,951,956,956,956,956,956,956,956,956,956,956,918,918,918,918,918,918,918,956,956,956,956,956,956,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,957,918,956,956,956,956,956,956,918,918,921,918,918,918,918,918,918,918,918,922,918,956,956,956,956,956,956,956,956,956,956,918,918,918,918,918,918,918,956,956,956,956,956,956,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,923,918,956,956,956,956,956,956,918,918,921,918,918,918,918,918,918,918,918,922,918,959,958,960,960,960,960,960,960,960,960,960,960,958,958,958,958,958,958,958,958,958,958,958,961,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,962,958,958,958,958,958,961,958,958,958,963,958,958,958,958,958,958,958,958,964,958,965,965,965,965,965,965,965,965,965,965,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,966,958,958,958,958,958,958,958,958,958,963,958,958,958,958,958,958,958,958,964,958,967,918,968,968,968,968,968,968,968,968,968,968,918,918,918,918,918,918,918,918,918,918,918,969,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,970,918,918,918,918,918,969,918,918,918,921,918,918,918,918,918,918,918,918,922,918,968,968,968,968,968,968,968,968,968,968,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,923,918,918,918,918,918,918,918,918,918,921,918,918,918,918,918,918,918,918,922,918,876,883,814,971,875,865,875,972,973,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,865,883,865,875,865,814,875,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,201,201,201,201,201,201,201,201,201,201,870,870,870,870,870,870,974,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,870,870,870,870,201,870,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,870,870,870,870,870,201,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,858,189,189,189,189,189,189,189,189,189,189,189,189,189,189,831,831,831,831,831,831,831,831,831,831,975,189,189,189,189,858,189,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,189,189,189,189,831,189,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,189,189,189,189,189,831,976,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,831,978,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,831,831,831,979,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,831,831,831,831,831,980,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,831,831,831,831,831,831,831,831,831,831,981,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,831,831,831,831,831,831,831,831,831,831,982,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,981,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,983,985,984,986,987,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,989,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,990,991,805,805,805,805,805,992,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,993,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,994,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,995,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,996,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,997,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,998,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,999,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,1000,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,1001,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,1002,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,1003,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,1004,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,1005,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,1006,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,1007,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,1003,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1008,805,1009,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,1010,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,1011,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1012,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1013,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1014,805,805,805,805,805,805,805,805,805,805,805,805,1015,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,1016,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,1017,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,1013,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1018,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,1019,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,1020,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,1021,805,805,805,805,805,805,805,805,805,805,1022,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1023,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1013,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,1024,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1025,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1026,805,805,805,805,805,805,805,988,988,988,988,988,805,1027,1027,1027,1027,1027,1027,1027,1027,1027,203,204,203,203,203,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,203,858,1027,205,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,805,805,805,805,805,805,805,805,805,805,1027,1027,206,1027,1027,858,1027,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1027,207,1027,1027,805,1027,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1027,1027,1027,1027,1027,805,220,221,220,220,220,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,220,219,219,222,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,225,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,224,219,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1029,805,805,805,805,805,805,805,805,805,1030,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,1031,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,858,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,805,805,805,805,805,805,805,805,805,805,1032,1032,1032,1032,1032,858,1032,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1032,1032,1032,1032,805,1032,805,805,805,805,805,805,805,805,1033,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1032,1032,1032,1032,1032,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,1034,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1035,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1036,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,1037,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1038,805,1039,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1040,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1013,805,805,805,1041,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,1013,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1006,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1042,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1043,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1023,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,1044,805,805,805,805,805,805,805,805,805,805,805,805,805,847,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1045,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1046,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1006,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1013,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,1047,805,805,805,805,805,805,805,1013,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1048,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1049,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1050,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1023,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1051,805,805,805,1052,805,805,805,805,805,1053,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1054,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1020,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1006,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1055,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1056,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1057,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1058,1059,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1006,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,1060,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1061,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1047,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1062,805,805,1063,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1006,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1064,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,1020,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1065,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1066,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1067,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,1006,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1068,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1069,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1055,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,1070,805,805,805,805,805,805,805,805,805,1071,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1017,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1046,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,1072,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1073,805,805,805,805,805,805,805,1074,805,805,805,805,805,805,805,1075,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1076,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,1012,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1077,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1078,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1047,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,1079,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1047,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,1080,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1017,805,805,805,1081,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1082,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1047,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,1083,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1084,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1085,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1055,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,1086,874,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,814,864,1087,1089,1088,1089,1089,1089,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1089,1088,1088,1090,1088,1088,1091,1088,1088,1088,1088,1088,1088,1088,233,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1092,1088,229,230,229,229,229,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,229,1093,1093,231,1093,1093,232,1093,1093,1093,1093,1093,1093,1093,233,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,234,1093,236,1094,236,236,236,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,236,1094,1094,231,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,234,1094,1096,1095,1098,1097,239,238,244,1093,242,1093,1100,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1101,1099,1100,1099,1100,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1103,1099,1100,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1104,1099,1100,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1105,1099,1107,1105,1109,1108,1108,1108,1109,1108,1108,1108,1108,1110,1111,1110,1110,1110,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1109,1108,1108,1108,1108,1108,1110,1108,1108,1112,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1113,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1114,1108,1108,1115,1108,1110,1116,1110,1110,1110,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1110,1116,1117,1118,1119,1120,1121,1123,1122,1125,1126,1125,1125,1125,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1125,1124,1111,1122,1127,1122,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_trans_targs"); return self.$private("_lex_trans_targs", "_lex_trans_targs="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_trans_targs='](Opal.large_array_unpack("130,129,0,2,131,132,4,133,134,134,134,134,247,7,8,9,247,247,276,11,12,276,276,280,280,16,11,17,278,279,281,282,280,276,283,284,286,13,14,287,288,15,280,18,19,24,31,290,291,17,278,279,281,282,280,276,283,284,286,13,14,287,288,15,18,19,24,31,290,291,289,20,21,22,23,25,26,29,27,28,30,32,33,276,35,36,37,39,42,40,41,43,45,307,307,307,308,47,310,48,311,49,308,47,310,48,311,345,50,345,51,52,50,345,51,345,345,345,55,56,57,58,356,345,345,345,61,62,63,345,66,61,62,63,345,66,64,64,62,63,366,65,64,64,62,63,366,65,62,345,383,345,68,384,390,72,399,400,77,78,72,73,398,73,398,345,74,75,76,401,79,80,347,53,349,82,83,406,508,85,86,87,508,516,516,516,90,538,537,516,540,542,516,95,96,97,546,516,99,100,557,526,579,103,104,105,109,110,103,104,105,109,110,106,106,104,105,107,108,106,106,104,105,107,108,627,104,516,696,111,698,113,117,699,115,696,112,696,114,698,114,698,116,698,696,710,119,120,121,716,123,124,125,126,127,710,710,128,1,3,129,129,129,135,134,134,136,137,138,139,141,144,145,146,147,134,148,149,151,153,154,155,159,161,162,163,179,184,191,196,203,210,213,214,218,212,222,230,234,236,241,243,246,134,134,134,134,134,134,140,134,140,134,142,5,143,134,6,134,134,150,152,134,156,157,158,154,160,134,164,165,174,177,166,167,168,169,170,171,172,173,135,175,176,178,180,183,181,182,185,188,186,187,189,190,192,194,193,195,197,198,134,199,200,201,202,134,204,207,205,206,208,209,211,215,216,217,219,221,220,223,224,225,227,226,228,229,231,232,233,235,237,238,239,240,242,244,245,248,247,247,249,250,252,253,247,247,247,251,247,251,10,254,247,256,255,255,259,260,261,262,255,264,265,266,267,269,271,272,273,274,275,255,257,255,258,255,255,255,255,255,263,255,263,268,255,270,255,276,276,277,292,293,279,295,296,283,297,298,299,300,301,303,304,305,306,276,276,276,276,276,276,280,285,276,276,276,276,276,276,276,276,276,294,276,294,276,276,276,276,302,276,34,38,44,307,309,312,46,307,307,308,313,313,314,315,317,319,320,313,313,316,313,316,313,318,313,313,313,322,321,321,323,324,325,327,329,330,335,342,321,321,321,321,326,321,326,321,328,321,321,322,331,332,333,334,336,337,340,338,339,341,343,344,346,345,354,355,357,358,360,361,362,363,365,367,368,371,372,397,403,404,405,406,407,408,409,410,364,412,429,434,441,446,448,454,457,458,462,456,466,477,481,484,492,496,499,500,345,50,51,345,53,348,345,345,350,352,353,345,351,345,345,345,345,345,54,345,345,345,345,345,359,345,359,345,345,59,345,60,345,345,364,345,369,345,370,345,345,345,373,382,345,67,385,386,387,345,388,69,391,392,70,395,396,345,374,376,345,375,345,345,377,380,381,345,378,379,345,345,345,345,345,345,389,345,383,393,394,345,393,345,383,393,71,402,345,345,345,345,345,81,84,345,411,413,414,424,427,415,416,417,418,419,420,421,422,423,425,426,428,430,433,431,432,435,438,436,437,439,440,442,444,443,445,447,449,451,450,452,453,455,423,459,460,461,463,465,464,467,468,469,474,470,471,472,345,346,347,53,473,352,475,476,478,479,480,482,483,485,486,487,490,488,489,491,493,494,495,497,498,345,364,501,501,502,503,504,506,501,501,501,505,501,505,501,507,501,509,508,508,510,511,508,512,514,508,508,508,508,513,508,513,515,508,517,516,516,520,521,522,516,523,525,528,529,530,531,532,516,533,534,539,567,571,516,572,574,576,516,577,578,580,584,586,587,589,590,608,613,620,628,635,642,647,648,652,646,657,667,673,676,685,689,693,694,695,528,518,516,519,516,516,516,516,516,516,524,516,524,516,88,527,516,516,516,516,516,516,516,516,516,535,516,536,516,516,89,91,516,92,548,559,562,541,563,564,549,553,555,516,541,92,543,545,93,516,543,516,544,516,516,94,547,516,516,550,552,516,550,551,553,555,552,516,554,516,516,556,558,516,98,516,516,516,560,552,553,555,560,561,516,550,552,553,555,516,550,552,553,555,516,565,552,553,555,565,566,516,92,567,541,568,553,555,569,552,92,569,541,570,573,575,516,101,102,516,516,581,582,583,578,585,516,516,588,516,516,516,591,592,601,606,593,594,595,596,597,598,599,600,517,602,603,604,605,517,607,609,612,610,611,517,517,614,617,615,616,618,619,517,621,623,622,624,625,626,516,516,629,517,630,516,631,632,633,634,518,636,639,637,638,640,641,643,644,645,517,649,650,651,653,655,656,654,517,658,659,660,663,661,662,664,665,666,668,670,669,671,672,674,675,677,678,680,683,679,681,682,684,686,687,688,690,691,692,516,516,696,697,701,702,703,696,696,696,700,696,696,705,704,706,704,707,708,709,704,704,710,710,711,712,713,715,717,718,710,710,710,714,710,714,710,118,710,710,710,122")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_trans_actions"); return self.$private("_lex_trans_actions", "_lex_trans_actions="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_trans_actions='](Opal.large_array_unpack("0,53,0,0,0,0,0,0,95,65,93,71,111,0,0,0,99,101,161,0,0,135,157,727,733,1,3,3,481,971,3,484,971,499,971,3,3,481,3,487,3,3,901,3,3,3,3,3,3,0,11,925,0,13,925,139,925,0,0,11,0,15,0,0,0,0,0,0,0,0,733,0,0,0,0,0,0,0,0,0,0,0,0,159,0,0,0,0,0,0,0,0,0,171,163,169,742,0,0,0,742,1,905,3,3,3,905,259,0,219,0,1,3,520,3,265,217,261,0,0,0,0,0,255,201,223,0,1,0,195,0,3,478,3,517,3,5,547,829,547,976,547,0,7,550,7,913,7,397,263,0,209,0,0,0,0,751,751,0,0,17,17,676,0,1,257,0,0,0,751,0,0,766,0,0,0,0,766,287,0,0,0,275,351,295,347,0,51,51,353,805,805,349,0,0,0,0,345,0,0,0,0,0,0,1,0,0,0,3,478,3,3,3,5,547,829,547,547,547,0,7,550,7,7,7,917,397,291,371,0,823,0,45,45,0,369,0,373,5,981,0,921,1,909,357,393,0,0,0,0,0,0,0,0,0,381,427,395,0,0,55,59,57,724,75,73,0,1,0,0,51,51,0,0,0,67,0,0,0,0,721,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,63,89,490,85,833,5,553,0,91,0,0,0,83,0,87,69,0,0,79,0,0,0,718,0,81,0,0,0,0,0,0,0,0,0,0,0,0,718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,0,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,105,103,0,0,51,0,109,107,837,5,556,0,0,1,493,0,117,115,0,1,0,0,113,0,0,0,0,0,0,0,0,0,0,121,0,586,0,598,125,496,123,841,5,559,0,0,127,0,119,141,143,736,1,0,733,0,0,733,0,0,0,0,0,0,51,51,51,153,151,131,406,658,147,730,0,149,133,145,137,403,646,463,505,845,5,562,0,661,155,129,400,897,502,0,0,0,165,51,51,0,167,664,739,175,177,0,0,0,0,0,179,849,5,565,0,181,1,508,173,466,748,185,183,0,1,0,0,0,0,0,0,193,189,514,853,5,568,0,191,1,511,187,745,0,0,0,0,0,0,0,0,0,0,0,0,769,225,0,712,0,0,51,757,0,0,757,757,0,0,51,772,0,772,0,772,772,772,0,0,772,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,0,0,247,25,25,592,9,0,604,613,0,766,0,619,0,637,631,625,249,523,3,251,221,412,253,857,5,571,0,231,199,0,241,0,667,229,757,227,0,243,0,245,409,197,0,0,205,0,0,0,0,215,0,0,0,0,0,0,0,235,0,0,589,0,601,610,0,0,0,616,0,0,634,640,628,622,207,203,0,682,19,19,0,237,0,685,21,21,0,0,679,233,239,211,213,0,0,649,1,769,769,769,769,769,769,769,769,769,769,769,769,766,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,763,769,769,769,769,769,769,769,769,769,769,769,769,760,688,933,929,23,23,760,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,469,754,267,269,0,1,0,0,271,529,861,5,574,0,273,1,526,51,281,279,0,1,277,0,0,285,283,535,865,5,577,0,1,532,811,315,313,0,1,0,293,0,51,817,0,0,0,0,307,0,0,799,799,0,309,0,0,0,305,51,808,808,808,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,820,814,595,0,607,341,541,337,301,869,5,580,0,343,0,0,327,303,335,297,670,673,333,289,329,0,339,0,415,323,0,0,966,881,37,0,0,997,0,0,37,706,706,893,802,0,43,715,0,889,41,448,0,451,454,0,0,460,457,37,37,885,0,0,39,39,0,433,0,442,430,51,0,439,0,445,436,956,33,33,700,700,0,0,946,29,29,694,694,951,31,31,697,697,941,27,27,691,691,0,0,961,877,937,991,35,703,703,937,35,709,799,986,0,0,0,299,0,0,643,325,808,808,808,796,808,652,311,1,538,655,331,0,0,0,0,0,0,0,0,0,0,0,0,793,0,0,0,0,796,0,0,0,0,0,778,784,0,0,0,0,0,0,787,0,0,0,0,0,784,321,319,0,775,0,317,0,0,0,0,790,0,0,0,0,0,0,0,0,0,781,0,0,0,0,0,0,0,790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,472,475,359,826,826,45,826,367,361,365,0,363,355,0,421,0,377,0,0,0,375,418,383,385,0,1,0,51,0,51,387,544,873,5,583,0,391,0,389,379,424,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_to_state_actions"); return self.$private("_lex_to_state_actions", "_lex_to_state_actions="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_to_state_actions='](Opal.large_array_unpack("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,47,0,0,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,47,0,0,0,0,0,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,0,47,0,0,0,0,0,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,0,0,47,0,0,0,0,0,47,0,0,0,0,0,0,0,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_from_state_actions"); return self.$private("_lex_from_state_actions", "_lex_from_state_actions="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_from_state_actions='](Opal.large_array_unpack("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,49,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,49,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,49,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,49,0,0,0,0,0,49,0,0,0,0,0,0,0,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_eof_trans"); return self.$private("_lex_eof_trans", "_lex_eof_trans="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_eof_trans='](Opal.large_array_unpack("0,0,0,0,0,9,11,13,13,13,13,19,19,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,84,84,84,84,84,84,84,84,84,84,84,84,94,96,96,96,108,108,108,116,118,118,118,118,118,124,116,116,116,116,116,116,116,150,150,150,150,150,150,116,166,116,166,150,150,116,116,150,150,150,150,179,179,179,184,186,186,186,190,190,193,193,193,193,198,198,198,184,190,190,190,190,190,190,190,190,190,229,236,238,238,238,238,229,246,246,246,246,246,246,246,246,246,246,0,0,261,261,262,263,0,304,306,307,308,309,311,313,317,317,308,308,308,308,319,308,308,313,308,308,304,323,323,323,323,323,323,313,313,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,362,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,308,0,406,407,408,410,406,406,414,0,433,435,437,438,439,440,441,443,440,440,440,440,440,446,440,440,448,446,446,440,0,467,468,19,19,471,472,19,468,468,475,477,480,468,481,468,482,483,485,487,468,475,488,488,477,488,492,488,488,488,488,0,94,500,501,500,500,0,510,511,513,515,517,515,519,0,531,532,533,534,536,538,540,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,0,599,602,605,606,610,612,613,614,615,616,618,621,622,624,626,629,631,632,116,629,634,629,621,636,638,621,621,656,659,661,662,666,669,670,671,672,656,656,656,656,656,656,656,656,656,656,676,680,682,656,656,621,687,688,688,688,621,621,621,689,116,621,621,694,621,616,599,599,599,599,599,599,599,599,599,599,599,116,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,747,606,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,772,621,0,780,781,782,784,786,788,0,797,798,799,800,802,797,805,0,190,860,862,863,864,865,867,869,871,874,874,190,876,878,879,880,876,882,884,884,887,887,890,901,190,907,909,911,912,915,916,890,890,919,919,919,925,927,928,931,933,934,935,919,919,942,947,952,919,919,959,959,919,919,884,876,876,884,876,876,871,190,977,978,978,978,978,978,978,984,871,987,988,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,1028,1029,989,989,1033,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,1087,865,1088,0,1094,1095,1096,1098,1094,1094,1094,0,1103,1103,1103,1103,1107,0,1117,1118,1119,1121,1123,1125,1123,1123")); (function(self, $parent_nesting) { return self.$attr_accessor("lex_start") })(Opal.get_singleton_class(self), $nesting); self['$lex_start='](128); (function(self, $parent_nesting) { return self.$attr_accessor("lex_error") })(Opal.get_singleton_class(self), $nesting); self['$lex_error='](0); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_variable") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_variable='](129); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_fname") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_fname='](134); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_endfn") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_endfn='](247); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_dot") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_dot='](255); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_arg") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_arg='](276); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_cmdarg") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_cmdarg='](307); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_endarg") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_endarg='](313); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_mid") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_mid='](321); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_beg") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_beg='](345); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_labelarg") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_labelarg='](501); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_value") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_value='](508); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_end") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_end='](516); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_leading_dot") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_leading_dot='](696); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_line_comment") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_line_comment='](704); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_line_begin") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_line_begin='](710); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_inside_string") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_inside_string='](128); self.$attr_reader("source_buffer"); self.$attr_accessor("diagnostics"); self.$attr_accessor("static_env"); self.$attr_accessor("force_utf32"); self.$attr_accessor("cond", "cmdarg", "context", "command_start"); self.$attr_accessor("tokens", "comments"); self.$attr_reader("paren_nest", "cmdarg_stack", "cond_stack", "lambda_stack", "version"); $def(self, '$initialize', function $$initialize(version) { var self = this; self.version = version; self.static_env = nil; self.context = nil; self.tokens = nil; self.comments = nil; self._lex_actions = ($truthy(self.$class()['$respond_to?']("_lex_actions", true)) ? (self.$class().$send("_lex_actions")) : ([])); self.emit_integer = $send(self, 'lambda', [], function $$1(chars, p){var self = $$1.$$s == null ? this : $$1.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tINTEGER", chars); return p;}, {$$s: self}); self.emit_rational = $send(self, 'lambda', [], function $$2(chars, p){var self = $$2.$$s == null ? this : $$2.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tRATIONAL", self.$Rational(chars)); return p;}, {$$s: self}); self.emit_imaginary = $send(self, 'lambda', [], function $$3(chars, p){var self = $$3.$$s == null ? this : $$3.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tIMAGINARY", self.$Complex(0, chars)); return p;}, {$$s: self}); self.emit_imaginary_rational = $send(self, 'lambda', [], function $$4(chars, p){var self = $$4.$$s == null ? this : $$4.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tIMAGINARY", self.$Complex(0, self.$Rational(chars))); return p;}, {$$s: self}); self.emit_integer_re = $send(self, 'lambda', [], function $$5(chars, p){var self = $$5.$$s == null ? this : $$5.$$s; if (self.ts == null) self.ts = nil; if (self.te == null) self.te = nil; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tINTEGER", chars, self.ts, $rb_minus(self.te, 2)); return $rb_minus(p, 2);}, {$$s: self}); self.emit_integer_if = $send(self, 'lambda', [], function $$6(chars, p){var self = $$6.$$s == null ? this : $$6.$$s; if (self.ts == null) self.ts = nil; if (self.te == null) self.te = nil; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tINTEGER", chars, self.ts, $rb_minus(self.te, 2)); return $rb_minus(p, 2);}, {$$s: self}); self.emit_integer_rescue = $send(self, 'lambda', [], function $$7(chars, p){var self = $$7.$$s == null ? this : $$7.$$s; if (self.ts == null) self.ts = nil; if (self.te == null) self.te = nil; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tINTEGER", chars, self.ts, $rb_minus(self.te, 6)); return $rb_minus(p, 6);}, {$$s: self}); self.emit_float = $send(self, 'lambda', [], function $$8(chars, p){var self = $$8.$$s == null ? this : $$8.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tFLOAT", self.$Float(chars)); return p;}, {$$s: self}); self.emit_imaginary_float = $send(self, 'lambda', [], function $$9(chars, p){var self = $$9.$$s == null ? this : $$9.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tIMAGINARY", self.$Complex(0, self.$Float(chars))); return p;}, {$$s: self}); self.emit_float_if = $send(self, 'lambda', [], function $$10(chars, p){var self = $$10.$$s == null ? this : $$10.$$s; if (self.ts == null) self.ts = nil; if (self.te == null) self.te = nil; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tFLOAT", self.$Float(chars), self.ts, $rb_minus(self.te, 2)); return $rb_minus(p, 2);}, {$$s: self}); self.emit_float_rescue = $send(self, 'lambda', [], function $$11(chars, p){var self = $$11.$$s == null ? this : $$11.$$s; if (self.ts == null) self.ts = nil; if (self.te == null) self.te = nil; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tFLOAT", self.$Float(chars), self.ts, $rb_minus(self.te, 6)); return $rb_minus(p, 6);}, {$$s: self}); return self.$reset(); }); $def(self, '$reset', function $$reset(reset_state) { var self = this; if (reset_state == null) reset_state = true; if ($truthy(reset_state)) { self.cs = self.$class().$lex_en_line_begin(); self.cond = $$('StackState').$new("cond"); self.cmdarg = $$('StackState').$new("cmdarg"); self.cond_stack = []; self.cmdarg_stack = []; }; self.force_utf32 = false; self.source_pts = nil; self.p = 0; self.ts = nil; self.te = nil; self.act = 0; self.stack = []; self.top = 0; self.token_queue = []; self.eq_begin_s = nil; self.sharp_s = nil; self.newline_s = nil; self.num_base = nil; self.num_digits_s = nil; self.num_suffix_s = nil; self.num_xfrm = nil; self.paren_nest = 0; self.lambda_stack = []; self.command_start = true; self.cs_before_block_comment = self.$class().$lex_en_line_begin(); return (self.strings = $$$($$('Parser'), 'LexerStrings').$new(self, self.version)); }, -1); $def(self, '$source_buffer=', function $Lexer_source_buffer$eq$12(source_buffer) { var $a, self = this, source = nil; self.source_buffer = source_buffer; if ($truthy(self.source_buffer)) { source = self.source_buffer.$source(); if ($eqeq(source.$encoding(), $$$($$('Encoding'), 'UTF_8'))) { self.source_pts = source.$unpack("U*") } else { self.source_pts = source.$unpack("C*") }; if ($eqeq(self.source_pts['$[]'](0), 65279)) { self.p = 1 }; } else { self.source_pts = nil }; self.strings['$source_buffer='](self.source_buffer); return ($a = [self.source_pts], $send(self.strings, 'source_pts=', $a), $a[$a.length - 1]); }); $def(self, '$encoding', function $$encoding() { var self = this; return self.source_buffer.$source().$encoding() }); $const_set($nesting[0], 'LEX_STATES', (new Map([["line_begin", self.$lex_en_line_begin()], ["expr_dot", self.$lex_en_expr_dot()], ["expr_fname", self.$lex_en_expr_fname()], ["expr_value", self.$lex_en_expr_value()], ["expr_beg", self.$lex_en_expr_beg()], ["expr_mid", self.$lex_en_expr_mid()], ["expr_arg", self.$lex_en_expr_arg()], ["expr_cmdarg", self.$lex_en_expr_cmdarg()], ["expr_end", self.$lex_en_expr_end()], ["expr_endarg", self.$lex_en_expr_endarg()], ["expr_endfn", self.$lex_en_expr_endfn()], ["expr_labelarg", self.$lex_en_expr_labelarg()], ["inside_string", self.$lex_en_inside_string()]]))); $def(self, '$state', function $$state() { var self = this; return $$('LEX_STATES').$invert().$fetch(self.cs, self.cs) }); $def(self, '$state=', function $Lexer_state$eq$13(state) { var self = this; return (self.cs = $$('LEX_STATES').$fetch(state)) }); $def(self, '$push_cmdarg', function $$push_cmdarg() { var self = this; self.cmdarg_stack.$push(self.cmdarg); return (self.cmdarg = $$('StackState').$new("cmdarg." + (self.cmdarg_stack.$count()))); }); $def(self, '$pop_cmdarg', function $$pop_cmdarg() { var self = this; return (self.cmdarg = self.cmdarg_stack.$pop()) }); $def(self, '$push_cond', function $$push_cond() { var self = this; self.cond_stack.$push(self.cond); return (self.cond = $$('StackState').$new("cond." + (self.cond_stack.$count()))); }); $def(self, '$pop_cond', function $$pop_cond() { var self = this; return (self.cond = self.cond_stack.$pop()) }); $def(self, '$dedent_level', function $$dedent_level() { var self = this; return self.strings.$dedent_level() }); $def(self, '$advance', function $$advance() { var $a, $b, self = this, klass = nil, _lex_trans_keys = nil, _lex_key_spans = nil, _lex_index_offsets = nil, _lex_indicies = nil, _lex_trans_targs = nil, _lex_trans_actions = nil, _lex_to_state_actions = nil, _lex_from_state_actions = nil, _lex_eof_trans = nil, _lex_actions = nil, pe = nil, p = nil, eof = nil, cmd_state = nil, testEof = nil, _slen = nil, _trans = nil, _keys = nil, _inds = nil, _acts = nil, _nacts = nil, _goto_level = nil, _resume = nil, _eof_trans = nil, _again = nil, _test_eof = nil, _out = nil, _trigger_goto = nil, _wide = nil, $ret_or_1 = nil, tm = nil, heredoc_e = nil, new_herebody_s = nil, diag_msg = nil, ident_tok = nil, ident_ts = nil, ident_te = nil, type = nil, delimiter = nil, $ret_or_2 = nil, gvar_name = nil, next_state = nil, ident = nil, followed_by_nl = nil, nl_emitted = nil, dots_te = nil, indent = nil, dedent_body = nil, digits = nil; if (!$truthy(self.token_queue['$empty?']())) { return self.token_queue.$shift() }; klass = self.$class(); _lex_trans_keys = klass.$send("_lex_trans_keys"); _lex_key_spans = klass.$send("_lex_key_spans"); _lex_index_offsets = klass.$send("_lex_index_offsets"); _lex_indicies = klass.$send("_lex_indicies"); _lex_trans_targs = klass.$send("_lex_trans_targs"); _lex_trans_actions = klass.$send("_lex_trans_actions"); _lex_to_state_actions = klass.$send("_lex_to_state_actions"); _lex_from_state_actions = klass.$send("_lex_from_state_actions"); _lex_eof_trans = klass.$send("_lex_eof_trans"); _lex_actions = self._lex_actions; pe = $rb_plus(self.source_pts.$size(), 2); $a = [self.p, pe], (p = $a[0]), (eof = $a[1]), $a; cmd_state = self.command_start; self.command_start = false; testEof = false; $b = nil, $a = $to_ary($b), (_slen = ($a[0] == null ? nil : $a[0])), (_trans = ($a[1] == null ? nil : $a[1])), (_keys = ($a[2] == null ? nil : $a[2])), (_inds = ($a[3] == null ? nil : $a[3])), (_acts = ($a[4] == null ? nil : $a[4])), (_nacts = ($a[5] == null ? nil : $a[5])), $b; _goto_level = 0; _resume = 10; _eof_trans = 15; _again = 20; _test_eof = 30; _out = 40; while ($truthy(true)) { _trigger_goto = false; if ($truthy($rb_le(_goto_level, 0))) { if ($eqeq(p, pe)) { _goto_level = _test_eof; continue; }; if ($eqeq(self.cs, 0)) { _goto_level = _out; continue; }; }; if ($truthy($rb_le(_goto_level, _resume))) { _acts = _lex_from_state_actions['$[]'](self.cs); _nacts = _lex_actions['$[]'](_acts); _acts = $rb_plus(_acts, 1); while ($truthy($rb_gt(_nacts, 0))) { _nacts = $rb_minus(_nacts, 1); _acts = $rb_plus(_acts, 1); switch (_lex_actions['$[]']($rb_minus(_acts, 1)).valueOf()) { case 52: self.ts = p; break; default: nil }; }; if ($truthy(_trigger_goto)) { continue }; _keys = self.cs['$<<'](1); _inds = _lex_index_offsets['$[]'](self.cs); _slen = _lex_key_spans['$[]'](self.cs); _wide = ($truthy(($ret_or_1 = self.source_pts['$[]'](p))) ? ($ret_or_1) : (0)); _trans = ((($truthy($rb_gt(_slen, 0)) && ($truthy($rb_le(_lex_trans_keys['$[]'](_keys), _wide)))) && ($truthy($rb_le(_wide, _lex_trans_keys['$[]']($rb_plus(_keys, 1)))))) ? (_lex_indicies['$[]']($rb_minus($rb_plus(_inds, _wide), _lex_trans_keys['$[]'](_keys)))) : (_lex_indicies['$[]']($rb_plus(_inds, _slen)))); }; if ($truthy($rb_le(_goto_level, _eof_trans))) { self.cs = _lex_trans_targs['$[]'](_trans); if ($neqeq(_lex_trans_actions['$[]'](_trans), 0)) { _acts = _lex_trans_actions['$[]'](_trans); _nacts = _lex_actions['$[]'](_acts); _acts = $rb_plus(_acts, 1); while ($truthy($rb_gt(_nacts, 0))) { _nacts = $rb_minus(_nacts, 1); _acts = $rb_plus(_acts, 1); if ($eqeqeq(0, ($ret_or_1 = _lex_actions['$[]']($rb_minus(_acts, 1))))) { self.newline_s = p; } else if ($eqeqeq(1, $ret_or_1)) { self.num_xfrm = self.emit_integer; } else if ($eqeqeq(2, $ret_or_1)) { self.num_xfrm = self.emit_rational; } else if ($eqeqeq(3, $ret_or_1)) { self.num_xfrm = self.emit_imaginary; } else if ($eqeqeq(4, $ret_or_1)) { self.num_xfrm = self.emit_imaginary_rational; } else if ($eqeqeq(5, $ret_or_1)) { self.num_xfrm = self.emit_integer_re; } else if ($eqeqeq(6, $ret_or_1)) { self.num_xfrm = self.emit_integer_if; } else if ($eqeqeq(7, $ret_or_1)) { self.num_xfrm = self.emit_integer_rescue; } else if ($eqeqeq(8, $ret_or_1)) { self.num_xfrm = self.emit_float; } else if ($eqeqeq(9, $ret_or_1)) { self.num_xfrm = self.emit_imaginary_float; } else if ($eqeqeq(10, $ret_or_1)) { self.num_xfrm = self.emit_float_if; } else if ($eqeqeq(11, $ret_or_1)) { self.num_xfrm = self.emit_rational; } else if ($eqeqeq(12, $ret_or_1)) { self.num_xfrm = self.emit_imaginary_rational; } else if ($eqeqeq(13, $ret_or_1)) { self.num_xfrm = self.emit_float_rescue; } else if ($eqeqeq(14, $ret_or_1)) { self.$e_lbrace(); } else if ($eqeqeq(15, $ret_or_1)) { if ($truthy(self.strings.$close_interp_on_current_literal(p))) { p = $rb_minus(p, 1); self.cs = 128; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; self.paren_nest = $rb_minus(self.paren_nest, 1); } else if ($eqeqeq(16, $ret_or_1)) { p = self.$on_newline(p); } else if ($eqeqeq(17, $ret_or_1)) { self.sharp_s = $rb_minus(p, 1); } else if ($eqeqeq(18, $ret_or_1)) { self.$emit_comment_from_range(p, pe); } else if ($eqeqeq(19, $ret_or_1)) { tm = p; } else if ($eqeqeq(20, $ret_or_1)) { tm = $rb_minus(p, 2); } else if ($eqeqeq(21, $ret_or_1)) { tm = p; } else if ($eqeqeq(22, $ret_or_1)) { tm = $rb_minus(p, 2); } else if ($eqeqeq(23, $ret_or_1)) { tm = $rb_minus(p, 2); } else if ($eqeqeq(24, $ret_or_1)) { tm = $rb_minus(p, 2); } else if ($eqeqeq(25, $ret_or_1)) { tm = $rb_minus(p, 3); } else if ($eqeqeq(26, $ret_or_1)) { tm = $rb_minus(p, 2); } else if ($eqeqeq(27, $ret_or_1)) { tm = $rb_minus(p, 2); } else if ($eqeqeq(28, $ret_or_1)) { self.cond.$push(false); self.cmdarg.$push(false); self.paren_nest = $rb_plus(self.paren_nest, 1); } else if ($eqeqeq(29, $ret_or_1)) { self.paren_nest = $rb_minus(self.paren_nest, 1); } else if ($eqeqeq(30, $ret_or_1)) { self.cond.$push(false); self.cmdarg.$push(false); self.paren_nest = $rb_plus(self.paren_nest, 1); if ($truthy(self['$version?'](18))) { self.command_start = true }; } else if ($eqeqeq(31, $ret_or_1)) { self.paren_nest = $rb_minus(self.paren_nest, 1); } else if ($eqeqeq(32, $ret_or_1)) { tm = p; } else if ($eqeqeq(33, $ret_or_1)) { tm = p; } else if ($eqeqeq(34, $ret_or_1)) { tm = p; } else if ($eqeqeq(35, $ret_or_1)) { heredoc_e = p; } else if ($eqeqeq(36, $ret_or_1)) { new_herebody_s = p; } else if ($eqeqeq(37, $ret_or_1)) { tm = $rb_minus(p, 1); diag_msg = "ivar_name"; } else if ($eqeqeq(38, $ret_or_1)) { tm = $rb_minus(p, 2); diag_msg = "cvar_name"; } else if ($eqeqeq(39, $ret_or_1)) { tm = p; } else if ($eqeqeq(40, $ret_or_1)) { ident_tok = self.$tok(); ident_ts = self.ts; ident_te = self.te; } else if ($eqeqeq(41, $ret_or_1)) { self.num_base = 16; self.num_digits_s = p; } else if ($eqeqeq(42, $ret_or_1)) { self.num_base = 10; self.num_digits_s = p; } else if ($eqeqeq(43, $ret_or_1)) { self.num_base = 8; self.num_digits_s = p; } else if ($eqeqeq(44, $ret_or_1)) { self.num_base = 2; self.num_digits_s = p; } else if ($eqeqeq(45, $ret_or_1)) { self.num_base = 10; self.num_digits_s = self.ts; } else if ($eqeqeq(46, $ret_or_1)) { self.num_base = 8; self.num_digits_s = self.ts; } else if ($eqeqeq(47, $ret_or_1)) { self.num_suffix_s = p; } else if ($eqeqeq(48, $ret_or_1)) { self.num_suffix_s = p; } else if ($eqeqeq(49, $ret_or_1)) { self.num_suffix_s = p; } else if ($eqeqeq(50, $ret_or_1)) { tm = p; } else if ($eqeqeq(53, $ret_or_1)) { self.te = $rb_plus(p, 1); } else if ($eqeqeq(54, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_global_var(); self.cs = self.$stack_pop(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(55, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_global_var(); self.cs = self.$stack_pop(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(56, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_class_var(); self.cs = self.$stack_pop(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(57, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_instance_var(); self.cs = self.$stack_pop(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(58, $ret_or_1)) { self.act = 4; } else if ($eqeqeq(59, $ret_or_1)) { self.act = 5; } else if ($eqeqeq(60, $ret_or_1)) { self.act = 6; } else if ($eqeqeq(61, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_table($$('KEYWORDS_BEGIN')); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(62, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tIDENTIFIER"); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(63, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; self.stack['$[]='](self.top, self.cs); self.top = $rb_plus(self.top, 1); self.cs = 129; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(64, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(65, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(66, $ret_or_1)) { self.te = $rb_plus(p, 1); if ($truthy(self['$version?'](23))) { $a = [self.$tok()['$[]']($range(0, -2, false)), self.$tok()['$[]'](-1).$chr()], (type = $a[0]), (delimiter = $a[1]), $a; self.strings.$push_literal(type, delimiter, self.ts); self.cs = 128; _trigger_goto = true; _goto_level = _again; break;; } else { p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;; };; } else if ($eqeqeq(67, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(68, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(69, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('KEYWORDS_BEGIN')); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(70, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tCONSTANT"); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(71, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tIDENTIFIER"); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(72, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; self.stack['$[]='](self.top, self.cs); self.top = $rb_plus(self.top, 1); self.cs = 129; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(73, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(74, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(75, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); } else if ($eqeqeq(76, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(77, $ret_or_1)) { p = $rb_minus(self.te, 1);; self.$emit_table($$('PUNCTUATION')); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(78, $ret_or_1)) { p = $rb_minus(self.te, 1);; p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(79, $ret_or_1)) { if ($eqeqeq(4, ($ret_or_2 = self.act))) { p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS_BEGIN')); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(5, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit("tCONSTANT"); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(6, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit("tIDENTIFIER"); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { nil }; } else if ($eqeqeq(80, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tLABEL", self.$tok(self.ts, $rb_minus(self.te, 2)), self.ts, $rb_minus(self.te, 1)); p = $rb_minus(p, 1); self.cs = 501; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(81, $ret_or_1)) { self.te = $rb_plus(p, 1); if (($truthy($rb_ge(self.version, 31)) && ($truthy(self.context.$in_argdef())))) { self.$emit("tBDOT3", "...".$freeze()); self.cs = 516; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { p = $rb_minus(p, 3); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;; };; } else if ($eqeqeq(82, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(83, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(84, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); } else if ($eqeqeq(85, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(86, $ret_or_1)) { p = $rb_minus(self.te, 1);; p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(87, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 276; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(88, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(89, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(90, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tCONSTANT"); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(91, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tIDENTIFIER"); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(92, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tFID", self.$tok(self.ts, tm), self.ts, tm); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_minus(tm, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(93, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 276; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(94, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); } else if ($eqeqeq(95, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(96, $ret_or_1)) { self.act = 33; } else if ($eqeqeq(97, $ret_or_1)) { self.act = 34; } else if ($eqeqeq(98, $ret_or_1)) { self.act = 39; } else if ($eqeqeq(99, $ret_or_1)) { self.act = 40; } else if ($eqeqeq(100, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(101, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$check_ambiguous_slash(tm); p = $rb_minus(tm, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(102, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(103, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(104, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(tm, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(105, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(106, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(107, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(108, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); if ($truthy(self['$version?'](18))) { self.$emit("tLPAREN2", "(".$freeze(), $rb_minus(self.te, 1), self.te); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$emit("tLPAREN_ARG", "(".$freeze(), $rb_minus(self.te, 1), self.te); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; };; } else if ($eqeqeq(109, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tLPAREN2", "(".$freeze()); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(110, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tLBRACK", "[".$freeze(), $rb_minus(self.te, 1), self.te); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(111, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); if ($eqeq(self.lambda_stack.$last(), self.paren_nest)) { self.lambda_stack.$pop(); self.$emit("tLAMBEG", "{".$freeze(), $rb_minus(self.te, 1), self.te); } else { self.$emit("tLCURLY", "{".$freeze(), $rb_minus(self.te, 1), self.te) }; self.command_start = true; self.paren_nest = $rb_plus(self.paren_nest, 1); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(112, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(113, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$diagnostic("warning", "ambiguous_prefix", (new Map([["prefix", self.$tok(tm, self.te)]])), self.$range(tm, self.te)); p = $rb_minus(tm, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(114, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(115, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(116, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); } else if ($eqeqeq(117, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(118, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(119, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(120, $ret_or_1)) { p = $rb_minus(self.te, 1);; } else if ($eqeqeq(121, $ret_or_1)) { p = $rb_minus(self.te, 1);; p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(122, $ret_or_1)) { if ($eqeqeq(33, ($ret_or_2 = self.act))) { p = $rb_minus(self.te, 1);; self.$check_ambiguous_slash(tm); p = $rb_minus(tm, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;; } else if ($eqeqeq(34, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$diagnostic("warning", "ambiguous_prefix", (new Map([["prefix", self.$tok(tm, self.te)]])), self.$range(tm, self.te)); p = $rb_minus(tm, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;; } else if ($eqeqeq(39, $ret_or_2)) { p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;; } else { p = $rb_minus(self.te, 1);; }; } else if ($eqeqeq(123, $ret_or_1)) { self.act = 46; } else if ($eqeqeq(124, $ret_or_1)) { self.act = 47; } else if ($eqeqeq(125, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 276; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(126, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(127, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tLPAREN_ARG", "(".$freeze(), $rb_minus(self.te, 1), self.te); if ($truthy(self['$version?'](18))) { self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; };; } else if ($eqeqeq(128, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 276; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(129, $ret_or_1)) { p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 276; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(130, $ret_or_1)) { if ($eqeqeq(46, ($ret_or_2 = self.act))) { p = $rb_minus(self.te, 1);; if ($truthy(self.cond['$active?']())) { self.$emit("kDO_COND", "do".$freeze(), $rb_minus(self.te, 2), self.te) } else { self.$emit("kDO", "do".$freeze(), $rb_minus(self.te, 2), self.te) }; self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(47, $ret_or_2)) { p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 276; _trigger_goto = true; _goto_level = _again; break;; } else { nil }; } else if ($eqeqeq(131, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_do(true); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(132, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(133, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(134, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); if ($eqeq(self.lambda_stack.$last(), self.paren_nest)) { self.lambda_stack.$pop(); self.$emit("tLAMBEG", "{".$freeze()); } else { self.$emit("tLBRACE_ARG", "{".$freeze()) }; self.paren_nest = $rb_plus(self.paren_nest, 1); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(135, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); } else if ($eqeqeq(136, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(137, $ret_or_1)) { self.act = 54; } else if ($eqeqeq(138, $ret_or_1)) { self.act = 55; } else if ($eqeqeq(139, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(140, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(141, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(142, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); } else if ($eqeqeq(143, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(144, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(145, $ret_or_1)) { if ($eqeqeq(54, ($ret_or_2 = self.act))) { p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(55, $ret_or_2)) { p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;; } else { nil }; } else if ($eqeqeq(146, $ret_or_1)) { self.act = 60; } else if ($eqeqeq(147, $ret_or_1)) { self.act = 67; } else if ($eqeqeq(148, $ret_or_1)) { self.act = 76; } else if ($eqeqeq(149, $ret_or_1)) { self.act = 80; } else if ($eqeqeq(150, $ret_or_1)) { self.act = 81; } else if ($eqeqeq(151, $ret_or_1)) { self.act = 82; } else if ($eqeqeq(152, $ret_or_1)) { self.act = 86; } else if ($eqeqeq(153, $ret_or_1)) { self.act = 87; } else if ($eqeqeq(154, $ret_or_1)) { self.act = 91; } else if ($eqeqeq(155, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tUNARY_NUM", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = $rb_minus(p, 1); self.cs = 516; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(156, $ret_or_1)) { self.te = $rb_plus(p, 1); type = (delimiter = self.$tok()['$[]'](0).$chr()); self.strings.$push_literal(type, delimiter, self.ts); p = $rb_minus(p, 1); self.cs = 128; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(157, $ret_or_1)) { self.te = $rb_plus(p, 1); $a = [self.source_buffer.$slice(self.ts, 1).$chr(), self.$tok()['$[]'](-1).$chr()], (type = $a[0]), (delimiter = $a[1]), $a; self.strings.$push_literal(type, delimiter, self.ts); self.cs = 128; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(158, $ret_or_1)) { self.te = $rb_plus(p, 1); $a = [self.$tok()['$[]']($range(0, -2, false)), self.$tok()['$[]'](-1).$chr()], (type = $a[0]), (delimiter = $a[1]), $a; self.strings.$push_literal(type, delimiter, self.ts); self.cs = 128; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(159, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.$emit("tSYMBEG", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); self.cs = 134; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(160, $ret_or_1)) { self.te = $rb_plus(p, 1); $a = [self.$tok(), self.$tok()['$[]'](-1).$chr()], (type = $a[0]), (delimiter = $a[1]), $a; self.strings.$push_literal(type, delimiter, self.ts); self.cs = 128; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(161, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tSYMBOL", self.$tok($rb_plus(self.ts, 1), $rb_plus(self.ts, 2))); self.cs = 516; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(162, $ret_or_1)) { self.te = $rb_plus(p, 1); gvar_name = self.$tok($rb_plus(self.ts, 1)); if ((($truthy($rb_ge(self.version, 33)) && ($truthy(gvar_name['$start_with?']("$0")))) && ($truthy($rb_gt(gvar_name.$length(), 2))))) { self.$diagnostic("error", "gvar_name", (new Map([["name", gvar_name]])), self.$range($rb_plus(self.ts, 1), self.te)) }; self.$emit("tSYMBOL", gvar_name, self.ts); self.cs = 516; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(163, $ret_or_1)) { self.te = $rb_plus(p, 1); $b = self.strings.$read_character_constant(self.ts), $a = $to_ary($b), (p = ($a[0] == null ? nil : $a[0])), (next_state = ($a[1] == null ? nil : $a[1])), $b; p = $rb_minus(p, 1); if ($truthy(self.token_queue['$empty?']())) { self.cs = next_state; _trigger_goto = true; _goto_level = _again; break; } else { self.cs = next_state; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; };; } else if ($eqeqeq(164, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$diagnostic("fatal", "incomplete_escape", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; } else if ($eqeqeq(165, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION_BEGIN')); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(166, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); if ($truthy(self['$version?'](18))) { ident = self.$tok(self.ts, $rb_minus(self.te, 2)); self.$emit(($truthy(self.source_buffer.$slice(self.ts, 1)['$=~'](/[A-Z]/)) ? ("tCONSTANT") : ("tIDENTIFIER")), ident, self.ts, $rb_minus(self.te, 2)); p = $rb_minus(p, 1); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](ident))))) { self.cs = 516 } else { self.cs = self.$arg_or_cmdarg(cmd_state) }; } else { self.$emit("tLABEL", self.$tok(self.ts, $rb_minus(self.te, 2)), self.ts, $rb_minus(self.te, 1)); self.cs = 501; }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(167, $ret_or_1)) { self.te = $rb_plus(p, 1); followed_by_nl = $rb_minus(self.te, 1)['$=='](self.newline_s); nl_emitted = false; dots_te = ($truthy(followed_by_nl) ? ($rb_minus(self.te, 1)) : (self.te)); if ($truthy($rb_ge(self.version, 30))) { if (($truthy(self.lambda_stack['$any?']()) && ($eqeq($rb_plus(self.lambda_stack.$last(), 1), self.paren_nest)))) { self.$emit("tDOT3", "...".$freeze(), self.ts, dots_te) } else { self.$emit("tBDOT3", "...".$freeze(), self.ts, dots_te); if ((($truthy($rb_ge(self.version, 31)) && ($truthy(followed_by_nl))) && ($truthy(self.context.$in_argdef())))) { self.$emit("tNL", $rb_minus(self.te, 1), self.te); nl_emitted = true; }; } } else if ($truthy($rb_ge(self.version, 27))) { self.$emit("tBDOT3", "...".$freeze(), self.ts, dots_te) } else { self.$emit("tDOT3", "...".$freeze(), self.ts, dots_te) }; if (($truthy(followed_by_nl) && ($not(nl_emitted)))) { p = $rb_minus(p, 1) }; self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(168, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tIDENTIFIER", ident_tok, ident_ts, ident_te); p = $rb_minus(ident_te, 1); if ((($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](ident_tok)))) && ($truthy($rb_lt(self.version, 25))))) { self.cs = 247 } else { self.cs = 307 }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(169, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs_before_block_comment = self.cs; self.cs = 710; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(170, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(171, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(172, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tUNARY_NUM", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = $rb_minus(p, 1); self.cs = 516; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(173, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tSTAR", "*".$freeze()); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(174, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$diagnostic("fatal", "string_eof", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; } else if ($eqeqeq(175, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$tok(self.ts, heredoc_e)['$=~'](/^<<(-?)(~?)(["'`]?)(.*)\3$/m); indent = ($truthy(($ret_or_2 = (($a = $gvars['~']) === nil ? nil : $a['$[]'](1))['$empty?']()['$!']())) ? ($ret_or_2) : ((($a = $gvars['~']) === nil ? nil : $a['$[]'](2))['$empty?']()['$!']())); dedent_body = (($a = $gvars['~']) === nil ? nil : $a['$[]'](2))['$empty?']()['$!'](); type = ($truthy((($a = $gvars['~']) === nil ? nil : $a['$[]'](3))['$empty?']()) ? ("<<\"".$freeze()) : ($rb_plus("<<".$freeze(), (($a = $gvars['~']) === nil ? nil : $a['$[]'](3))))); delimiter = (($a = $gvars['~']) === nil ? nil : $a['$[]'](4)); if ($truthy($rb_ge(self.version, 27))) { if (($truthy($rb_gt(delimiter.$count("\n"), 0)) || ($truthy($rb_gt(delimiter.$count("\r"), 0))))) { self.$diagnostic("error", "unterminated_heredoc_id", nil, self.$range(self.ts, $rb_plus(self.ts, 1))) } } else if ($truthy($rb_ge(self.version, 24))) { if ($truthy($rb_gt(delimiter.$count("\n"), 0))) { if ($truthy(delimiter['$end_with?']("\n"))) { self.$diagnostic("warning", "heredoc_id_ends_with_nl", nil, self.$range(self.ts, $rb_plus(self.ts, 1))); delimiter = delimiter.$rstrip(); } else { self.$diagnostic("fatal", "heredoc_id_has_newline", nil, self.$range(self.ts, $rb_plus(self.ts, 1))) } } }; if (($truthy(dedent_body) && ($truthy(self['$version?'](18, 19, 20, 21, 22))))) { self.$emit("tLSHFT", "<<".$freeze(), self.ts, $rb_plus(self.ts, 2)); p = $rb_plus(self.ts, 1); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.strings.$push_literal(type, delimiter, self.ts, heredoc_e, indent, dedent_body); if ($truthy(($ret_or_2 = self.strings.$herebody_s()))) { $ret_or_2 } else { self.strings['$herebody_s='](new_herebody_s) }; p = $rb_minus(self.strings.$herebody_s(), 1); self.cs = 128; };; } else if ($eqeqeq(176, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$diagnostic("error", "unterminated_heredoc_id", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; } else if ($eqeqeq(177, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tSYMBOL", self.$tok($rb_plus(self.ts, 1), tm), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 516; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(178, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); gvar_name = self.$tok($rb_plus(self.ts, 1)); if ((($truthy($rb_ge(self.version, 33)) && ($truthy(gvar_name['$start_with?']("$0")))) && ($truthy($rb_gt(gvar_name.$length(), 2))))) { self.$diagnostic("error", "gvar_name", (new Map([["name", gvar_name]])), self.$range($rb_plus(self.ts, 1), self.te)) }; self.$emit("tSYMBOL", gvar_name, self.ts); self.cs = 516; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(179, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_colon_with_digits(p, tm, diag_msg); self.cs = 516; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(180, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$diagnostic("fatal", "incomplete_escape", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; } else if ($eqeqeq(181, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); if ($eqeq(self.lambda_stack.$last(), self.paren_nest)) { self.lambda_stack.$pop(); self.command_start = true; self.$emit("tLAMBEG", "{".$freeze()); } else { self.$emit("tLBRACE", "{".$freeze()) }; self.paren_nest = $rb_plus(self.paren_nest, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(182, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tLBRACK", "[".$freeze()); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(183, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tLPAREN", "(".$freeze()); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(184, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION_BEGIN')); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(185, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("kRESCUE", "rescue".$freeze(), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 321; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(186, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); if ($truthy($rb_ge(self.version, 27))) { self.$emit("tBDOT2") } else { self.$emit("tDOT2") }; self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(187, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); followed_by_nl = $rb_minus(self.te, 1)['$=='](self.newline_s); nl_emitted = false; dots_te = ($truthy(followed_by_nl) ? ($rb_minus(self.te, 1)) : (self.te)); if ($truthy($rb_ge(self.version, 30))) { if (($truthy(self.lambda_stack['$any?']()) && ($eqeq($rb_plus(self.lambda_stack.$last(), 1), self.paren_nest)))) { self.$emit("tDOT3", "...".$freeze(), self.ts, dots_te) } else { self.$emit("tBDOT3", "...".$freeze(), self.ts, dots_te); if ((($truthy($rb_ge(self.version, 31)) && ($truthy(followed_by_nl))) && ($truthy(self.context.$in_argdef())))) { self.$emit("tNL", $rb_minus(self.te, 1), self.te); nl_emitted = true; }; } } else if ($truthy($rb_ge(self.version, 27))) { self.$emit("tBDOT3", "...".$freeze(), self.ts, dots_te) } else { self.$emit("tDOT3", "...".$freeze(), self.ts, dots_te) }; if (($truthy(followed_by_nl) && ($not(nl_emitted)))) { p = $rb_minus(p, 1) }; self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(188, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(189, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; };; } else if ($eqeqeq(190, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); } else if ($eqeqeq(191, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs_before_block_comment = self.cs; self.cs = 710; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(192, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(193, $ret_or_1)) { p = $rb_minus(self.te, 1);; self.$diagnostic("fatal", "string_eof", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; } else if ($eqeqeq(194, $ret_or_1)) { p = $rb_minus(self.te, 1);; self.$diagnostic("error", "unterminated_heredoc_id", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; } else if ($eqeqeq(195, $ret_or_1)) { p = $rb_minus(self.te, 1);; self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; };; } else if ($eqeqeq(196, $ret_or_1)) { p = $rb_minus(self.te, 1);; } else if ($eqeqeq(197, $ret_or_1)) { p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(198, $ret_or_1)) { if ($eqeqeq(60, ($ret_or_2 = self.act))) { p = $rb_minus(self.te, 1);; self.$emit("tUNARY_NUM", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = $rb_minus(p, 1); self.cs = 516; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(67, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$diagnostic("error", "unterminated_heredoc_id", nil, self.$range(self.ts, $rb_plus(self.ts, 1))); } else if ($eqeqeq(76, $ret_or_2)) { p = $rb_minus(self.te, 1);; if ($truthy($rb_ge(self.version, 27))) { self.$emit("tPIPE", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = $rb_minus(p, 1); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { p = $rb_minus(p, 2); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;; }; } else if ($eqeqeq(80, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit_table($$('PUNCTUATION_BEGIN')); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(81, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit("kRESCUE", "rescue".$freeze(), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 321; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(82, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS_BEGIN')); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(86, $ret_or_2)) { p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;; } else if ($eqeqeq(87, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; } else if ($eqeqeq(91, $ret_or_2)) { p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;; } else { nil }; } else if ($eqeqeq(199, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(200, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(201, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); } else if ($eqeqeq(202, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); if ($truthy(self.context.$in_kwarg())) { p = $rb_minus(p, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;; } else { self.cs = 710; _trigger_goto = true; _goto_level = _again; break; };; } else if ($eqeqeq(203, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(204, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(205, $ret_or_1)) { self.te = $rb_plus(p, 1); self.strings.$push_literal(self.$tok(), self.$tok(), self.ts); self.cs = 128; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(206, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(207, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(208, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); } else if ($eqeqeq(209, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.cs = 710; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(210, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(211, $ret_or_1)) { p = $rb_minus(self.te, 1);; p = $rb_minus(p, 1); self.cs = 345; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(212, $ret_or_1)) { self.act = 104; } else if ($eqeqeq(213, $ret_or_1)) { self.act = 105; } else if ($eqeqeq(214, $ret_or_1)) { self.act = 106; } else if ($eqeqeq(215, $ret_or_1)) { self.act = 107; } else if ($eqeqeq(216, $ret_or_1)) { self.act = 108; } else if ($eqeqeq(217, $ret_or_1)) { self.act = 109; } else if ($eqeqeq(218, $ret_or_1)) { self.act = 110; } else if ($eqeqeq(219, $ret_or_1)) { self.act = 111; } else if ($eqeqeq(220, $ret_or_1)) { self.act = 112; } else if ($eqeqeq(221, $ret_or_1)) { self.act = 113; } else if ($eqeqeq(222, $ret_or_1)) { self.act = 115; } else if ($eqeqeq(223, $ret_or_1)) { self.act = 116; } else if ($eqeqeq(224, $ret_or_1)) { self.act = 117; } else if ($eqeqeq(225, $ret_or_1)) { self.act = 119; } else if ($eqeqeq(226, $ret_or_1)) { self.act = 123; } else if ($eqeqeq(227, $ret_or_1)) { self.act = 124; } else if ($eqeqeq(228, $ret_or_1)) { self.act = 126; } else if ($eqeqeq(229, $ret_or_1)) { self.act = 127; } else if ($eqeqeq(230, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tLAMBDA", "->".$freeze(), self.ts, $rb_plus(self.ts, 2)); self.lambda_stack.$push(self.paren_nest); self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(231, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_singleton_class(); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(232, $ret_or_1)) { self.te = $rb_plus(p, 1); $a = [self.$tok(), self.$tok()['$[]'](-1).$chr()], (type = $a[0]), (delimiter = $a[1]), $a; self.strings.$push_literal(type, delimiter, self.ts, nil, false, false, true); self.cs = 128; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(233, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.stack['$[]='](self.top, self.cs); self.top = $rb_plus(self.top, 1); self.cs = 129; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(234, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 255; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(235, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(236, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(237, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tOP_ASGN", self.$tok(self.ts, $rb_minus(self.te, 1))); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(238, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tEH", "?".$freeze()); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(239, $ret_or_1)) { self.te = $rb_plus(p, 1); if ($eqeq(self.paren_nest, 0)) { self.$diagnostic("warning", "triple_dot_at_eol", nil, self.$range(self.ts, $rb_minus(self.te, 1))) }; self.$emit("tDOT3", "...".$freeze(), self.ts, $rb_minus(self.te, 1)); p = $rb_minus(p, 1); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(240, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(241, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tSEMI", ";".$freeze()); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(242, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$diagnostic("error", "bare_backslash", nil, self.$range(self.ts, $rb_plus(self.ts, 1))); p = $rb_minus(p, 1);; } else if ($eqeqeq(243, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$diagnostic("fatal", "unexpected", (new Map([["character", self.$tok().$inspect()['$[]']($range(1, -2, false))]])));; } else if ($eqeqeq(244, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(245, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); if ($eqeq(self.lambda_stack.$last(), self.paren_nest)) { self.lambda_stack.$pop(); if ($eqeq(self.$tok(), "{".$freeze())) { self.$emit("tLAMBEG", "{".$freeze()) } else { self.$emit("kDO_LAMBDA", "do".$freeze()) }; } else if ($eqeq(self.$tok(), "{".$freeze())) { self.$emit("tLCURLY", "{".$freeze()) } else { self.$emit_do() }; if ($eqeq(self.$tok(), "{".$freeze())) { self.paren_nest = $rb_plus(self.paren_nest, 1) }; self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(246, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('KEYWORDS')); self.cs = 134; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(247, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_singleton_class(); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(248, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('KEYWORDS')); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(249, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(250, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$diagnostic("error", "no_dot_digit_literal");; } else if ($eqeqeq(251, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(252, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tCONSTANT"); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(253, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tCONSTANT", self.$tok(self.ts, tm), self.ts, tm); p = $rb_minus(tm, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(254, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.stack['$[]='](self.top, self.cs); self.top = $rb_plus(self.top, 1); self.cs = 129; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(255, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 255; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(256, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; };; } else if ($eqeqeq(257, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); if ($eqeq(tm, self.te)) { self.$emit("tFID") } else { self.$emit("tIDENTIFIER", self.$tok(self.ts, tm), self.ts, tm); p = $rb_minus(tm, 1); }; self.cs = 276; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(258, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(259, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(260, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(261, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_rbrace_rparen_rbrack(); if (($eqeq(self.$tok(), "}".$freeze()) || ($eqeq(self.$tok(), "]".$freeze())))) { if ($truthy($rb_ge(self.version, 25))) { self.cs = 516 } else { self.cs = 313 } }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(262, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tLBRACK2", "[".$freeze()); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(263, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(264, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); } else if ($eqeqeq(265, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.cs = 696; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(266, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$diagnostic("fatal", "unexpected", (new Map([["character", self.$tok().$inspect()['$[]']($range(1, -2, false))]])));; } else if ($eqeqeq(267, $ret_or_1)) { p = $rb_minus(self.te, 1);; digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(268, $ret_or_1)) { p = $rb_minus(self.te, 1);; self.$diagnostic("error", "no_dot_digit_literal");; } else if ($eqeqeq(269, $ret_or_1)) { p = $rb_minus(self.te, 1);; digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(270, $ret_or_1)) { p = $rb_minus(self.te, 1);; self.$diagnostic("fatal", "unexpected", (new Map([["character", self.$tok().$inspect()['$[]']($range(1, -2, false))]])));; } else if ($eqeqeq(271, $ret_or_1)) { if ($eqeqeq(104, ($ret_or_2 = self.act))) { p = $rb_minus(self.te, 1);; if ($eqeq(self.lambda_stack.$last(), self.paren_nest)) { self.lambda_stack.$pop(); if ($eqeq(self.$tok(), "{".$freeze())) { self.$emit("tLAMBEG", "{".$freeze()) } else { self.$emit("kDO_LAMBDA", "do".$freeze()) }; } else if ($eqeq(self.$tok(), "{".$freeze())) { self.$emit("tLCURLY", "{".$freeze()) } else { self.$emit_do() }; if ($eqeq(self.$tok(), "{".$freeze())) { self.paren_nest = $rb_plus(self.paren_nest, 1) }; self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(105, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.cs = 134; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(106, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit_singleton_class(); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(107, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(108, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(109, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.cs = 321; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(110, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); if (($truthy(self['$version?'](18)) && ($eqeq(self.$tok(), "not".$freeze())))) { self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.cs = 276; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; } else if ($eqeqeq(111, $ret_or_2)) { p = $rb_minus(self.te, 1);; if ($truthy(self['$version?'](18))) { self.$emit("tIDENTIFIER"); if (!($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = self.$arg_or_cmdarg(cmd_state) }; } else { self.$emit("k__ENCODING__", "__ENCODING__".$freeze()) }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(112, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(113, $ret_or_2)) { p = $rb_minus(self.te, 1);; digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(115, $ret_or_2)) { p = $rb_minus(self.te, 1);; if ($truthy(self['$version?'](18, 19, 20))) { self.$diagnostic("error", "trailing_in_number", (new Map([["character", self.$tok($rb_minus(self.te, 1), self.te)]])), self.$range($rb_minus(self.te, 1), self.te)) } else { self.$emit("tINTEGER", self.$tok(self.ts, $rb_minus(self.te, 1)).$to_i(), self.ts, $rb_minus(self.te, 1)); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; } else if ($eqeqeq(116, $ret_or_2)) { p = $rb_minus(self.te, 1);; if ($truthy(self['$version?'](18, 19, 20))) { self.$diagnostic("error", "trailing_in_number", (new Map([["character", self.$tok($rb_minus(self.te, 1), self.te)]])), self.$range($rb_minus(self.te, 1), self.te)) } else { self.$emit("tFLOAT", self.$tok(self.ts, $rb_minus(self.te, 1)).$to_f(), self.ts, $rb_minus(self.te, 1)); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; } else if ($eqeqeq(117, $ret_or_2)) { p = $rb_minus(self.te, 1);; digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(119, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit("tCONSTANT"); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(123, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; } else if ($eqeqeq(124, $ret_or_2)) { p = $rb_minus(self.te, 1);; if ($eqeq(tm, self.te)) { self.$emit("tFID") } else { self.$emit("tIDENTIFIER", self.$tok(self.ts, tm), self.ts, tm); p = $rb_minus(tm, 1); }; self.cs = 276; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(126, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit_table($$('PUNCTUATION')); self.cs = 508; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else if ($eqeqeq(127, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit_table($$('PUNCTUATION')); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { nil }; } else if ($eqeqeq(272, $ret_or_1)) { self.act = 140; } else if ($eqeqeq(273, $ret_or_1)) { self.act = 144; } else if ($eqeqeq(274, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); if ($truthy($rb_lt(self.version, 27))) { p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$emit("tBDOT3"); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; };; } else if ($eqeqeq(275, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(tm, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(276, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(277, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); if ($truthy($rb_lt(self.version, 27))) { self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; };; } else if ($eqeqeq(278, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); if ($truthy($rb_lt(self.version, 27))) { p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$emit("tBDOT2"); self.cs = 345; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; };; } else if ($eqeqeq(279, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(tm, 1); self.cs = 516; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(280, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(281, $ret_or_1)) { p = $rb_minus(self.te, 1);; if ($truthy($rb_lt(self.version, 27))) { self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; };; } else if ($eqeqeq(282, $ret_or_1)) { p = $rb_minus(self.te, 1);; self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(283, $ret_or_1)) { if ($eqeqeq(140, ($ret_or_2 = self.act))) { p = $rb_minus(self.te, 1);; if ($truthy($rb_lt(self.version, 27))) { self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; } else if ($eqeqeq(144, $ret_or_2)) { p = $rb_minus(self.te, 1);; self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { nil }; } else if ($eqeqeq(284, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit_comment(self.eq_begin_s, self.te); self.cs = self.cs_before_block_comment; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(285, $ret_or_1)) { self.te = $rb_plus(p, 1); } else if ($eqeqeq(286, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_comment(self.eq_begin_s, self.te); self.cs = self.cs_before_block_comment; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(287, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$diagnostic("fatal", "embedded_document", nil, self.$range(self.eq_begin_s, $rb_plus(self.eq_begin_s, "=begin".$length())));; } else if ($eqeqeq(288, $ret_or_1)) { self.te = $rb_plus(p, 1); self.eq_begin_s = self.ts; self.cs = 704; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(289, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(pe, 3);; } else if ($eqeqeq(290, $ret_or_1)) { self.te = $rb_plus(p, 1); cmd_state = true; p = $rb_minus(p, 1); self.cs = 508; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(291, $ret_or_1)) { self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(292, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); } else if ($eqeqeq(293, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.eq_begin_s = self.ts; self.cs = 704; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(294, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); cmd_state = true; p = $rb_minus(p, 1); self.cs = 508; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(295, $ret_or_1)) { p = $rb_minus(self.te, 1);; cmd_state = true; p = $rb_minus(p, 1); self.cs = 508; _trigger_goto = true; _goto_level = _again; break;;; } else if ($eqeqeq(296, $ret_or_1)) { self.te = $rb_plus(p, 1); $b = self.strings.$advance(p), $a = $to_ary($b), (p = ($a[0] == null ? nil : $a[0])), (next_state = ($a[1] == null ? nil : $a[1])), $b; p = $rb_minus(p, 1); self.cs = next_state; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else { nil }; }; }; if ($truthy(_trigger_goto)) { continue }; }; if ($truthy($rb_le(_goto_level, _again))) { _acts = _lex_to_state_actions['$[]'](self.cs); _nacts = _lex_actions['$[]'](_acts); _acts = $rb_plus(_acts, 1); while ($truthy($rb_gt(_nacts, 0))) { _nacts = $rb_minus(_nacts, 1); _acts = $rb_plus(_acts, 1); switch (_lex_actions['$[]']($rb_minus(_acts, 1)).valueOf()) { case 51: self.ts = nil; break; default: nil }; }; if ($truthy(_trigger_goto)) { continue }; if ($eqeq(self.cs, 0)) { _goto_level = _out; continue; }; p = $rb_plus(p, 1); if ($neqeq(p, pe)) { _goto_level = _resume; continue; }; }; if ($truthy($rb_le(_goto_level, _test_eof))) { if ($eqeq(p, eof)) { if ($truthy($rb_gt(_lex_eof_trans['$[]'](self.cs), 0))) { _trans = $rb_minus(_lex_eof_trans['$[]'](self.cs), 1); _goto_level = _eof_trans; continue; } } }; if ($truthy($rb_le(_goto_level, _out))) { break }; };; if ($truthy(false)) { testEof }; self.p = p; if ($truthy(self.token_queue['$any?']())) { return self.token_queue.$shift() } else if ($eqeq(self.cs, klass.$lex_error())) { return [false, ["$error".$freeze(), self.$range($rb_minus(p, 1), p)]] } else { eof = self.source_pts.$size(); return [false, ["$eof".$freeze(), self.$range(eof, eof)]]; }; }); self.$protected(); $def(self, '$version?', function $Lexer_version$ques$14($a) { var $post_args, versions, self = this; $post_args = $slice(arguments); versions = $post_args; return versions['$include?'](self.version); }, -1); $def(self, '$stack_pop', function $$stack_pop() { var self = this; self.top = $rb_minus(self.top, 1); return self.stack['$[]'](self.top); }); $def(self, '$tok', function $$tok(s, e) { var self = this; if (s == null) s = self.ts; if (e == null) e = self.te; return self.source_buffer.$slice(s, $rb_minus(e, s)); }, -1); $def(self, '$range', function $$range(s, e) { var self = this; if (s == null) s = self.ts; if (e == null) e = self.te; return $$$($$$($$('Parser'), 'Source'), 'Range').$new(self.source_buffer, s, e); }, -1); $def(self, '$emit', function $$emit(type, value, s, e) { var self = this, token = nil; if (value == null) value = self.$tok(); if (s == null) s = self.ts; if (e == null) e = self.te; token = [type, [value, self.$range(s, e)]]; self.token_queue.$push(token); if ($truthy(self.tokens)) { self.tokens.$push(token) }; return token; }, -2); $def(self, '$emit_table', function $$emit_table(table, s, e) { var self = this, value = nil; if (s == null) s = self.ts; if (e == null) e = self.te; value = self.$tok(s, e); return self.$emit(table['$[]'](value), value, s, e); }, -2); $def(self, '$emit_do', function $$emit_do(do_block) { var self = this; if (do_block == null) do_block = false; if ($truthy(self.cond['$active?']())) { return self.$emit("kDO_COND", "do".$freeze()) } else if (($truthy(self.cmdarg['$active?']()) || ($truthy(do_block)))) { return self.$emit("kDO_BLOCK", "do".$freeze()) } else { return self.$emit("kDO", "do".$freeze()) }; }, -1); $def(self, '$arg_or_cmdarg', function $$arg_or_cmdarg(cmd_state) { var self = this; if ($truthy(cmd_state)) { return self.$class().$lex_en_expr_cmdarg() } else { return self.$class().$lex_en_expr_arg() } }); $def(self, '$emit_comment', function $$emit_comment(s, e) { var self = this; if (s == null) s = self.ts; if (e == null) e = self.te; if ($truthy(self.comments)) { self.comments.$push($$$($$$($$('Parser'), 'Source'), 'Comment').$new(self.$range(s, e))) }; if ($truthy(self.tokens)) { self.tokens.$push(["tCOMMENT", [self.$tok(s, e), self.$range(s, e)]]) }; return nil; }, -1); $def(self, '$emit_comment_from_range', function $$emit_comment_from_range(p, pe) { var self = this; return self.$emit_comment(self.sharp_s, ($eqeq(p, pe) ? ($rb_minus(p, 2)) : (p))) }); $def(self, '$diagnostic', function $$diagnostic(type, reason, arguments$, location, highlights) { var self = this; if (arguments$ == null) arguments$ = nil; if (location == null) location = self.$range(); if (highlights == null) highlights = []; return self.diagnostics.$process($$$($$('Parser'), 'Diagnostic').$new(type, reason, arguments$, location, highlights)); }, -3); $def(self, '$e_lbrace', function $$e_lbrace() { var self = this, current_literal = nil; self.cond.$push(false); self.cmdarg.$push(false); current_literal = self.strings.$literal(); if ($truthy(current_literal)) { return current_literal.$start_interp_brace() } else { return nil }; }); $def(self, '$numeric_literal_int', function $$numeric_literal_int() { var self = this, digits = nil, invalid_idx = nil, invalid_s = nil; digits = self.$tok(self.num_digits_s, self.num_suffix_s); if ($truthy(digits['$end_with?']("_".$freeze()))) { self.$diagnostic("error", "trailing_in_number", (new Map([["character", "_".$freeze()]])), self.$range($rb_minus(self.te, 1), self.te)) } else if ((($truthy(digits['$empty?']()) && ($eqeq(self.num_base, 8))) && ($truthy(self['$version?'](18))))) { digits = "0".$freeze() } else if ($truthy(digits['$empty?']())) { self.$diagnostic("error", "empty_numeric") } else if (($eqeq(self.num_base, 8) && ($truthy((invalid_idx = digits.$index(/[89]/)))))) { invalid_s = $rb_plus(self.num_digits_s, invalid_idx); self.$diagnostic("error", "invalid_octal", nil, self.$range(invalid_s, $rb_plus(invalid_s, 1))); }; return digits; }); $def(self, '$on_newline', function $$on_newline(p) { var self = this; return self.strings.$on_newline(p) }); $def(self, '$check_ambiguous_slash', function $$check_ambiguous_slash(tm) { var self = this; if ($eqeq(self.$tok(tm, $rb_plus(tm, 1)), "/".$freeze())) { if ($truthy($rb_lt(self.version, 30))) { return self.$diagnostic("warning", "ambiguous_literal", nil, self.$range(tm, $rb_plus(tm, 1))) } else { return self.$diagnostic("warning", "ambiguous_regexp", nil, self.$range(tm, $rb_plus(tm, 1))) } } else { return nil } }); $def(self, '$emit_global_var', function $$emit_global_var(ts, te) { var self = this; if (ts == null) ts = self.ts; if (te == null) te = self.te; if ($truthy(self.$tok(ts, te)['$=~'](/^\$([1-9][0-9]*)$/))) { return self.$emit("tNTH_REF", self.$tok($rb_plus(ts, 1), te).$to_i(), ts, te) } else if ($truthy(self.$tok()['$=~'](/^\$([&`'+])$/))) { return self.$emit("tBACK_REF", self.$tok(ts, te), ts, te) } else { return self.$emit("tGVAR", self.$tok(ts, te), ts, te) }; }, -1); $def(self, '$emit_class_var', function $$emit_class_var(ts, te) { var self = this; if (ts == null) ts = self.ts; if (te == null) te = self.te; if ($truthy(self.$tok(ts, te)['$=~'](/^@@[0-9]/))) { self.$diagnostic("error", "cvar_name", (new Map([["name", self.$tok(ts, te)]]))) }; return self.$emit("tCVAR", self.$tok(ts, te), ts, te); }, -1); $def(self, '$emit_instance_var', function $$emit_instance_var(ts, te) { var self = this; if (ts == null) ts = self.ts; if (te == null) te = self.te; if ($truthy(self.$tok(ts, te)['$=~'](/^@[0-9]/))) { self.$diagnostic("error", "ivar_name", (new Map([["name", self.$tok(ts, te)]]))) }; return self.$emit("tIVAR", self.$tok(ts, te), ts, te); }, -1); $def(self, '$emit_rbrace_rparen_rbrack', function $$emit_rbrace_rparen_rbrack() { var self = this; self.$emit_table($$('PUNCTUATION')); if ($truthy($rb_lt(self.version, 24))) { self.cond.$lexpop(); return self.cmdarg.$lexpop(); } else { self.cond.$pop(); return self.cmdarg.$pop(); }; }); $def(self, '$emit_colon_with_digits', function $$emit_colon_with_digits(p, tm, diag_msg) { var self = this; if ($truthy($rb_ge(self.version, 27))) { self.$diagnostic("error", diag_msg, (new Map([["name", self.$tok(tm, self.te)]])), self.$range(tm, self.te)) } else { self.$emit("tCOLON", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = self.ts; }; return p; }); $def(self, '$emit_singleton_class', function $$emit_singleton_class() { var self = this; self.$emit("kCLASS", "class".$freeze(), self.ts, $rb_plus(self.ts, 5)); return self.$emit("tLSHFT", "<<".$freeze(), $rb_minus(self.te, 2), self.te); }); $const_set($nesting[0], 'PUNCTUATION', (new Map([["=", "tEQL"], ["&", "tAMPER2"], ["|", "tPIPE"], ["!", "tBANG"], ["^", "tCARET"], ["+", "tPLUS"], ["-", "tMINUS"], ["*", "tSTAR2"], ["/", "tDIVIDE"], ["%", "tPERCENT"], ["~", "tTILDE"], [",", "tCOMMA"], [";", "tSEMI"], [".", "tDOT"], ["..", "tDOT2"], ["...", "tDOT3"], ["[", "tLBRACK2"], ["]", "tRBRACK"], ["(", "tLPAREN2"], [")", "tRPAREN"], ["?", "tEH"], [":", "tCOLON"], ["&&", "tANDOP"], ["||", "tOROP"], ["-@", "tUMINUS"], ["+@", "tUPLUS"], ["~@", "tTILDE"], ["**", "tPOW"], ["->", "tLAMBDA"], ["=~", "tMATCH"], ["!~", "tNMATCH"], ["==", "tEQ"], ["!=", "tNEQ"], [">", "tGT"], [">>", "tRSHFT"], [">=", "tGEQ"], ["<", "tLT"], ["<<", "tLSHFT"], ["<=", "tLEQ"], ["=>", "tASSOC"], ["::", "tCOLON2"], ["===", "tEQQ"], ["<=>", "tCMP"], ["[]", "tAREF"], ["[]=", "tASET"], ["{", "tLCURLY"], ["}", "tRCURLY"], ["`", "tBACK_REF2"], ["!@", "tBANG"], ["&.", "tANDDOT"]]))); $const_set($nesting[0], 'PUNCTUATION_BEGIN', (new Map([["&", "tAMPER"], ["*", "tSTAR"], ["**", "tDSTAR"], ["+", "tUPLUS"], ["-", "tUMINUS"], ["::", "tCOLON3"], ["(", "tLPAREN"], ["{", "tLBRACE"], ["[", "tLBRACK"]]))); $const_set($nesting[0], 'KEYWORDS', (new Map([["if", "kIF_MOD"], ["unless", "kUNLESS_MOD"], ["while", "kWHILE_MOD"], ["until", "kUNTIL_MOD"], ["rescue", "kRESCUE_MOD"], ["defined?", "kDEFINED"], ["BEGIN", "klBEGIN"], ["END", "klEND"]]))); $const_set($nesting[0], 'KEYWORDS_BEGIN', (new Map([["if", "kIF"], ["unless", "kUNLESS"], ["while", "kWHILE"], ["until", "kUNTIL"], ["rescue", "kRESCUE"], ["defined?", "kDEFINED"], ["BEGIN", "klBEGIN"], ["END", "klEND"]]))); $const_set($nesting[0], 'ESCAPE_WHITESPACE', (new Map([[" ", "\\s"], ["\r", "\\r"], ["\n", "\\n"], ["\t", "\\t"], ["\v", "\\v"], ["\f", "\\f"]]))); return $send(Opal.large_array_unpack("class,module,def,undef,begin,end,then,elsif,else,ensure,case,when,for,break,next,redo,retry,in,do,return,yield,super,self,nil,true,false,and,or,not,alias,__FILE__,__LINE__,__ENCODING__"), 'each', [], function $Lexer$15(keyword){var $a, $b; if (keyword == null) keyword = nil; return ($a = [keyword, ($b = [keyword, "k" + (keyword.$upcase())], $send($$('KEYWORDS'), '[]=', $b), $b[$b.length - 1])], $send($$('KEYWORDS_BEGIN'), '[]=', $a), $a[$a.length - 1]);}); })($$('Parser'), null, $nesting) }; Opal.modules["parser/lexer-F1"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $truthy = Opal.truthy, $send = Opal.send, $rb_minus = Opal.rb_minus, $def = Opal.def, $eqeq = Opal.eqeq, $const_set = Opal.const_set, $rb_plus = Opal.rb_plus, $to_ary = Opal.to_ary, $rb_le = Opal.rb_le, $rb_gt = Opal.rb_gt, $neqeq = Opal.neqeq, $range = Opal.range, $rb_ge = Opal.rb_ge, $not = Opal.not, $rb_lt = Opal.rb_lt, $gvars = Opal.gvars, $slice = Opal.slice, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_accessor,private,_lex_trans_keys=,_lex_key_spans=,_lex_index_offsets=,_lex_indicies=,_lex_trans_targs=,_lex_trans_actions=,_lex_to_state_actions=,_lex_from_state_actions=,_lex_eof_trans=,lex_start=,lex_error=,lex_en_expr_variable=,lex_en_expr_fname=,lex_en_expr_endfn=,lex_en_expr_dot=,lex_en_expr_arg=,lex_en_expr_cmdarg=,lex_en_expr_endarg=,lex_en_expr_mid=,lex_en_expr_beg=,lex_en_expr_labelarg=,lex_en_expr_value=,lex_en_expr_end=,lex_en_leading_dot=,lex_en_line_comment=,lex_en_line_begin=,lex_en_inside_string=,attr_reader,respond_to?,class,send,lambda,emit,Rational,Complex,-,Float,reset,lex_en_line_begin,new,source,==,encoding,unpack,[],source_buffer=,source_pts=,lex_en_expr_dot,lex_en_expr_fname,lex_en_expr_value,lex_en_expr_beg,lex_en_expr_mid,lex_en_expr_arg,lex_en_expr_cmdarg,lex_en_expr_end,lex_en_expr_endarg,lex_en_expr_endfn,lex_en_expr_labelarg,lex_en_inside_string,fetch,invert,push,count,pop,dedent_level,empty?,shift,+,size,<=,<<,>,!=,on_newline,emit_comment_from_range,tok,emit_global_var,stack_pop,emit_class_var,emit_instance_var,emit_table,[]=,version?,chr,push_literal,in_argdef,>=,freeze,arg_or_cmdarg,check_ambiguous_slash,diagnostic,range,active?,emit_do,slice,length,start_with?,read_character_constant,=~,declared?,!,nil?,<,emit_colon_with_digits,last,any?,emit_singleton_class,inspect,numeric_literal_int,to_i,call,to_f,emit_comment,advance,e_lbrace,close_interp_on_current_literal,emit_rbrace_rparen_rbrack,in_kwarg,end_with?,rstrip,herebody_s,herebody_s=,lex_error,protected,include?,process,literal,start_interp_brace,index,lexpop,each,upcase'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Lexer'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.version = $proto.source_buffer = $proto.source_pts = $proto.strings = $proto.cs = $proto.cmdarg_stack = $proto.cmdarg = $proto.cond_stack = $proto.cond = $proto.token_queue = $proto._lex_actions = $proto.p = $proto.command_start = $proto.ts = $proto.te = $proto.stack = $proto.top = $proto.act = $proto.context = $proto.static_env = $proto.newline_s = $proto.lambda_stack = $proto.paren_nest = $proto.num_base = $proto.num_suffix_s = $proto.num_xfrm = $proto.eq_begin_s = $proto.cs_before_block_comment = $proto.emit_rational = $proto.emit_imaginary = $proto.emit_imaginary_rational = $proto.emit_integer_re = $proto.emit_integer_if = $proto.emit_integer_rescue = $proto.emit_imaginary_float = $proto.emit_float_if = $proto.emit_float_rescue = $proto.emit_integer = $proto.emit_float = $proto.tokens = $proto.comments = $proto.sharp_s = $proto.diagnostics = $proto.num_digits_s = nil; (function(self, $parent_nesting) { self.$attr_accessor("_lex_trans_keys"); return self.$private("_lex_trans_keys", "_lex_trans_keys="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_trans_keys='](Opal.large_array_unpack("0,0,0,127,0,127,0,127,0,127,0,127,0,127,0,127,58,58,58,58,46,46,0,127,58,58,60,60,62,62,10,10,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,115,115,99,99,117,117,101,101,108,116,101,101,115,115,115,115,105,105,108,108,105,105,108,108,58,58,0,127,10,10,0,127,9,92,10,10,9,92,58,58,98,98,101,101,103,103,105,105,110,110,0,127,61,61,9,92,9,92,9,92,9,92,9,92,10,10,0,127,0,127,61,126,93,93,0,127,0,127,10,10,34,34,10,10,39,39,0,127,10,96,96,96,0,127,0,127,0,127,0,127,0,127,0,127,58,58,58,58,0,127,43,57,48,57,48,57,48,57,48,57,115,115,99,99,117,117,101,101,99,99,117,117,101,101,0,127,58,58,9,92,9,92,9,92,9,92,9,92,9,92,60,60,10,10,9,92,9,92,10,10,10,10,10,10,10,10,46,46,101,101,103,103,105,105,110,110,69,69,78,78,68,68,95,95,95,95,0,26,0,0,36,64,0,127,48,57,0,127,0,127,0,127,0,127,9,32,0,0,61,126,10,10,10,10,0,127,0,127,48,57,115,115,38,38,42,42,64,64,58,58,60,61,62,62,61,126,61,61,61,62,0,127,0,127,0,127,0,127,0,127,0,127,0,127,93,93,10,10,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,124,124,0,127,0,127,9,32,10,10,10,10,46,46,10,10,0,0,0,127,0,127,61,61,0,0,9,32,0,0,61,126,10,10,10,10,38,38,42,42,64,64,60,61,62,62,61,126,61,61,61,62,0,127,93,93,10,10,124,124,0,126,0,127,0,61,9,61,9,61,0,0,9,61,9,62,46,46,46,46,58,58,9,32,0,0,0,127,0,0,9,124,0,0,10,10,10,10,0,0,9,61,58,58,60,60,62,62,9,32,10,10,0,127,102,102,101,101,110,110,104,104,0,127,0,127,0,127,0,0,0,127,10,10,0,123,9,32,10,10,10,10,10,10,0,0,111,111,0,0,0,127,0,127,9,32,0,0,10,10,10,10,10,10,0,0,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,58,61,0,0,61,126,61,61,0,0,0,0,0,0,9,32,61,61,9,32,61,126,10,10,10,10,0,127,38,61,0,0,42,61,61,61,9,92,9,92,9,92,46,46,46,46,10,10,0,26,0,127,0,127,61,61,0,0,61,126,61,62,0,0,0,0,0,0,0,0,61,126,0,127,48,57,38,38,42,42,64,64,60,61,62,62,61,61,61,62,0,127,48,57,0,127,124,124,64,64,60,61,0,0,10,34,10,39,96,96,62,62,61,126,61,62,0,26,0,127,0,127,0,127,0,0,10,10,0,0,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,61,126,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,0,61,124,0,92,9,32,0,0,10,10,10,10,10,10,0,0,0,127,0,127,9,32,0,0,10,10,10,10,10,10,0,0,0,127,0,127,61,61,0,0,9,32,0,0,61,126,10,10,10,10,0,127,0,127,48,57,61,61,38,61,0,0,0,0,42,61,61,62,46,57,46,46,10,10,48,101,48,95,46,120,48,114,43,57,48,105,102,102,0,0,101,105,0,0,0,0,48,114,48,114,48,114,48,114,105,114,102,102,0,0,101,105,115,115,0,0,0,0,48,114,48,114,48,114,48,114,48,114,48,114,48,114,48,114,46,114,48,114,46,114,48,114,58,58,60,61,62,62,61,126,61,61,61,62,0,127,0,127,0,0,0,127,0,127,0,127,0,127,0,127,0,127,0,0,10,10,0,0,0,0,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,9,92,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,0,61,124,0,0,9,92,9,92,9,92,46,46,46,46,10,10,46,46,10,10,10,61,10,10,10,101,10,110,10,100,10,10,0,95,9,32,0,0,10,10,10,10,98,98,9,32,10,10,95,95,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_key_spans"); return self.$private("_lex_key_spans", "_lex_key_spans="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_key_spans='](Opal.large_array_unpack("0,128,128,128,128,128,128,128,1,1,1,128,1,1,1,1,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,1,1,1,1,9,1,1,1,1,1,1,1,1,128,1,128,84,1,84,1,1,1,1,1,1,128,1,84,84,84,84,84,1,128,128,66,1,128,128,1,1,1,1,128,87,1,128,128,128,128,128,128,1,1,128,15,10,10,10,10,1,1,1,1,1,1,1,128,1,84,84,84,84,84,84,1,1,84,84,1,1,1,1,1,1,1,1,1,1,1,1,1,1,27,0,29,128,10,128,128,128,128,24,0,66,1,1,128,128,10,1,1,1,1,1,2,1,66,1,2,128,128,128,128,128,128,128,1,1,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,1,128,128,24,1,1,1,1,0,128,128,1,0,24,0,66,1,1,1,1,1,2,1,66,1,2,128,1,1,1,127,128,62,53,53,0,53,54,1,1,1,24,0,128,0,116,0,1,1,0,53,1,1,1,24,1,128,1,1,1,1,128,128,128,0,128,1,124,24,1,1,1,0,1,0,128,128,24,0,1,1,1,0,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,4,0,66,1,0,0,0,24,1,24,66,1,1,128,24,0,20,1,84,84,84,1,1,1,27,128,128,1,0,66,2,0,0,0,0,66,128,10,1,1,1,2,1,1,2,128,10,128,1,1,2,0,25,30,1,1,66,2,27,128,128,128,0,1,0,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,66,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,0,64,93,24,0,1,1,1,0,128,128,24,0,1,1,1,0,128,128,1,0,24,0,66,1,1,128,128,10,1,24,0,0,20,2,12,1,1,54,48,75,67,15,58,1,0,5,0,0,67,67,67,67,10,1,0,5,1,0,0,67,67,67,67,67,67,67,67,69,67,69,67,1,2,1,66,1,2,128,128,0,128,128,128,128,128,128,0,1,0,0,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,84,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,0,64,0,84,84,84,1,1,1,1,1,52,1,92,101,91,1,96,24,0,1,1,1,24,1,1")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_index_offsets"); return self.$private("_lex_index_offsets", "_lex_index_offsets="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_index_offsets='](Opal.large_array_unpack("0,0,129,258,387,516,645,774,903,905,907,909,1038,1040,1042,1044,1046,1175,1304,1433,1562,1691,1820,1949,2078,2207,2336,2465,2594,2723,2852,2981,3110,3239,3368,3370,3372,3374,3376,3386,3388,3390,3392,3394,3396,3398,3400,3402,3531,3533,3662,3747,3749,3834,3836,3838,3840,3842,3844,3846,3975,3977,4062,4147,4232,4317,4402,4404,4533,4662,4729,4731,4860,4989,4991,4993,4995,4997,5126,5214,5216,5345,5474,5603,5732,5861,5990,5992,5994,6123,6139,6150,6161,6172,6183,6185,6187,6189,6191,6193,6195,6197,6326,6328,6413,6498,6583,6668,6753,6838,6840,6842,6927,7012,7014,7016,7018,7020,7022,7024,7026,7028,7030,7032,7034,7036,7038,7040,7068,7069,7099,7228,7239,7368,7497,7626,7755,7780,7781,7848,7850,7852,7981,8110,8121,8123,8125,8127,8129,8131,8134,8136,8203,8205,8208,8337,8466,8595,8724,8853,8982,9111,9113,9115,9244,9373,9502,9631,9760,9889,10018,10147,10276,10405,10534,10663,10792,10921,11050,11179,11308,11437,11566,11695,11824,11953,12082,12211,12340,12469,12598,12727,12856,12985,13114,13243,13372,13501,13630,13759,13888,14017,14146,14275,14404,14533,14662,14791,14920,15049,15178,15307,15436,15565,15694,15823,15952,16081,16210,16339,16468,16597,16726,16855,16984,17113,17242,17371,17500,17629,17758,17887,18016,18145,18274,18403,18532,18661,18790,18919,19048,19177,19306,19435,19564,19693,19822,19824,19953,20082,20107,20109,20111,20113,20115,20116,20245,20374,20376,20377,20402,20403,20470,20472,20474,20476,20478,20480,20483,20485,20552,20554,20557,20686,20688,20690,20692,20820,20949,21012,21066,21120,21121,21175,21230,21232,21234,21236,21261,21262,21391,21392,21509,21510,21512,21514,21515,21569,21571,21573,21575,21600,21602,21731,21733,21735,21737,21739,21868,21997,22126,22127,22256,22258,22383,22408,22410,22412,22414,22415,22417,22418,22547,22676,22701,22702,22704,22706,22708,22709,22838,22967,23096,23225,23354,23483,23612,23741,23870,23999,24128,24257,24386,24515,24644,24773,24902,25031,25036,25037,25104,25106,25107,25108,25109,25134,25136,25161,25228,25230,25232,25361,25386,25387,25408,25410,25495,25580,25665,25667,25669,25671,25699,25828,25957,25959,25960,26027,26030,26031,26032,26033,26034,26101,26230,26241,26243,26245,26247,26250,26252,26254,26257,26386,26397,26526,26528,26530,26533,26534,26560,26591,26593,26595,26662,26665,26693,26822,26951,27080,27081,27083,27084,27213,27342,27471,27600,27729,27858,27987,28116,28245,28374,28503,28632,28761,28890,29019,29148,29277,29406,29535,29664,29793,29922,30051,30180,30309,30438,30567,30696,30825,30954,31083,31212,31341,31470,31599,31728,31857,31986,32115,32244,32373,32502,32631,32760,32889,33018,33147,33276,33405,33534,33663,33792,33921,34050,34179,34308,34437,34566,34695,34824,34953,35020,35149,35278,35407,35536,35665,35794,35923,36052,36181,36310,36439,36568,36697,36826,36955,37084,37213,37342,37471,37600,37729,37858,37987,38116,38245,38246,38311,38405,38430,38431,38433,38435,38437,38438,38567,38696,38721,38722,38724,38726,38728,38729,38858,38987,38989,38990,39015,39016,39083,39085,39087,39216,39345,39356,39358,39383,39384,39385,39406,39409,39422,39424,39426,39481,39530,39606,39674,39690,39749,39751,39752,39758,39759,39760,39828,39896,39964,40032,40043,40045,40046,40052,40054,40055,40056,40124,40192,40260,40328,40396,40464,40532,40600,40670,40738,40808,40876,40878,40881,40883,40950,40952,40955,41084,41213,41214,41343,41472,41601,41730,41859,41988,41989,41991,41992,41993,42122,42251,42380,42509,42638,42767,42896,43025,43154,43283,43412,43541,43670,43799,43928,44057,44186,44315,44444,44573,44702,44831,44960,45089,45218,45347,45476,45605,45734,45863,45992,46121,46250,46379,46508,46637,46766,46851,46980,47109,47238,47367,47496,47625,47754,47883,48012,48141,48270,48399,48528,48657,48786,48915,49044,49173,49302,49431,49560,49689,49818,49947,50076,50205,50334,50463,50592,50721,50850,50979,51108,51237,51366,51495,51624,51753,51882,52011,52140,52269,52398,52527,52656,52785,52914,53043,53172,53301,53430,53559,53688,53817,53946,54075,54204,54333,54462,54591,54720,54849,54978,55107,55236,55237,55302,55303,55388,55473,55558,55560,55562,55564,55566,55568,55621,55623,55716,55818,55910,55912,56009,56034,56035,56037,56039,56041,56066,56068")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_indicies"); return self.$private("_lex_indicies", "_lex_indicies="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_indicies='](Opal.large_array_unpack("2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,1,1,2,2,1,1,1,3,1,1,4,4,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,2,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,1,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,5,5,2,2,2,2,2,2,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,2,2,2,5,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,2,2,2,2,5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2,7,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2,2,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,8,9,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,8,8,9,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,10,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,14,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,15,12,12,12,12,14,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,13,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,12,13,15,12,12,16,17,12,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,20,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,21,18,18,18,18,20,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,18,18,18,18,19,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,18,18,18,18,18,19,21,18,23,22,24,22,25,22,22,22,22,22,22,22,22,22,22,27,22,27,27,27,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,27,22,22,22,22,28,29,22,30,22,31,32,33,34,35,28,22,22,22,22,22,22,22,22,22,22,36,22,37,33,38,39,22,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,40,41,33,42,26,22,26,26,26,26,26,26,26,26,43,26,26,26,26,26,26,26,26,44,26,26,45,26,46,26,26,26,47,48,22,42,22,26,22,22,22,22,22,22,22,22,22,49,22,49,49,49,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,49,22,22,22,22,50,51,22,52,22,53,54,55,56,57,50,22,22,22,22,22,22,22,22,22,22,58,22,59,55,60,61,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,62,63,55,24,19,22,19,19,19,19,19,19,19,19,64,19,19,19,19,19,19,19,19,65,19,19,66,19,67,19,19,19,68,69,22,24,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,70,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,71,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,72,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,73,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,74,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,70,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,19,19,75,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,76,19,19,19,19,19,19,19,77,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,78,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,79,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,70,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,80,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,70,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,81,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,82,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,19,21,22,22,22,22,20,22,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,19,22,19,19,19,19,19,19,19,19,19,19,19,74,19,19,19,19,19,19,19,19,19,19,19,19,19,19,22,22,22,22,22,19,84,83,85,83,86,83,55,83,87,83,83,83,83,83,83,83,88,83,89,83,90,83,55,83,91,83,55,83,92,83,86,83,94,93,95,95,95,95,95,95,95,95,95,97,95,97,97,97,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,97,95,95,95,95,95,95,95,98,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,95,99,95,95,96,95,96,96,96,100,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,95,95,95,95,95,96,101,95,95,95,95,95,95,95,95,95,95,103,95,103,103,103,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,103,95,95,95,95,95,95,95,104,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,95,105,95,95,102,95,102,102,102,106,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,95,95,95,95,95,102,108,107,108,108,108,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,108,107,107,107,107,107,107,107,109,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,110,107,111,107,112,107,112,112,112,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,112,107,107,107,107,107,107,107,113,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,114,107,115,116,118,117,119,117,120,117,121,117,122,117,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,123,123,123,123,123,123,123,123,123,123,124,124,124,124,124,124,124,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,124,124,124,124,124,124,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,124,124,124,124,124,123,125,115,126,127,126,126,126,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,126,115,115,128,115,115,115,115,115,115,115,115,115,115,115,115,129,129,129,129,129,129,129,129,129,129,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,130,115,131,132,131,131,131,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,131,115,115,133,115,115,115,115,115,115,115,115,115,115,115,115,134,134,134,134,134,134,134,134,134,134,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,135,115,137,138,137,137,137,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,137,136,136,139,136,136,136,136,136,136,136,136,136,136,136,136,140,140,140,140,140,140,140,140,140,140,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,141,136,143,144,143,143,143,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,143,142,142,145,142,142,142,142,142,142,142,142,142,142,142,142,146,146,146,146,146,146,146,146,146,146,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,147,142,143,148,143,143,143,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,143,142,142,145,142,142,142,142,142,142,142,142,142,142,142,142,146,146,146,146,146,146,146,146,146,146,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,147,142,127,115,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,151,151,149,151,149,151,151,149,149,151,151,151,152,151,151,153,153,153,153,153,153,153,153,153,153,151,151,151,151,151,151,151,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,149,151,149,149,150,151,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,149,149,149,151,149,150,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,151,151,151,151,151,151,151,151,151,151,149,149,149,149,149,149,149,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,149,149,149,149,151,149,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,149,149,149,149,149,151,154,151,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,151,149,154,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,156,149,149,149,149,157,149,149,149,149,149,158,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,125,149,149,149,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,149,149,149,149,155,159,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,149,149,149,158,149,155,161,161,161,161,161,161,161,161,161,161,162,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,160,160,160,160,160,160,160,160,160,160,161,161,161,161,161,161,161,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,161,161,161,161,160,161,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,161,161,161,161,161,160,164,163,167,166,162,161,167,168,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,156,149,149,149,149,157,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,149,149,149,149,155,159,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,149,149,149,149,149,155,170,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,167,169,167,170,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,172,115,115,115,115,115,115,115,115,115,115,115,115,115,115,171,171,171,171,171,171,171,171,171,171,173,115,115,174,115,172,115,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,115,115,115,115,171,115,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,115,115,115,115,115,171,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,172,149,149,149,149,149,149,149,149,149,149,149,149,149,149,171,171,171,171,171,171,171,171,171,171,173,149,149,174,149,172,149,171,171,171,171,171,171,175,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,171,149,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,149,171,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,172,149,149,149,149,149,149,149,149,149,149,149,149,149,149,171,171,171,171,171,171,171,171,171,171,173,149,149,174,149,172,149,171,171,171,171,171,171,171,171,176,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,171,149,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,149,171,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,172,149,149,149,149,149,149,149,149,149,149,149,149,149,149,171,171,171,171,171,171,171,171,171,171,173,149,149,174,149,172,149,171,171,171,171,171,171,171,171,171,171,171,171,171,177,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,171,149,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,149,171,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,172,149,149,149,149,149,149,149,149,149,149,149,149,149,149,171,171,171,171,171,171,171,171,171,171,173,149,149,174,149,172,149,171,171,171,177,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,171,149,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,149,149,149,149,149,171,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,180,178,178,178,178,178,178,178,178,178,178,178,178,178,178,179,179,179,179,179,179,179,179,179,179,181,178,178,178,178,180,178,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,178,178,178,178,179,178,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,178,178,178,178,178,179,181,178,178,182,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,184,184,184,184,184,184,184,184,184,184,183,183,183,183,183,183,183,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,183,183,183,183,184,183,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,183,183,183,183,183,184,186,185,186,185,185,187,187,187,187,187,187,187,187,187,187,185,187,187,187,187,187,187,187,187,187,187,185,188,188,188,188,188,188,188,188,188,188,185,190,190,190,190,190,190,190,190,190,190,189,191,191,191,191,191,191,191,191,191,191,189,193,192,194,192,195,192,196,192,198,197,199,197,200,197,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,201,201,201,201,201,201,201,201,201,201,183,183,183,183,183,183,183,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,183,183,183,183,201,183,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,183,183,183,183,183,201,202,189,203,204,203,203,203,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,203,189,189,205,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,206,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,207,189,208,209,208,208,208,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,208,189,189,210,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,211,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,212,189,214,215,214,214,214,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,214,213,213,216,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,217,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,218,213,220,221,220,220,220,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,220,219,219,222,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,223,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,224,219,220,221,220,220,220,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,220,219,219,222,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,225,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,224,219,220,226,220,220,220,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,220,219,219,222,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,223,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,224,219,227,189,204,189,229,230,229,229,229,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,229,228,228,231,228,228,232,228,228,228,228,228,228,228,233,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,234,228,236,230,236,236,236,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,236,235,235,231,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,234,235,239,238,241,240,242,237,243,237,244,228,246,245,247,245,248,245,249,245,250,245,251,245,252,245,253,245,254,245,255,245,245,245,255,245,245,245,245,245,256,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,255,245,257,258,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,259,2,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,0,0,0,0,0,0,0,0,0,0,260,260,260,260,260,260,260,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,260,260,260,260,0,260,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,260,260,260,260,260,0,4,4,4,4,4,4,4,4,4,4,260,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,5,5,5,5,5,5,5,5,5,5,261,261,261,261,261,261,261,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,261,261,261,261,5,261,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,261,261,261,261,261,5,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,7,7,7,7,7,7,7,7,7,7,262,262,262,262,262,262,262,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,262,262,262,262,7,262,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,262,262,262,262,262,7,264,265,265,265,264,265,265,265,265,266,267,266,266,266,265,265,265,265,265,265,265,265,265,265,265,265,264,265,265,265,265,265,266,268,265,269,270,271,272,265,265,265,273,274,265,274,265,275,265,265,265,265,265,265,265,265,265,265,276,265,277,278,279,265,265,280,281,280,280,282,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,283,284,265,275,285,275,286,287,288,289,290,291,263,263,292,263,263,263,293,294,295,263,263,296,297,298,299,263,300,263,301,263,265,302,265,274,265,263,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,304,303,303,303,303,303,303,303,303,303,303,303,303,303,303,263,263,263,263,263,263,263,263,263,263,303,303,303,304,303,304,303,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,303,303,303,303,263,303,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,303,303,303,303,303,263,266,305,266,266,266,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,266,305,306,275,307,307,275,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,275,307,308,309,310,311,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,9,9,312,9,312,9,9,312,312,9,9,9,314,9,9,315,315,315,315,315,315,315,315,315,315,9,9,9,9,9,9,9,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,312,9,312,312,313,9,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,312,312,312,9,312,313,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,313,313,313,313,313,313,313,313,313,313,316,316,316,316,316,316,316,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,316,316,316,316,313,316,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,316,316,316,316,316,313,315,315,315,315,315,315,315,315,315,315,316,317,307,275,307,275,307,275,307,319,318,275,320,307,275,307,321,275,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,275,312,275,307,275,275,307,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,304,303,303,303,303,303,303,303,303,303,303,303,303,303,303,280,280,280,280,280,280,280,280,280,280,303,303,303,304,303,304,303,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,303,303,303,303,280,303,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,303,303,303,303,303,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,280,323,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,280,280,280,324,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,280,280,280,280,280,325,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,280,280,280,280,280,280,280,280,280,280,326,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,280,280,280,280,280,280,280,280,280,280,327,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,304,322,322,322,322,322,322,322,322,322,322,322,322,322,322,280,280,280,280,280,280,280,280,280,280,322,322,322,304,322,304,322,280,280,280,326,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,280,322,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,322,322,322,322,322,280,321,312,267,312,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,329,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,330,331,263,263,263,263,263,332,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,333,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,334,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,335,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,336,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,337,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,338,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,339,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,340,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,341,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,342,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,343,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,339,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,344,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,343,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,345,263,346,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,347,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,348,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,349,263,263,263,263,263,263,263,263,263,263,263,263,350,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,351,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,352,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,353,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,354,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,355,263,263,263,263,263,263,263,263,263,263,356,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,357,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,358,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,348,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,359,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,360,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,304,361,361,361,361,361,361,361,361,361,361,361,361,361,361,263,263,263,263,263,263,263,263,263,263,361,361,361,304,361,304,361,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,361,361,361,361,263,361,263,263,263,263,263,263,263,263,362,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,361,361,361,361,361,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,363,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,364,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,365,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,366,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,367,263,368,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,369,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,341,263,263,263,370,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,371,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,372,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,357,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,373,263,263,263,263,263,263,263,263,263,263,263,263,263,295,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,355,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,341,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,374,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,375,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,376,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,357,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,377,263,263,263,378,263,263,263,263,263,379,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,379,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,380,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,381,263,263,263,263,263,263,263,263,263,263,263,263,263,263,382,383,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,384,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,357,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,385,263,263,386,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,341,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,352,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,387,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,388,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,370,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,389,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,295,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,390,263,263,263,263,263,263,263,263,263,384,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,352,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,263,263,391,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,392,263,263,263,263,263,263,263,393,263,263,263,263,263,263,263,394,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,370,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,358,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,378,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,395,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,352,263,263,263,376,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,396,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,397,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,304,328,328,328,328,328,328,328,328,328,328,328,328,328,328,263,263,263,263,263,263,263,263,263,263,328,328,328,304,328,304,328,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,263,328,263,263,263,263,263,263,263,263,263,263,263,346,263,263,263,263,263,263,263,263,263,263,263,263,263,263,328,328,328,328,328,263,275,307,399,400,400,400,399,400,400,400,400,401,400,401,401,401,400,400,400,400,400,400,400,400,400,400,400,400,399,400,400,400,400,400,401,400,400,402,400,400,400,400,400,400,400,400,400,400,403,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,400,404,400,400,398,400,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,400,400,400,400,400,398,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,14,405,405,405,405,405,405,405,405,405,405,405,405,405,405,13,13,13,13,13,13,13,13,13,13,15,405,405,405,405,14,405,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,405,405,405,405,13,405,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,405,405,405,405,405,13,401,406,401,401,401,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,401,406,407,408,409,410,411,405,412,405,413,415,416,416,416,415,416,416,416,416,417,418,417,417,417,416,416,416,416,416,416,416,416,416,416,416,416,415,416,416,416,416,416,417,419,416,420,416,421,422,416,416,416,423,424,416,424,416,421,416,416,416,416,416,416,416,416,416,416,416,416,425,426,427,416,416,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,429,430,416,421,414,421,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,416,431,416,424,416,414,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,433,432,432,432,432,432,432,432,432,432,432,432,432,432,432,414,414,414,414,414,414,414,414,414,414,432,432,432,432,432,433,432,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,432,432,432,432,414,432,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,432,432,432,432,432,414,435,434,436,417,437,417,417,417,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,417,437,438,421,439,439,421,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,421,439,440,441,442,443,421,439,421,439,421,439,421,444,439,421,439,446,421,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,421,445,421,439,421,421,439,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,433,447,447,447,447,447,447,447,447,447,447,447,447,447,447,428,428,428,428,428,428,428,428,428,428,447,447,447,447,447,433,447,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,447,447,447,447,428,447,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,447,447,447,447,447,428,446,445,418,445,421,439,449,448,448,448,449,448,448,448,448,450,451,450,450,450,448,448,448,448,448,448,448,448,448,448,448,448,449,448,448,448,448,448,450,448,448,452,448,24,453,448,454,448,455,24,55,456,57,24,448,448,448,448,448,448,448,448,448,448,457,448,458,55,459,460,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,55,461,55,24,448,448,448,448,448,448,448,448,448,448,462,448,448,448,448,448,448,448,448,463,448,448,464,448,465,448,448,448,68,69,448,24,448,466,466,466,466,466,466,466,466,466,450,466,450,450,450,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,450,466,466,466,466,50,51,466,52,466,53,54,55,56,57,50,466,466,466,466,466,466,466,466,466,466,58,466,59,55,60,61,466,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,62,63,55,24,19,466,19,19,19,19,19,19,19,19,64,19,19,19,19,19,19,19,19,65,19,19,66,19,67,19,19,19,68,69,466,24,466,19,467,468,468,468,467,468,468,468,468,55,469,55,55,55,468,468,468,468,468,468,468,468,468,468,468,468,467,468,468,468,468,468,55,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,55,468,55,469,55,55,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,18,18,18,18,18,24,18,18,18,18,18,18,18,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,18,55,469,55,55,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,18,470,55,469,55,55,55,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,55,471,471,471,471,471,471,471,471,471,472,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,55,471,55,469,55,55,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,55,55,18,473,467,55,467,475,474,477,478,477,477,477,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,477,476,479,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,20,467,467,467,467,467,467,467,467,467,467,467,467,467,467,19,19,19,19,19,19,19,19,19,19,21,467,467,467,467,20,467,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,467,467,467,467,19,467,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,467,467,467,467,467,19,480,55,469,55,55,55,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,55,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,55,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,24,467,481,482,483,484,485,486,55,469,55,55,55,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,55,467,467,467,467,467,467,467,467,467,24,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,55,467,55,474,24,487,24,487,488,489,488,488,488,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,488,476,490,487,491,491,491,491,491,491,491,491,491,27,491,27,27,27,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,27,491,491,491,491,28,29,491,30,491,31,32,33,34,35,28,491,491,491,491,491,491,491,491,491,491,36,491,37,33,38,39,491,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,40,41,33,42,26,491,26,26,26,26,26,26,26,26,43,26,26,26,26,26,26,26,26,44,26,26,45,26,46,26,26,26,47,48,491,42,491,26,55,487,492,487,493,487,494,487,495,94,94,94,495,94,94,94,94,496,94,496,496,496,94,94,94,94,94,94,94,94,94,94,94,94,495,94,94,94,94,94,496,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,94,497,94,94,96,94,96,96,96,100,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,94,94,94,94,94,96,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,498,93,93,93,93,93,93,93,93,93,93,93,93,93,93,96,96,96,96,96,96,96,96,96,96,94,93,93,93,93,498,93,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,93,93,93,93,96,93,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,93,93,93,93,93,96,499,499,499,499,499,499,499,499,499,97,499,97,97,97,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,97,499,499,499,499,499,499,499,98,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,499,99,499,499,96,499,96,96,96,100,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,499,499,499,499,499,96,500,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,498,499,499,499,499,499,499,499,499,499,499,499,499,499,499,96,96,96,96,96,96,96,96,96,96,94,499,499,499,499,498,499,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,499,499,499,499,96,499,96,96,96,96,96,96,96,96,96,96,96,96,96,96,501,96,96,96,96,96,96,96,96,96,96,96,499,499,499,499,499,96,101,499,503,502,502,502,503,502,502,502,502,504,502,504,504,504,502,502,502,502,502,502,502,502,502,502,502,502,503,502,502,502,502,502,504,502,502,505,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,506,502,502,502,502,502,502,502,507,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,508,502,504,509,504,504,504,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,504,509,510,511,512,513,515,514,516,517,514,518,520,521,521,521,520,521,521,521,521,522,523,522,522,522,521,521,521,521,521,521,521,521,521,521,521,521,520,521,521,521,521,521,522,521,521,524,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,521,525,521,521,519,521,519,519,519,519,519,519,519,519,526,519,519,519,519,519,519,519,519,527,519,519,528,519,529,519,519,519,521,521,521,521,521,519,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,519,519,519,519,519,519,519,519,519,519,530,530,530,530,530,530,530,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,530,530,530,530,519,530,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,530,530,530,530,530,519,522,531,522,522,522,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,522,531,532,533,534,535,536,538,537,539,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,541,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,542,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,543,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,544,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,545,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,541,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,519,519,546,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,547,519,519,519,519,519,519,519,548,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,549,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,550,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,541,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,551,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,541,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,552,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,553,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,540,540,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,519,540,519,519,519,519,519,519,519,519,519,519,519,545,519,519,519,519,519,519,519,519,519,519,519,519,519,519,540,540,540,540,540,519,555,125,125,125,555,125,125,125,125,556,557,556,556,556,125,125,125,125,125,125,125,125,125,125,125,125,555,125,125,125,125,125,556,558,125,559,125,560,561,125,562,125,563,564,125,565,566,567,125,125,125,125,125,125,125,125,125,125,568,125,569,570,571,572,125,573,574,573,573,575,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,576,577,125,578,579,125,580,581,582,583,584,585,554,554,586,554,554,554,587,588,589,554,554,590,591,592,593,554,594,554,595,554,596,597,125,578,125,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,602,601,601,603,601,604,606,607,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,608,605,610,609,611,612,613,556,614,556,556,556,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,556,614,616,615,618,619,618,618,618,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,618,617,125,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,125,620,621,622,623,624,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,625,625,625,625,625,625,625,625,625,625,626,626,626,626,626,626,626,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,626,626,626,626,626,626,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,626,626,626,626,626,625,629,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,125,628,630,632,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,125,631,125,115,126,127,126,126,126,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,126,628,628,128,628,628,628,628,628,628,628,628,628,628,628,628,129,129,129,129,129,129,129,129,129,129,628,628,628,125,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,130,628,143,144,143,143,143,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,143,142,142,145,142,142,142,142,142,142,142,142,142,142,142,142,146,146,146,146,146,146,146,146,146,146,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,147,142,126,127,126,126,126,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,126,628,628,128,628,628,628,628,628,628,628,628,628,628,628,628,129,129,129,129,129,129,129,129,129,129,628,628,628,125,125,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,130,628,634,620,636,635,638,637,620,639,639,639,620,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,620,639,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,641,642,620,643,151,644,642,620,620,645,646,620,646,620,151,620,620,620,620,620,620,620,620,620,620,647,620,648,649,650,620,651,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,652,620,620,151,640,151,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,620,653,620,654,620,640,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,656,655,655,655,655,655,655,655,655,655,655,655,655,655,655,640,640,640,640,640,640,640,640,640,640,655,655,655,657,655,656,655,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,655,655,655,655,640,655,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,655,655,655,655,655,640,659,658,660,662,663,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,664,661,666,667,665,668,669,670,671,151,655,655,672,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,151,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,150,150,150,150,150,150,150,150,150,150,655,655,655,655,655,655,655,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,655,655,655,655,150,655,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,655,655,655,655,655,150,153,153,153,153,153,153,153,153,153,153,655,673,655,151,655,151,655,151,674,655,151,655,151,655,151,151,655,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,677,677,677,677,677,677,677,677,677,677,675,675,675,675,675,675,678,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,675,675,675,675,676,675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,675,675,675,675,675,676,680,680,680,680,680,680,680,680,680,680,679,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,683,683,683,683,683,683,683,683,683,683,681,681,681,681,681,681,681,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,681,681,681,681,682,681,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,681,681,681,681,681,682,673,655,672,655,684,685,620,686,166,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,167,156,168,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,167,157,167,170,125,620,578,125,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,125,620,125,629,620,690,689,689,689,690,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,690,689,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,172,115,115,115,115,115,115,115,115,115,115,115,115,115,115,171,171,171,171,171,171,171,171,171,171,173,115,115,174,115,172,115,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,115,115,115,115,171,115,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,115,115,115,115,115,171,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,172,620,620,620,620,620,620,620,620,620,620,620,620,620,620,171,171,171,171,171,171,171,171,171,171,173,620,620,174,620,172,620,171,171,171,171,691,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,620,620,620,620,171,620,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,620,620,620,620,620,171,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,172,620,620,620,620,620,620,620,620,620,620,620,620,620,620,171,171,171,171,171,171,171,171,171,171,173,620,620,174,620,172,620,171,171,171,171,171,171,171,171,171,171,171,171,171,692,171,171,171,171,171,171,171,171,171,171,171,171,620,620,620,620,171,620,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,620,620,620,620,620,171,693,694,620,615,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,695,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,696,697,554,554,554,554,554,698,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,699,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,700,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,701,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,702,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,703,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,704,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,705,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,706,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,707,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,172,115,115,115,115,115,115,115,115,115,115,115,115,115,115,554,554,554,554,554,554,554,554,554,554,173,115,115,174,115,172,115,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,115,115,115,115,554,115,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,115,115,115,115,115,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,708,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,709,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,705,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,710,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,709,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,711,554,712,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,713,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,714,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,715,554,554,554,554,554,554,554,554,554,554,554,554,716,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,717,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,718,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,719,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,720,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,721,554,554,554,554,554,554,554,554,554,554,722,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,723,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,724,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,714,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,725,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,726,554,727,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,728,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,707,554,554,554,725,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,729,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,730,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,723,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,731,554,554,554,554,554,554,554,554,554,554,554,554,554,589,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,721,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,732,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,733,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,734,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,735,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,723,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,736,554,554,554,737,554,554,554,554,554,738,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,738,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,739,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,740,554,554,554,554,554,554,554,554,554,554,554,554,554,554,741,742,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,743,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,744,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,745,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,748,746,746,746,746,746,746,746,746,746,746,746,746,746,746,747,747,747,747,747,747,747,747,747,747,749,746,746,750,746,748,746,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,746,746,746,746,747,746,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,746,746,746,746,746,747,606,751,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,608,605,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,752,554,554,753,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,707,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,718,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,754,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,755,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,725,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,756,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,589,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,757,554,554,554,554,554,554,554,554,554,758,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,718,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,723,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,759,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,760,554,554,554,554,554,554,554,761,554,554,554,554,554,554,554,762,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,725,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,763,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,764,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,732,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,765,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,732,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,766,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,718,554,554,554,767,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,768,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,732,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,769,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,770,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,598,598,598,598,598,598,598,598,598,599,598,599,599,599,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,172,598,598,598,598,598,598,598,598,598,598,598,598,598,598,554,554,554,554,554,554,554,554,554,554,173,598,598,174,598,172,598,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,600,598,598,554,598,554,554,554,554,554,554,554,554,554,554,554,712,554,554,554,554,554,554,554,554,554,554,554,554,554,554,598,598,598,598,598,554,771,125,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,772,620,774,773,773,773,774,773,773,773,773,775,776,775,775,775,773,773,773,773,773,773,773,773,773,773,773,773,774,773,773,773,773,773,775,773,773,777,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,778,773,775,779,775,775,775,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,775,779,780,781,782,783,784,786,785,787,789,790,790,790,789,790,790,790,790,791,792,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790,789,790,790,790,790,790,791,790,793,794,790,790,790,793,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,790,795,790,790,788,790,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,790,790,790,790,790,788,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,180,796,796,796,796,796,796,796,796,796,796,796,796,796,796,179,179,179,179,179,179,179,179,179,179,181,796,796,796,796,180,796,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,796,796,796,796,179,796,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,796,796,796,796,796,179,791,797,791,791,791,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,791,797,798,799,800,801,802,803,796,804,806,807,807,807,806,807,807,807,807,808,809,808,808,808,807,807,807,807,807,807,807,807,807,807,807,807,806,807,807,807,807,807,808,810,811,812,813,814,815,811,816,817,818,814,819,820,821,814,822,823,823,823,823,823,823,823,823,823,824,825,826,827,828,829,830,831,832,831,831,833,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,834,835,836,814,837,811,838,839,840,841,842,843,805,805,844,805,805,805,845,846,847,805,805,848,849,850,851,805,852,805,853,805,854,855,856,857,807,805,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,858,189,189,189,189,189,189,189,189,189,189,189,189,189,189,805,805,805,805,805,805,805,805,805,805,189,189,189,189,189,858,189,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,189,189,189,189,805,189,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,189,189,189,189,189,805,860,859,861,808,862,808,808,808,862,862,862,862,862,862,862,862,862,862,862,862,862,862,862,862,862,862,808,862,863,865,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,865,864,866,867,868,869,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,184,184,870,184,870,184,184,870,870,184,184,184,871,184,184,872,872,872,872,872,872,872,872,872,872,184,184,184,184,184,184,184,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,870,184,870,870,201,184,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,870,870,870,184,870,201,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,873,201,201,201,201,201,201,201,201,201,201,873,873,873,873,873,873,873,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,873,873,873,873,201,873,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,873,873,873,873,873,201,872,872,872,872,872,872,872,872,872,872,873,874,189,814,875,875,875,875,875,875,875,876,875,875,875,875,875,875,875,875,875,875,875,875,875,875,874,875,877,878,814,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,879,874,879,874,880,875,882,881,188,188,188,188,188,188,188,188,188,188,881,884,883,885,883,188,188,188,188,188,188,188,188,188,188,886,886,886,886,886,886,886,886,886,886,886,887,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,888,886,886,886,886,886,887,886,187,187,187,187,187,187,187,187,187,187,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,186,886,890,889,891,891,891,891,891,891,891,891,891,891,889,889,889,889,889,889,889,889,892,889,893,894,889,889,889,889,889,889,889,889,889,895,889,889,889,889,889,889,889,889,896,889,889,889,889,889,889,897,889,889,892,889,893,894,889,889,889,898,889,889,889,889,889,895,889,889,899,889,889,889,889,889,896,889,190,190,190,190,190,190,190,190,190,190,900,900,900,900,900,900,900,900,900,900,900,901,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,902,900,900,900,900,900,901,900,900,900,903,900,900,900,900,900,900,900,900,904,900,905,189,905,189,189,191,191,191,191,191,191,191,191,191,191,189,191,191,191,191,191,191,191,191,191,191,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,905,906,906,906,906,906,906,906,906,906,907,906,909,908,910,912,911,911,911,913,911,914,915,891,891,891,891,891,891,891,891,891,891,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,897,889,889,889,889,889,889,889,889,889,898,889,889,889,889,889,889,889,889,899,889,916,916,916,916,916,916,916,916,916,916,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,917,889,889,889,889,889,889,889,889,889,898,889,889,889,889,889,889,889,889,899,889,919,919,919,919,919,919,919,919,919,919,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,920,918,918,918,918,918,918,918,918,918,921,918,918,918,918,918,918,918,918,922,918,919,919,919,919,919,919,919,919,919,919,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,923,918,918,918,918,918,918,918,918,918,921,918,918,918,918,918,918,918,918,922,918,921,918,918,918,918,918,918,918,918,922,918,925,924,926,928,927,927,927,929,927,931,930,932,933,935,935,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,936,934,934,934,934,934,934,934,934,934,937,934,934,934,934,934,934,934,934,938,934,939,939,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,940,918,918,918,918,918,918,918,918,918,921,918,918,918,918,918,918,918,918,922,918,939,939,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,923,918,918,918,918,918,918,918,918,918,921,918,918,918,918,918,918,918,918,922,918,942,942,942,942,942,942,942,942,942,942,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,941,943,941,941,941,941,941,941,941,941,941,944,941,941,941,941,941,941,941,941,945,941,947,947,947,947,947,947,947,947,947,947,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,948,946,946,946,946,946,946,946,946,946,949,946,946,946,946,946,946,946,946,950,946,952,952,952,952,952,952,952,952,952,952,951,951,951,951,951,951,951,952,952,952,952,952,952,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,953,951,952,952,952,952,952,952,951,951,954,951,951,951,951,951,951,951,951,955,951,956,956,956,956,956,956,956,956,956,956,918,918,918,918,918,918,918,956,956,956,956,956,956,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,957,918,956,956,956,956,956,956,918,918,921,918,918,918,918,918,918,918,918,922,918,956,956,956,956,956,956,956,956,956,956,918,918,918,918,918,918,918,956,956,956,956,956,956,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,923,918,956,956,956,956,956,956,918,918,921,918,918,918,918,918,918,918,918,922,918,959,958,960,960,960,960,960,960,960,960,960,960,958,958,958,958,958,958,958,958,958,958,958,961,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,962,958,958,958,958,958,961,958,958,958,963,958,958,958,958,958,958,958,958,964,958,965,965,965,965,965,965,965,965,965,965,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,966,958,958,958,958,958,958,958,958,958,963,958,958,958,958,958,958,958,958,964,958,967,918,968,968,968,968,968,968,968,968,968,968,918,918,918,918,918,918,918,918,918,918,918,969,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,970,918,918,918,918,918,969,918,918,918,921,918,918,918,918,918,918,918,918,922,918,968,968,968,968,968,968,968,968,968,968,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,923,918,918,918,918,918,918,918,918,918,921,918,918,918,918,918,918,918,918,922,918,876,883,814,971,875,865,875,972,973,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,883,865,883,865,875,865,814,875,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,201,201,201,201,201,201,201,201,201,201,870,870,870,870,870,870,974,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,870,870,870,870,201,870,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,870,870,870,870,870,201,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,858,189,189,189,189,189,189,189,189,189,189,189,189,189,189,831,831,831,831,831,831,831,831,831,831,975,189,189,189,189,858,189,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,189,189,189,189,831,189,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,189,189,189,189,189,831,976,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,831,978,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,831,831,831,979,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,831,831,831,831,831,980,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,831,831,831,831,831,831,831,831,831,831,981,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,831,831,831,831,831,831,831,831,831,831,982,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,858,977,977,977,977,977,977,977,977,977,977,977,977,977,977,831,831,831,831,831,831,831,831,831,831,975,977,977,977,977,858,977,831,831,831,981,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,831,977,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,977,977,977,977,977,831,983,985,984,986,987,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,989,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,990,991,805,805,805,805,805,992,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,993,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,994,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,995,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,996,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,997,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,998,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,999,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,1000,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,1001,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,1002,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,1003,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,1004,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,1005,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,1006,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,1007,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,1003,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1008,805,1009,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,1010,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,1011,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1012,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1013,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1014,805,805,805,805,805,805,805,805,805,805,805,805,1015,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,1016,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,1017,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,1013,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1018,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,1019,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,1020,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,1021,805,805,805,805,805,805,805,805,805,805,1022,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1023,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1013,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,1024,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1025,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1026,805,805,805,805,805,805,805,988,988,988,988,988,805,1027,1027,1027,1027,1027,1027,1027,1027,1027,203,204,203,203,203,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,203,858,1027,205,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,805,805,805,805,805,805,805,805,805,805,1027,1027,206,1027,1027,858,1027,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1027,207,1027,1027,805,1027,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1027,1027,1027,1027,1027,805,220,221,220,220,220,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,220,219,219,222,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,225,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,224,219,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1029,805,805,805,805,805,805,805,805,805,1030,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,1031,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,858,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,805,805,805,805,805,805,805,805,805,805,1032,1032,1032,1032,1032,858,1032,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1032,1032,1032,1032,805,1032,805,805,805,805,805,805,805,805,1033,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1032,1032,1032,1032,1032,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,1034,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1035,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1036,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,1037,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1038,805,1039,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1040,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1013,805,805,805,1041,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,1013,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1006,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1042,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1043,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1023,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,1044,805,805,805,805,805,805,805,805,805,805,805,805,805,847,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1045,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1046,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1006,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1013,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,1047,805,805,805,805,805,805,805,1013,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1048,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1049,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1050,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1023,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1051,805,805,805,1052,805,805,805,805,805,1053,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1054,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1020,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1006,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1055,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1056,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1057,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1058,1059,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1006,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,1060,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1061,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1047,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1062,805,805,1063,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1006,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1064,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,1020,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1065,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1066,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1067,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,1006,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1068,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1069,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1055,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,1070,805,805,805,805,805,805,805,805,805,1071,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1017,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1046,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,1072,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1073,805,805,805,805,805,805,805,1074,805,805,805,805,805,805,805,1075,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1076,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,1012,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1077,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1078,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,1047,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,1079,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1047,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,1080,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1017,805,805,805,1081,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1082,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1047,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,1083,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,1084,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,805,805,805,805,805,805,805,805,1085,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,858,988,988,988,988,988,988,988,988,988,988,988,988,988,988,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,858,988,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,805,988,805,805,805,1055,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,988,988,988,988,988,805,1086,874,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,814,864,1087,1089,1088,1089,1089,1089,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1089,1088,1088,1090,1088,1088,1091,1088,1088,1088,1088,1088,1088,1088,233,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,1092,1088,229,230,229,229,229,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,229,1093,1093,231,1093,1093,232,1093,1093,1093,1093,1093,1093,1093,233,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,234,1093,236,1094,236,236,236,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,236,1094,1094,231,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,234,1094,1096,1095,1098,1097,239,238,244,1093,242,1093,1100,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1101,1099,1100,1099,1100,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1103,1099,1100,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1104,1099,1100,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1105,1099,1107,1105,1109,1108,1108,1108,1109,1108,1108,1108,1108,1110,1111,1110,1110,1110,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1109,1108,1108,1108,1108,1108,1110,1108,1108,1112,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1113,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1114,1108,1108,1115,1108,1110,1116,1110,1110,1110,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1110,1116,1117,1118,1119,1120,1121,1123,1122,1125,1126,1125,1125,1125,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,1125,1124,1111,1122,1127,1122,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_trans_targs"); return self.$private("_lex_trans_targs", "_lex_trans_targs="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_trans_targs='](Opal.large_array_unpack("130,129,0,2,131,132,4,133,134,134,134,134,247,7,8,9,247,247,276,11,12,276,276,280,280,16,11,17,278,279,281,282,280,276,283,284,286,13,14,287,288,15,280,18,19,24,31,290,291,17,278,279,281,282,280,276,283,284,286,13,14,287,288,15,18,19,24,31,290,291,289,20,21,22,23,25,26,29,27,28,30,32,33,276,35,36,37,39,42,40,41,43,45,307,307,307,308,47,310,48,311,49,308,47,310,48,311,345,50,345,51,52,50,345,51,345,345,345,55,56,57,58,356,345,345,345,61,62,63,345,66,61,62,63,345,66,64,64,62,63,366,65,64,64,62,63,366,65,62,345,383,345,68,384,390,72,399,400,77,78,72,73,398,73,398,345,74,75,76,401,79,80,347,53,349,82,83,406,508,85,86,87,508,516,516,516,90,538,537,516,540,542,516,95,96,97,546,516,99,100,557,526,579,103,104,105,109,110,103,104,105,109,110,106,106,104,105,107,108,106,106,104,105,107,108,627,104,516,696,111,698,113,117,699,115,696,112,696,114,698,114,698,116,698,696,710,119,120,121,716,123,124,125,126,127,710,710,128,1,3,129,129,129,135,134,134,136,137,138,139,141,144,145,146,147,134,148,149,151,153,154,155,159,161,162,163,179,184,191,196,203,210,213,214,218,212,222,230,234,236,241,243,246,134,134,134,134,134,134,140,134,140,134,142,5,143,134,6,134,134,150,152,134,156,157,158,154,160,134,164,165,174,177,166,167,168,169,170,171,172,173,135,175,176,178,180,183,181,182,185,188,186,187,189,190,192,194,193,195,197,198,134,199,200,201,202,134,204,207,205,206,208,209,211,215,216,217,219,221,220,223,224,225,227,226,228,229,231,232,233,235,237,238,239,240,242,244,245,248,247,247,249,250,252,253,247,247,247,251,247,251,10,254,247,256,255,255,259,260,261,262,255,264,265,266,267,269,271,272,273,274,275,255,257,255,258,255,255,255,255,255,263,255,263,268,255,270,255,276,276,277,292,293,279,295,296,283,297,298,299,300,301,303,304,305,306,276,276,276,276,276,276,280,285,276,276,276,276,276,276,276,276,276,294,276,294,276,276,276,276,302,276,34,38,44,307,309,312,46,307,307,308,313,313,314,315,317,319,320,313,313,316,313,316,313,318,313,313,313,322,321,321,323,324,325,327,329,330,335,342,321,321,321,321,326,321,326,321,328,321,321,322,331,332,333,334,336,337,340,338,339,341,343,344,346,345,354,355,357,358,360,361,362,363,365,367,368,371,372,397,403,404,405,406,407,408,409,410,364,412,429,434,441,446,448,454,457,458,462,456,466,477,481,484,492,496,499,500,345,50,51,345,53,348,345,345,350,352,353,345,351,345,345,345,345,345,54,345,345,345,345,345,359,345,359,345,345,59,345,60,345,345,364,345,369,345,370,345,345,345,373,382,345,67,385,386,387,345,388,69,391,392,70,395,396,345,374,376,345,375,345,345,377,380,381,345,378,379,345,345,345,345,345,345,389,345,383,393,394,345,393,345,383,393,71,402,345,345,345,345,345,81,84,345,411,413,414,424,427,415,416,417,418,419,420,421,422,423,425,426,428,430,433,431,432,435,438,436,437,439,440,442,444,443,445,447,449,451,450,452,453,455,423,459,460,461,463,465,464,467,468,469,474,470,471,472,345,346,347,53,473,352,475,476,478,479,480,482,483,485,486,487,490,488,489,491,493,494,495,497,498,345,364,501,501,502,503,504,506,501,501,501,505,501,505,501,507,501,509,508,508,510,511,508,512,514,508,508,508,508,513,508,513,515,508,517,516,516,520,521,522,516,523,525,528,529,530,531,532,516,533,534,539,567,571,516,572,574,576,516,577,578,580,584,586,587,589,590,608,613,620,628,635,642,647,648,652,646,657,667,673,676,685,689,693,694,695,528,518,516,519,516,516,516,516,516,516,524,516,524,516,88,527,516,516,516,516,516,516,516,516,516,535,516,536,516,516,89,91,516,92,548,559,562,541,563,564,549,553,555,516,541,92,543,545,93,516,543,516,544,516,516,94,547,516,516,550,552,516,550,551,553,555,552,516,554,516,516,556,558,516,98,516,516,516,560,552,553,555,560,561,516,550,552,553,555,516,550,552,553,555,516,565,552,553,555,565,566,516,92,567,541,568,553,555,569,552,92,569,541,570,573,575,516,101,102,516,516,581,582,583,578,585,516,516,588,516,516,516,591,592,601,606,593,594,595,596,597,598,599,600,517,602,603,604,605,517,607,609,612,610,611,517,517,614,617,615,616,618,619,517,621,623,622,624,625,626,516,516,629,517,630,516,631,632,633,634,518,636,639,637,638,640,641,643,644,645,517,649,650,651,653,655,656,654,517,658,659,660,663,661,662,664,665,666,668,670,669,671,672,674,675,677,678,680,683,679,681,682,684,686,687,688,690,691,692,516,516,696,697,701,702,703,696,696,696,700,696,696,705,704,706,704,707,708,709,704,704,710,710,711,712,713,715,717,718,710,710,710,714,710,714,710,118,710,710,710,122")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_trans_actions"); return self.$private("_lex_trans_actions", "_lex_trans_actions="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_trans_actions='](Opal.large_array_unpack("0,1,0,0,0,0,0,0,2,3,4,5,6,0,0,0,7,8,9,0,0,10,11,12,13,14,15,15,16,17,15,18,17,19,17,15,15,16,15,20,15,15,21,15,15,15,15,15,15,0,22,23,0,24,23,25,23,0,0,22,0,26,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,28,29,30,31,0,0,0,31,14,32,15,15,15,32,33,0,34,0,14,15,35,15,36,37,38,0,0,0,0,0,39,40,41,0,14,0,42,0,15,43,15,44,15,45,46,47,46,48,46,0,49,50,49,51,49,52,53,0,54,0,0,0,0,55,55,0,0,56,56,57,0,14,58,0,0,0,55,0,0,59,0,0,0,0,59,60,0,0,0,61,62,63,64,0,65,65,66,67,67,68,0,0,0,0,69,0,0,0,0,0,0,14,0,0,0,15,43,15,15,15,45,46,47,46,46,46,0,49,50,49,49,49,70,52,71,72,0,73,0,74,74,0,75,0,76,45,77,0,78,14,79,80,81,0,0,0,0,0,0,0,0,0,82,83,86,0,0,87,88,89,90,91,92,0,14,0,0,65,65,0,0,0,93,0,0,0,0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,96,97,98,99,100,45,101,0,102,0,0,0,103,0,104,105,0,0,106,0,0,0,107,0,108,0,0,0,0,0,0,0,0,0,0,0,0,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,111,112,0,0,65,0,113,114,115,45,116,0,0,14,117,0,118,119,0,14,0,0,120,0,0,0,0,0,0,0,0,0,0,121,0,122,0,123,124,125,126,127,45,128,0,0,129,0,130,131,132,133,14,0,13,0,0,13,0,0,0,0,0,0,65,65,65,134,135,136,137,138,139,140,0,141,142,143,144,145,146,147,148,149,45,150,0,151,152,153,154,155,156,0,0,0,157,65,65,0,158,159,160,161,162,0,0,0,0,0,163,164,45,165,0,166,14,167,168,169,170,171,172,0,14,0,0,0,0,0,0,173,174,175,176,45,177,0,178,14,179,180,181,0,0,0,0,0,0,0,0,0,0,0,0,182,183,0,184,0,0,65,185,0,0,185,185,0,0,65,186,0,186,0,186,186,186,0,0,186,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,0,0,187,188,188,189,190,0,191,192,0,59,0,193,0,194,195,196,197,198,15,199,200,201,202,203,45,204,0,205,206,0,207,0,208,209,185,210,0,211,0,212,213,214,0,0,215,0,0,0,0,216,0,0,0,0,0,0,0,217,0,0,218,0,219,220,0,0,0,221,0,0,222,223,224,225,226,227,0,228,229,229,0,230,0,231,232,232,0,0,233,234,235,236,237,0,0,238,14,182,182,182,182,182,182,182,182,182,182,182,182,59,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,239,182,182,182,182,182,182,182,182,182,182,182,182,240,241,242,243,244,244,240,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,245,246,247,248,0,14,0,0,249,250,251,45,252,0,253,14,254,65,255,256,0,14,257,0,0,258,259,260,261,45,262,0,14,263,264,265,266,0,14,0,267,0,65,268,0,0,0,0,269,0,0,270,270,0,271,0,0,0,272,65,273,273,273,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,274,275,276,0,277,278,279,280,281,282,45,283,0,284,0,0,285,286,287,288,289,290,291,292,293,0,294,0,295,296,0,0,297,298,299,0,0,300,0,0,299,301,301,302,303,0,304,305,0,306,307,308,0,309,310,0,0,311,312,299,299,313,0,0,314,314,0,315,0,316,317,65,0,318,0,319,320,321,322,322,323,323,0,0,324,325,325,326,326,327,328,328,329,329,330,331,331,332,332,0,0,333,334,335,336,337,338,338,335,337,339,270,340,0,0,0,341,0,0,342,343,273,273,273,344,273,345,346,14,347,348,349,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0,0,0,344,0,0,0,0,0,351,352,0,0,0,0,0,0,353,0,0,0,0,0,352,354,355,0,356,0,357,0,0,0,0,358,0,0,0,0,0,0,0,0,0,359,0,0,0,0,0,0,0,358,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,360,361,362,363,363,74,363,364,365,366,0,367,368,0,369,0,370,0,0,0,371,372,373,374,0,14,0,65,0,65,375,376,377,45,378,0,379,0,380,381,382,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_to_state_actions"); return self.$private("_lex_to_state_actions", "_lex_to_state_actions="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_to_state_actions='](Opal.large_array_unpack("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,84,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,84,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,84,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,84,0,0,0,0,0,84,0,0,0,0,0,0,0,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_from_state_actions"); return self.$private("_lex_from_state_actions", "_lex_from_state_actions="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_from_state_actions='](Opal.large_array_unpack("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,85,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,85,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,85,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,85,0,0,0,0,0,85,0,0,0,0,0,0,0,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_eof_trans"); return self.$private("_lex_eof_trans", "_lex_eof_trans="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_eof_trans='](Opal.large_array_unpack("0,0,0,0,0,9,11,13,13,13,13,19,19,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,84,84,84,84,84,84,84,84,84,84,84,84,94,96,96,96,108,108,108,116,118,118,118,118,118,124,116,116,116,116,116,116,116,150,150,150,150,150,150,116,166,116,166,150,150,116,116,150,150,150,150,179,179,179,184,186,186,186,190,190,193,193,193,193,198,198,198,184,190,190,190,190,190,190,190,190,190,229,236,238,238,238,238,229,246,246,246,246,246,246,246,246,246,246,0,0,261,261,262,263,0,304,306,307,308,309,311,313,317,317,308,308,308,308,319,308,308,313,308,308,304,323,323,323,323,323,323,313,313,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,362,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,308,0,406,407,408,410,406,406,414,0,433,435,437,438,439,440,441,443,440,440,440,440,440,446,440,440,448,446,446,440,0,467,468,19,19,471,472,19,468,468,475,477,480,468,481,468,482,483,485,487,468,475,488,488,477,488,492,488,488,488,488,0,94,500,501,500,500,0,510,511,513,515,517,515,519,0,531,532,533,534,536,538,540,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,0,599,602,605,606,610,612,613,614,615,616,618,621,622,624,626,629,631,632,116,629,634,629,621,636,638,621,621,656,659,661,662,666,669,670,671,672,656,656,656,656,656,656,656,656,656,656,676,680,682,656,656,621,687,688,688,688,621,621,621,689,116,621,621,694,621,616,599,599,599,599,599,599,599,599,599,599,599,116,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,747,606,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,772,621,0,780,781,782,784,786,788,0,797,798,799,800,802,797,805,0,190,860,862,863,864,865,867,869,871,874,874,190,876,878,879,880,876,882,884,884,887,887,890,901,190,907,909,911,912,915,916,890,890,919,919,919,925,927,928,931,933,934,935,919,919,942,947,952,919,919,959,959,919,919,884,876,876,884,876,876,871,190,977,978,978,978,978,978,978,984,871,987,988,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,1028,1029,989,989,1033,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,1087,865,1088,0,1094,1095,1096,1098,1094,1094,1094,0,1103,1103,1103,1103,1107,0,1117,1118,1119,1121,1123,1125,1123,1123")); (function(self, $parent_nesting) { return self.$attr_accessor("lex_start") })(Opal.get_singleton_class(self), $nesting); self['$lex_start='](128); (function(self, $parent_nesting) { return self.$attr_accessor("lex_error") })(Opal.get_singleton_class(self), $nesting); self['$lex_error='](0); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_variable") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_variable='](129); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_fname") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_fname='](134); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_endfn") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_endfn='](247); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_dot") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_dot='](255); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_arg") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_arg='](276); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_cmdarg") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_cmdarg='](307); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_endarg") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_endarg='](313); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_mid") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_mid='](321); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_beg") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_beg='](345); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_labelarg") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_labelarg='](501); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_value") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_value='](508); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_expr_end") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_expr_end='](516); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_leading_dot") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_leading_dot='](696); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_line_comment") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_line_comment='](704); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_line_begin") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_line_begin='](710); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_inside_string") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_inside_string='](128); self.$attr_reader("source_buffer"); self.$attr_accessor("diagnostics"); self.$attr_accessor("static_env"); self.$attr_accessor("force_utf32"); self.$attr_accessor("cond", "cmdarg", "context", "command_start"); self.$attr_accessor("tokens", "comments"); self.$attr_reader("paren_nest", "cmdarg_stack", "cond_stack", "lambda_stack", "version"); $def(self, '$initialize', function $$initialize(version) { var self = this; self.version = version; self.static_env = nil; self.context = nil; self.tokens = nil; self.comments = nil; self._lex_actions = ($truthy(self.$class()['$respond_to?']("_lex_actions", true)) ? (self.$class().$send("_lex_actions")) : ([])); self.emit_integer = $send(self, 'lambda', [], function $$1(chars, p){var self = $$1.$$s == null ? this : $$1.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tINTEGER", chars); return p;}, {$$s: self}); self.emit_rational = $send(self, 'lambda', [], function $$2(chars, p){var self = $$2.$$s == null ? this : $$2.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tRATIONAL", self.$Rational(chars)); return p;}, {$$s: self}); self.emit_imaginary = $send(self, 'lambda', [], function $$3(chars, p){var self = $$3.$$s == null ? this : $$3.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tIMAGINARY", self.$Complex(0, chars)); return p;}, {$$s: self}); self.emit_imaginary_rational = $send(self, 'lambda', [], function $$4(chars, p){var self = $$4.$$s == null ? this : $$4.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tIMAGINARY", self.$Complex(0, self.$Rational(chars))); return p;}, {$$s: self}); self.emit_integer_re = $send(self, 'lambda', [], function $$5(chars, p){var self = $$5.$$s == null ? this : $$5.$$s; if (self.ts == null) self.ts = nil; if (self.te == null) self.te = nil; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tINTEGER", chars, self.ts, $rb_minus(self.te, 2)); return $rb_minus(p, 2);}, {$$s: self}); self.emit_integer_if = $send(self, 'lambda', [], function $$6(chars, p){var self = $$6.$$s == null ? this : $$6.$$s; if (self.ts == null) self.ts = nil; if (self.te == null) self.te = nil; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tINTEGER", chars, self.ts, $rb_minus(self.te, 2)); return $rb_minus(p, 2);}, {$$s: self}); self.emit_integer_rescue = $send(self, 'lambda', [], function $$7(chars, p){var self = $$7.$$s == null ? this : $$7.$$s; if (self.ts == null) self.ts = nil; if (self.te == null) self.te = nil; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tINTEGER", chars, self.ts, $rb_minus(self.te, 6)); return $rb_minus(p, 6);}, {$$s: self}); self.emit_float = $send(self, 'lambda', [], function $$8(chars, p){var self = $$8.$$s == null ? this : $$8.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tFLOAT", self.$Float(chars)); return p;}, {$$s: self}); self.emit_imaginary_float = $send(self, 'lambda', [], function $$9(chars, p){var self = $$9.$$s == null ? this : $$9.$$s; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tIMAGINARY", self.$Complex(0, self.$Float(chars))); return p;}, {$$s: self}); self.emit_float_if = $send(self, 'lambda', [], function $$10(chars, p){var self = $$10.$$s == null ? this : $$10.$$s; if (self.ts == null) self.ts = nil; if (self.te == null) self.te = nil; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tFLOAT", self.$Float(chars), self.ts, $rb_minus(self.te, 2)); return $rb_minus(p, 2);}, {$$s: self}); self.emit_float_rescue = $send(self, 'lambda', [], function $$11(chars, p){var self = $$11.$$s == null ? this : $$11.$$s; if (self.ts == null) self.ts = nil; if (self.te == null) self.te = nil; if (chars == null) chars = nil; if (p == null) p = nil; self.$emit("tFLOAT", self.$Float(chars), self.ts, $rb_minus(self.te, 6)); return $rb_minus(p, 6);}, {$$s: self}); return self.$reset(); }); $def(self, '$reset', function $$reset(reset_state) { var self = this; if (reset_state == null) reset_state = true; if ($truthy(reset_state)) { self.cs = self.$class().$lex_en_line_begin(); self.cond = $$('StackState').$new("cond"); self.cmdarg = $$('StackState').$new("cmdarg"); self.cond_stack = []; self.cmdarg_stack = []; }; self.force_utf32 = false; self.source_pts = nil; self.p = 0; self.ts = nil; self.te = nil; self.act = 0; self.stack = []; self.top = 0; self.token_queue = []; self.eq_begin_s = nil; self.sharp_s = nil; self.newline_s = nil; self.num_base = nil; self.num_digits_s = nil; self.num_suffix_s = nil; self.num_xfrm = nil; self.paren_nest = 0; self.lambda_stack = []; self.command_start = true; self.cs_before_block_comment = self.$class().$lex_en_line_begin(); return (self.strings = $$$($$('Parser'), 'LexerStrings').$new(self, self.version)); }, -1); $def(self, '$source_buffer=', function $Lexer_source_buffer$eq$12(source_buffer) { var $a, self = this, source = nil; self.source_buffer = source_buffer; if ($truthy(self.source_buffer)) { source = self.source_buffer.$source(); if ($eqeq(source.$encoding(), $$$($$('Encoding'), 'UTF_8'))) { self.source_pts = source.$unpack("U*") } else { self.source_pts = source.$unpack("C*") }; if ($eqeq(self.source_pts['$[]'](0), 65279)) { self.p = 1 }; } else { self.source_pts = nil }; self.strings['$source_buffer='](self.source_buffer); return ($a = [self.source_pts], $send(self.strings, 'source_pts=', $a), $a[$a.length - 1]); }); $def(self, '$encoding', function $$encoding() { var self = this; return self.source_buffer.$source().$encoding() }); $const_set($nesting[0], 'LEX_STATES', (new Map([["line_begin", self.$lex_en_line_begin()], ["expr_dot", self.$lex_en_expr_dot()], ["expr_fname", self.$lex_en_expr_fname()], ["expr_value", self.$lex_en_expr_value()], ["expr_beg", self.$lex_en_expr_beg()], ["expr_mid", self.$lex_en_expr_mid()], ["expr_arg", self.$lex_en_expr_arg()], ["expr_cmdarg", self.$lex_en_expr_cmdarg()], ["expr_end", self.$lex_en_expr_end()], ["expr_endarg", self.$lex_en_expr_endarg()], ["expr_endfn", self.$lex_en_expr_endfn()], ["expr_labelarg", self.$lex_en_expr_labelarg()], ["inside_string", self.$lex_en_inside_string()]]))); $def(self, '$state', function $$state() { var self = this; return $$('LEX_STATES').$invert().$fetch(self.cs, self.cs) }); $def(self, '$state=', function $Lexer_state$eq$13(state) { var self = this; return (self.cs = $$('LEX_STATES').$fetch(state)) }); $def(self, '$push_cmdarg', function $$push_cmdarg() { var self = this; self.cmdarg_stack.$push(self.cmdarg); return (self.cmdarg = $$('StackState').$new("cmdarg." + (self.cmdarg_stack.$count()))); }); $def(self, '$pop_cmdarg', function $$pop_cmdarg() { var self = this; return (self.cmdarg = self.cmdarg_stack.$pop()) }); $def(self, '$push_cond', function $$push_cond() { var self = this; self.cond_stack.$push(self.cond); return (self.cond = $$('StackState').$new("cond." + (self.cond_stack.$count()))); }); $def(self, '$pop_cond', function $$pop_cond() { var self = this; return (self.cond = self.cond_stack.$pop()) }); $def(self, '$dedent_level', function $$dedent_level() { var self = this; return self.strings.$dedent_level() }); $def(self, '$advance', function $$advance() { var $a, $b, self = this, klass = nil, _lex_trans_keys = nil, _lex_key_spans = nil, _lex_index_offsets = nil, _lex_indicies = nil, _lex_trans_targs = nil, _lex_trans_actions = nil, _lex_to_state_actions = nil, _lex_from_state_actions = nil, _lex_eof_trans = nil, _lex_actions = nil, pe = nil, p = nil, eof = nil, cmd_state = nil, testEof = nil, _slen = nil, _trans = nil, _keys = nil, _inds = nil, _acts = nil, _nacts = nil, _goto_level = nil, _resume = nil, _eof_trans = nil, _again = nil, _test_eof = nil, _out = nil, _wide = nil, $ret_or_1 = nil, tm = nil, heredoc_e = nil, diag_msg = nil, ident_tok = nil, ident_ts = nil, ident_te = nil, type = nil, delimiter = nil, gvar_name = nil, next_state = nil, ident = nil, followed_by_nl = nil, nl_emitted = nil, dots_te = nil, digits = nil, new_herebody_s = nil, indent = nil, $ret_or_2 = nil, dedent_body = nil; if (!$truthy(self.token_queue['$empty?']())) { return self.token_queue.$shift() }; klass = self.$class(); _lex_trans_keys = klass.$send("_lex_trans_keys"); _lex_key_spans = klass.$send("_lex_key_spans"); _lex_index_offsets = klass.$send("_lex_index_offsets"); _lex_indicies = klass.$send("_lex_indicies"); _lex_trans_targs = klass.$send("_lex_trans_targs"); _lex_trans_actions = klass.$send("_lex_trans_actions"); _lex_to_state_actions = klass.$send("_lex_to_state_actions"); _lex_from_state_actions = klass.$send("_lex_from_state_actions"); _lex_eof_trans = klass.$send("_lex_eof_trans"); _lex_actions = self._lex_actions; pe = $rb_plus(self.source_pts.$size(), 2); $a = [self.p, pe], (p = $a[0]), (eof = $a[1]), $a; cmd_state = self.command_start; self.command_start = false; testEof = false; $b = nil, $a = $to_ary($b), (_slen = ($a[0] == null ? nil : $a[0])), (_trans = ($a[1] == null ? nil : $a[1])), (_keys = ($a[2] == null ? nil : $a[2])), (_inds = ($a[3] == null ? nil : $a[3])), (_acts = ($a[4] == null ? nil : $a[4])), (_nacts = ($a[5] == null ? nil : $a[5])), $b; _goto_level = 0; _resume = 10; _eof_trans = 15; _again = 20; _test_eof = 30; _out = 40; while ($truthy(true)) { if ($truthy($rb_le(_goto_level, 0))) { if ($eqeq(p, pe)) { _goto_level = _test_eof; continue; }; if ($eqeq(self.cs, 0)) { _goto_level = _out; continue; }; }; if ($truthy($rb_le(_goto_level, _resume))) { switch (_lex_from_state_actions['$[]'](self.cs).valueOf()) { case 85: self.ts = p; break; default: nil }; _keys = self.cs['$<<'](1); _inds = _lex_index_offsets['$[]'](self.cs); _slen = _lex_key_spans['$[]'](self.cs); _wide = ($truthy(($ret_or_1 = self.source_pts['$[]'](p))) ? ($ret_or_1) : (0)); _trans = ((($truthy($rb_gt(_slen, 0)) && ($truthy($rb_le(_lex_trans_keys['$[]'](_keys), _wide)))) && ($truthy($rb_le(_wide, _lex_trans_keys['$[]']($rb_plus(_keys, 1)))))) ? (_lex_indicies['$[]']($rb_minus($rb_plus(_inds, _wide), _lex_trans_keys['$[]'](_keys)))) : (_lex_indicies['$[]']($rb_plus(_inds, _slen)))); }; if ($truthy($rb_le(_goto_level, _eof_trans))) { self.cs = _lex_trans_targs['$[]'](_trans); if ($neqeq(_lex_trans_actions['$[]'](_trans), 0)) { switch (_lex_trans_actions['$[]'](_trans).valueOf()) { case 14: self.newline_s = p; break; case 15: p = self.$on_newline(p); break; case 45: self.sharp_s = $rb_minus(p, 1); break; case 49: self.$emit_comment_from_range(p, pe); break; case 190: tm = p; break; case 22: tm = p; break; case 24: tm = p; break; case 26: tm = p; break; case 56: heredoc_e = p; break; case 229: tm = $rb_minus(p, 1); diag_msg = "ivar_name"; break; case 232: tm = $rb_minus(p, 2); diag_msg = "cvar_name"; break; case 244: tm = p; break; case 188: ident_tok = self.$tok(); ident_ts = self.ts; ident_te = self.te; break; case 331: self.num_base = 16; self.num_digits_s = p; break; case 325: self.num_base = 10; self.num_digits_s = p; break; case 328: self.num_base = 8; self.num_digits_s = p; break; case 322: self.num_base = 2; self.num_digits_s = p; break; case 337: self.num_base = 10; self.num_digits_s = self.ts; break; case 299: self.num_base = 8; self.num_digits_s = self.ts; break; case 314: self.num_suffix_s = p; break; case 307: self.num_suffix_s = p; break; case 304: self.num_suffix_s = p; break; case 74: tm = p; break; case 65: self.te = $rb_plus(p, 1); break; case 1: self.te = $rb_plus(p, 1); self.$emit_global_var(); self.cs = self.$stack_pop(); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 87: self.te = p; p = $rb_minus(p, 1); self.$emit_global_var(); self.cs = self.$stack_pop(); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 89: self.te = p; p = $rb_minus(p, 1); self.$emit_class_var(); self.cs = self.$stack_pop(); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 88: self.te = p; p = $rb_minus(p, 1); self.$emit_instance_var(); self.cs = self.$stack_pop(); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 110: self.te = $rb_plus(p, 1); self.$emit_table($$('KEYWORDS_BEGIN')); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 96: self.te = $rb_plus(p, 1); self.$emit("tIDENTIFIER"); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 3: self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; self.stack['$[]='](self.top, self.cs); self.top = $rb_plus(self.top, 1); self.cs = 129; _goto_level = _again; continue;;; break; case 93: self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 105: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 5: self.te = $rb_plus(p, 1); if ($truthy(self['$version?'](23))) { $a = [self.$tok()['$[]']($range(0, -2, false)), self.$tok()['$[]'](-1).$chr()], (type = $a[0]), (delimiter = $a[1]), $a; self.strings.$push_literal(type, delimiter, self.ts); self.cs = 128; _goto_level = _again; continue;; } else { p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;; };; break; case 92: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 91: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 109: self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('KEYWORDS_BEGIN')); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 106: self.te = p; p = $rb_minus(p, 1); self.$emit("tCONSTANT"); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 108: self.te = p; p = $rb_minus(p, 1); self.$emit("tIDENTIFIER"); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 103: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; self.stack['$[]='](self.top, self.cs); self.top = $rb_plus(self.top, 1); self.cs = 129; _goto_level = _again; continue;;; break; case 99: self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 104: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 97: self.te = p; p = $rb_minus(p, 1); break; case 102: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 4: p = $rb_minus(self.te, 1);; self.$emit_table($$('PUNCTUATION')); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 2: p = $rb_minus(self.te, 1);; p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 95: switch (self.act.valueOf()) { case 4: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS_BEGIN')); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 5: p = $rb_minus(self.te, 1);; self.$emit("tCONSTANT"); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 6: p = $rb_minus(self.te, 1);; self.$emit("tIDENTIFIER"); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; default: nil }; break; case 7: self.te = $rb_plus(p, 1); self.$emit("tLABEL", self.$tok(self.ts, $rb_minus(self.te, 2)), self.ts, $rb_minus(self.te, 1)); p = $rb_minus(p, 1); self.cs = 501; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 8: self.te = $rb_plus(p, 1); if (($truthy($rb_ge(self.version, 31)) && ($truthy(self.context.$in_argdef())))) { self.$emit("tBDOT3", "...".$freeze()); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { p = $rb_minus(p, 3); self.cs = 516; _goto_level = _again; continue;; };; break; case 112: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 111: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 114: self.te = p; p = $rb_minus(p, 1); break; case 113: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 6: p = $rb_minus(self.te, 1);; p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 120: self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 276; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 119: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 118: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 130: self.te = p; p = $rb_minus(p, 1); self.$emit("tCONSTANT"); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 121: self.te = p; p = $rb_minus(p, 1); self.$emit("tIDENTIFIER"); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 126: self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 276; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 124: self.te = p; p = $rb_minus(p, 1); break; case 129: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 153: self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 136: self.te = $rb_plus(p, 1); self.$check_ambiguous_slash(tm); p = $rb_minus(tm, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 142: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 10: self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 144: self.te = $rb_plus(p, 1); p = $rb_minus(tm, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 25: self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 131: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 132: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 143: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 139: self.te = p; p = $rb_minus(p, 1); self.$diagnostic("warning", "ambiguous_prefix", (new Map([["prefix", self.$tok(tm, self.te)]])), self.$range(tm, self.te)); p = $rb_minus(tm, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 141: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 135: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 134: self.te = p; p = $rb_minus(p, 1); break; case 152: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 11: p = $rb_minus(self.te, 1);; break; case 27: p = $rb_minus(self.te, 1);; p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 9: switch (self.act.valueOf()) { case 33: p = $rb_minus(self.te, 1);; self.$check_ambiguous_slash(tm); p = $rb_minus(tm, 1); self.cs = 345; _goto_level = _again; continue;; break; case 34: p = $rb_minus(self.te, 1);; self.$diagnostic("warning", "ambiguous_prefix", (new Map([["prefix", self.$tok(tm, self.te)]])), self.$range(tm, self.te)); p = $rb_minus(tm, 1); self.cs = 345; _goto_level = _again; continue;; break; case 39: p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;; break; default: p = $rb_minus(self.te, 1);; }; break; case 29: self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 276; _goto_level = _again; continue;;; break; case 157: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 158: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 276; _goto_level = _again; continue;;; break; case 30: p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 276; _goto_level = _again; continue;;; break; case 28: switch (self.act.valueOf()) { case 46: p = $rb_minus(self.te, 1);; if ($truthy(self.cond['$active?']())) { self.$emit("kDO_COND", "do".$freeze(), $rb_minus(self.te, 2), self.te) } else { self.$emit("kDO", "do".$freeze(), $rb_minus(self.te, 2), self.te) }; self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 47: p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 276; _goto_level = _again; continue;; break; default: nil }; break; case 168: self.te = $rb_plus(p, 1); self.$emit_do(true); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 161: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 162: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 163: self.te = p; p = $rb_minus(p, 1); break; case 166: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 172: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 171: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 180: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 174: self.te = p; p = $rb_minus(p, 1); break; case 178: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 173: switch (self.act.valueOf()) { case 54: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 55: p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 345; _goto_level = _again; continue;; break; default: nil }; break; case 42: self.te = $rb_plus(p, 1); self.$emit("tUNARY_NUM", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = $rb_minus(p, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 214: self.te = $rb_plus(p, 1); type = (delimiter = self.$tok()['$[]'](0).$chr()); self.strings.$push_literal(type, delimiter, self.ts); p = $rb_minus(p, 1); self.cs = 128; _goto_level = _again; continue;;; break; case 206: self.te = $rb_plus(p, 1); $a = [self.source_buffer.$slice(self.ts, 1).$chr(), self.$tok()['$[]'](-1).$chr()], (type = $a[0]), (delimiter = $a[1]), $a; self.strings.$push_literal(type, delimiter, self.ts); self.cs = 128; _goto_level = _again; continue;;; break; case 40: self.te = $rb_plus(p, 1); $a = [self.$tok()['$[]']($range(0, -2, false)), self.$tok()['$[]'](-1).$chr()], (type = $a[0]), (delimiter = $a[1]), $a; self.strings.$push_literal(type, delimiter, self.ts); self.cs = 128; _goto_level = _again; continue;;; break; case 227: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.$emit("tSYMBEG", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); self.cs = 134; _goto_level = _again; continue;;; break; case 215: self.te = $rb_plus(p, 1); $a = [self.$tok(), self.$tok()['$[]'](-1).$chr()], (type = $a[0]), (delimiter = $a[1]), $a; self.strings.$push_literal(type, delimiter, self.ts); self.cs = 128; _goto_level = _again; continue;;; break; case 226: self.te = $rb_plus(p, 1); self.$emit("tSYMBOL", self.$tok($rb_plus(self.ts, 1), $rb_plus(self.ts, 2))); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 54: self.te = $rb_plus(p, 1); gvar_name = self.$tok($rb_plus(self.ts, 1)); if ((($truthy($rb_ge(self.version, 33)) && ($truthy(gvar_name['$start_with?']("$0")))) && ($truthy($rb_gt(gvar_name.$length(), 2))))) { self.$diagnostic("error", "gvar_name", (new Map([["name", gvar_name]])), self.$range($rb_plus(self.ts, 1), self.te)) }; self.$emit("tSYMBOL", gvar_name, self.ts); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 236: self.te = $rb_plus(p, 1); $b = self.strings.$read_character_constant(self.ts), $a = $to_ary($b), (p = ($a[0] == null ? nil : $a[0])), (next_state = ($a[1] == null ? nil : $a[1])), $b; p = $rb_minus(p, 1); if ($truthy(self.token_queue['$empty?']())) { self.cs = next_state; _goto_level = _again; continue; } else { self.cs = next_state; p = $rb_plus(p, 1); _goto_level = _out; continue;; };; break; case 237: self.te = $rb_plus(p, 1); self.$diagnostic("fatal", "incomplete_escape", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; break; case 216: self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION_BEGIN')); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 37: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); if ($truthy(self['$version?'](18))) { ident = self.$tok(self.ts, $rb_minus(self.te, 2)); self.$emit(($truthy(self.source_buffer.$slice(self.ts, 1)['$=~'](/[A-Z]/)) ? ("tCONSTANT") : ("tIDENTIFIER")), ident, self.ts, $rb_minus(self.te, 2)); p = $rb_minus(p, 1); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](ident))))) { self.cs = 516 } else { self.cs = self.$arg_or_cmdarg(cmd_state) }; } else { self.$emit("tLABEL", self.$tok(self.ts, $rb_minus(self.te, 2)), self.ts, $rb_minus(self.te, 1)); self.cs = 501; }; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 34: self.te = $rb_plus(p, 1); self.$emit("tIDENTIFIER", ident_tok, ident_ts, ident_te); p = $rb_minus(ident_te, 1); if ((($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](ident_tok)))) && ($truthy($rb_lt(self.version, 25))))) { self.cs = 247 } else { self.cs = 307 }; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 200: self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs_before_block_comment = self.cs; self.cs = 710; _goto_level = _again; continue;;; break; case 41: self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 183: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 210: self.te = p; p = $rb_minus(p, 1); self.$emit("tUNARY_NUM", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = $rb_minus(p, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 209: self.te = p; p = $rb_minus(p, 1); self.$emit("tSTAR", "*".$freeze()); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 205: self.te = p; p = $rb_minus(p, 1); self.$diagnostic("fatal", "string_eof", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; break; case 234: self.te = p; p = $rb_minus(p, 1); self.$diagnostic("error", "unterminated_heredoc_id", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; break; case 217: self.te = p; p = $rb_minus(p, 1); gvar_name = self.$tok($rb_plus(self.ts, 1)); if ((($truthy($rb_ge(self.version, 33)) && ($truthy(gvar_name['$start_with?']("$0")))) && ($truthy($rb_gt(gvar_name.$length(), 2))))) { self.$diagnostic("error", "gvar_name", (new Map([["name", gvar_name]])), self.$range($rb_plus(self.ts, 1), self.te)) }; self.$emit("tSYMBOL", gvar_name, self.ts); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 230: self.te = p; p = $rb_minus(p, 1); self.$emit_colon_with_digits(p, tm, diag_msg); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 235: self.te = p; p = $rb_minus(p, 1); self.$diagnostic("fatal", "incomplete_escape", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; break; case 207: self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION_BEGIN')); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 211: self.te = p; p = $rb_minus(p, 1); if ($truthy($rb_ge(self.version, 27))) { self.$emit("tBDOT2") } else { self.$emit("tDOT2") }; self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 212: self.te = p; p = $rb_minus(p, 1); followed_by_nl = $rb_minus(self.te, 1)['$=='](self.newline_s); nl_emitted = false; dots_te = ($truthy(followed_by_nl) ? ($rb_minus(self.te, 1)) : (self.te)); if ($truthy($rb_ge(self.version, 30))) { if (($truthy(self.lambda_stack['$any?']()) && ($eqeq($rb_plus(self.lambda_stack.$last(), 1), self.paren_nest)))) { self.$emit("tDOT3", "...".$freeze(), self.ts, dots_te) } else { self.$emit("tBDOT3", "...".$freeze(), self.ts, dots_te); if ((($truthy($rb_ge(self.version, 31)) && ($truthy(followed_by_nl))) && ($truthy(self.context.$in_argdef())))) { self.$emit("tNL", $rb_minus(self.te, 1), self.te); nl_emitted = true; }; } } else if ($truthy($rb_ge(self.version, 27))) { self.$emit("tBDOT3", "...".$freeze(), self.ts, dots_te) } else { self.$emit("tDOT3", "...".$freeze(), self.ts, dots_te) }; if (($truthy(followed_by_nl) && ($not(nl_emitted)))) { p = $rb_minus(p, 1) }; self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 187: self.te = p; p = $rb_minus(p, 1); self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;; };; break; case 197: self.te = p; p = $rb_minus(p, 1); break; case 199: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs_before_block_comment = self.cs; self.cs = 710; _goto_level = _again; continue;;; break; case 202: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 39: p = $rb_minus(self.te, 1);; self.$diagnostic("fatal", "string_eof", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; break; case 58: p = $rb_minus(self.te, 1);; self.$diagnostic("error", "unterminated_heredoc_id", nil, self.$range(self.ts, $rb_plus(self.ts, 1)));; break; case 33: p = $rb_minus(self.te, 1);; self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;; };; break; case 38: p = $rb_minus(self.te, 1);; break; case 53: p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 36: switch (self.act.valueOf()) { case 60: p = $rb_minus(self.te, 1);; self.$emit("tUNARY_NUM", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = $rb_minus(p, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 67: p = $rb_minus(self.te, 1);; self.$diagnostic("error", "unterminated_heredoc_id", nil, self.$range(self.ts, $rb_plus(self.ts, 1))); break; case 76: p = $rb_minus(self.te, 1);; if ($truthy($rb_ge(self.version, 27))) { self.$emit("tPIPE", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = $rb_minus(p, 1); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { p = $rb_minus(p, 2); self.cs = 516; _goto_level = _again; continue;; }; break; case 80: p = $rb_minus(self.te, 1);; self.$emit_table($$('PUNCTUATION_BEGIN')); p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 81: p = $rb_minus(self.te, 1);; self.$emit("kRESCUE", "rescue".$freeze(), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 321; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 82: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS_BEGIN')); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 86: p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;; break; case 87: p = $rb_minus(self.te, 1);; self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;; }; break; case 91: p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;; break; default: nil }; break; case 247: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 248: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 249: self.te = p; p = $rb_minus(p, 1); break; case 253: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 61: self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 257: self.te = $rb_plus(p, 1); self.strings.$push_literal(self.$tok(), self.$tok(), self.ts); self.cs = 128; _goto_level = _again; continue;;; break; case 256: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 255: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 259: self.te = p; p = $rb_minus(p, 1); break; case 258: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 60: p = $rb_minus(self.te, 1);; p = $rb_minus(p, 1); self.cs = 345; _goto_level = _again; continue;;; break; case 292: self.te = $rb_plus(p, 1); self.$emit("tLAMBDA", "->".$freeze(), self.ts, $rb_plus(self.ts, 2)); self.lambda_stack.$push(self.paren_nest); self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 71: self.te = $rb_plus(p, 1); self.$emit_singleton_class(); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 267: self.te = $rb_plus(p, 1); $a = [self.$tok(), self.$tok()['$[]'](-1).$chr()], (type = $a[0]), (delimiter = $a[1]), $a; self.strings.$push_literal(type, delimiter, self.ts, nil, false, false, true); self.cs = 128; _goto_level = _again; continue;;; break; case 63: self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.stack['$[]='](self.top, self.cs); self.top = $rb_plus(self.top, 1); self.cs = 129; _goto_level = _again; continue;;; break; case 288: self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 255; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 341: self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 281: self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 286: self.te = $rb_plus(p, 1); self.$emit("tOP_ASGN", self.$tok(self.ts, $rb_minus(self.te, 1))); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 272: self.te = $rb_plus(p, 1); self.$emit("tEH", "?".$freeze()); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 269: self.te = $rb_plus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 271: self.te = $rb_plus(p, 1); self.$emit("tSEMI", ";".$freeze()); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 346: self.te = $rb_plus(p, 1); self.$diagnostic("error", "bare_backslash", nil, self.$range(self.ts, $rb_plus(self.ts, 1))); p = $rb_minus(p, 1);; break; case 266: self.te = $rb_plus(p, 1); self.$diagnostic("fatal", "unexpected", (new Map([["character", self.$tok().$inspect()['$[]']($range(1, -2, false))]])));; break; case 265: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 357: self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('KEYWORDS')); self.cs = 134; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 355: self.te = p; p = $rb_minus(p, 1); self.$emit_singleton_class(); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 354: self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('KEYWORDS')); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 296: self.te = p; p = $rb_minus(p, 1); self.$diagnostic("error", "no_dot_digit_literal");; break; case 343: self.te = p; p = $rb_minus(p, 1); self.$emit("tCONSTANT"); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 285: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.stack['$[]='](self.top, self.cs); self.top = $rb_plus(self.top, 1); self.cs = 129; _goto_level = _again; continue;;; break; case 293: self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 255; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 349: self.te = p; p = $rb_minus(p, 1); self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;; };; break; case 291: self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 287: self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 280: self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 294: self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 278: self.te = p; p = $rb_minus(p, 1); break; case 284: self.te = p; p = $rb_minus(p, 1); self.$diagnostic("fatal", "unexpected", (new Map([["character", self.$tok().$inspect()['$[]']($range(1, -2, false))]])));; break; case 69: p = $rb_minus(self.te, 1);; digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 64: p = $rb_minus(self.te, 1);; self.$diagnostic("error", "no_dot_digit_literal");; break; case 68: p = $rb_minus(self.te, 1);; digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 62: p = $rb_minus(self.te, 1);; self.$diagnostic("fatal", "unexpected", (new Map([["character", self.$tok().$inspect()['$[]']($range(1, -2, false))]])));; break; case 66: switch (self.act.valueOf()) { case 104: p = $rb_minus(self.te, 1);; if ($eqeq(self.lambda_stack.$last(), self.paren_nest)) { self.lambda_stack.$pop(); if ($eqeq(self.$tok(), "{".$freeze())) { self.$emit("tLAMBEG", "{".$freeze()) } else { self.$emit("kDO_LAMBDA", "do".$freeze()) }; } else if ($eqeq(self.$tok(), "{".$freeze())) { self.$emit("tLCURLY", "{".$freeze()) } else { self.$emit_do() }; if ($eqeq(self.$tok(), "{".$freeze())) { self.paren_nest = $rb_plus(self.paren_nest, 1) }; self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 105: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.cs = 134; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 106: p = $rb_minus(self.te, 1);; self.$emit_singleton_class(); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 107: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 108: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 109: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.cs = 321; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 110: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); if (($truthy(self['$version?'](18)) && ($eqeq(self.$tok(), "not".$freeze())))) { self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.cs = 276; p = $rb_plus(p, 1); _goto_level = _out; continue;; }; break; case 111: p = $rb_minus(self.te, 1);; if ($truthy(self['$version?'](18))) { self.$emit("tIDENTIFIER"); if (!($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = self.$arg_or_cmdarg(cmd_state) }; } else { self.$emit("k__ENCODING__", "__ENCODING__".$freeze()) }; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 112: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 113: p = $rb_minus(self.te, 1);; digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 115: p = $rb_minus(self.te, 1);; if ($truthy(self['$version?'](18, 19, 20))) { self.$diagnostic("error", "trailing_in_number", (new Map([["character", self.$tok($rb_minus(self.te, 1), self.te)]])), self.$range($rb_minus(self.te, 1), self.te)) } else { self.$emit("tINTEGER", self.$tok(self.ts, $rb_minus(self.te, 1)).$to_i(), self.ts, $rb_minus(self.te, 1)); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;; }; break; case 116: p = $rb_minus(self.te, 1);; if ($truthy(self['$version?'](18, 19, 20))) { self.$diagnostic("error", "trailing_in_number", (new Map([["character", self.$tok($rb_minus(self.te, 1), self.te)]])), self.$range($rb_minus(self.te, 1), self.te)) } else { self.$emit("tFLOAT", self.$tok(self.ts, $rb_minus(self.te, 1)).$to_f(), self.ts, $rb_minus(self.te, 1)); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;; }; break; case 117: p = $rb_minus(self.te, 1);; digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 119: p = $rb_minus(self.te, 1);; self.$emit("tCONSTANT"); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 123: p = $rb_minus(self.te, 1);; self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;; }; break; case 124: p = $rb_minus(self.te, 1);; if ($eqeq(tm, self.te)) { self.$emit("tFID") } else { self.$emit("tIDENTIFIER", self.$tok(self.ts, tm), self.ts, tm); p = $rb_minus(tm, 1); }; self.cs = 276; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 126: p = $rb_minus(self.te, 1);; self.$emit_table($$('PUNCTUATION')); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 127: p = $rb_minus(self.te, 1);; self.$emit_table($$('PUNCTUATION')); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; default: nil }; break; case 368: self.te = $rb_plus(p, 1); self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); if ($truthy($rb_lt(self.version, 27))) { p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.$emit("tBDOT3"); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; };; break; case 80: self.te = $rb_plus(p, 1); p = $rb_minus(tm, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 362: self.te = $rb_plus(p, 1); self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 365: self.te = p; p = $rb_minus(p, 1); if ($truthy($rb_lt(self.version, 27))) { self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _goto_level = _out; continue;; };; break; case 367: self.te = p; p = $rb_minus(p, 1); self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); if ($truthy($rb_lt(self.version, 27))) { p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.$emit("tBDOT2"); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; };; break; case 366: self.te = p; p = $rb_minus(p, 1); p = $rb_minus(tm, 1); self.cs = 516; _goto_level = _again; continue;;; break; case 364: self.te = p; p = $rb_minus(p, 1); self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 75: p = $rb_minus(self.te, 1);; if ($truthy($rb_lt(self.version, 27))) { self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _goto_level = _out; continue;; };; break; case 72: p = $rb_minus(self.te, 1);; self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 76: switch (self.act.valueOf()) { case 140: p = $rb_minus(self.te, 1);; if ($truthy($rb_lt(self.version, 27))) { self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _goto_level = _out; continue;; }; break; case 144: p = $rb_minus(self.te, 1);; self.$emit("tNL", nil, self.newline_s, $rb_plus(self.newline_s, 1)); p = $rb_minus(p, 1); self.cs = 710; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; default: nil }; break; case 371: self.te = p; p = $rb_minus(p, 1); self.$emit_comment(self.eq_begin_s, self.te); self.cs = self.cs_before_block_comment; _goto_level = _again; continue;;; break; case 370: self.te = p; p = $rb_minus(p, 1); self.$diagnostic("fatal", "embedded_document", nil, self.$range(self.eq_begin_s, $rb_plus(self.eq_begin_s, "=begin".$length())));; break; case 381: self.te = $rb_plus(p, 1); self.eq_begin_s = self.ts; self.cs = 704; _goto_level = _again; continue;;; break; case 82: self.te = $rb_plus(p, 1); p = $rb_minus(pe, 3);; break; case 373: self.te = $rb_plus(p, 1); cmd_state = true; p = $rb_minus(p, 1); self.cs = 508; _goto_level = _again; continue;;; break; case 374: self.te = $rb_plus(p, 1); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 375: self.te = p; p = $rb_minus(p, 1); break; case 380: self.te = p; p = $rb_minus(p, 1); self.eq_begin_s = self.ts; self.cs = 704; _goto_level = _again; continue;;; break; case 379: self.te = p; p = $rb_minus(p, 1); cmd_state = true; p = $rb_minus(p, 1); self.cs = 508; _goto_level = _again; continue;;; break; case 81: p = $rb_minus(self.te, 1);; cmd_state = true; p = $rb_minus(p, 1); self.cs = 508; _goto_level = _again; continue;;; break; case 86: self.te = $rb_plus(p, 1); $b = self.strings.$advance(p), $a = $to_ary($b), (p = ($a[0] == null ? nil : $a[0])), (next_state = ($a[1] == null ? nil : $a[1])), $b; p = $rb_minus(p, 1); self.cs = next_state; p = $rb_plus(p, 1); _goto_level = _out; continue;;; break; case 52: self.newline_s = p;; self.$emit_comment_from_range(p, pe);; break; case 154: self.newline_s = p;; self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 145: self.newline_s = p;; self.te = $rb_plus(p, 1); p = $rb_minus(tm, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 137: self.newline_s = p;; self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 213: self.newline_s = p;; self.te = $rb_plus(p, 1); followed_by_nl = $rb_minus(self.te, 1)['$=='](self.newline_s); nl_emitted = false; dots_te = ($truthy(followed_by_nl) ? ($rb_minus(self.te, 1)) : (self.te)); if ($truthy($rb_ge(self.version, 30))) { if (($truthy(self.lambda_stack['$any?']()) && ($eqeq($rb_plus(self.lambda_stack.$last(), 1), self.paren_nest)))) { self.$emit("tDOT3", "...".$freeze(), self.ts, dots_te) } else { self.$emit("tBDOT3", "...".$freeze(), self.ts, dots_te); if ((($truthy($rb_ge(self.version, 31)) && ($truthy(followed_by_nl))) && ($truthy(self.context.$in_argdef())))) { self.$emit("tNL", $rb_minus(self.te, 1), self.te); nl_emitted = true; }; } } else if ($truthy($rb_ge(self.version, 27))) { self.$emit("tBDOT3", "...".$freeze(), self.ts, dots_te) } else { self.$emit("tDOT3", "...".$freeze(), self.ts, dots_te) }; if (($truthy(followed_by_nl) && ($not(nl_emitted)))) { p = $rb_minus(p, 1) }; self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 201: self.newline_s = p;; self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs_before_block_comment = self.cs; self.cs = 710; _goto_level = _again; continue;;;; break; case 295: self.newline_s = p;; self.te = $rb_plus(p, 1); if ($eqeq(self.paren_nest, 0)) { self.$diagnostic("warning", "triple_dot_at_eol", nil, self.$range(self.ts, $rb_minus(self.te, 1))) }; self.$emit("tDOT3", "...".$freeze(), self.ts, $rb_minus(self.te, 1)); p = $rb_minus(p, 1); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 372: self.newline_s = p;; self.te = $rb_plus(p, 1); self.$emit_comment(self.eq_begin_s, self.te); self.cs = self.cs_before_block_comment; _goto_level = _again; continue;;;; break; case 369: self.newline_s = p;; self.te = $rb_plus(p, 1);; break; case 382: self.newline_s = p;; self.te = $rb_plus(p, 1); self.eq_begin_s = self.ts; self.cs = 704; _goto_level = _again; continue;;;; break; case 83: self.newline_s = p;; self.te = $rb_plus(p, 1); p = $rb_minus(pe, 3);;; break; case 317: self.num_xfrm = self.emit_rational;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 315: self.num_xfrm = self.emit_imaginary;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 320: self.num_xfrm = self.emit_imaginary_rational;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 318: self.num_xfrm = self.emit_integer_re;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 316: self.num_xfrm = self.emit_integer_if;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 319: self.num_xfrm = self.emit_integer_rescue;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 308: self.num_xfrm = self.emit_imaginary_float;; self.te = p; p = $rb_minus(p, 1); digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 309: self.num_xfrm = self.emit_float_if;; self.te = p; p = $rb_minus(p, 1); digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 310: self.num_xfrm = self.emit_rational;; self.te = p; p = $rb_minus(p, 1); digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 312: self.num_xfrm = self.emit_imaginary_rational;; self.te = p; p = $rb_minus(p, 1); digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 311: self.num_xfrm = self.emit_float_rescue;; self.te = p; p = $rb_minus(p, 1); digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 147: self.$e_lbrace();; self.te = p; p = $rb_minus(p, 1); if ($eqeq(self.lambda_stack.$last(), self.paren_nest)) { self.lambda_stack.$pop(); self.$emit("tLAMBEG", "{".$freeze(), $rb_minus(self.te, 1), self.te); } else { self.$emit("tLCURLY", "{".$freeze(), $rb_minus(self.te, 1), self.te) }; self.command_start = true; self.paren_nest = $rb_plus(self.paren_nest, 1); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 169: self.$e_lbrace();; self.te = p; p = $rb_minus(p, 1); if ($eqeq(self.lambda_stack.$last(), self.paren_nest)) { self.lambda_stack.$pop(); self.$emit("tLAMBEG", "{".$freeze()); } else { self.$emit("tLBRACE_ARG", "{".$freeze()) }; self.paren_nest = $rb_plus(self.paren_nest, 1); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 245: self.$e_lbrace();; self.te = p; p = $rb_minus(p, 1); if ($eqeq(self.lambda_stack.$last(), self.paren_nest)) { self.lambda_stack.$pop(); self.command_start = true; self.$emit("tLAMBEG", "{".$freeze()); } else { self.$emit("tLBRACE", "{".$freeze()) }; self.paren_nest = $rb_plus(self.paren_nest, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 360: self.$e_lbrace();; self.te = p; p = $rb_minus(p, 1); if ($eqeq(self.lambda_stack.$last(), self.paren_nest)) { self.lambda_stack.$pop(); if ($eqeq(self.$tok(), "{".$freeze())) { self.$emit("tLAMBEG", "{".$freeze()) } else { self.$emit("kDO_LAMBDA", "do".$freeze()) }; } else if ($eqeq(self.$tok(), "{".$freeze())) { self.$emit("tLCURLY", "{".$freeze()) } else { self.$emit_do() }; if ($eqeq(self.$tok(), "{".$freeze())) { self.paren_nest = $rb_plus(self.paren_nest, 1) }; self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 361: if ($truthy(self.strings.$close_interp_on_current_literal(p))) { p = $rb_minus(p, 1); self.cs = 128; p = $rb_plus(p, 1); _goto_level = _out; continue;; }; self.paren_nest = $rb_minus(self.paren_nest, 1);; self.te = p; p = $rb_minus(p, 1); self.$emit_rbrace_rparen_rbrack(); if (($eqeq(self.$tok(), "}".$freeze()) || ($eqeq(self.$tok(), "]".$freeze())))) { if ($truthy($rb_ge(self.version, 25))) { self.cs = 516 } else { self.cs = 313 } }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 43: p = self.$on_newline(p);; self.newline_s = p;; break; case 16: p = self.$on_newline(p);; tm = p;; break; case 18: p = self.$on_newline(p);; tm = p;; break; case 20: p = self.$on_newline(p);; tm = p;; break; case 98: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1);; break; case 117: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1);; break; case 125: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1);; break; case 19: p = self.$on_newline(p);; self.te = $rb_plus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 156: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1);; break; case 148: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 167: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1);; break; case 179: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1);; break; case 175: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1); p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 44: p = self.$on_newline(p);; self.te = $rb_plus(p, 1); self.$emit("tUNARY_NUM", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = $rb_minus(p, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 35: p = self.$on_newline(p);; self.te = $rb_plus(p, 1); self.$emit("tIDENTIFIER", ident_tok, ident_ts, ident_te); p = $rb_minus(ident_te, 1); if ((($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](ident_tok)))) && ($truthy($rb_lt(self.version, 25))))) { self.cs = 247 } else { self.cs = 307 }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 198: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1);; break; case 254: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1);; break; case 250: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1); if ($truthy(self.context.$in_kwarg())) { p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;; } else { self.cs = 710; _goto_level = _again; continue; };;; break; case 263: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1);; break; case 260: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1); self.cs = 710; _goto_level = _again; continue;;;; break; case 347: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1);; break; case 279: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1); self.cs = 696; _goto_level = _again; continue;;;; break; case 376: p = self.$on_newline(p);; self.te = p; p = $rb_minus(p, 1);; break; case 46: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; break; case 50: self.$emit_comment_from_range(p, pe);; self.newline_s = p;; break; case 101: self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 116: self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 128: self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 150: self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 165: self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 177: self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 204: self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 252: self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 262: self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 283: self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 378: self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 122: tm = p;; self.te = p; p = $rb_minus(p, 1); self.$emit("tFID", self.$tok(self.ts, tm), self.ts, tm); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_minus(tm, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 218: tm = p;; self.te = p; p = $rb_minus(p, 1); self.$emit("tSYMBOL", self.$tok($rb_plus(self.ts, 1), tm), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 189: tm = p;; self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 276: tm = p;; switch (self.act.valueOf()) { case 104: p = $rb_minus(self.te, 1);; if ($eqeq(self.lambda_stack.$last(), self.paren_nest)) { self.lambda_stack.$pop(); if ($eqeq(self.$tok(), "{".$freeze())) { self.$emit("tLAMBEG", "{".$freeze()) } else { self.$emit("kDO_LAMBDA", "do".$freeze()) }; } else if ($eqeq(self.$tok(), "{".$freeze())) { self.$emit("tLCURLY", "{".$freeze()) } else { self.$emit_do() }; if ($eqeq(self.$tok(), "{".$freeze())) { self.paren_nest = $rb_plus(self.paren_nest, 1) }; self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 105: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.cs = 134; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 106: p = $rb_minus(self.te, 1);; self.$emit_singleton_class(); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 107: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 108: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 109: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); self.cs = 321; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 110: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); if (($truthy(self['$version?'](18)) && ($eqeq(self.$tok(), "not".$freeze())))) { self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.cs = 276; p = $rb_plus(p, 1); _goto_level = _out; continue;; }; break; case 111: p = $rb_minus(self.te, 1);; if ($truthy(self['$version?'](18))) { self.$emit("tIDENTIFIER"); if (!($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = self.$arg_or_cmdarg(cmd_state) }; } else { self.$emit("k__ENCODING__", "__ENCODING__".$freeze()) }; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 112: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS')); p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 113: p = $rb_minus(self.te, 1);; digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 115: p = $rb_minus(self.te, 1);; if ($truthy(self['$version?'](18, 19, 20))) { self.$diagnostic("error", "trailing_in_number", (new Map([["character", self.$tok($rb_minus(self.te, 1), self.te)]])), self.$range($rb_minus(self.te, 1), self.te)) } else { self.$emit("tINTEGER", self.$tok(self.ts, $rb_minus(self.te, 1)).$to_i(), self.ts, $rb_minus(self.te, 1)); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;; }; break; case 116: p = $rb_minus(self.te, 1);; if ($truthy(self['$version?'](18, 19, 20))) { self.$diagnostic("error", "trailing_in_number", (new Map([["character", self.$tok($rb_minus(self.te, 1), self.te)]])), self.$range($rb_minus(self.te, 1), self.te)) } else { self.$emit("tFLOAT", self.$tok(self.ts, $rb_minus(self.te, 1)).$to_f(), self.ts, $rb_minus(self.te, 1)); p = $rb_minus(p, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;; }; break; case 117: p = $rb_minus(self.te, 1);; digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 119: p = $rb_minus(self.te, 1);; self.$emit("tCONSTANT"); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 123: p = $rb_minus(self.te, 1);; self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;; }; break; case 124: p = $rb_minus(self.te, 1);; if ($eqeq(tm, self.te)) { self.$emit("tFID") } else { self.$emit("tIDENTIFIER", self.$tok(self.ts, tm), self.ts, tm); p = $rb_minus(tm, 1); }; self.cs = 276; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 126: p = $rb_minus(self.te, 1);; self.$emit_table($$('PUNCTUATION')); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 127: p = $rb_minus(self.te, 1);; self.$emit_table($$('PUNCTUATION')); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; default: nil };; break; case 123: tm = $rb_minus(p, 2);; self.te = p; p = $rb_minus(p, 1); self.$emit("tFID", self.$tok(self.ts, tm), self.ts, tm); self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_minus(tm, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 219: tm = $rb_minus(p, 2);; self.te = p; p = $rb_minus(p, 1); self.$emit("tSYMBOL", self.$tok($rb_plus(self.ts, 1), tm), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 191: tm = $rb_minus(p, 2);; self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 277: tm = $rb_minus(p, 2);; self.te = p; p = $rb_minus(p, 1); if ($eqeq(tm, self.te)) { self.$emit("tFID") } else { self.$emit("tIDENTIFIER", self.$tok(self.ts, tm), self.ts, tm); p = $rb_minus(tm, 1); }; self.cs = 276; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 220: tm = p;; self.te = p; p = $rb_minus(p, 1); self.$emit("tSYMBOL", self.$tok($rb_plus(self.ts, 1), tm), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 192: tm = p;; self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 221: tm = $rb_minus(p, 2);; self.te = p; p = $rb_minus(p, 1); self.$emit("tSYMBOL", self.$tok($rb_plus(self.ts, 1), tm), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 193: tm = $rb_minus(p, 2);; self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 225: tm = $rb_minus(p, 2);; self.te = p; p = $rb_minus(p, 1); self.$emit("tSYMBOL", self.$tok($rb_plus(self.ts, 1), tm), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 196: tm = $rb_minus(p, 2);; self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 224: tm = $rb_minus(p, 2);; self.te = p; p = $rb_minus(p, 1); self.$emit("tSYMBOL", self.$tok($rb_plus(self.ts, 1), tm), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 195: tm = $rb_minus(p, 2);; switch (self.act.valueOf()) { case 60: p = $rb_minus(self.te, 1);; self.$emit("tUNARY_NUM", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = $rb_minus(p, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 67: p = $rb_minus(self.te, 1);; self.$diagnostic("error", "unterminated_heredoc_id", nil, self.$range(self.ts, $rb_plus(self.ts, 1))); break; case 76: p = $rb_minus(self.te, 1);; if ($truthy($rb_ge(self.version, 27))) { self.$emit("tPIPE", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = $rb_minus(p, 1); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { p = $rb_minus(p, 2); self.cs = 516; _goto_level = _again; continue;; }; break; case 80: p = $rb_minus(self.te, 1);; self.$emit_table($$('PUNCTUATION_BEGIN')); p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 81: p = $rb_minus(self.te, 1);; self.$emit("kRESCUE", "rescue".$freeze(), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 321; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 82: p = $rb_minus(self.te, 1);; self.$emit_table($$('KEYWORDS_BEGIN')); self.command_start = true; self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; break; case 86: p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;; break; case 87: p = $rb_minus(self.te, 1);; self.$emit("tIDENTIFIER"); if (($not(self.static_env['$nil?']()) && ($truthy(self.static_env['$declared?'](self.$tok()))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else if (($truthy($rb_ge(self.version, 32)) && ($truthy(self.$tok()['$=~'](/^_[1-9]$/))))) { self.cs = 247; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.cs = self.$arg_or_cmdarg(cmd_state); p = $rb_plus(p, 1); _goto_level = _out; continue;; }; break; case 91: p = $rb_minus(self.te, 1);; p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;; break; default: nil };; break; case 222: tm = $rb_minus(p, 3);; self.te = p; p = $rb_minus(p, 1); self.$emit("tSYMBOL", self.$tok($rb_plus(self.ts, 1), tm), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 194: tm = $rb_minus(p, 3);; self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 223: tm = $rb_minus(p, 2);; self.te = p; p = $rb_minus(p, 1); self.$emit("tSYMBOL", self.$tok($rb_plus(self.ts, 1), tm), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 342: tm = $rb_minus(p, 2);; self.te = p; p = $rb_minus(p, 1); self.$emit("tCONSTANT", self.$tok(self.ts, tm), self.ts, tm); p = $rb_minus(tm, 1); p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 146: self.cond.$push(false); self.cmdarg.$push(false); self.paren_nest = $rb_plus(self.paren_nest, 1);; self.te = p; p = $rb_minus(p, 1); self.$emit("tLBRACK", "[".$freeze(), $rb_minus(self.te, 1), self.te); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 238: self.cond.$push(false); self.cmdarg.$push(false); self.paren_nest = $rb_plus(self.paren_nest, 1);; self.te = p; p = $rb_minus(p, 1); self.$emit("tLBRACK", "[".$freeze()); p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 345: self.cond.$push(false); self.cmdarg.$push(false); self.paren_nest = $rb_plus(self.paren_nest, 1);; self.te = p; p = $rb_minus(p, 1); self.$emit("tLBRACK2", "[".$freeze()); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 348: self.paren_nest = $rb_minus(self.paren_nest, 1);; self.te = p; p = $rb_minus(p, 1); self.$emit_rbrace_rparen_rbrack(); if (($eqeq(self.$tok(), "}".$freeze()) || ($eqeq(self.$tok(), "]".$freeze())))) { if ($truthy($rb_ge(self.version, 25))) { self.cs = 516 } else { self.cs = 313 } }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 138: self.cond.$push(false); self.cmdarg.$push(false); self.paren_nest = $rb_plus(self.paren_nest, 1); if ($truthy(self['$version?'](18))) { self.command_start = true };; self.te = p; p = $rb_minus(p, 1); if ($truthy(self['$version?'](18))) { self.$emit("tLPAREN2", "(".$freeze(), $rb_minus(self.te, 1), self.te); self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.$emit("tLPAREN_ARG", "(".$freeze(), $rb_minus(self.te, 1), self.te); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; };;; break; case 151: self.cond.$push(false); self.cmdarg.$push(false); self.paren_nest = $rb_plus(self.paren_nest, 1); if ($truthy(self['$version?'](18))) { self.command_start = true };; self.te = p; p = $rb_minus(p, 1); self.$emit("tLPAREN2", "(".$freeze()); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 159: self.cond.$push(false); self.cmdarg.$push(false); self.paren_nest = $rb_plus(self.paren_nest, 1); if ($truthy(self['$version?'](18))) { self.command_start = true };; self.te = p; p = $rb_minus(p, 1); self.$emit("tLPAREN_ARG", "(".$freeze(), $rb_minus(self.te, 1), self.te); if ($truthy(self['$version?'](18))) { self.cs = 508; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; };;; break; case 208: self.cond.$push(false); self.cmdarg.$push(false); self.paren_nest = $rb_plus(self.paren_nest, 1); if ($truthy(self['$version?'](18))) { self.command_start = true };; self.te = p; p = $rb_minus(p, 1); self.$emit("tLPAREN", "(".$freeze()); p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 289: self.cond.$push(false); self.cmdarg.$push(false); self.paren_nest = $rb_plus(self.paren_nest, 1); if ($truthy(self['$version?'](18))) { self.command_start = true };; self.te = p; p = $rb_minus(p, 1); self.$emit_table($$('PUNCTUATION')); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 290: self.paren_nest = $rb_minus(self.paren_nest, 1);; self.te = p; p = $rb_minus(p, 1); self.$emit_rbrace_rparen_rbrack(); if (($eqeq(self.$tok(), "}".$freeze()) || ($eqeq(self.$tok(), "]".$freeze())))) { if ($truthy($rb_ge(self.version, 25))) { self.cs = 516 } else { self.cs = 313 } }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 57: heredoc_e = p;; self.newline_s = p;; break; case 233: new_herebody_s = p;; self.te = p; p = $rb_minus(p, 1); self.$tok(self.ts, heredoc_e)['$=~'](/^<<(-?)(~?)(["'`]?)(.*)\3$/m); indent = ($truthy(($ret_or_2 = (($a = $gvars['~']) === nil ? nil : $a['$[]'](1))['$empty?']()['$!']())) ? ($ret_or_2) : ((($a = $gvars['~']) === nil ? nil : $a['$[]'](2))['$empty?']()['$!']())); dedent_body = (($a = $gvars['~']) === nil ? nil : $a['$[]'](2))['$empty?']()['$!'](); type = ($truthy((($a = $gvars['~']) === nil ? nil : $a['$[]'](3))['$empty?']()) ? ("<<\"".$freeze()) : ($rb_plus("<<".$freeze(), (($a = $gvars['~']) === nil ? nil : $a['$[]'](3))))); delimiter = (($a = $gvars['~']) === nil ? nil : $a['$[]'](4)); if ($truthy($rb_ge(self.version, 27))) { if (($truthy($rb_gt(delimiter.$count("\n"), 0)) || ($truthy($rb_gt(delimiter.$count("\r"), 0))))) { self.$diagnostic("error", "unterminated_heredoc_id", nil, self.$range(self.ts, $rb_plus(self.ts, 1))) } } else if ($truthy($rb_ge(self.version, 24))) { if ($truthy($rb_gt(delimiter.$count("\n"), 0))) { if ($truthy(delimiter['$end_with?']("\n"))) { self.$diagnostic("warning", "heredoc_id_ends_with_nl", nil, self.$range(self.ts, $rb_plus(self.ts, 1))); delimiter = delimiter.$rstrip(); } else { self.$diagnostic("fatal", "heredoc_id_has_newline", nil, self.$range(self.ts, $rb_plus(self.ts, 1))) } } }; if (($truthy(dedent_body) && ($truthy(self['$version?'](18, 19, 20, 21, 22))))) { self.$emit("tLSHFT", "<<".$freeze(), self.ts, $rb_plus(self.ts, 2)); p = $rb_plus(self.ts, 1); self.cs = 345; p = $rb_plus(p, 1); _goto_level = _out; continue;; } else { self.strings.$push_literal(type, delimiter, self.ts, heredoc_e, indent, dedent_body); if ($truthy(($ret_or_2 = self.strings.$herebody_s()))) { $ret_or_2 } else { self.strings['$herebody_s='](new_herebody_s) }; p = $rb_minus(self.strings.$herebody_s(), 1); self.cs = 128; };;; break; case 228: tm = $rb_minus(p, 1); diag_msg = "ivar_name";; self.te = p; p = $rb_minus(p, 1); self.$emit_colon_with_digits(p, tm, diag_msg); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 231: tm = $rb_minus(p, 2); diag_msg = "cvar_name";; self.te = p; p = $rb_minus(p, 1); self.$emit_colon_with_digits(p, tm, diag_msg); self.cs = 516; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 241: tm = p;; self.te = p; p = $rb_minus(p, 1); self.$emit("kRESCUE", "rescue".$freeze(), self.ts, tm); p = $rb_minus(tm, 1); self.cs = 321; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 332: self.num_base = 16; self.num_digits_s = p;; self.num_suffix_s = p;; break; case 326: self.num_base = 10; self.num_digits_s = p;; self.num_suffix_s = p;; break; case 329: self.num_base = 8; self.num_digits_s = p;; self.num_suffix_s = p;; break; case 323: self.num_base = 2; self.num_digits_s = p;; self.num_suffix_s = p;; break; case 338: self.num_base = 10; self.num_digits_s = self.ts;; self.num_suffix_s = p;; break; case 301: self.num_base = 8; self.num_digits_s = self.ts;; self.num_suffix_s = p;; break; case 339: self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; break; case 184: self.te = $rb_plus(p, 1);; self.newline_s = p;; break; case 305: self.te = $rb_plus(p, 1);; self.num_suffix_s = p;; break; case 107: self.te = $rb_plus(p, 1);; self.act = 4;; break; case 94: self.te = $rb_plus(p, 1);; self.act = 5;; break; case 90: self.te = $rb_plus(p, 1);; self.act = 6;; break; case 12: self.te = $rb_plus(p, 1);; self.act = 33;; break; case 140: self.te = $rb_plus(p, 1);; self.act = 34;; break; case 13: self.te = $rb_plus(p, 1);; self.act = 39;; break; case 133: self.te = $rb_plus(p, 1);; self.act = 40;; break; case 160: self.te = $rb_plus(p, 1);; self.act = 46;; break; case 31: self.te = $rb_plus(p, 1);; self.act = 47;; break; case 181: self.te = $rb_plus(p, 1);; self.act = 54;; break; case 170: self.te = $rb_plus(p, 1);; self.act = 55;; break; case 55: self.te = $rb_plus(p, 1);; self.act = 67;; break; case 246: self.te = $rb_plus(p, 1);; self.act = 76;; break; case 185: self.te = $rb_plus(p, 1);; self.act = 80;; break; case 240: self.te = $rb_plus(p, 1);; self.act = 81;; break; case 239: self.te = $rb_plus(p, 1);; self.act = 82;; break; case 59: self.te = $rb_plus(p, 1);; self.act = 86;; break; case 182: self.te = $rb_plus(p, 1);; self.act = 87;; break; case 186: self.te = $rb_plus(p, 1);; self.act = 91;; break; case 356: self.te = $rb_plus(p, 1);; self.act = 104;; break; case 351: self.te = $rb_plus(p, 1);; self.act = 105;; break; case 359: self.te = $rb_plus(p, 1);; self.act = 107;; break; case 352: self.te = $rb_plus(p, 1);; self.act = 108;; break; case 353: self.te = $rb_plus(p, 1);; self.act = 109;; break; case 358: self.te = $rb_plus(p, 1);; self.act = 110;; break; case 350: self.te = $rb_plus(p, 1);; self.act = 111;; break; case 344: self.te = $rb_plus(p, 1);; self.act = 112;; break; case 270: self.te = $rb_plus(p, 1);; self.act = 113;; break; case 303: self.te = $rb_plus(p, 1);; self.act = 116;; break; case 67: self.te = $rb_plus(p, 1);; self.act = 117;; break; case 273: self.te = $rb_plus(p, 1);; self.act = 119;; break; case 264: self.te = $rb_plus(p, 1);; self.act = 123;; break; case 275: self.te = $rb_plus(p, 1);; self.act = 124;; break; case 268: self.te = $rb_plus(p, 1);; self.act = 126;; break; case 274: self.te = $rb_plus(p, 1);; self.act = 127;; break; case 73: self.te = $rb_plus(p, 1);; self.act = 140;; break; case 363: self.te = $rb_plus(p, 1);; self.act = 144;; break; case 47: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.newline_s = p;; break; case 100: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 115: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 127: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 149: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1); self.cs = 516; _goto_level = _again; continue;;;; break; case 164: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 176: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 203: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 251: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 261: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 282: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 377: self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.te = p; p = $rb_minus(p, 1);; break; case 334: self.num_base = 10; self.num_digits_s = self.ts;; self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; break; case 298: self.num_base = 8; self.num_digits_s = self.ts;; self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; break; case 313: self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 306: self.num_suffix_s = p;; self.num_xfrm = self.emit_float;; self.te = p; p = $rb_minus(p, 1); digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 302: self.num_suffix_s = p;; self.num_xfrm = self.emit_float;; self.te = p; p = $rb_minus(p, 1); digits = self.$tok(self.ts, self.num_suffix_s); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tFLOAT", self.$Float(digits), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits, p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 155: self.te = $rb_plus(p, 1);; self.newline_s = p;; self.act = 40;; break; case 21: self.te = $rb_plus(p, 1);; p = self.$on_newline(p);; self.act = 39;; break; case 32: self.te = $rb_plus(p, 1);; p = self.$on_newline(p);; self.act = 47;; break; case 79: self.te = $rb_plus(p, 1);; p = self.$on_newline(p);; self.act = 140;; break; case 51: self.te = $rb_plus(p, 1);; self.$emit_comment_from_range(p, pe);; self.act = 60;; break; case 70: self.te = $rb_plus(p, 1);; self.$emit_comment_from_range(p, pe);; self.act = 106;; break; case 78: self.te = $rb_plus(p, 1);; self.$emit_comment_from_range(p, pe);; self.act = 140;; break; case 23: self.te = $rb_plus(p, 1);; tm = p;; self.act = 34;; break; case 243: self.te = $rb_plus(p, 1);; tm = p;; self.act = 86;; break; case 242: self.te = $rb_plus(p, 1);; tm = p;; self.act = 87;; break; case 335: self.te = $rb_plus(p, 1);; self.num_base = 10; self.num_digits_s = self.ts;; self.act = 113;; break; case 330: self.num_base = 16; self.num_digits_s = p;; self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 324: self.num_base = 10; self.num_digits_s = p;; self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 327: self.num_base = 8; self.num_digits_s = p;; self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 321: self.num_base = 2; self.num_digits_s = p;; self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 333: self.num_base = 10; self.num_digits_s = self.ts;; self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 297: self.num_base = 8; self.num_digits_s = self.ts;; self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; self.te = p; p = $rb_minus(p, 1); digits = self.$numeric_literal_int(); if ($truthy(self['$version?'](18, 19, 20))) { self.$emit("tINTEGER", digits.$to_i(self.num_base), self.ts, self.num_suffix_s); p = $rb_minus(self.num_suffix_s, 1); } else { p = self.num_xfrm.$call(digits.$to_i(self.num_base), p) }; p = $rb_plus(p, 1); _goto_level = _out; continue;;;; break; case 17: self.te = $rb_plus(p, 1);; p = self.$on_newline(p);; tm = p;; self.act = 34;; break; case 48: self.te = $rb_plus(p, 1);; self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.act = 60;; break; case 77: self.te = $rb_plus(p, 1);; self.sharp_s = $rb_minus(p, 1);; self.$emit_comment_from_range(p, pe);; self.act = 140;; break; case 340: self.te = $rb_plus(p, 1);; self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; self.act = 115;; break; case 336: self.te = $rb_plus(p, 1);; self.num_base = 10; self.num_digits_s = self.ts;; self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; self.act = 115;; break; case 300: self.te = $rb_plus(p, 1);; self.num_base = 8; self.num_digits_s = self.ts;; self.num_suffix_s = p;; self.num_xfrm = self.emit_integer;; self.act = 115;; break; default: nil } }; }; if ($truthy($rb_le(_goto_level, _again))) { switch (_lex_to_state_actions['$[]'](self.cs).valueOf()) { case 84: self.ts = nil; break; default: nil }; if ($eqeq(self.cs, 0)) { _goto_level = _out; continue; }; p = $rb_plus(p, 1); if ($neqeq(p, pe)) { _goto_level = _resume; continue; }; }; if ($truthy($rb_le(_goto_level, _test_eof))) { if ($eqeq(p, eof)) { if ($truthy($rb_gt(_lex_eof_trans['$[]'](self.cs), 0))) { _trans = $rb_minus(_lex_eof_trans['$[]'](self.cs), 1); _goto_level = _eof_trans; continue; } } }; if ($truthy($rb_le(_goto_level, _out))) { break }; };; if ($truthy(false)) { testEof }; self.p = p; if ($truthy(self.token_queue['$any?']())) { return self.token_queue.$shift() } else if ($eqeq(self.cs, klass.$lex_error())) { return [false, ["$error".$freeze(), self.$range($rb_minus(p, 1), p)]] } else { eof = self.source_pts.$size(); return [false, ["$eof".$freeze(), self.$range(eof, eof)]]; }; }); self.$protected(); $def(self, '$version?', function $Lexer_version$ques$14($a) { var $post_args, versions, self = this; $post_args = $slice(arguments); versions = $post_args; return versions['$include?'](self.version); }, -1); $def(self, '$stack_pop', function $$stack_pop() { var self = this; self.top = $rb_minus(self.top, 1); return self.stack['$[]'](self.top); }); $def(self, '$tok', function $$tok(s, e) { var self = this; if (s == null) s = self.ts; if (e == null) e = self.te; return self.source_buffer.$slice(s, $rb_minus(e, s)); }, -1); $def(self, '$range', function $$range(s, e) { var self = this; if (s == null) s = self.ts; if (e == null) e = self.te; return $$$($$$($$('Parser'), 'Source'), 'Range').$new(self.source_buffer, s, e); }, -1); $def(self, '$emit', function $$emit(type, value, s, e) { var self = this, token = nil; if (value == null) value = self.$tok(); if (s == null) s = self.ts; if (e == null) e = self.te; token = [type, [value, self.$range(s, e)]]; self.token_queue.$push(token); if ($truthy(self.tokens)) { self.tokens.$push(token) }; return token; }, -2); $def(self, '$emit_table', function $$emit_table(table, s, e) { var self = this, value = nil; if (s == null) s = self.ts; if (e == null) e = self.te; value = self.$tok(s, e); return self.$emit(table['$[]'](value), value, s, e); }, -2); $def(self, '$emit_do', function $$emit_do(do_block) { var self = this; if (do_block == null) do_block = false; if ($truthy(self.cond['$active?']())) { return self.$emit("kDO_COND", "do".$freeze()) } else if (($truthy(self.cmdarg['$active?']()) || ($truthy(do_block)))) { return self.$emit("kDO_BLOCK", "do".$freeze()) } else { return self.$emit("kDO", "do".$freeze()) }; }, -1); $def(self, '$arg_or_cmdarg', function $$arg_or_cmdarg(cmd_state) { var self = this; if ($truthy(cmd_state)) { return self.$class().$lex_en_expr_cmdarg() } else { return self.$class().$lex_en_expr_arg() } }); $def(self, '$emit_comment', function $$emit_comment(s, e) { var self = this; if (s == null) s = self.ts; if (e == null) e = self.te; if ($truthy(self.comments)) { self.comments.$push($$$($$$($$('Parser'), 'Source'), 'Comment').$new(self.$range(s, e))) }; if ($truthy(self.tokens)) { self.tokens.$push(["tCOMMENT", [self.$tok(s, e), self.$range(s, e)]]) }; return nil; }, -1); $def(self, '$emit_comment_from_range', function $$emit_comment_from_range(p, pe) { var self = this; return self.$emit_comment(self.sharp_s, ($eqeq(p, pe) ? ($rb_minus(p, 2)) : (p))) }); $def(self, '$diagnostic', function $$diagnostic(type, reason, arguments$, location, highlights) { var self = this; if (arguments$ == null) arguments$ = nil; if (location == null) location = self.$range(); if (highlights == null) highlights = []; return self.diagnostics.$process($$$($$('Parser'), 'Diagnostic').$new(type, reason, arguments$, location, highlights)); }, -3); $def(self, '$e_lbrace', function $$e_lbrace() { var self = this, current_literal = nil; self.cond.$push(false); self.cmdarg.$push(false); current_literal = self.strings.$literal(); if ($truthy(current_literal)) { return current_literal.$start_interp_brace() } else { return nil }; }); $def(self, '$numeric_literal_int', function $$numeric_literal_int() { var self = this, digits = nil, invalid_idx = nil, invalid_s = nil; digits = self.$tok(self.num_digits_s, self.num_suffix_s); if ($truthy(digits['$end_with?']("_".$freeze()))) { self.$diagnostic("error", "trailing_in_number", (new Map([["character", "_".$freeze()]])), self.$range($rb_minus(self.te, 1), self.te)) } else if ((($truthy(digits['$empty?']()) && ($eqeq(self.num_base, 8))) && ($truthy(self['$version?'](18))))) { digits = "0".$freeze() } else if ($truthy(digits['$empty?']())) { self.$diagnostic("error", "empty_numeric") } else if (($eqeq(self.num_base, 8) && ($truthy((invalid_idx = digits.$index(/[89]/)))))) { invalid_s = $rb_plus(self.num_digits_s, invalid_idx); self.$diagnostic("error", "invalid_octal", nil, self.$range(invalid_s, $rb_plus(invalid_s, 1))); }; return digits; }); $def(self, '$on_newline', function $$on_newline(p) { var self = this; return self.strings.$on_newline(p) }); $def(self, '$check_ambiguous_slash', function $$check_ambiguous_slash(tm) { var self = this; if ($eqeq(self.$tok(tm, $rb_plus(tm, 1)), "/".$freeze())) { if ($truthy($rb_lt(self.version, 30))) { return self.$diagnostic("warning", "ambiguous_literal", nil, self.$range(tm, $rb_plus(tm, 1))) } else { return self.$diagnostic("warning", "ambiguous_regexp", nil, self.$range(tm, $rb_plus(tm, 1))) } } else { return nil } }); $def(self, '$emit_global_var', function $$emit_global_var(ts, te) { var self = this; if (ts == null) ts = self.ts; if (te == null) te = self.te; if ($truthy(self.$tok(ts, te)['$=~'](/^\$([1-9][0-9]*)$/))) { return self.$emit("tNTH_REF", self.$tok($rb_plus(ts, 1), te).$to_i(), ts, te) } else if ($truthy(self.$tok()['$=~'](/^\$([&`'+])$/))) { return self.$emit("tBACK_REF", self.$tok(ts, te), ts, te) } else { return self.$emit("tGVAR", self.$tok(ts, te), ts, te) }; }, -1); $def(self, '$emit_class_var', function $$emit_class_var(ts, te) { var self = this; if (ts == null) ts = self.ts; if (te == null) te = self.te; if ($truthy(self.$tok(ts, te)['$=~'](/^@@[0-9]/))) { self.$diagnostic("error", "cvar_name", (new Map([["name", self.$tok(ts, te)]]))) }; return self.$emit("tCVAR", self.$tok(ts, te), ts, te); }, -1); $def(self, '$emit_instance_var', function $$emit_instance_var(ts, te) { var self = this; if (ts == null) ts = self.ts; if (te == null) te = self.te; if ($truthy(self.$tok(ts, te)['$=~'](/^@[0-9]/))) { self.$diagnostic("error", "ivar_name", (new Map([["name", self.$tok(ts, te)]]))) }; return self.$emit("tIVAR", self.$tok(ts, te), ts, te); }, -1); $def(self, '$emit_rbrace_rparen_rbrack', function $$emit_rbrace_rparen_rbrack() { var self = this; self.$emit_table($$('PUNCTUATION')); if ($truthy($rb_lt(self.version, 24))) { self.cond.$lexpop(); return self.cmdarg.$lexpop(); } else { self.cond.$pop(); return self.cmdarg.$pop(); }; }); $def(self, '$emit_colon_with_digits', function $$emit_colon_with_digits(p, tm, diag_msg) { var self = this; if ($truthy($rb_ge(self.version, 27))) { self.$diagnostic("error", diag_msg, (new Map([["name", self.$tok(tm, self.te)]])), self.$range(tm, self.te)) } else { self.$emit("tCOLON", self.$tok(self.ts, $rb_plus(self.ts, 1)), self.ts, $rb_plus(self.ts, 1)); p = self.ts; }; return p; }); $def(self, '$emit_singleton_class', function $$emit_singleton_class() { var self = this; self.$emit("kCLASS", "class".$freeze(), self.ts, $rb_plus(self.ts, 5)); return self.$emit("tLSHFT", "<<".$freeze(), $rb_minus(self.te, 2), self.te); }); $const_set($nesting[0], 'PUNCTUATION', (new Map([["=", "tEQL"], ["&", "tAMPER2"], ["|", "tPIPE"], ["!", "tBANG"], ["^", "tCARET"], ["+", "tPLUS"], ["-", "tMINUS"], ["*", "tSTAR2"], ["/", "tDIVIDE"], ["%", "tPERCENT"], ["~", "tTILDE"], [",", "tCOMMA"], [";", "tSEMI"], [".", "tDOT"], ["..", "tDOT2"], ["...", "tDOT3"], ["[", "tLBRACK2"], ["]", "tRBRACK"], ["(", "tLPAREN2"], [")", "tRPAREN"], ["?", "tEH"], [":", "tCOLON"], ["&&", "tANDOP"], ["||", "tOROP"], ["-@", "tUMINUS"], ["+@", "tUPLUS"], ["~@", "tTILDE"], ["**", "tPOW"], ["->", "tLAMBDA"], ["=~", "tMATCH"], ["!~", "tNMATCH"], ["==", "tEQ"], ["!=", "tNEQ"], [">", "tGT"], [">>", "tRSHFT"], [">=", "tGEQ"], ["<", "tLT"], ["<<", "tLSHFT"], ["<=", "tLEQ"], ["=>", "tASSOC"], ["::", "tCOLON2"], ["===", "tEQQ"], ["<=>", "tCMP"], ["[]", "tAREF"], ["[]=", "tASET"], ["{", "tLCURLY"], ["}", "tRCURLY"], ["`", "tBACK_REF2"], ["!@", "tBANG"], ["&.", "tANDDOT"]]))); $const_set($nesting[0], 'PUNCTUATION_BEGIN', (new Map([["&", "tAMPER"], ["*", "tSTAR"], ["**", "tDSTAR"], ["+", "tUPLUS"], ["-", "tUMINUS"], ["::", "tCOLON3"], ["(", "tLPAREN"], ["{", "tLBRACE"], ["[", "tLBRACK"]]))); $const_set($nesting[0], 'KEYWORDS', (new Map([["if", "kIF_MOD"], ["unless", "kUNLESS_MOD"], ["while", "kWHILE_MOD"], ["until", "kUNTIL_MOD"], ["rescue", "kRESCUE_MOD"], ["defined?", "kDEFINED"], ["BEGIN", "klBEGIN"], ["END", "klEND"]]))); $const_set($nesting[0], 'KEYWORDS_BEGIN', (new Map([["if", "kIF"], ["unless", "kUNLESS"], ["while", "kWHILE"], ["until", "kUNTIL"], ["rescue", "kRESCUE"], ["defined?", "kDEFINED"], ["BEGIN", "klBEGIN"], ["END", "klEND"]]))); $const_set($nesting[0], 'ESCAPE_WHITESPACE', (new Map([[" ", "\\s"], ["\r", "\\r"], ["\n", "\\n"], ["\t", "\\t"], ["\v", "\\v"], ["\f", "\\f"]]))); return $send(Opal.large_array_unpack("class,module,def,undef,begin,end,then,elsif,else,ensure,case,when,for,break,next,redo,retry,in,do,return,yield,super,self,nil,true,false,and,or,not,alias,__FILE__,__LINE__,__ENCODING__"), 'each', [], function $Lexer$15(keyword){var $a, $b; if (keyword == null) keyword = nil; return ($a = [keyword, ($b = [keyword, "k" + (keyword.$upcase())], $send($$('KEYWORDS'), '[]=', $b), $b[$b.length - 1])], $send($$('KEYWORDS_BEGIN'), '[]=', $a), $a[$a.length - 1]);}); })($$('Parser'), null, $nesting) }; Opal.modules["parser/lexer-strings"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $const_set = Opal.const_set, $hash_rehash = Opal.hash_rehash, $send = Opal.send, $to_a = Opal.to_a, $truthy = Opal.truthy, $def = Opal.def, $rb_plus = Opal.rb_plus, $to_ary = Opal.to_ary, $rb_le = Opal.rb_le, $eqeq = Opal.eqeq, $rb_gt = Opal.rb_gt, $rb_minus = Opal.rb_minus, $neqeq = Opal.neqeq, $eqeqeq = Opal.eqeqeq, $not = Opal.not, $slice = Opal.slice, $rb_lt = Opal.rb_lt, $rb_ge = Opal.rb_ge, $thrower = Opal.thrower, $range = Opal.range, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_accessor,private,_lex_actions=,_lex_trans_keys=,_lex_key_spans=,_lex_index_offsets=,_lex_indicies=,_lex_trans_targs=,_lex_trans_actions=,_lex_to_state_actions=,_lex_from_state_actions=,_lex_eof_trans=,lex_start=,lex_error=,lex_en_interp_words=,lex_en_interp_string=,lex_en_plain_words=,lex_en_plain_string=,lex_en_interp_backslash_delimited=,lex_en_plain_backslash_delimited=,lex_en_interp_backslash_delimited_words=,lex_en_plain_backslash_delimited_words=,lex_en_regexp_modifiers=,lex_en_character=,lex_en_unknown=,freeze,ord,union,chars,respond_to?,class,send,reset,lex_en_unknown,lex_en_interp_string,lex_en_interp_words,lex_en_plain_string,+,size,source_pts,<=,==,[],>,-,<<,!=,===,unicode_points,unescape_char,diagnostic,read_post_meta_or_ctrl_char,slash_c_char,slash_m_char,encode_escaped_char,encode_escape,%,to_i,tok,range,chr,check_invalid_escapes,literal,extend_interp_code,lex_en_expr_value,extend_string_eol_check_eof,heredoc?,extend_string_eol_heredoc_line,nest_and_try_closing,heredoc_e,pop_literal,infer_indent_level,extend_string_eol_heredoc_intertwined,extend_string_eol_words,extend_string_slice_end,!,lex_en_expr_labelarg,extend_string_for_token_range,extend_interp_digit_var,extend_interp_var,emit_interp_var,extend_string_escaped,extend_space,emit,lex_en_expr_end,scan,any?,join,slice,source_buffer,emit_character_constant,raise,lex_en_character,advance,new,push,next_state_for_literal,backslash_delimited?,words?,interpolate?,lex_en_interp_backslash_delimited_words,lex_en_plain_backslash_delimited_words,lex_en_plain_words,lex_en_interp_backslash_delimited,lex_en_plain_backslash_delimited,last,pop,dedent_level,type,lex_en_inside_string,lex_en_regexp_modifiers,end_interp_brace_and_try_closing,version?,lexpop,cond,cmdarg,saved_herebody_s,continue_lexing,protected,include?,<,nil?,regexp?,munge_escape?,match,extend_string,squiggly_heredoc?,supports_line_continuation_via_slash?,gsub,>=,flush_string,extend_content,saved_herebody_s=,start_interp_brace,command_start=,start_with?,str_s,eof_codepoint?,active?,force_encoding,encoding,source,index,end_with?,each,length,&,|,getbyte,emit_invalid_escapes?'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'LexerStrings'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto._lex_actions = $proto.cs = $proto.escape_s = $proto.lexer = $proto.herebody_s = $proto.ts = $proto.te = $proto.root_lexer_state = $proto.literal_stack = $proto.dedent_level = $proto.version = $proto.source_buffer = $proto.escape = nil; (function(self, $parent_nesting) { self.$attr_accessor("_lex_actions"); return self.$private("_lex_actions", "_lex_actions="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_actions='](Opal.large_array_unpack("0,1,0,1,18,1,22,1,23,1,24,1,25,1,26,1,27,1,28,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,42,1,43,1,44,1,46,1,47,1,48,1,49,1,52,1,53,1,54,1,55,1,56,1,57,1,60,1,61,1,62,1,63,1,64,1,65,1,66,1,69,1,70,1,71,1,72,1,73,1,74,1,75,1,76,1,77,1,79,1,80,1,81,2,0,27,2,0,37,2,0,46,2,0,52,2,0,56,2,0,62,2,0,65,2,0,72,2,0,77,2,1,31,2,1,41,2,1,78,2,2,31,2,2,41,2,2,78,2,3,31,2,3,41,2,3,78,2,8,31,2,8,41,2,8,78,2,10,31,2,10,41,2,10,78,2,11,31,2,11,41,2,11,78,2,12,31,2,12,41,2,12,78,2,13,31,2,13,41,2,13,78,2,14,31,2,14,41,2,14,78,2,15,31,2,15,41,2,15,78,2,16,31,2,16,41,2,16,78,2,17,31,2,17,41,2,17,78,2,18,45,2,18,51,2,19,30,2,19,40,2,19,59,2,19,68,2,20,29,2,20,30,2,20,39,2,20,40,2,20,58,2,20,59,2,20,67,2,20,68,2,21,29,2,21,30,2,21,39,2,21,40,2,21,58,2,21,59,2,21,67,2,21,68,2,22,78,2,25,0,3,0,50,18,3,2,5,31,3,2,5,41,3,2,5,78,3,2,6,31,3,2,6,41,3,2,6,78,3,4,5,31,3,4,5,41,3,4,5,78,3,4,6,31,3,4,6,41,3,4,6,78,3,8,6,31,3,8,6,41,3,8,6,78,3,9,5,31,3,9,5,41,3,9,5,78,3,15,16,31,3,15,16,41,3,15,16,78,3,18,17,31,3,18,17,41,3,18,17,78,4,2,5,6,31,4,2,5,6,41,4,2,5,6,78,4,4,5,6,31,4,4,5,6,41,4,4,5,6,78,4,7,5,6,31,4,7,5,6,41,4,7,5,6,78,4,9,5,6,31,4,9,5,6,41,4,9,5,6,78")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_trans_keys"); return self.$private("_lex_trans_keys", "_lex_trans_keys="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_trans_keys='](Opal.large_array_unpack("0,0,0,127,0,127,0,127,0,127,0,45,0,120,0,120,0,92,0,120,0,120,0,45,0,120,0,120,67,99,45,45,0,92,0,120,0,102,0,127,0,127,0,127,0,127,0,45,0,120,0,120,0,92,0,120,0,120,0,45,0,120,0,120,67,99,45,45,0,92,0,120,0,102,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,127,0,122,0,45,0,120,0,120,0,92,0,120,0,120,0,45,0,120,0,120,67,99,45,45,0,92,0,120,0,102,0,26,0,92,9,32,36,123,0,127,0,0,48,57,0,127,0,127,0,127,0,127,0,120,0,0,0,0,48,55,48,55,0,0,0,0,0,92,0,0,0,0,0,0,0,92,45,45,0,0,0,0,0,0,0,92,48,102,48,102,0,0,48,102,48,102,0,0,0,45,0,92,0,92,0,0,0,0,0,92,48,102,48,102,0,0,0,45,10,10,0,92,48,123,48,102,48,102,48,102,0,0,0,125,0,125,0,0,0,125,0,0,0,125,0,125,0,125,0,125,0,0,0,125,0,125,0,125,0,125,0,125,0,125,0,0,0,0,48,102,0,0,0,92,36,123,0,127,0,0,48,57,0,127,0,127,0,127,0,127,0,120,0,0,0,0,48,55,48,55,0,0,0,0,0,92,0,0,0,0,0,0,0,92,45,45,0,0,0,0,0,0,0,92,48,102,48,102,0,0,48,102,48,102,0,0,0,45,0,92,0,92,0,0,0,0,0,92,48,102,48,102,0,0,0,45,10,10,0,92,48,123,48,102,48,102,48,102,0,0,0,125,0,125,0,0,0,125,0,0,0,125,0,125,0,125,0,125,0,0,0,125,0,125,0,125,0,125,0,125,0,125,0,0,0,0,48,102,0,0,0,92,9,32,0,26,0,92,0,26,0,35,36,123,0,127,0,0,48,57,0,127,0,127,0,127,0,127,0,26,0,35,9,32,36,123,0,127,0,0,48,57,0,127,0,127,0,127,0,127,0,32,9,32,65,122,65,122,63,63,0,0,0,127,0,127,0,120,0,0,0,0,48,55,48,55,0,0,0,0,0,92,0,0,0,0,0,0,0,92,45,45,0,0,0,0,0,0,0,92,48,102,48,102,0,0,48,102,48,102,0,0,0,45,0,92,0,92,0,0,0,0,0,92,48,102,48,102,0,0,0,45,10,10,0,92,48,123,48,102,48,102,48,102,0,0,0,125,0,125,0,0,0,125,0,0,0,125,0,125,0,125,0,125,0,0,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,125,0,0,0,0,48,102,0,0,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_key_spans"); return self.$private("_lex_key_spans", "_lex_key_spans="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_key_spans='](Opal.large_array_unpack("0,128,128,128,128,46,121,121,93,121,121,46,121,121,33,1,93,121,103,128,128,128,128,46,121,121,93,121,121,46,121,121,33,1,93,121,103,128,128,128,128,128,128,128,128,123,46,121,121,93,121,121,46,121,121,33,1,93,121,103,27,93,24,88,128,0,10,128,128,128,128,121,0,0,8,8,0,0,93,0,0,0,93,1,0,0,0,93,55,55,0,55,55,0,46,93,93,0,0,93,55,55,0,46,1,93,76,55,55,55,0,126,126,0,126,0,126,126,126,126,0,126,126,126,126,126,126,0,0,55,0,93,88,128,0,10,128,128,128,128,121,0,0,8,8,0,0,93,0,0,0,93,1,0,0,0,93,55,55,0,55,55,0,46,93,93,0,0,93,55,55,0,46,1,93,76,55,55,55,0,126,126,0,126,0,126,126,126,126,0,126,126,126,126,126,126,0,0,55,0,93,24,27,93,27,36,88,128,0,10,128,128,128,128,27,36,24,88,128,0,10,128,128,128,128,33,24,58,58,1,0,128,128,121,0,0,8,8,0,0,93,0,0,0,93,1,0,0,0,93,55,55,0,55,55,0,46,93,93,0,0,93,55,55,0,46,1,93,76,55,55,55,0,126,126,0,126,0,126,126,126,126,0,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,0,0,55,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_index_offsets"); return self.$private("_lex_index_offsets", "_lex_index_offsets="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_index_offsets='](Opal.large_array_unpack("0,0,129,258,387,516,563,685,807,901,1023,1145,1192,1314,1436,1470,1472,1566,1688,1792,1921,2050,2179,2308,2355,2477,2599,2693,2815,2937,2984,3106,3228,3262,3264,3358,3480,3584,3713,3842,3971,4100,4229,4358,4487,4616,4740,4787,4909,5031,5125,5247,5369,5416,5538,5660,5694,5696,5790,5912,6016,6044,6138,6163,6252,6381,6382,6393,6522,6651,6780,6909,7031,7032,7033,7042,7051,7052,7053,7147,7148,7149,7150,7244,7246,7247,7248,7249,7343,7399,7455,7456,7512,7568,7569,7616,7710,7804,7805,7806,7900,7956,8012,8013,8060,8062,8156,8233,8289,8345,8401,8402,8529,8656,8657,8784,8785,8912,9039,9166,9293,9294,9421,9548,9675,9802,9929,10056,10057,10058,10114,10115,10209,10298,10427,10428,10439,10568,10697,10826,10955,11077,11078,11079,11088,11097,11098,11099,11193,11194,11195,11196,11290,11292,11293,11294,11295,11389,11445,11501,11502,11558,11614,11615,11662,11756,11850,11851,11852,11946,12002,12058,12059,12106,12108,12202,12279,12335,12391,12447,12448,12575,12702,12703,12830,12831,12958,13085,13212,13339,13340,13467,13594,13721,13848,13975,14102,14103,14104,14160,14161,14255,14280,14308,14402,14430,14467,14556,14685,14686,14697,14826,14955,15084,15213,15241,15278,15303,15392,15521,15522,15533,15662,15791,15920,16049,16083,16108,16167,16226,16228,16229,16358,16487,16609,16610,16611,16620,16629,16630,16631,16725,16726,16727,16728,16822,16824,16825,16826,16827,16921,16977,17033,17034,17090,17146,17147,17194,17288,17382,17383,17384,17478,17534,17590,17591,17638,17640,17734,17811,17867,17923,17979,17980,18107,18234,18235,18362,18363,18490,18617,18744,18871,18872,18999,19126,19253,19380,19507,19634,19761,19888,20015,20142,20269,20396,20523,20650,20777,20904,21031,21158,21285,21286,21287,21343")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_indicies"); return self.$private("_lex_indicies", "_lex_indicies="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_indicies='](Opal.large_array_unpack("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,2,0,2,2,0,0,2,2,2,3,2,2,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,0,0,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,0,0,0,8,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0,8,10,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,10,13,13,13,10,13,13,13,13,13,14,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,10,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,15,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,16,13,10,13,13,13,10,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,10,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,17,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,16,13,10,18,18,18,10,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,10,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,20,18,10,21,21,21,10,21,21,21,21,21,22,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,10,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,23,21,10,21,21,21,10,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,10,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,23,21,10,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,24,11,10,25,25,25,10,25,25,25,25,25,26,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,10,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,27,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,28,25,25,25,25,25,25,29,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,30,25,10,25,25,25,10,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,10,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,30,25,31,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,32,10,32,10,10,33,33,33,10,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,10,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,34,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,35,33,10,13,13,13,10,13,13,13,13,13,14,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,10,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,17,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,16,13,10,36,36,36,10,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,10,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,37,37,37,37,37,37,37,37,37,37,36,36,36,36,36,36,36,37,37,37,37,37,37,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,37,37,37,37,37,37,36,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,40,40,38,40,38,40,40,38,38,40,40,40,41,40,40,42,42,42,42,42,42,42,42,42,42,40,40,40,40,40,40,40,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,38,40,38,38,39,40,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,38,38,38,40,38,39,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,40,40,40,40,40,40,40,40,40,40,38,38,38,38,38,38,38,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,38,38,38,38,40,38,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,38,38,38,38,38,40,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,44,44,44,44,44,44,44,44,44,44,38,38,38,38,38,38,45,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,38,38,38,38,43,38,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,38,38,38,38,38,43,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,47,47,47,47,47,47,47,47,47,47,38,38,38,38,38,38,38,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,38,38,38,38,46,38,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,38,38,38,38,38,46,48,49,49,49,48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,48,51,51,51,48,51,51,51,51,51,52,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,48,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,53,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,54,51,48,51,51,51,48,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,48,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,55,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,54,51,48,56,56,56,48,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,48,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,57,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,58,56,48,59,59,59,48,59,59,59,59,59,60,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,48,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,61,59,48,59,59,59,48,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,48,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,61,59,48,49,49,49,48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,62,49,48,63,63,63,48,63,63,63,63,63,64,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,48,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,65,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,66,63,63,63,63,63,63,67,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,68,63,48,63,63,63,48,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,48,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,68,63,69,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,70,48,70,48,48,71,71,71,48,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,48,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,72,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,73,71,48,51,51,51,48,51,51,51,51,51,52,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,48,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,55,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,54,51,48,74,74,74,48,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,48,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,74,74,74,74,74,74,74,75,75,75,75,75,75,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,74,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,78,78,76,78,76,78,78,76,76,78,78,78,79,78,78,80,80,80,80,80,80,80,80,80,80,78,78,78,78,78,78,78,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,76,78,76,76,77,78,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,76,76,76,78,76,77,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,78,78,78,78,78,78,78,78,78,78,76,76,76,76,76,76,76,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,76,76,76,76,78,76,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,76,76,76,76,76,78,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,82,82,82,82,82,82,82,82,82,82,76,76,76,76,76,76,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,76,76,76,76,81,76,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,76,76,76,76,76,81,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,85,85,85,85,85,85,85,85,85,85,76,76,76,76,76,76,76,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,76,76,76,76,84,76,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,76,76,76,76,76,84,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,88,88,86,88,86,88,88,86,86,88,88,88,89,88,88,90,90,90,90,90,90,90,90,90,90,88,88,88,88,88,88,88,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,86,88,86,86,87,88,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,86,86,86,88,86,87,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,88,88,88,88,88,88,88,88,88,88,86,86,86,86,86,86,86,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,86,86,86,86,88,86,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,86,86,86,86,86,88,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,92,92,92,92,92,92,92,92,92,92,86,86,86,86,86,86,93,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,86,86,86,86,91,86,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,86,86,86,86,86,91,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,95,95,95,95,95,95,95,95,95,95,86,86,86,86,86,86,86,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,86,86,86,86,94,86,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,86,86,86,86,86,94,97,96,96,96,97,96,96,96,96,98,99,98,98,98,96,96,96,96,96,96,96,96,96,96,96,96,97,96,96,96,96,96,98,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,96,101,96,96,100,96,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,96,102,103,103,103,102,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,102,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,104,103,102,105,105,105,102,105,105,105,105,105,106,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,102,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,107,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,108,105,102,105,105,105,102,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,102,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,109,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,108,105,102,110,110,110,102,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,102,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,111,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,112,110,102,113,113,113,102,113,113,113,113,113,114,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,102,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,115,113,102,113,113,113,102,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,102,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,115,113,102,103,103,103,102,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,102,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,116,103,102,117,117,117,102,117,117,117,117,117,118,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,102,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,119,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,120,117,117,117,117,117,117,121,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,122,117,102,117,117,117,102,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,102,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,122,117,123,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,124,102,124,102,102,125,125,125,102,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,102,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,126,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,127,125,102,105,105,105,102,105,105,105,105,105,106,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,102,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,109,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,108,105,102,128,128,128,102,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,102,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,129,129,129,129,129,129,129,129,129,129,128,128,128,128,128,128,128,129,129,129,129,129,129,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,129,129,129,129,129,129,128,97,130,130,130,97,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,97,130,132,131,131,131,132,131,131,131,131,133,134,133,133,133,131,131,131,131,131,131,131,131,131,131,131,131,132,131,131,131,131,131,133,131,131,135,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,136,131,133,137,133,133,133,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,133,137,139,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,140,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,141,138,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,1,1,1,1,1,1,1,1,1,1,142,142,142,142,142,142,142,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,142,142,142,142,1,142,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,142,142,142,142,142,1,142,4,4,4,4,4,4,4,4,4,4,142,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,5,5,5,5,5,5,5,5,5,5,143,143,143,143,143,143,143,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,143,143,143,143,5,143,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,143,143,143,143,143,5,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,5,5,5,5,5,5,5,5,5,5,144,144,144,144,144,144,144,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,144,144,144,144,6,144,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,144,144,144,144,144,6,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,8,8,8,8,8,8,8,8,8,8,145,145,145,145,145,145,145,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,145,145,145,145,8,145,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,145,145,145,145,145,8,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,8,8,8,8,8,8,8,8,8,8,146,146,146,146,146,146,146,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,146,146,146,146,9,146,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,146,146,146,146,146,9,149,148,148,148,149,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,149,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,150,150,150,150,150,150,150,150,148,148,148,148,148,148,148,148,148,148,148,151,148,148,148,148,148,148,148,148,148,152,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,153,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,154,148,148,155,148,156,157,159,159,159,159,159,159,159,159,158,160,160,160,160,160,160,160,160,158,158,161,161,33,33,33,161,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,161,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,34,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,162,33,163,164,165,165,33,33,33,165,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,165,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,34,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,166,33,32,165,167,168,169,169,18,18,18,169,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,169,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,170,18,171,171,171,171,171,171,171,171,171,171,169,169,169,169,169,169,169,171,171,171,171,171,171,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,171,171,171,171,171,171,169,173,173,173,173,173,173,173,173,173,173,172,172,172,172,172,172,172,173,173,173,173,173,173,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,173,173,173,173,173,173,172,172,174,174,174,174,174,174,174,174,174,174,165,165,165,165,165,165,165,174,174,174,174,174,174,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,174,174,174,174,174,174,165,176,176,176,176,176,176,176,176,176,176,175,175,175,175,175,175,175,176,176,176,176,176,176,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,176,176,176,176,176,176,175,175,165,11,11,11,165,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,165,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,177,11,161,18,18,18,161,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,161,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,20,18,161,178,178,178,161,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,161,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,179,178,180,181,181,178,178,178,181,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,181,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,182,178,183,183,183,183,183,183,183,183,183,183,181,181,181,181,181,181,181,183,183,183,183,183,183,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,183,183,183,183,183,183,181,185,185,185,185,185,185,185,185,185,185,184,184,184,184,184,184,184,185,185,185,185,185,185,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,185,185,185,185,185,185,184,184,181,11,11,11,181,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,181,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,177,11,186,181,181,18,18,18,181,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,181,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,20,18,188,188,188,188,188,188,188,188,188,188,187,187,187,187,187,187,187,188,188,188,188,188,188,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,188,188,188,188,188,188,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,189,187,190,190,190,190,190,190,190,190,190,190,187,187,187,187,187,187,187,190,190,190,190,190,190,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,190,190,190,190,190,190,187,191,191,191,191,191,191,191,191,191,191,187,187,187,187,187,187,187,191,191,191,191,191,191,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,191,191,191,191,191,191,187,192,192,192,192,192,192,192,192,192,192,187,187,187,187,187,187,187,192,192,192,192,192,192,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,192,192,192,192,192,192,187,193,196,195,195,195,196,195,195,195,195,197,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,196,195,195,195,195,195,197,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,198,198,198,198,198,198,198,198,198,198,195,195,195,195,195,195,195,198,198,198,198,198,198,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,198,198,198,198,198,198,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,199,195,196,195,195,195,196,195,195,195,195,194,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,196,195,195,195,195,195,194,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,200,200,200,200,200,200,200,200,200,200,195,195,195,195,195,195,195,200,200,200,200,200,200,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,200,200,200,200,200,200,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,201,195,194,196,200,200,200,196,200,200,200,200,194,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,196,200,200,200,200,200,194,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,194,200,202,196,203,203,203,196,203,203,203,203,197,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,196,203,203,203,203,203,197,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,198,198,198,198,198,198,198,198,198,198,203,203,203,203,203,203,203,198,198,198,198,198,198,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,198,198,198,198,198,198,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,194,203,196,203,203,203,196,203,203,203,203,194,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,196,203,203,203,203,203,194,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,200,200,200,200,200,200,200,200,200,200,203,203,203,203,203,203,203,200,200,200,200,200,200,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,200,200,200,200,200,200,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,196,203,196,203,203,203,196,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,196,203,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,205,205,205,205,205,205,205,205,205,205,203,203,203,203,203,203,203,205,205,205,205,205,205,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,205,205,205,205,205,205,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,206,203,196,203,203,203,196,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,196,203,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,198,198,198,198,198,198,198,198,198,198,203,203,203,203,203,203,203,198,198,198,198,198,198,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,198,198,198,198,198,198,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,206,203,207,196,203,203,203,196,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,196,203,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,208,208,208,208,208,208,208,208,208,208,203,203,203,203,203,203,203,208,208,208,208,208,208,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,208,208,208,208,208,208,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,206,203,196,203,203,203,196,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,196,203,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,209,209,209,209,209,209,209,209,209,209,203,203,203,203,203,203,203,209,209,209,209,209,209,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,209,209,209,209,209,209,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,206,203,196,203,203,203,196,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,196,203,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,210,210,210,210,210,210,210,210,210,210,203,203,203,203,203,203,203,210,210,210,210,210,210,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,210,210,210,210,210,210,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,206,203,196,203,203,203,196,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,196,203,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,211,211,211,211,211,211,211,211,211,211,203,203,203,203,203,203,203,211,211,211,211,211,211,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,211,211,211,211,211,211,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,206,203,196,203,203,203,196,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,196,203,203,203,203,203,204,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,212,212,212,212,212,212,212,212,212,212,203,203,203,203,203,203,203,212,212,212,212,212,212,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,212,212,212,212,212,212,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,206,203,196,203,203,203,196,203,203,203,203,194,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,196,203,203,203,203,203,194,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,212,212,212,212,212,212,212,212,212,212,203,203,203,203,203,203,203,212,212,212,212,212,212,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,212,212,212,212,212,212,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,194,203,213,214,216,216,216,216,216,216,216,216,216,216,215,215,215,215,215,215,215,216,216,216,216,216,216,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,216,216,216,216,216,216,215,215,218,217,217,217,218,217,217,217,217,217,219,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,218,217,217,217,217,217,217,217,217,220,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,221,217,223,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,224,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,225,222,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,39,39,39,39,39,39,39,39,39,39,226,226,226,226,226,226,226,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,226,226,226,226,39,226,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,226,226,226,226,226,39,226,42,42,42,42,42,42,42,42,42,42,226,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,43,43,43,43,43,43,43,43,43,43,227,227,227,227,227,227,227,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,227,227,227,227,43,227,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,227,227,227,227,227,43,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,43,43,43,43,43,43,43,43,43,43,228,228,228,228,228,228,228,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,228,228,228,228,44,228,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,228,228,228,228,228,44,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,46,46,46,46,46,46,46,46,46,46,229,229,229,229,229,229,229,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,229,229,229,229,46,229,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,229,229,229,229,229,46,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,46,46,46,46,46,46,46,46,46,46,230,230,230,230,230,230,230,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,230,230,230,230,47,230,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,230,230,230,230,230,47,233,232,232,232,233,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,233,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,234,234,234,234,234,234,234,234,232,232,232,232,232,232,232,232,232,232,232,235,232,232,232,232,232,232,232,232,232,236,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,237,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,238,232,232,239,232,240,241,243,243,243,243,243,243,243,243,242,244,244,244,244,244,244,244,244,242,242,245,245,71,71,71,245,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,245,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,72,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,246,71,247,248,249,249,71,71,71,249,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,249,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,72,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,250,71,70,249,251,252,253,253,56,56,56,253,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,253,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,57,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,254,56,255,255,255,255,255,255,255,255,255,255,253,253,253,253,253,253,253,255,255,255,255,255,255,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,255,255,255,255,255,255,253,257,257,257,257,257,257,257,257,257,257,256,256,256,256,256,256,256,257,257,257,257,257,257,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,257,257,257,257,257,257,256,256,258,258,258,258,258,258,258,258,258,258,249,249,249,249,249,249,249,258,258,258,258,258,258,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,258,258,258,258,258,258,249,260,260,260,260,260,260,260,260,260,260,259,259,259,259,259,259,259,260,260,260,260,260,260,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,260,260,260,260,260,260,259,259,249,49,49,49,249,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,249,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,261,49,245,56,56,56,245,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,245,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,57,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,58,56,245,262,262,262,245,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,245,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,263,262,264,265,265,262,262,262,265,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,265,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,266,262,267,267,267,267,267,267,267,267,267,267,265,265,265,265,265,265,265,267,267,267,267,267,267,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,267,267,267,267,267,267,265,269,269,269,269,269,269,269,269,269,269,268,268,268,268,268,268,268,269,269,269,269,269,269,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,269,269,269,269,269,269,268,268,265,49,49,49,265,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,265,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,261,49,270,265,265,56,56,56,265,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,265,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,57,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,58,56,272,272,272,272,272,272,272,272,272,272,271,271,271,271,271,271,271,272,272,272,272,272,272,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,272,272,272,272,272,272,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,273,271,274,274,274,274,274,274,274,274,274,274,271,271,271,271,271,271,271,274,274,274,274,274,274,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,274,274,274,274,274,274,271,275,275,275,275,275,275,275,275,275,275,271,271,271,271,271,271,271,275,275,275,275,275,275,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,275,275,275,275,275,275,271,276,276,276,276,276,276,276,276,276,276,271,271,271,271,271,271,271,276,276,276,276,276,276,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,276,276,276,276,276,276,271,277,280,279,279,279,280,279,279,279,279,281,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,280,279,279,279,279,279,281,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,282,282,282,282,282,282,282,282,282,282,279,279,279,279,279,279,279,282,282,282,282,282,282,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,282,282,282,282,282,282,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,283,279,280,279,279,279,280,279,279,279,279,278,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,280,279,279,279,279,279,278,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,284,284,284,284,284,284,284,284,284,284,279,279,279,279,279,279,279,284,284,284,284,284,284,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,284,284,284,284,284,284,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,285,279,278,280,284,284,284,280,284,284,284,284,278,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,280,284,284,284,284,284,278,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,278,284,286,280,287,287,287,280,287,287,287,287,281,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,280,287,287,287,287,287,281,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,282,282,282,282,282,282,282,282,282,282,287,287,287,287,287,287,287,282,282,282,282,282,282,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,282,282,282,282,282,282,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,278,287,280,287,287,287,280,287,287,287,287,278,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,280,287,287,287,287,287,278,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,284,284,284,284,284,284,284,284,284,284,287,287,287,287,287,287,287,284,284,284,284,284,284,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,284,284,284,284,284,284,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,280,287,280,287,287,287,280,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,280,287,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,289,289,289,289,289,289,289,289,289,289,287,287,287,287,287,287,287,289,289,289,289,289,289,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,289,289,289,289,289,289,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,290,287,280,287,287,287,280,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,280,287,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,282,282,282,282,282,282,282,282,282,282,287,287,287,287,287,287,287,282,282,282,282,282,282,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,282,282,282,282,282,282,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,290,287,291,280,287,287,287,280,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,280,287,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,292,292,292,292,292,292,292,292,292,292,287,287,287,287,287,287,287,292,292,292,292,292,292,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,292,292,292,292,292,292,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,290,287,280,287,287,287,280,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,280,287,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,293,293,293,293,293,293,293,293,293,293,287,287,287,287,287,287,287,293,293,293,293,293,293,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,293,293,293,293,293,293,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,290,287,280,287,287,287,280,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,280,287,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,294,294,294,294,294,294,294,294,294,294,287,287,287,287,287,287,287,294,294,294,294,294,294,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,294,294,294,294,294,294,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,290,287,280,287,287,287,280,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,280,287,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,295,295,295,295,295,295,295,295,295,295,287,287,287,287,287,287,287,295,295,295,295,295,295,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,295,295,295,295,295,295,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,290,287,280,287,287,287,280,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,280,287,287,287,287,287,288,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,296,296,296,296,296,296,296,296,296,296,287,287,287,287,287,287,287,296,296,296,296,296,296,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,296,296,296,296,296,296,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,290,287,280,287,287,287,280,287,287,287,287,278,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,280,287,287,287,287,287,278,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,296,296,296,296,296,296,296,296,296,296,287,287,287,287,287,287,287,296,296,296,296,296,296,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,296,296,296,296,296,296,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,278,287,297,298,300,300,300,300,300,300,300,300,300,300,299,299,299,299,299,299,299,300,300,300,300,300,300,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,300,300,300,300,300,300,299,299,302,301,301,301,302,301,301,301,301,303,304,303,303,303,301,301,301,301,301,301,301,301,301,301,301,301,302,301,301,301,301,301,303,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,305,301,303,306,303,303,303,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,303,306,307,308,308,308,307,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,307,308,310,309,309,309,310,309,309,309,309,309,311,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,310,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,312,309,313,314,314,314,313,314,314,314,314,314,315,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,313,314,317,316,316,316,317,316,316,316,316,316,318,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,317,316,316,316,316,316,316,316,316,319,316,321,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,322,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,323,320,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,77,77,77,77,77,77,77,77,77,77,324,324,324,324,324,324,324,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,324,324,324,324,77,324,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,324,324,324,324,324,77,324,80,80,80,80,80,80,80,80,80,80,324,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,81,81,81,81,81,81,81,81,81,81,325,325,325,325,325,325,325,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,325,325,325,325,81,325,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,325,325,325,325,325,81,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,81,81,81,81,81,81,81,81,81,81,326,326,326,326,326,326,326,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,326,326,326,326,82,326,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,326,326,326,326,326,82,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,84,84,84,84,84,84,84,84,84,84,327,327,327,327,327,327,327,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,327,327,327,327,84,327,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,327,327,327,327,327,84,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,84,84,84,84,84,84,84,84,84,84,328,328,328,328,328,328,328,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,328,328,328,328,85,328,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,328,328,328,328,328,85,330,329,329,329,330,329,329,329,329,329,331,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,330,329,333,332,332,332,333,332,332,332,332,334,335,334,334,334,332,332,332,332,332,332,332,332,332,332,332,332,333,332,332,332,332,332,334,332,332,336,332,334,337,334,334,334,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,334,337,339,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,340,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,341,338,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,87,87,87,87,87,87,87,87,87,87,342,342,342,342,342,342,342,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,342,342,342,342,87,342,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,342,342,342,342,342,87,342,90,90,90,90,90,90,90,90,90,90,342,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,91,91,91,91,91,91,91,91,91,91,343,343,343,343,343,343,343,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,343,343,343,343,91,343,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,343,343,343,343,343,91,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,91,91,91,91,91,91,91,91,91,91,344,344,344,344,344,344,344,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,344,344,344,344,92,344,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,344,344,344,344,344,92,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,94,94,94,94,94,94,94,94,94,94,345,345,345,345,345,345,345,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,345,345,345,345,94,345,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,345,345,345,345,345,94,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,94,94,94,94,94,94,94,94,94,94,346,346,346,346,346,346,346,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,346,346,346,346,95,346,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,346,346,346,346,346,95,348,347,347,347,348,347,347,347,347,349,350,349,349,349,347,347,347,347,347,347,347,347,347,347,347,347,348,347,347,347,347,347,349,347,349,351,349,349,349,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,349,351,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,352,352,352,352,352,352,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,352,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,354,354,354,354,354,354,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,354,355,97,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,356,356,356,356,357,356,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,356,356,356,356,356,357,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,359,359,359,359,359,359,359,359,359,359,358,358,358,358,358,358,358,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,358,358,358,358,359,358,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,358,358,358,358,358,359,362,361,361,361,362,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,362,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,363,363,363,363,363,363,363,363,361,361,361,361,361,361,361,361,361,361,361,364,361,361,361,361,361,361,361,361,361,365,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,366,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,367,361,361,368,361,369,370,372,372,372,372,372,372,372,372,371,373,373,373,373,373,373,373,373,371,371,374,374,125,125,125,374,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,374,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,126,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,375,125,376,377,378,378,125,125,125,378,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,378,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,126,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,379,125,124,378,380,381,382,382,110,110,110,382,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,382,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,111,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,383,110,384,384,384,384,384,384,384,384,384,384,382,382,382,382,382,382,382,384,384,384,384,384,384,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,384,384,384,384,384,384,382,386,386,386,386,386,386,386,386,386,386,385,385,385,385,385,385,385,386,386,386,386,386,386,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,386,386,386,386,386,386,385,385,387,387,387,387,387,387,387,387,387,387,378,378,378,378,378,378,378,387,387,387,387,387,387,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,387,387,387,387,387,387,378,389,389,389,389,389,389,389,389,389,389,388,388,388,388,388,388,388,389,389,389,389,389,389,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,389,389,389,389,389,389,388,388,378,103,103,103,378,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,378,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,390,103,374,110,110,110,374,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,374,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,111,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,112,110,374,391,391,391,374,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,374,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,392,391,393,394,394,391,391,391,394,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,394,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,395,391,396,396,396,396,396,396,396,396,396,396,394,394,394,394,394,394,394,396,396,396,396,396,396,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,396,396,396,396,396,396,394,398,398,398,398,398,398,398,398,398,398,397,397,397,397,397,397,397,398,398,398,398,398,398,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,398,398,398,398,398,398,397,397,394,103,103,103,394,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,394,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,390,103,399,394,394,110,110,110,394,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,394,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,111,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,112,110,401,401,401,401,401,401,401,401,401,401,400,400,400,400,400,400,400,401,401,401,401,401,401,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,401,401,401,401,401,401,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,402,400,403,403,403,403,403,403,403,403,403,403,400,400,400,400,400,400,400,403,403,403,403,403,403,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,403,403,403,403,403,403,400,404,404,404,404,404,404,404,404,404,404,400,400,400,400,400,400,400,404,404,404,404,404,404,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,404,404,404,404,404,404,400,405,405,405,405,405,405,405,405,405,405,400,400,400,400,400,400,400,405,405,405,405,405,405,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,405,405,405,405,405,405,400,406,409,408,408,408,409,408,408,408,408,410,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,409,408,408,408,408,408,410,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,411,411,411,411,411,411,411,411,411,411,408,408,408,408,408,408,408,411,411,411,411,411,411,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,411,411,411,411,411,411,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,412,408,409,408,408,408,409,408,408,408,408,407,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,409,408,408,408,408,408,407,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,413,413,413,413,413,413,413,413,413,413,408,408,408,408,408,408,408,413,413,413,413,413,413,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,413,413,413,413,413,413,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,414,408,407,409,413,413,413,409,413,413,413,413,407,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,409,413,413,413,413,413,407,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,407,413,415,409,416,416,416,409,416,416,416,416,410,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,410,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,417,417,417,417,417,417,417,417,417,417,416,416,416,416,416,416,416,417,417,417,417,417,417,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,417,417,417,417,417,417,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,407,416,409,416,416,416,409,416,416,416,416,407,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,407,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,413,413,413,413,413,413,413,413,413,413,416,416,416,416,416,416,416,413,413,413,413,413,413,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,413,413,413,413,413,413,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,409,416,416,416,409,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,419,419,419,419,419,419,419,419,419,419,416,416,416,416,416,416,416,419,419,419,419,419,419,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,419,419,419,419,419,419,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,417,417,417,417,417,417,417,417,417,417,416,416,416,416,416,416,416,417,417,417,417,417,417,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,417,417,417,417,417,417,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,421,409,416,416,416,409,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,422,422,422,422,422,422,422,422,422,422,416,416,416,416,416,416,416,422,422,422,422,422,422,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,422,422,422,422,422,422,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,423,423,423,423,423,423,423,423,423,423,416,416,416,416,416,416,416,423,423,423,423,423,423,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,423,423,423,423,423,423,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,424,424,424,424,424,424,424,424,424,424,416,416,416,416,416,416,416,424,424,424,424,424,424,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,424,424,424,424,424,424,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,425,425,425,425,425,425,425,425,425,425,416,416,416,416,416,416,416,425,425,425,425,425,425,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,425,425,425,425,425,425,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,418,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,426,426,426,426,426,426,426,426,426,426,416,416,416,416,416,416,416,426,426,426,426,426,426,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,426,426,426,426,426,426,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,407,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,407,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,426,426,426,426,426,426,426,426,426,426,416,416,416,416,416,416,416,426,426,426,426,426,426,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,426,426,426,426,426,426,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,407,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,428,428,428,428,428,428,428,428,428,428,416,416,416,416,416,416,416,428,428,428,428,428,428,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,428,428,428,428,428,428,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,429,429,429,429,429,429,429,429,429,429,416,416,416,416,416,416,416,429,429,429,429,429,429,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,429,429,429,429,429,429,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,430,430,430,430,430,430,430,430,430,430,416,416,416,416,416,416,416,430,430,430,430,430,430,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,430,430,430,430,430,430,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,407,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,431,431,431,431,431,431,431,431,431,431,416,416,416,416,416,416,416,431,431,431,431,431,431,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,431,431,431,431,431,431,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,407,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,432,432,432,432,432,432,432,432,432,432,416,416,416,416,416,416,416,432,432,432,432,432,432,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,432,432,432,432,432,432,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,407,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,433,433,433,433,433,433,433,433,433,433,416,416,416,416,416,416,416,433,433,433,433,433,433,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,433,433,433,433,433,433,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,407,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,434,434,434,434,434,434,434,434,434,434,416,416,416,416,416,416,416,434,434,434,434,434,434,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,434,434,434,434,434,434,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,407,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,426,426,426,426,426,426,426,426,426,426,416,416,416,416,416,416,416,426,426,426,426,426,426,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,426,426,426,426,426,426,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,407,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,435,435,435,435,435,435,435,435,435,435,416,416,416,416,416,416,416,435,435,435,435,435,435,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,435,435,435,435,435,435,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,436,436,436,436,436,436,436,436,436,436,416,416,416,416,416,416,416,436,436,436,436,436,436,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,436,436,436,436,436,436,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,437,437,437,437,437,437,437,437,437,437,416,416,416,416,416,416,416,437,437,437,437,437,437,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,437,437,437,437,437,437,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,438,438,438,438,438,438,438,438,438,438,416,416,416,416,416,416,416,438,438,438,438,438,438,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,438,438,438,438,438,438,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,409,416,416,416,409,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,409,416,416,416,416,416,427,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,426,426,426,426,426,426,426,426,426,426,416,416,416,416,416,416,416,426,426,426,426,426,426,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,426,426,426,426,426,426,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,420,416,439,440,442,442,442,442,442,442,442,442,442,442,441,441,441,441,441,441,441,442,442,442,442,442,442,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,442,442,442,442,442,442,441,441,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_trans_targs"); return self.$private("_lex_trans_targs", "_lex_trans_targs="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_trans_targs='](Opal.large_array_unpack("61,64,65,2,66,67,68,4,69,70,61,77,78,81,82,94,91,83,84,85,9,86,87,88,96,98,99,103,104,105,100,15,8,79,80,17,128,129,131,133,134,20,135,136,137,22,138,139,131,146,147,150,151,163,160,152,153,154,27,155,156,157,165,167,168,172,173,174,169,33,26,148,149,35,197,198,205,207,208,38,209,210,211,40,212,213,215,218,219,42,220,221,222,44,223,224,230,0,229,229,231,233,229,239,240,243,244,256,253,245,246,247,50,248,249,250,258,260,261,265,266,267,262,56,49,241,242,58,303,304,60,61,61,62,61,63,71,61,61,1,3,61,61,61,61,61,61,61,72,73,74,5,11,16,106,18,61,61,61,75,76,61,6,61,61,61,7,61,61,61,10,89,61,90,92,61,93,95,97,12,61,61,13,101,61,102,14,61,107,111,108,109,110,61,61,112,113,116,118,127,114,115,61,117,119,121,120,61,122,123,124,125,126,61,61,61,130,131,131,131,132,140,131,19,21,131,131,131,131,131,131,131,141,142,143,23,29,34,175,36,131,131,131,144,145,131,24,131,131,131,25,131,131,131,28,158,131,159,161,131,162,164,166,30,131,131,31,170,131,171,32,131,176,180,177,178,179,131,131,181,182,185,187,196,183,184,131,186,188,190,189,131,191,192,193,194,195,131,131,131,199,200,200,201,200,202,200,200,200,203,203,203,204,203,203,203,205,205,205,206,205,37,39,205,205,205,205,205,205,214,214,214,215,215,216,215,217,215,215,41,43,215,215,215,215,215,215,225,225,226,225,225,227,228,227,45,229,232,229,232,229,234,235,236,46,52,57,268,59,229,229,229,237,238,229,47,229,229,229,48,229,229,229,51,251,229,252,254,229,255,257,259,53,229,229,54,263,229,264,55,229,269,273,270,271,272,229,229,274,275,278,289,302,276,277,229,279,280,281,283,282,229,284,285,286,287,288,290,297,291,292,293,294,295,296,298,299,300,301,229,229,229,305")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_trans_actions"); return self.$private("_lex_trans_actions", "_lex_trans_actions="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_trans_actions='](Opal.large_array_unpack("25,0,0,0,0,0,0,0,0,0,23,0,11,0,301,0,0,11,0,0,0,0,301,0,11,0,301,0,11,11,0,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,35,0,11,0,301,0,0,11,0,0,0,0,301,0,11,0,301,0,11,11,0,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,89,121,0,11,93,0,11,0,301,0,0,11,0,0,0,0,301,0,11,0,301,0,11,11,0,0,0,0,0,0,0,0,95,17,15,0,97,11,11,19,21,0,0,13,238,277,274,253,250,392,3,3,3,3,3,3,3,3,133,223,160,0,0,142,0,332,151,308,0,419,356,404,0,0,449,0,0,368,0,11,0,0,344,320,0,0,434,0,1,196,0,0,0,0,0,187,214,0,0,0,0,0,0,0,380,0,0,0,0,124,0,0,0,0,0,205,178,169,0,31,29,100,11,11,33,0,0,27,241,283,280,259,256,396,3,3,3,3,3,3,3,3,136,226,163,0,0,145,0,336,154,312,0,424,360,409,0,0,454,0,0,372,0,11,0,0,348,324,0,0,439,0,1,199,0,0,0,0,0,190,217,0,0,0,0,0,0,0,384,0,0,0,0,127,0,0,0,0,0,208,181,172,0,41,39,0,103,0,43,45,232,49,47,106,0,51,235,304,57,55,109,11,59,0,0,53,244,289,286,265,262,65,63,112,71,69,0,115,11,73,75,0,0,67,247,295,292,271,268,81,79,0,118,83,85,0,87,0,298,5,91,0,400,3,3,3,3,3,3,3,3,139,229,166,0,0,148,0,340,157,316,0,429,364,414,0,0,459,0,0,376,0,11,0,0,352,328,0,0,444,0,1,202,0,0,0,0,0,193,220,0,0,0,0,0,0,0,388,0,0,0,0,0,130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,211,184,175,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_to_state_actions"); return self.$private("_lex_to_state_actions", "_lex_to_state_actions="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_to_state_actions='](Opal.large_array_unpack("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,7,0,7,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,7,0,7,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_from_state_actions"); return self.$private("_lex_from_state_actions", "_lex_from_state_actions="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_from_state_actions='](Opal.large_array_unpack("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,9,0,9,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,9,0,9,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0")); (function(self, $parent_nesting) { self.$attr_accessor("_lex_eof_trans"); return self.$private("_lex_eof_trans", "_lex_eof_trans="); })(Opal.get_singleton_class(self), $nesting); self['$_lex_eof_trans='](Opal.large_array_unpack("0,1,1,1,1,11,11,11,11,11,11,11,11,11,11,11,11,11,11,39,39,39,39,49,49,49,49,49,49,49,49,49,49,49,49,49,49,77,77,77,77,87,87,87,87,0,103,103,103,103,103,103,103,103,103,103,103,103,103,103,0,0,138,139,143,143,143,144,145,146,147,148,157,158,159,159,159,162,162,164,165,166,166,166,168,169,170,170,170,173,173,166,176,176,166,162,162,181,182,182,182,185,185,182,182,182,188,188,188,188,194,195,195,195,195,203,195,195,195,195,208,195,195,195,195,195,195,214,215,216,216,0,223,227,227,227,228,229,230,231,232,241,242,243,243,243,246,246,248,249,250,250,250,252,253,254,254,254,257,257,250,260,260,250,246,246,265,266,266,266,269,269,266,266,266,272,272,272,272,278,279,279,279,279,287,279,279,279,279,292,279,279,279,279,279,279,298,299,300,300,0,307,308,0,314,0,321,325,325,325,326,327,328,329,0,0,338,339,343,343,343,344,345,346,347,0,352,0,355,0,357,357,359,361,370,371,372,372,372,375,375,377,378,379,379,379,381,382,383,383,383,386,386,379,389,389,379,375,375,394,395,395,395,398,398,395,395,395,401,401,401,401,407,408,408,408,408,416,408,408,408,408,422,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,440,441,442,442")); (function(self, $parent_nesting) { return self.$attr_accessor("lex_start") })(Opal.get_singleton_class(self), $nesting); self['$lex_start='](60); (function(self, $parent_nesting) { return self.$attr_accessor("lex_error") })(Opal.get_singleton_class(self), $nesting); self['$lex_error='](0); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_interp_words") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_interp_words='](61); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_interp_string") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_interp_string='](131); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_plain_words") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_plain_words='](200); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_plain_string") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_plain_string='](203); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_interp_backslash_delimited") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_interp_backslash_delimited='](205); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_plain_backslash_delimited") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_plain_backslash_delimited='](214); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_interp_backslash_delimited_words") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_interp_backslash_delimited_words='](215); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_plain_backslash_delimited_words") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_plain_backslash_delimited_words='](225); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_regexp_modifiers") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_regexp_modifiers='](227); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_character") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_character='](229); (function(self, $parent_nesting) { return self.$attr_accessor("lex_en_unknown") })(Opal.get_singleton_class(self), $nesting); self['$lex_en_unknown='](60); $const_set($nesting[0], 'ESCAPES', $hash_rehash(new Map([["a".$ord(), "\u0007"], ["b".$ord(), "\b"], ["e".$ord(), "\u001b"], ["f".$ord(), "\f"], ["n".$ord(), "\n"], ["r".$ord(), "\r"], ["s".$ord(), " "], ["t".$ord(), "\t"], ["v".$ord(), "\v"], ["\\".$ord(), "\\"]])).$freeze()); $const_set($nesting[0], 'REGEXP_META_CHARACTERS', $send($$('Regexp'), 'union', $to_a("\\$()*+.<>?[]^{|}".$chars())).$freeze()); self.$attr_accessor("herebody_s"); self.$attr_accessor("source_buffer", "source_pts"); $def(self, '$initialize', function $$initialize(lexer, version) { var self = this; self.lexer = lexer; self.version = version; self._lex_actions = ($truthy(self.$class()['$respond_to?']("_lex_actions", true)) ? (self.$class().$send("_lex_actions")) : ([])); return self.$reset(); }); $def(self, '$reset', function $$reset() { var self = this; self.cs = self.$class().$lex_en_unknown(); self.literal_stack = []; self.escape_s = nil; self.escape = nil; self.herebody_s = nil; return (self.dedent_level = nil); }); $const_set($nesting[0], 'LEX_STATES', (new Map([["interp_string", self.$lex_en_interp_string()], ["interp_words", self.$lex_en_interp_words()], ["plain_string", self.$lex_en_plain_string()], ["plain_words", self.$lex_en_plain_string()]]))); $def(self, '$advance', function $$advance(p) { var $a, $b, self = this, klass = nil, _lex_trans_keys = nil, _lex_key_spans = nil, _lex_index_offsets = nil, _lex_indicies = nil, _lex_trans_targs = nil, _lex_trans_actions = nil, _lex_to_state_actions = nil, _lex_from_state_actions = nil, _lex_eof_trans = nil, _lex_actions = nil, pe = nil, eof = nil, testEof = nil, _slen = nil, _trans = nil, _keys = nil, _inds = nil, _acts = nil, _nacts = nil, _goto_level = nil, _resume = nil, _eof_trans = nil, _again = nil, _test_eof = nil, _out = nil, _trigger_goto = nil, _wide = nil, $ret_or_1 = nil, interp_var_kind = nil, current_literal = nil, line = nil, string = nil, lookahead = nil, token = nil, state = nil, unknown_options = nil, escape = nil; klass = self.$class(); _lex_trans_keys = klass.$send("_lex_trans_keys"); _lex_key_spans = klass.$send("_lex_key_spans"); _lex_index_offsets = klass.$send("_lex_index_offsets"); _lex_indicies = klass.$send("_lex_indicies"); _lex_trans_targs = klass.$send("_lex_trans_targs"); _lex_trans_actions = klass.$send("_lex_trans_actions"); _lex_to_state_actions = klass.$send("_lex_to_state_actions"); _lex_from_state_actions = klass.$send("_lex_from_state_actions"); _lex_eof_trans = klass.$send("_lex_eof_trans"); _lex_actions = self._lex_actions; pe = $rb_plus(self.$source_pts().$size(), 2); eof = pe; testEof = false; $b = nil, $a = $to_ary($b), (_slen = ($a[0] == null ? nil : $a[0])), (_trans = ($a[1] == null ? nil : $a[1])), (_keys = ($a[2] == null ? nil : $a[2])), (_inds = ($a[3] == null ? nil : $a[3])), (_acts = ($a[4] == null ? nil : $a[4])), (_nacts = ($a[5] == null ? nil : $a[5])), $b; _goto_level = 0; _resume = 10; _eof_trans = 15; _again = 20; _test_eof = 30; _out = 40; while ($truthy(true)) { _trigger_goto = false; if ($truthy($rb_le(_goto_level, 0))) { if ($eqeq(p, pe)) { _goto_level = _test_eof; continue; }; if ($eqeq(self.cs, 0)) { _goto_level = _out; continue; }; }; if ($truthy($rb_le(_goto_level, _resume))) { _acts = _lex_from_state_actions['$[]'](self.cs); _nacts = _lex_actions['$[]'](_acts); _acts = $rb_plus(_acts, 1); while ($truthy($rb_gt(_nacts, 0))) { _nacts = $rb_minus(_nacts, 1); _acts = $rb_plus(_acts, 1); switch (_lex_actions['$[]']($rb_minus(_acts, 1)).valueOf()) { case 24: self.ts = p; break; default: nil }; }; if ($truthy(_trigger_goto)) { continue }; _keys = self.cs['$<<'](1); _inds = _lex_index_offsets['$[]'](self.cs); _slen = _lex_key_spans['$[]'](self.cs); _wide = ($truthy(($ret_or_1 = self.$source_pts()['$[]'](p))) ? ($ret_or_1) : (0)); _trans = ((($truthy($rb_gt(_slen, 0)) && ($truthy($rb_le(_lex_trans_keys['$[]'](_keys), _wide)))) && ($truthy($rb_le(_wide, _lex_trans_keys['$[]']($rb_plus(_keys, 1)))))) ? (_lex_indicies['$[]']($rb_minus($rb_plus(_inds, _wide), _lex_trans_keys['$[]'](_keys)))) : (_lex_indicies['$[]']($rb_plus(_inds, _slen)))); }; if ($truthy($rb_le(_goto_level, _eof_trans))) { self.cs = _lex_trans_targs['$[]'](_trans); if ($neqeq(_lex_trans_actions['$[]'](_trans), 0)) { _acts = _lex_trans_actions['$[]'](_trans); _nacts = _lex_actions['$[]'](_acts); _acts = $rb_plus(_acts, 1); while ($truthy($rb_gt(_nacts, 0))) { _nacts = $rb_minus(_nacts, 1); _acts = $rb_plus(_acts, 1); if ($eqeqeq(0, ($ret_or_1 = _lex_actions['$[]']($rb_minus(_acts, 1))))) { self.newline_s = p; } else if ($eqeqeq(1, $ret_or_1)) { self.$unicode_points(p); } else if ($eqeqeq(2, $ret_or_1)) { self.$unescape_char(p); } else if ($eqeqeq(3, $ret_or_1)) { self.$diagnostic("fatal", "invalid_escape"); } else if ($eqeqeq(4, $ret_or_1)) { self.$read_post_meta_or_ctrl_char(p); } else if ($eqeqeq(5, $ret_or_1)) { self.$slash_c_char(); } else if ($eqeqeq(6, $ret_or_1)) { self.$slash_m_char(); } else if ($eqeqeq(7, $ret_or_1)) { self.$encode_escaped_char(p); } else if ($eqeqeq(8, $ret_or_1)) { self.escape = "\u007F"; } else if ($eqeqeq(9, $ret_or_1)) { self.$encode_escaped_char(p); } else if ($eqeqeq(10, $ret_or_1)) { self.escape = self.$encode_escape(self.$tok(self.escape_s, p).$to_i(8)['$%'](256)); } else if ($eqeqeq(11, $ret_or_1)) { self.escape = self.$encode_escape(self.$tok($rb_plus(self.escape_s, 1), p).$to_i(16)); } else if ($eqeqeq(12, $ret_or_1)) { self.$diagnostic("fatal", "invalid_hex_escape", nil, self.$range($rb_minus(self.escape_s, 1), $rb_plus(p, 2))); } else if ($eqeqeq(13, $ret_or_1)) { self.escape = self.$tok($rb_plus(self.escape_s, 1), p).$to_i(16).$chr($$$($$('Encoding'), 'UTF_8')); } else if ($eqeqeq(14, $ret_or_1)) { self.$check_invalid_escapes(p); } else if ($eqeqeq(15, $ret_or_1)) { self.$check_invalid_escapes(p); } else if ($eqeqeq(16, $ret_or_1)) { self.$diagnostic("fatal", "unterminated_unicode", nil, self.$range($rb_minus(p, 1), p)); } else if ($eqeqeq(17, $ret_or_1)) { self.$diagnostic("fatal", "escape_eof", nil, self.$range($rb_minus(p, 1), p)); } else if ($eqeqeq(18, $ret_or_1)) { self.escape_s = p; self.escape = nil; } else if ($eqeqeq(19, $ret_or_1)) { interp_var_kind = "gvar"; } else if ($eqeqeq(20, $ret_or_1)) { interp_var_kind = "cvar"; } else if ($eqeqeq(21, $ret_or_1)) { interp_var_kind = "ivar"; } else if ($eqeqeq(22, $ret_or_1)) { self.escape = nil; } else if ($eqeqeq(25, $ret_or_1)) { self.te = $rb_plus(p, 1); } else if ($eqeqeq(26, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_interp_code(current_literal); self.root_lexer_state = self.lexer.$class().$lex_en_expr_value(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(27, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_string_eol_check_eof(current_literal, pe); if ($truthy(current_literal['$heredoc?']())) { line = self.$extend_string_eol_heredoc_line(); if ($truthy(current_literal.$nest_and_try_closing(line, self.herebody_s, self.ts))) { self.herebody_s = self.te; p = $rb_minus(current_literal.$heredoc_e(), 1); self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { current_literal.$infer_indent_level(line); self.herebody_s = self.te; }; } else { if ($truthy(current_literal.$nest_and_try_closing(self.$tok(), self.ts, self.te))) { self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; p = self.$extend_string_eol_heredoc_intertwined(p); }; self.$extend_string_eol_words(current_literal, p);; } else if ($eqeqeq(28, $ret_or_1)) { self.te = $rb_plus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(29, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$extend_interp_digit_var();; } else if ($eqeqeq(30, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); current_literal = self.$literal(); self.$extend_interp_var(current_literal); self.$emit_interp_var(interp_var_kind);; } else if ($eqeqeq(31, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$extend_string_escaped();; } else if ($eqeqeq(32, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$literal().$extend_space(self.ts, self.te);; } else if ($eqeqeq(33, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(34, $ret_or_1)) { p = $rb_minus(self.te, 1);; self.$extend_string_escaped();; } else if ($eqeqeq(35, $ret_or_1)) { p = $rb_minus(self.te, 1);; string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(36, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_interp_code(current_literal); self.root_lexer_state = self.lexer.$class().$lex_en_expr_value(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(37, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_string_eol_check_eof(current_literal, pe); if ($truthy(current_literal['$heredoc?']())) { line = self.$extend_string_eol_heredoc_line(); if ($truthy(current_literal.$nest_and_try_closing(line, self.herebody_s, self.ts))) { self.herebody_s = self.te; p = $rb_minus(current_literal.$heredoc_e(), 1); self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { current_literal.$infer_indent_level(line); self.herebody_s = self.te; }; } else { if ($truthy(current_literal.$nest_and_try_closing(self.$tok(), self.ts, self.te))) { self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; p = self.$extend_string_eol_heredoc_intertwined(p); }; self.$extend_string_eol_words(current_literal, p);; } else if ($eqeqeq(38, $ret_or_1)) { self.te = $rb_plus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(39, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$extend_interp_digit_var();; } else if ($eqeqeq(40, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); current_literal = self.$literal(); self.$extend_interp_var(current_literal); self.$emit_interp_var(interp_var_kind);; } else if ($eqeqeq(41, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$extend_string_escaped();; } else if ($eqeqeq(42, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(43, $ret_or_1)) { p = $rb_minus(self.te, 1);; self.$extend_string_escaped();; } else if ($eqeqeq(44, $ret_or_1)) { p = $rb_minus(self.te, 1);; string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(45, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$extend_string_escaped();; } else if ($eqeqeq(46, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_string_eol_check_eof(current_literal, pe); if ($truthy(current_literal['$heredoc?']())) { line = self.$extend_string_eol_heredoc_line(); if ($truthy(current_literal.$nest_and_try_closing(line, self.herebody_s, self.ts))) { self.herebody_s = self.te; p = $rb_minus(current_literal.$heredoc_e(), 1); self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { current_literal.$infer_indent_level(line); self.herebody_s = self.te; }; } else { if ($truthy(current_literal.$nest_and_try_closing(self.$tok(), self.ts, self.te))) { self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; p = self.$extend_string_eol_heredoc_intertwined(p); }; self.$extend_string_eol_words(current_literal, p);; } else if ($eqeqeq(47, $ret_or_1)) { self.te = $rb_plus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(48, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$literal().$extend_space(self.ts, self.te);; } else if ($eqeqeq(49, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(50, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_string_eol_check_eof(current_literal, pe); if ($truthy(current_literal['$heredoc?']())) { line = self.$extend_string_eol_heredoc_line(); if ($truthy(current_literal.$nest_and_try_closing(line, self.herebody_s, self.ts))) { self.herebody_s = self.te; p = $rb_minus(current_literal.$heredoc_e(), 1); self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { current_literal.$infer_indent_level(line); self.herebody_s = self.te; }; } else { if ($truthy(current_literal.$nest_and_try_closing(self.$tok(), self.ts, self.te))) { self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; p = self.$extend_string_eol_heredoc_intertwined(p); }; self.$extend_string_eol_words(current_literal, p);; } else if ($eqeqeq(51, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$extend_string_escaped();; } else if ($eqeqeq(52, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_string_eol_check_eof(current_literal, pe); if ($truthy(current_literal['$heredoc?']())) { line = self.$extend_string_eol_heredoc_line(); if ($truthy(current_literal.$nest_and_try_closing(line, self.herebody_s, self.ts))) { self.herebody_s = self.te; p = $rb_minus(current_literal.$heredoc_e(), 1); self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { current_literal.$infer_indent_level(line); self.herebody_s = self.te; }; } else { if ($truthy(current_literal.$nest_and_try_closing(self.$tok(), self.ts, self.te))) { self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; p = self.$extend_string_eol_heredoc_intertwined(p); }; self.$extend_string_eol_words(current_literal, p);; } else if ($eqeqeq(53, $ret_or_1)) { self.te = $rb_plus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(54, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(55, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_interp_code(current_literal); self.root_lexer_state = self.lexer.$class().$lex_en_expr_value(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(56, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_string_eol_check_eof(current_literal, pe); if ($truthy(current_literal['$heredoc?']())) { line = self.$extend_string_eol_heredoc_line(); if ($truthy(current_literal.$nest_and_try_closing(line, self.herebody_s, self.ts))) { self.herebody_s = self.te; p = $rb_minus(current_literal.$heredoc_e(), 1); self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { current_literal.$infer_indent_level(line); self.herebody_s = self.te; }; } else { if ($truthy(current_literal.$nest_and_try_closing(self.$tok(), self.ts, self.te))) { self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; p = self.$extend_string_eol_heredoc_intertwined(p); }; self.$extend_string_eol_words(current_literal, p);; } else if ($eqeqeq(57, $ret_or_1)) { self.te = $rb_plus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(58, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$extend_interp_digit_var();; } else if ($eqeqeq(59, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); current_literal = self.$literal(); self.$extend_interp_var(current_literal); self.$emit_interp_var(interp_var_kind);; } else if ($eqeqeq(60, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(61, $ret_or_1)) { p = $rb_minus(self.te, 1);; string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(62, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_string_eol_check_eof(current_literal, pe); if ($truthy(current_literal['$heredoc?']())) { line = self.$extend_string_eol_heredoc_line(); if ($truthy(current_literal.$nest_and_try_closing(line, self.herebody_s, self.ts))) { self.herebody_s = self.te; p = $rb_minus(current_literal.$heredoc_e(), 1); self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { current_literal.$infer_indent_level(line); self.herebody_s = self.te; }; } else { if ($truthy(current_literal.$nest_and_try_closing(self.$tok(), self.ts, self.te))) { self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; p = self.$extend_string_eol_heredoc_intertwined(p); }; self.$extend_string_eol_words(current_literal, p);; } else if ($eqeqeq(63, $ret_or_1)) { self.te = $rb_plus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(64, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_interp_code(current_literal); self.root_lexer_state = self.lexer.$class().$lex_en_expr_value(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(65, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_string_eol_check_eof(current_literal, pe); if ($truthy(current_literal['$heredoc?']())) { line = self.$extend_string_eol_heredoc_line(); if ($truthy(current_literal.$nest_and_try_closing(line, self.herebody_s, self.ts))) { self.herebody_s = self.te; p = $rb_minus(current_literal.$heredoc_e(), 1); self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { current_literal.$infer_indent_level(line); self.herebody_s = self.te; }; } else { if ($truthy(current_literal.$nest_and_try_closing(self.$tok(), self.ts, self.te))) { self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; p = self.$extend_string_eol_heredoc_intertwined(p); }; self.$extend_string_eol_words(current_literal, p);; } else if ($eqeqeq(66, $ret_or_1)) { self.te = $rb_plus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(67, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$extend_interp_digit_var();; } else if ($eqeqeq(68, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); current_literal = self.$literal(); self.$extend_interp_var(current_literal); self.$emit_interp_var(interp_var_kind);; } else if ($eqeqeq(69, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$literal().$extend_space(self.ts, self.te);; } else if ($eqeqeq(70, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(71, $ret_or_1)) { p = $rb_minus(self.te, 1);; string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(72, $ret_or_1)) { self.te = $rb_plus(p, 1); current_literal = self.$literal(); self.$extend_string_eol_check_eof(current_literal, pe); if ($truthy(current_literal['$heredoc?']())) { line = self.$extend_string_eol_heredoc_line(); if ($truthy(current_literal.$nest_and_try_closing(line, self.herebody_s, self.ts))) { self.herebody_s = self.te; p = $rb_minus(current_literal.$heredoc_e(), 1); self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { current_literal.$infer_indent_level(line); self.herebody_s = self.te; }; } else { if ($truthy(current_literal.$nest_and_try_closing(self.$tok(), self.ts, self.te))) { self.cs = self.$pop_literal(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; }; p = self.$extend_string_eol_heredoc_intertwined(p); }; self.$extend_string_eol_words(current_literal, p);; } else if ($eqeqeq(73, $ret_or_1)) { self.te = $rb_plus(p, 1); string = self.$tok(); lookahead = self.$extend_string_slice_end(lookahead); current_literal = self.$literal(); if (($not(current_literal['$heredoc?']()) && ($truthy((token = current_literal.$nest_and_try_closing(string, self.ts, self.te, lookahead)))))) { if ($eqeq(token['$[]'](0), "tLABEL_END")) { p = $rb_plus(p, 1); self.$pop_literal(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_labelarg(); } else if ($truthy((state = self.$pop_literal()))) { self.cs = state }; p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;; } else { self.$extend_string_for_token_range(current_literal, string) };; } else if ($eqeqeq(74, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$literal().$extend_space(self.ts, self.te);; } else if ($eqeqeq(75, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$emit("tREGEXP_OPT", self.$tok(self.ts, $rb_minus(self.te, 1)), self.ts, $rb_minus(self.te, 1)); p = $rb_minus(p, 1); self.root_lexer_state = self.lexer.$class().$lex_en_expr_end(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(76, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); unknown_options = self.$tok().$scan(/[^imxouesn]/); if ($truthy(unknown_options['$any?']())) { self.$diagnostic("error", "regexp_options", (new Map([["options", unknown_options.$join()]]))) }; self.$emit("tREGEXP_OPT"); self.root_lexer_state = self.lexer.$class().$lex_en_expr_end(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(77, $ret_or_1)) { self.te = $rb_plus(p, 1); escape = $$('ESCAPE_WHITESPACE')['$[]'](self.$source_buffer().$slice($rb_plus(self.ts, 1), 1)); self.$diagnostic("warning", "invalid_escape_use", (new Map([["escape", escape]])), self.$range()); p = $rb_minus(self.ts, 1); self.root_lexer_state = self.lexer.$class().$lex_en_expr_end(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(78, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); self.$emit_character_constant(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_end(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(79, $ret_or_1)) { self.te = p; p = $rb_minus(p, 1); p = $rb_minus(self.ts, 1); self.root_lexer_state = self.lexer.$class().$lex_en_expr_end(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(80, $ret_or_1)) { p = $rb_minus(self.te, 1);; self.$emit_character_constant(); self.root_lexer_state = self.lexer.$class().$lex_en_expr_end(); p = $rb_plus(p, 1); _trigger_goto = true; _goto_level = _out; break;;; } else if ($eqeqeq(81, $ret_or_1)) { self.te = $rb_plus(p, 1); self.$raise("bug");; } else { nil }; }; }; if ($truthy(_trigger_goto)) { continue }; }; if ($truthy($rb_le(_goto_level, _again))) { _acts = _lex_to_state_actions['$[]'](self.cs); _nacts = _lex_actions['$[]'](_acts); _acts = $rb_plus(_acts, 1); while ($truthy($rb_gt(_nacts, 0))) { _nacts = $rb_minus(_nacts, 1); _acts = $rb_plus(_acts, 1); switch (_lex_actions['$[]']($rb_minus(_acts, 1)).valueOf()) { case 23: self.ts = nil; break; default: nil }; }; if ($truthy(_trigger_goto)) { continue }; if ($eqeq(self.cs, 0)) { _goto_level = _out; continue; }; p = $rb_plus(p, 1); if ($neqeq(p, pe)) { _goto_level = _resume; continue; }; }; if ($truthy($rb_le(_goto_level, _test_eof))) { if ($eqeq(p, eof)) { if ($truthy($rb_gt(_lex_eof_trans['$[]'](self.cs), 0))) { _trans = $rb_minus(_lex_eof_trans['$[]'](self.cs), 1); _goto_level = _eof_trans; continue; } } }; if ($truthy($rb_le(_goto_level, _out))) { break }; };; if ($truthy(false)) { testEof }; return [p, self.root_lexer_state]; }); $def(self, '$read_character_constant', function $$read_character_constant(p) { var self = this; self.cs = self.$class().$lex_en_character(); return self.$advance(p); }); $def(self, '$push_literal', function $$push_literal($a) { var $post_args, args, self = this, new_literal = nil; $post_args = $slice(arguments); args = $post_args; new_literal = $send($$$($$$($$('Parser'), 'Lexer'), 'Literal'), 'new', [self].concat($to_a(args))); self.literal_stack.$push(new_literal); return (self.cs = self.$next_state_for_literal(new_literal)); }, -1); $def(self, '$next_state_for_literal', function $$next_state_for_literal(literal) { var self = this; if (($truthy(literal['$words?']()) && ($truthy(literal['$backslash_delimited?']())))) { if ($truthy(literal['$interpolate?']())) { return self.$class().$lex_en_interp_backslash_delimited_words() } else { return self.$class().$lex_en_plain_backslash_delimited_words() } } else if (($truthy(literal['$words?']()) && ($not(literal['$backslash_delimited?']())))) { if ($truthy(literal['$interpolate?']())) { return self.$class().$lex_en_interp_words() } else { return self.$class().$lex_en_plain_words() } } else if (($not(literal['$words?']()) && ($truthy(literal['$backslash_delimited?']())))) { if ($truthy(literal['$interpolate?']())) { return self.$class().$lex_en_interp_backslash_delimited() } else { return self.$class().$lex_en_plain_backslash_delimited() } } else if ($truthy(literal['$interpolate?']())) { return self.$class().$lex_en_interp_string() } else { return self.$class().$lex_en_plain_string() } }); $def(self, '$continue_lexing', function $$continue_lexing(current_literal) { var self = this; return (self.cs = self.$next_state_for_literal(current_literal)) }); $def(self, '$literal', function $$literal() { var self = this; return self.literal_stack.$last() }); $def(self, '$pop_literal', function $$pop_literal() { var self = this, old_literal = nil; old_literal = self.literal_stack.$pop(); self.dedent_level = old_literal.$dedent_level(); if ($eqeq(old_literal.$type(), "tREGEXP_BEG")) { self.root_lexer_state = self.lexer.$class().$lex_en_inside_string(); return self.$class().$lex_en_regexp_modifiers(); } else { self.root_lexer_state = self.lexer.$class().$lex_en_expr_end(); return nil; }; }); $def(self, '$close_interp_on_current_literal', function $$close_interp_on_current_literal(p) { var self = this, current_literal = nil; current_literal = self.$literal(); if ($truthy(current_literal)) { if ($truthy(current_literal.$end_interp_brace_and_try_closing())) { if ($truthy(self['$version?'](18, 19))) { self.$emit("tRCURLY", "}".$freeze(), $rb_minus(p, 1), p); self.lexer.$cond().$lexpop(); self.lexer.$cmdarg().$lexpop(); } else { self.$emit("tSTRING_DEND", "}".$freeze(), $rb_minus(p, 1), p) }; if ($truthy(current_literal.$saved_herebody_s())) { self.herebody_s = current_literal.$saved_herebody_s() }; self.$continue_lexing(current_literal); return true; } else { return nil } } else { return nil }; }); $def(self, '$dedent_level', function $$dedent_level() { var $a, self = this, dedent_level = nil; $a = [self.dedent_level, nil], (dedent_level = $a[0]), (self.dedent_level = $a[1]), $a; return dedent_level; }); $def(self, '$on_newline', function $$on_newline(p) { var self = this; if ($truthy(self.herebody_s)) { p = self.herebody_s; self.herebody_s = nil; }; return p; }); self.$protected(); $def(self, '$eof_codepoint?', function $LexerStrings_eof_codepoint$ques$1(point) { return [4, 26, 0]['$include?'](point) }); $def(self, '$version?', function $LexerStrings_version$ques$2($a) { var $post_args, versions, self = this; $post_args = $slice(arguments); versions = $post_args; return versions['$include?'](self.version); }, -1); $def(self, '$tok', function $$tok(s, e) { var self = this; if (s == null) s = self.ts; if (e == null) e = self.te; return self.source_buffer.$slice(s, $rb_minus(e, s)); }, -1); $def(self, '$range', function $$range(s, e) { var self = this; if (s == null) s = self.ts; if (e == null) e = self.te; return $$$($$$($$('Parser'), 'Source'), 'Range').$new(self.source_buffer, s, e); }, -1); $def(self, '$emit', function $$emit(type, value, s, e) { var self = this; if (value == null) value = self.$tok(); if (s == null) s = self.ts; if (e == null) e = self.te; return self.lexer.$send("emit", type, value, s, e); }, -2); $def(self, '$diagnostic', function $$diagnostic(type, reason, arguments$, location, highlights) { var self = this; if (arguments$ == null) arguments$ = nil; if (location == null) location = self.$range(); if (highlights == null) highlights = []; return self.lexer.$send("diagnostic", type, reason, arguments$, location, highlights); }, -3); $def(self, '$cond', function $$cond() { var self = this; return self.lexer.$cond() }); $def(self, '$emit_invalid_escapes?', function $LexerStrings_emit_invalid_escapes$ques$3() { var self = this; if ($truthy($rb_lt(self.version, 32))) { return true }; if ($truthy(self.$literal()['$nil?']())) { return true }; return self.$literal()['$regexp?']()['$!'](); }); $def(self, '$extend_string_escaped', function $$extend_string_escaped() { var self = this, current_literal = nil, escaped_char = nil, $ret_or_1 = nil; current_literal = self.$literal(); escaped_char = self.$source_buffer().$slice(self.escape_s, 1).$chr(); if ($truthy(current_literal['$munge_escape?'](escaped_char))) { if (($truthy(current_literal['$regexp?']()) && ($truthy($$('REGEXP_META_CHARACTERS').$match(escaped_char))))) { return current_literal.$extend_string(self.$tok(), self.ts, self.te) } else { return current_literal.$extend_string(escaped_char, self.ts, self.te) } } else if (($truthy(current_literal['$squiggly_heredoc?']()) && ($eqeq(escaped_char, "\n".$freeze())))) { return current_literal.$extend_string(self.$tok(), self.ts, self.te) } else if (($truthy(current_literal['$supports_line_continuation_via_slash?']()) && ($eqeq(escaped_char, "\n".$freeze())))) { return current_literal.$extend_string(self.$tok().$gsub("\\\n".$freeze(), "".$freeze()), self.ts, self.te) } else if ((($truthy(current_literal['$regexp?']()) && ($truthy($rb_ge(self.version, 31)))) && ($truthy(["c", "C", "m", "M"]['$include?'](escaped_char))))) { return current_literal.$extend_string(self.escape, self.ts, self.te) } else if ($truthy(current_literal['$regexp?']())) { return current_literal.$extend_string(self.$tok().$gsub("\\\n".$freeze(), "".$freeze()), self.ts, self.te) } else { return current_literal.$extend_string(($truthy(($ret_or_1 = self.escape)) ? ($ret_or_1) : (self.$tok())), self.ts, self.te) }; }); $def(self, '$extend_interp_code', function $$extend_interp_code(current_literal) { var $a, self = this; current_literal.$flush_string(); current_literal.$extend_content(); self.$emit("tSTRING_DBEG", "\#{".$freeze()); if ($truthy(current_literal['$heredoc?']())) { current_literal['$saved_herebody_s='](self.herebody_s); self.herebody_s = nil; }; current_literal.$start_interp_brace(); return ($a = [true], $send(self.lexer, 'command_start=', $a), $a[$a.length - 1]); }); $def(self, '$extend_interp_digit_var', function $$extend_interp_digit_var() { var self = this, message = nil; if ($truthy($rb_ge(self.version, 27))) { return self.$literal().$extend_string(self.$tok(), self.ts, self.te) } else { message = ($truthy(self.$tok()['$start_with?']("\#@@")) ? ("cvar_name") : ("ivar_name")); return self.$diagnostic("error", message, (new Map([["name", self.$tok($rb_plus(self.ts, 1), self.te)]])), self.$range($rb_plus(self.ts, 1), self.te)); } }); $def(self, '$extend_string_eol_check_eof', function $$extend_string_eol_check_eof(current_literal, pe) { var self = this; if ($eqeq(self.te, pe)) { return self.$diagnostic("fatal", "string_eof", nil, self.$range(current_literal.$str_s(), $rb_plus(current_literal.$str_s(), 1))) } else { return nil } }); $def(self, '$extend_string_eol_heredoc_line', function $$extend_string_eol_heredoc_line() { var self = this, line = nil; line = self.$tok(self.herebody_s, self.ts).$gsub(/\r+$/, "".$freeze()); if ($truthy(self['$version?'](18, 19, 20))) { line = line.$gsub(/\r.*$/, "".$freeze()) }; return line; }); $def(self, '$extend_string_eol_heredoc_intertwined', function $$extend_string_eol_heredoc_intertwined(p) { var self = this; if ($truthy(self.herebody_s)) { p = $rb_minus(self.herebody_s, 1); self.herebody_s = nil; }; return p; }); $def(self, '$extend_string_eol_words', function $$extend_string_eol_words(current_literal, p) { var self = this; if (($truthy(current_literal['$words?']()) && ($not(self['$eof_codepoint?'](self.$source_pts()['$[]'](p)))))) { return current_literal.$extend_space(self.ts, self.te) } else { current_literal.$extend_string(self.$tok(), self.ts, self.te); return current_literal.$flush_string(); } }); $def(self, '$extend_string_slice_end', function $$extend_string_slice_end(lookahead) { var self = this; if (($truthy($rb_ge(self.version, 22)) && ($not(self.$cond()['$active?']())))) { lookahead = self.$source_buffer().$slice(self.te, 2) }; return lookahead; }); $def(self, '$extend_string_for_token_range', function $$extend_string_for_token_range(current_literal, string) { var self = this; return current_literal.$extend_string(string, self.ts, self.te) }); $def(self, '$encode_escape', function $$encode_escape(ord) { var self = this; return ord.$chr().$force_encoding(self.$source_buffer().$source().$encoding()) }); $def(self, '$unescape_char', function $$unescape_char(p) { var self = this, codepoint = nil; codepoint = self.$source_pts()['$[]']($rb_minus(p, 1)); if (($truthy($rb_ge(self.version, 30)) && (($eqeq(codepoint, 117) || ($eqeq(codepoint, 85)))))) { self.$diagnostic("fatal", "invalid_escape") }; if ($truthy((self.escape = $$('ESCAPES')['$[]'](codepoint))['$nil?']())) { return (self.escape = self.$encode_escape(self.$source_buffer().$slice($rb_minus(p, 1), 1))) } else { return nil }; }); $def(self, '$unicode_points', function $$unicode_points(p) { var self = this, codepoints = nil, codepoint_s = nil, spaces_p = nil; self.escape = ""; codepoints = self.$tok($rb_plus(self.escape_s, 2), $rb_minus(p, 1)); codepoint_s = $rb_plus(self.escape_s, 2); if ($truthy($rb_lt(self.version, 24))) { if (($truthy(codepoints['$start_with?'](" ")) || ($truthy(codepoints['$start_with?']("\t"))))) { self.$diagnostic("fatal", "invalid_unicode_escape", nil, self.$range($rb_plus(self.escape_s, 2), $rb_plus(self.escape_s, 3))) }; if ($truthy((spaces_p = codepoints.$index(/[ \t]{2}/)))) { self.$diagnostic("fatal", "invalid_unicode_escape", nil, self.$range($rb_plus($rb_plus(codepoint_s, spaces_p), 1), $rb_plus($rb_plus(codepoint_s, spaces_p), 2))) }; if (($truthy(codepoints['$end_with?'](" ")) || ($truthy(codepoints['$end_with?']("\t"))))) { self.$diagnostic("fatal", "invalid_unicode_escape", nil, self.$range($rb_minus(p, 1), p)) }; }; return (function(){try { var $t_break = $thrower('break'); return $send(codepoints.$scan(/([0-9a-fA-F]+)|([ \t]+)/), 'each', [], function $$4($mlhs_tmp1){var $a, $b, self = $$4.$$s == null ? this : $$4.$$s, codepoint_str = nil, spaces = nil, codepoint = nil; if (self.escape == null) self.escape = nil; if ($mlhs_tmp1 == null) $mlhs_tmp1 = nil; $b = $mlhs_tmp1, $a = $to_ary($b), (codepoint_str = ($a[0] == null ? nil : $a[0])), (spaces = ($a[1] == null ? nil : $a[1])), $b; if ($truthy(spaces)) { return (codepoint_s = $rb_plus(codepoint_s, spaces.$length())) } else { codepoint = codepoint_str.$to_i(16); if ($truthy($rb_ge(codepoint, 1114112))) { self.$diagnostic("error", "unicode_point_too_large", nil, self.$range(codepoint_s, $rb_plus(codepoint_s, codepoint_str.$length()))); $t_break.$throw(nil, $$4.$$is_lambda); }; self.escape = $rb_plus(self.escape, codepoint.$chr($$$($$('Encoding'), 'UTF_8'))); return (codepoint_s = $rb_plus(codepoint_s, codepoint_str.$length())); };}, {$$s: self, $$has_top_level_mlhs_arg: true})} catch($e) { if ($e === $t_break) return $e.$v; throw $e; } finally {$t_break.is_orphan = true;}})(); }); $def(self, '$read_post_meta_or_ctrl_char', function $$read_post_meta_or_ctrl_char(p) { var self = this; self.escape = self.$source_buffer().$slice($rb_minus(p, 1), 1).$chr(); if (($truthy($rb_ge(self.version, 27)) && (($truthy($range(0, 8, false)['$include?'](self.escape.$ord())) || ($truthy($range(14, 31, false)['$include?'](self.escape.$ord()))))))) { return self.$diagnostic("fatal", "invalid_escape") } else { return nil }; }); $def(self, '$extend_interp_var', function $$extend_interp_var(current_literal) { var self = this; current_literal.$flush_string(); current_literal.$extend_content(); self.$emit("tSTRING_DVAR", nil, self.ts, $rb_plus(self.ts, 1)); return self.ts; }); $def(self, '$emit_interp_var', function $$emit_interp_var(interp_var_kind) { var self = this; switch (interp_var_kind.valueOf()) { case "cvar": return self.lexer.$send("emit_class_var", $rb_plus(self.ts, 1), self.te) case "ivar": return self.lexer.$send("emit_instance_var", $rb_plus(self.ts, 1), self.te) case "gvar": return self.lexer.$send("emit_global_var", $rb_plus(self.ts, 1), self.te) default: return nil } }); $def(self, '$encode_escaped_char', function $$encode_escaped_char(p) { var self = this; return (self.escape = self.$encode_escape(self.$tok($rb_minus(p, 2), p).$to_i(16))) }); $def(self, '$slash_c_char', function $$slash_c_char() { var self = this; return (self.escape = self.$encode_escape(self.escape['$[]'](0).$ord()['$&'](159))) }); $def(self, '$slash_m_char', function $$slash_m_char() { var self = this; return (self.escape = self.$encode_escape(self.escape['$[]'](0).$ord()['$|'](128))) }); $def(self, '$emit_character_constant', function $$emit_character_constant() { var self = this, value = nil, $ret_or_1 = nil; value = ($truthy(($ret_or_1 = self.escape)) ? ($ret_or_1) : (self.$tok($rb_plus(self.ts, 1)))); if ($truthy(self['$version?'](18))) { return self.$emit("tINTEGER", value.$getbyte(0)) } else { return self.$emit("tCHARACTER", value) }; }); $def(self, '$check_ambiguous_slash', function $$check_ambiguous_slash(tm) { var self = this; if ($eqeq(self.$tok(tm, $rb_plus(tm, 1)), "/".$freeze())) { if ($truthy($rb_lt(self.version, 30))) { return self.$diagnostic("warning", "ambiguous_literal", nil, self.$range(tm, $rb_plus(tm, 1))) } else { return self.$diagnostic("warning", "ambiguous_regexp", nil, self.$range(tm, $rb_plus(tm, 1))) } } else { return nil } }); $def(self, '$check_invalid_escapes', function $$check_invalid_escapes(p) { var self = this; if ($truthy(self['$emit_invalid_escapes?']())) { return self.$diagnostic("fatal", "invalid_unicode_escape", nil, self.$range($rb_minus(self.escape_s, 1), p)) } else { return nil } }); return $const_set($nesting[0], 'ESCAPE_WHITESPACE', (new Map([[" ", "\\s"], ["\r", "\\r"], ["\n", "\\n"], ["\t", "\\t"], ["\v", "\\v"], ["\f", "\\f"]]))); })($$('Parser'), null, $nesting) }; Opal.modules["parser/lexer/literal"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $enc = Opal.enc, $truthy = Opal.truthy, $rb_plus = Opal.rb_plus, $to_ary = Opal.to_ary, $def = Opal.def, $return_ivar = Opal.return_ivar, $eqeq = Opal.eqeq, $rb_minus = Opal.rb_minus, $neqeq = Opal.neqeq, $not = Opal.not, $send = Opal.send, $eqeqeq = Opal.eqeqeq, $rb_gt = Opal.rb_gt, $thrower = Opal.thrower, $assign_ivar_val = Opal.assign_ivar_val, $regexp = Opal.regexp, $nesting = [], nil = Opal.nil; Opal.add_stubs('ord,attr_reader,attr_accessor,coerce_encoding,include?,send,+,[],fetch,==,!,heredoc?,start_with?,freeze,clear_buffer,emit_start_tok,type,=~,words?,delimiter?,-,extend_space,!=,flush_string,emit,each_char,===,%,>,nil?,<<,empty?,extend_content,protected,end_with?,all?,bytes,sub,escape,lstrip,b,dup,force_encoding,encoding,source,source_buffer,length'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Literal'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.lexer = $proto.start_tok = $proto.str_type = $proto.monolithic = $proto.heredoc_e = $proto.dedent_body = $proto.end_delim = $proto.start_delim = $proto.nesting = $proto.label_allowed = $proto.buffer = $proto.str_s = $proto.interp_braces = $proto.buffer_s = $proto.buffer_e = $proto.space_emitted = $proto.interpolate = $proto.indent = nil; $const_set($nesting[0], 'DELIMITERS', (new Map([["(", $enc(")", "ASCII-8BIT")], ["[", $enc("]", "ASCII-8BIT")], ["{", $enc("}", "ASCII-8BIT")], ["<", $enc(">", "ASCII-8BIT")]]))); $const_set($nesting[0], 'SPACE', $enc(" ", "ASCII-8BIT").$ord()); $const_set($nesting[0], 'TAB', $enc("\t", "ASCII-8BIT").$ord()); $const_set($nesting[0], 'TYPES', (new Map([["'", ["tSTRING_BEG", false]], ["<<'", ["tSTRING_BEG", false]], ["%q", ["tSTRING_BEG", false]], ["\"", ["tSTRING_BEG", true]], ["<<\"", ["tSTRING_BEG", true]], ["%", ["tSTRING_BEG", true]], ["%Q", ["tSTRING_BEG", true]], ["%w", ["tQWORDS_BEG", false]], ["%W", ["tWORDS_BEG", true]], ["%i", ["tQSYMBOLS_BEG", false]], ["%I", ["tSYMBOLS_BEG", true]], [":'", ["tSYMBEG", false]], ["%s", ["tSYMBEG", false]], [":\"", ["tSYMBEG", true]], ["/", ["tREGEXP_BEG", true]], ["%r", ["tREGEXP_BEG", true]], ["%x", ["tXSTRING_BEG", true]], ["`", ["tXSTRING_BEG", true]], ["<<`", ["tXSTRING_BEG", true]]]))); self.$attr_reader("heredoc_e", "str_s", "dedent_level"); self.$attr_accessor("saved_herebody_s"); $def(self, '$initialize', function $$initialize(lexer, str_type, delimiter, str_s, heredoc_e, indent, dedent_body, label_allowed) { var $a, $b, self = this, $ret_or_1 = nil, $ret_or_2 = nil; if (heredoc_e == null) heredoc_e = nil; if (indent == null) indent = false; if (dedent_body == null) dedent_body = false; if (label_allowed == null) label_allowed = false; self.lexer = lexer; self.nesting = 1; str_type = self.$coerce_encoding(str_type); delimiter = self.$coerce_encoding(delimiter); if (!$truthy($$('TYPES')['$include?'](str_type))) { lexer.$send("diagnostic", "error", "unexpected_percent_str", (new Map([["type", str_type]])), self.lexer.$send("range", str_s, $rb_plus(str_s, 2))) }; self.str_type = str_type; self.str_s = str_s; $b = $$('TYPES')['$[]'](str_type), $a = $to_ary($b), (self.start_tok = ($a[0] == null ? nil : $a[0])), (self.interpolate = ($a[1] == null ? nil : $a[1])), $b; self.start_delim = ($truthy($$('DELIMITERS')['$include?'](delimiter)) ? (delimiter) : (nil)); self.end_delim = $$('DELIMITERS').$fetch(delimiter, delimiter); self.heredoc_e = heredoc_e; self.indent = indent; self.label_allowed = label_allowed; self.dedent_body = dedent_body; self.dedent_level = nil; self.interp_braces = 0; self.space_emitted = true; self.monolithic = ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.start_tok['$==']("tSTRING_BEG"))) ? ([$enc("'", "ASCII-8BIT"), $enc("\"", "ASCII-8BIT")]['$include?'](str_type)) : ($ret_or_2)))) ? (self['$heredoc?']()['$!']()) : ($ret_or_1)); if ($truthy(self.str_type['$start_with?']($enc("%", "ASCII-8BIT").$freeze()))) { self.str_type = $rb_plus(self.str_type, delimiter) }; self.$clear_buffer(); if ($truthy(self.monolithic)) { return nil } else { return self.$emit_start_tok() }; }, -5); $def(self, '$interpolate?', $return_ivar("interpolate")); $def(self, '$words?', function $Literal_words$ques$1() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil, $ret_or_3 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = ($truthy(($ret_or_3 = self.$type()['$==']("tWORDS_BEG"))) ? ($ret_or_3) : (self.$type()['$==']("tQWORDS_BEG"))))) ? ($ret_or_2) : (self.$type()['$==']("tSYMBOLS_BEG")))))) { return $ret_or_1 } else { return self.$type()['$==']("tQSYMBOLS_BEG") } }); $def(self, '$regexp?', function $Literal_regexp$ques$2() { var self = this; return self.$type()['$==']("tREGEXP_BEG") }); $def(self, '$heredoc?', function $Literal_heredoc$ques$3() { var self = this; return self.heredoc_e['$!']()['$!']() }); $def(self, '$plain_heredoc?', function $Literal_plain_heredoc$ques$4() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$heredoc?']()))) { return self.dedent_body['$!']() } else { return $ret_or_1 } }); $def(self, '$squiggly_heredoc?', function $Literal_squiggly_heredoc$ques$5() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$heredoc?']()))) { return self.dedent_body } else { return $ret_or_1 } }); $def(self, '$backslash_delimited?', function $Literal_backslash_delimited$ques$6() { var self = this; return self.end_delim['$==']($enc("\\", "ASCII-8BIT").$freeze()) }); $def(self, '$type', $return_ivar("start_tok")); $def(self, '$munge_escape?', function $Literal_munge_escape$ques$7(character) { var self = this; character = self.$coerce_encoding(character); if (($truthy(self['$words?']()) && ($truthy(character['$=~'](/[ \t\v\r\f\n]/))))) { return true } else { return [$enc("\\", "ASCII-8BIT").$freeze(), self.start_delim, self.end_delim]['$include?'](character) }; }); $def(self, '$nest_and_try_closing', function $$nest_and_try_closing(delimiter, ts, te, lookahead) { var self = this; if (lookahead == null) lookahead = nil; delimiter = self.$coerce_encoding(delimiter); if (($truthy(self.start_delim) && ($eqeq(self.start_delim, delimiter)))) { self.nesting = $rb_plus(self.nesting, 1) } else if ($truthy(self['$delimiter?'](delimiter))) { self.nesting = $rb_minus(self.nesting, 1) }; if ($eqeq(self.nesting, 0)) { if ($truthy(self['$words?']())) { self.$extend_space(ts, ts) }; if ((((($truthy(lookahead) && ($truthy(self.label_allowed))) && ($eqeq(lookahead['$[]'](0), $enc(":", "ASCII-8BIT")))) && ($neqeq(lookahead['$[]'](1), $enc(":", "ASCII-8BIT")))) && ($eqeq(self.start_tok, "tSTRING_BEG")))) { self.$flush_string(); return self.$emit("tLABEL_END", self.end_delim, ts, $rb_plus(te, 1)); } else if ($truthy(self.monolithic)) { return self.$emit("tSTRING", self.buffer, self.str_s, te) } else { if (!$truthy(self['$heredoc?']())) { self.$flush_string() }; return self.$emit("tSTRING_END", self.end_delim, ts, te); }; } else { return nil }; }, -4); $def(self, '$infer_indent_level', function $$infer_indent_level(line) { var self = this, indent_level = nil; if ($not(self.dedent_body)) { return nil }; indent_level = 0; return (function(){try { var $t_break = $thrower('break'); return $send(line, 'each_char', [], function $$8(char$){var self = $$8.$$s == null ? this : $$8.$$s, $ret_or_1 = nil; if (self.dedent_level == null) self.dedent_level = nil; if (char$ == null) char$ = nil; if ($eqeqeq(" ", ($ret_or_1 = char$))) { return (indent_level = $rb_plus(indent_level, 1)) } else if ($eqeqeq("\t", $ret_or_1)) { return (indent_level = $rb_plus(indent_level, $rb_minus(8, indent_level['$%'](8)))) } else { if (($truthy(self.dedent_level['$nil?']()) || ($truthy($rb_gt(self.dedent_level, indent_level))))) { self.dedent_level = indent_level }; $t_break.$throw(nil, $$8.$$is_lambda); };}, {$$s: self})} catch($e) { if ($e === $t_break) return $e.$v; throw $e; } finally {$t_break.is_orphan = true;}})(); }); $def(self, '$start_interp_brace', function $$start_interp_brace() { var self = this; return (self.interp_braces = $rb_plus(self.interp_braces, 1)) }); $def(self, '$end_interp_brace_and_try_closing', function $$end_interp_brace_and_try_closing() { var self = this; self.interp_braces = $rb_minus(self.interp_braces, 1); return self.interp_braces['$=='](0);; }); $def(self, '$extend_string', function $$extend_string(string, ts, te) { var self = this, $ret_or_1 = nil; self.buffer_s = ($truthy(($ret_or_1 = self.buffer_s)) ? ($ret_or_1) : (ts)); self.buffer_e = te; return self.buffer['$<<'](string); }); $def(self, '$flush_string', function $$flush_string() { var self = this; if ($truthy(self.monolithic)) { self.$emit_start_tok(); self.monolithic = false; }; if ($truthy(self.buffer['$empty?']())) { return nil } else { self.$emit("tSTRING_CONTENT", self.buffer, self.buffer_s, self.buffer_e); self.$clear_buffer(); return self.$extend_content(); }; }); $def(self, '$extend_content', $assign_ivar_val("space_emitted", false)); $def(self, '$extend_space', function $$extend_space(ts, te) { var self = this; self.$flush_string(); if ($truthy(self.space_emitted)) { return nil } else { self.$emit("tSPACE", nil, ts, te); return (self.space_emitted = true); }; }); $def(self, '$supports_line_continuation_via_slash?', function $Literal_supports_line_continuation_via_slash$ques$9() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$words?']()['$!']()))) { return self.interpolate } else { return $ret_or_1 } }); self.$protected(); $def(self, '$delimiter?', function $Literal_delimiter$ques$10(delimiter) { var self = this, $ret_or_1 = nil; if ($truthy(self['$heredoc?']())) { if ($truthy(($ret_or_1 = delimiter['$end_with?'](self.end_delim)))) { return $send(delimiter.$sub($regexp([$$('Regexp').$escape(self.end_delim), $enc("\\z", "ASCII-8BIT")]), $enc("", "ASCII-8BIT")).$bytes(), 'all?', [], function $$11(c){var $ret_or_2 = nil; if (c == null) c = nil; if ($truthy(($ret_or_2 = c['$==']($$('SPACE'))))) { return $ret_or_2 } else { return c['$==']($$('TAB')) };}) } else { return $ret_or_1 } } else if ($truthy(self.indent)) { return self.end_delim['$=='](delimiter.$lstrip()) } else { return self.end_delim['$=='](delimiter) } }); $def(self, '$coerce_encoding', function $$coerce_encoding(string) { return string.$b() }); $def(self, '$clear_buffer', function $$clear_buffer() { var self = this; self.buffer = $enc("", "ASCII-8BIT").$dup(); self.buffer.$force_encoding(self.lexer.$source_buffer().$source().$encoding()); self.buffer_s = nil; return (self.buffer_e = nil); }); $def(self, '$emit_start_tok', function $$emit_start_tok() { var self = this, str_e = nil, $ret_or_1 = nil; str_e = ($truthy(($ret_or_1 = self.heredoc_e)) ? ($ret_or_1) : ($rb_plus(self.str_s, self.str_type.$length()))); return self.$emit(self.start_tok, self.str_type, self.str_s, str_e); }); return $def(self, '$emit', function $$emit(token, type, s, e) { var self = this; return self.lexer.$send("emit", token, type, s, e) }); })($$('Lexer'), null, $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/lexer/stack_state"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $assign_ivar_val = Opal.assign_ivar_val, $truthy = Opal.truthy, $alias = Opal.alias, $nesting = [], nil = Opal.nil; Opal.add_stubs('freeze,clear,|,<<,&,>>,==,[],to_s'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'StackState'); var $proto = self.$$prototype; $proto.stack = $proto.name = nil; $def(self, '$initialize', function $$initialize(name) { var self = this; self.name = name.$freeze(); return self.$clear(); }); $def(self, '$clear', $assign_ivar_val("stack", 0)); $def(self, '$push', function $$push(bit) { var self = this, bit_value = nil; bit_value = ($truthy(bit) ? (1) : (0)); self.stack = self.stack['$<<'](1)['$|'](bit_value); return bit; }); $def(self, '$pop', function $$pop() { var self = this, bit_value = nil; bit_value = self.stack['$&'](1); self.stack = self.stack['$>>'](1); return bit_value['$=='](1); }); $def(self, '$lexpop', function $$lexpop() { var self = this; self.stack = self.stack['$>>'](1)['$|'](self.stack['$&'](1)); return self.stack['$[]'](0)['$=='](1); }); $def(self, '$active?', function $StackState_active$ques$1() { var self = this; return self.stack['$[]'](0)['$=='](1) }); $def(self, '$empty?', function $StackState_empty$ques$2() { var self = this; return self.stack['$=='](0) }); $def(self, '$to_s', function $$to_s() { var self = this; return "[" + (self.stack.$to_s(2)) + " <= " + (self.name) + "]" }); return $alias(self, "inspect", "to_s"); })($$('Lexer'), null) })($nesting[0], $nesting) }; Opal.modules["parser/lexer/dedenter"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $def = Opal.def, $eqeq = Opal.eqeq, $send = Opal.send, $truthy = Opal.truthy, $to_ary = Opal.to_ary, $slice = Opal.slice, $rb_le = Opal.rb_le, $eqeqeq = Opal.eqeqeq, $rb_plus = Opal.rb_plus, $rb_minus = Opal.rb_minus, $rb_gt = Opal.rb_gt, $rb_times = Opal.rb_times, $rb_divide = Opal.rb_divide, $thrower = Opal.thrower, $assign_ivar_val = Opal.assign_ivar_val, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('encoding,split,force_encoding,==,length,map!,each,each_char,<=,===,+,-,>,*,/,slice!,replace,join,end_with?'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Dedenter'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.at_line_begin = nil; $const_set($nesting[0], 'TAB_WIDTH', 8); $def(self, '$initialize', function $$initialize(dedent_level) { var self = this; self.dedent_level = dedent_level; self.at_line_begin = true; return (self.indent_level = 0); }); $def(self, '$dedent', function $$dedent(string) { var $a, $b, self = this, original_encoding = nil, lines = nil, lines_to_dedent = nil, _first = nil; original_encoding = string.$encoding(); lines = string.$force_encoding($$$($$('Encoding'), 'BINARY')).$split("\\\n"); if ($eqeq(lines.$length(), 1)) { lines = [string.$force_encoding(original_encoding)] } else { $send(lines, 'map!', [], function $$1(s){ if (s == null) s = nil; return s.$force_encoding(original_encoding);}) }; if ($truthy(self.at_line_begin)) { lines_to_dedent = lines } else { $b = lines, $a = $to_ary($b), (_first = ($a[0] == null ? nil : $a[0])), (lines_to_dedent = $slice($a, 1)), $b }; $send(lines_to_dedent, 'each', [], function $$2(line){var self = $$2.$$s == null ? this : $$2.$$s, left_to_remove = nil, remove = nil; if (self.dedent_level == null) self.dedent_level = nil; if (line == null) line = nil; left_to_remove = self.dedent_level; remove = 0; (function(){try { var $t_break = $thrower('break'); return $send(line, 'each_char', [], function $$3(char$){var self = $$3.$$s == null ? this : $$3.$$s, $ret_or_1 = nil; if (self.dedent_level == null) self.dedent_level = nil; if (char$ == null) char$ = nil; if ($truthy($rb_le(left_to_remove, 0))) { $t_break.$throw(nil, $$3.$$is_lambda) }; if ($eqeqeq(" ", ($ret_or_1 = char$))) { remove = $rb_plus(remove, 1); return (left_to_remove = $rb_minus(left_to_remove, 1)); } else if ($eqeqeq("\t", $ret_or_1)) { if ($truthy($rb_gt($rb_times($$('TAB_WIDTH'), $rb_plus($rb_divide(remove, $$('TAB_WIDTH')), 1)), self.dedent_level))) { $t_break.$throw(nil, $$3.$$is_lambda) }; remove = $rb_plus(remove, 1); return (left_to_remove = $rb_minus(left_to_remove, $$('TAB_WIDTH'))); } else { $t_break.$throw(nil, $$3.$$is_lambda) };}, {$$s: self})} catch($e) { if ($e === $t_break) return $e.$v; throw $e; } finally {$t_break.is_orphan = true;}})(); return line['$slice!'](0, remove);}, {$$s: self}); string.$replace(lines.$join()); return (self.at_line_begin = string['$end_with?']("\n")); }); return $def(self, '$interrupt', $assign_ivar_val("at_line_begin", false)); })($$('Lexer'), null, $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/builders/default"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $assign_ivar_val = Opal.assign_ivar_val, $to_a = Opal.to_a, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $not = Opal.not, $send = Opal.send, $neqeq = Opal.neqeq, $to_ary = Opal.to_ary, $rb_ge = Opal.rb_ge, $rb_gt = Opal.rb_gt, $range = Opal.range, $rb_minus = Opal.rb_minus, $slice = Opal.slice, $rb_plus = Opal.rb_plus, $rb_le = Opal.rb_le, $eqeqeq = Opal.eqeqeq, $rb_lt = Opal.rb_lt, $thrower = Opal.thrower, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_accessor,n0,token_map,numeric,n,value,new,loc,private,+@,-@,updated,join,expression,string_value,delimited_string_map,unquoted_map,collapse_string_parts?,nil?,first,children,string_map,prefix_string_map,to_sym,collection_map,empty?,==,version,diagnostic,!,type,dedent,map,interrupt,compact,uniq,sort,each_char,to_proc,static_regexp,message,<<,regexp_map,unary_op_map,binary_op_map,!=,%,size,last,each_slice,pair_keyword_map,pair_quoted_map,symbol_compose,adjust,=~,pair_keyword,accessible,each,eql?,>=,add?,range_map,variable_map,>,length,start_with?,name,source_buffer,dup,line,emit_encoding,class,any?,end_with?,to_s,try_declare_numparam,declared?,static_env,has_ordinary_params?,max_numparam_stack,in_block,context,var_send_map,top,current_arg_stack,parser,constant_map,in_def,[],check_assignment_to_numparam,check_reserved_for_numparam,declare,with_expression,with_operator,join_exprs,module_definition_map,definition_map,endless_definition_map,validate_definee,keyword_map,check_duplicate_args,validate_no_forward_arg_after_restarg,emit_forward_arg,forward_arg,arg_prefix_map,kwarg_map,emit_procarg0,emit_arg_inside_procarg0,location,resize,-,end,call_type_for_dot,emit_kwargs,rewrite_hash_args_to_kwargs,send_map,emit_lambda,expr_map,keyword,include?,block_map,array,+,emit_index,index_map,send_index_map,send_binary_op_map,static_regexp_node,names,send_unary_op_map,check_condition,condition_map,keyword_mod_map,ternary_map,for_map,count,rescue_body_map,eh_keyword_map,push,none?,one?,begin,guard_map,check_lvar_name,check_duplicate_pattern_variable,match_hash_var_from_str,match_var,check_duplicate_pattern_key,static_string,pair_quoted,match_hash_var,<=,===,check_duplicate_arg,is_a?,[]=,arg_name_collides?,<,in_dynamic_block?,has_numparams?,pattern_variables,pattern_hash_keys,with,begin_pos,end_pos,encode,valid_encoding?,process,diagnostics,send,kwargs?'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Default'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.parser = $proto.emit_file_line_as_literals = nil; (function(self, $parent_nesting) { return self.$attr_accessor("emit_lambda") })(Opal.get_singleton_class(self), $nesting); self.emit_lambda = false; (function(self, $parent_nesting) { return self.$attr_accessor("emit_procarg0") })(Opal.get_singleton_class(self), $nesting); self.emit_procarg0 = false; (function(self, $parent_nesting) { return self.$attr_accessor("emit_encoding") })(Opal.get_singleton_class(self), $nesting); self.emit_encoding = false; (function(self, $parent_nesting) { return self.$attr_accessor("emit_index") })(Opal.get_singleton_class(self), $nesting); self.emit_index = false; (function(self, $parent_nesting) { return self.$attr_accessor("emit_arg_inside_procarg0") })(Opal.get_singleton_class(self), $nesting); self.emit_arg_inside_procarg0 = false; (function(self, $parent_nesting) { return self.$attr_accessor("emit_forward_arg") })(Opal.get_singleton_class(self), $nesting); self.emit_forward_arg = false; (function(self, $parent_nesting) { return self.$attr_accessor("emit_kwargs") })(Opal.get_singleton_class(self), $nesting); self.emit_kwargs = false; (function(self, $parent_nesting) { return self.$attr_accessor("emit_match_pattern") })(Opal.get_singleton_class(self), $nesting); self.emit_match_pattern = false; (function(self, $parent_nesting) { return $def(self, '$modernize', function $$modernize() { var self = this; self.emit_lambda = true; self.emit_procarg0 = true; self.emit_encoding = true; self.emit_index = true; self.emit_arg_inside_procarg0 = true; self.emit_forward_arg = true; self.emit_kwargs = true; return (self.emit_match_pattern = true); }) })(Opal.get_singleton_class(self), $nesting); self.$attr_accessor("parser"); self.$attr_accessor("emit_file_line_as_literals"); $def(self, '$initialize', $assign_ivar_val("emit_file_line_as_literals", true)); $def(self, '$nil', function $$nil(nil_t) { var self = this; return self.$n0("nil", self.$token_map(nil_t)) }); $def(self, '$true', function $Default_true$1(true_t) { var self = this; return self.$n0("true", self.$token_map(true_t)) }); $def(self, '$false', function $Default_false$2(false_t) { var self = this; return self.$n0("false", self.$token_map(false_t)) }); $def(self, '$integer', function $$integer(integer_t) { var self = this; return self.$numeric("int", integer_t) }); $def(self, '$float', function $Default_float$3(float_t) { var self = this; return self.$numeric("float", float_t) }); $def(self, '$rational', function $$rational(rational_t) { var self = this; return self.$numeric("rational", rational_t) }); $def(self, '$complex', function $$complex(complex_t) { var self = this; return self.$numeric("complex", complex_t) }); $def(self, '$numeric', function $$numeric(kind, token) { var self = this; return self.$n(kind, [self.$value(token)], $$$($$$($$('Source'), 'Map'), 'Operator').$new(nil, self.$loc(token))) }); self.$private("numeric"); $def(self, '$unary_num', function $$unary_num(unary_t, numeric) { var $a, self = this, value = nil, operator_loc = nil; $a = [].concat($to_a(numeric)), (value = ($a[0] == null ? nil : $a[0])), $a; operator_loc = self.$loc(unary_t); switch (self.$value(unary_t).valueOf()) { case "+": value = value['$+@']() break; case "-": value = value['$-@']() break; default: nil }; return numeric.$updated(nil, [value], (new Map([["location", $$$($$$($$('Source'), 'Map'), 'Operator').$new(operator_loc, operator_loc.$join(numeric.$loc().$expression()))]]))); }); $def(self, '$__LINE__', function $$__LINE__(__LINE__t) { var self = this; return self.$n0("__LINE__", self.$token_map(__LINE__t)) }); $def(self, '$string', function $$string(string_t) { var self = this; return self.$n("str", [self.$string_value(string_t)], self.$delimited_string_map(string_t)) }); $def(self, '$string_internal', function $$string_internal(string_t) { var self = this; return self.$n("str", [self.$string_value(string_t)], self.$unquoted_map(string_t)) }); $def(self, '$string_compose', function $$string_compose(begin_t, parts, end_t) { var self = this; if ($truthy(self['$collapse_string_parts?'](parts))) { if (($truthy(begin_t['$nil?']()) && ($truthy(end_t['$nil?']())))) { return parts.$first() } else { return self.$n("str", parts.$first().$children(), self.$string_map(begin_t, parts, end_t)) } } else { return self.$n("dstr", [].concat($to_a(parts)), self.$string_map(begin_t, parts, end_t)) } }); $def(self, '$character', function $$character(char_t) { var self = this; return self.$n("str", [self.$string_value(char_t)], self.$prefix_string_map(char_t)) }); $def(self, '$__FILE__', function $$__FILE__(__FILE__t) { var self = this; return self.$n0("__FILE__", self.$token_map(__FILE__t)) }); $def(self, '$symbol', function $$symbol(symbol_t) { var self = this; return self.$n("sym", [self.$string_value(symbol_t).$to_sym()], self.$prefix_string_map(symbol_t)) }); $def(self, '$symbol_internal', function $$symbol_internal(symbol_t) { var self = this; return self.$n("sym", [self.$string_value(symbol_t).$to_sym()], self.$unquoted_map(symbol_t)) }); $def(self, '$symbol_compose', function $$symbol_compose(begin_t, parts, end_t) { var self = this, str = nil; if ($truthy(self['$collapse_string_parts?'](parts))) { str = parts.$first(); return self.$n("sym", [str.$children().$first().$to_sym()], self.$collection_map(begin_t, str.$loc().$expression(), end_t)); } else if (($eqeq(self.parser.$version(), 18) && ($truthy(parts['$empty?']())))) { return self.$diagnostic("error", "empty_symbol", nil, self.$loc(begin_t).$join(self.$loc(end_t))) } else { return self.$n("dsym", [].concat($to_a(parts)), self.$collection_map(begin_t, parts, end_t)) } }); $def(self, '$xstring_compose', function $$xstring_compose(begin_t, parts, end_t) { var self = this; return self.$n("xstr", [].concat($to_a(parts)), self.$string_map(begin_t, parts, end_t)) }); $def(self, '$dedent_string', function $$dedent_string(node, dedent_level) { var dedenter = nil, str = nil, children = nil; if ($not(dedent_level['$nil?']())) { dedenter = $$$($$('Lexer'), 'Dedenter').$new(dedent_level); switch (node.$type().valueOf()) { case "str": str = node.$children().$first(); dedenter.$dedent(str); break; case "dstr": case "xstr": children = $send(node.$children(), 'map', [], function $$4(str_node){ if (str_node == null) str_node = nil; if ($eqeq(str_node.$type(), "str")) { str = str_node.$children().$first(); dedenter.$dedent(str); if ($truthy(str['$empty?']())) { return nil }; } else { dedenter.$interrupt() }; return str_node;}); node = node.$updated(nil, children.$compact()); break; default: nil }; }; return node; }); $def(self, '$regexp_options', function $$regexp_options(regopt_t) { var self = this, options = nil; options = $send(self.$value(regopt_t).$each_char().$sort().$uniq(), 'map', [], "to_sym".$to_proc()); return self.$n("regopt", options, self.$token_map(regopt_t)); }); $def(self, '$regexp_compose', function $$regexp_compose(begin_t, parts, end_t, options) { var self = this, e = nil; try { self.$static_regexp(parts, options) } catch ($err) { if (Opal.rescue($err, [$$('RegexpError')])) {(e = $err) try { self.$diagnostic("error", "invalid_regexp", (new Map([["message", e.$message()]])), self.$loc(begin_t).$join(self.$loc(end_t))) } finally { Opal.pop_exception($err); } } else { throw $err; } };; return self.$n("regexp", parts['$<<'](options), self.$regexp_map(begin_t, end_t, options)); }); $def(self, '$array', function $$array(begin_t, elements, end_t) { var self = this; return self.$n("array", elements, self.$collection_map(begin_t, elements, end_t)) }); $def(self, '$splat', function $$splat(star_t, arg) { var self = this; if (arg == null) arg = nil; if ($truthy(arg['$nil?']())) { return self.$n0("splat", self.$unary_op_map(star_t)) } else { return self.$n("splat", [arg], self.$unary_op_map(star_t, arg)) }; }, -2); $def(self, '$word', function $$word(parts) { var self = this; if ($truthy(self['$collapse_string_parts?'](parts))) { return parts.$first() } else { return self.$n("dstr", [].concat($to_a(parts)), self.$collection_map(nil, parts, nil)) } }); $def(self, '$words_compose', function $$words_compose(begin_t, parts, end_t) { var self = this; return self.$n("array", [].concat($to_a(parts)), self.$collection_map(begin_t, parts, end_t)) }); $def(self, '$symbols_compose', function $$symbols_compose(begin_t, parts, end_t) { var self = this; parts = $send(parts, 'map', [], function $$5(part){var $a, value = nil; if (part == null) part = nil; switch (part.$type().valueOf()) { case "str": $a = [].concat($to_a(part)), (value = ($a[0] == null ? nil : $a[0])), $a; return part.$updated("sym", [value.$to_sym()]); case "dstr": return part.$updated("dsym") default: return part };}); return self.$n("array", [].concat($to_a(parts)), self.$collection_map(begin_t, parts, end_t)); }); $def(self, '$pair', function $$pair(key, assoc_t, value) { var self = this; return self.$n("pair", [key, value], self.$binary_op_map(key, assoc_t, value)) }); $def(self, '$pair_list_18', function $$pair_list_18(list) { var self = this; if ($neqeq(list.$size()['$%'](2), 0)) { return self.$diagnostic("error", "odd_hash", nil, list.$last().$loc().$expression()) } else { return $send(list.$each_slice(2), 'map', [], function $$6(key, value){var self = $$6.$$s == null ? this : $$6.$$s; if (key == null) key = nil; if (value == null) value = nil; return self.$n("pair", [key, value], self.$binary_op_map(key, nil, value));}, {$$s: self}) } }); $def(self, '$pair_keyword', function $$pair_keyword(key_t, value) { var $a, $b, self = this, key_map = nil, pair_map = nil, key = nil; $b = self.$pair_keyword_map(key_t, value), $a = $to_ary($b), (key_map = ($a[0] == null ? nil : $a[0])), (pair_map = ($a[1] == null ? nil : $a[1])), $b; key = self.$n("sym", [self.$value(key_t).$to_sym()], key_map); return self.$n("pair", [key, value], pair_map); }); $def(self, '$pair_quoted', function $$pair_quoted(begin_t, parts, end_t, value) { var $a, $b, self = this, pair_map = nil, key = nil; $b = self.$pair_quoted_map(begin_t, end_t, value), $a = $to_ary($b), (end_t = ($a[0] == null ? nil : $a[0])), (pair_map = ($a[1] == null ? nil : $a[1])), $b; key = self.$symbol_compose(begin_t, parts, end_t); return self.$n("pair", [key, value], pair_map); }); $def(self, '$pair_label', function $$pair_label(key_t) { var self = this, key_l = nil, value_l = nil, label = nil, value = nil; key_l = self.$loc(key_t); value_l = key_l.$adjust((new Map([["end_pos", -1]]))); label = self.$value(key_t); value = ($truthy(label['$=~'](/^[[:lower:]]/)) ? (self.$n("ident", [label.$to_sym()], $$$($$$($$('Source'), 'Map'), 'Variable').$new(value_l))) : (self.$n("const", [nil, label.$to_sym()], $$$($$$($$('Source'), 'Map'), 'Constant').$new(nil, value_l, value_l)))); return self.$pair_keyword(key_t, self.$accessible(value)); }); $def(self, '$kwsplat', function $$kwsplat(dstar_t, arg) { var self = this; return self.$n("kwsplat", [arg], self.$unary_op_map(dstar_t, arg)) }); $def(self, '$associate', function $$associate(begin_t, pairs, end_t) { var self = this, key_set = nil; key_set = $$('Set').$new(); $send(pairs, 'each', [], function $$7(pair){var $a, self = $$7.$$s == null ? this : $$7.$$s, key = nil; if (self.parser == null) self.parser = nil; if (pair == null) pair = nil; if (!$truthy(pair.$type()['$eql?']("pair"))) { return nil }; $a = [].concat($to_a(pair)), (key = ($a[0] == null ? nil : $a[0])), $a; switch (key.$type().valueOf()) { case "sym": case "str": case "int": case "float": break; case "rational": case "complex": case "regexp": if (!$truthy($rb_ge(self.parser.$version(), 31))) { return nil } break; default: return nil }; if ($truthy(key_set['$add?'](key))) { return nil } else { return self.$diagnostic("warning", "duplicate_hash_key", nil, key.$loc().$expression()) };}, {$$s: self}); return self.$n("hash", [].concat($to_a(pairs)), self.$collection_map(begin_t, pairs, end_t)); }); $def(self, '$range_inclusive', function $$range_inclusive(lhs, dot2_t, rhs) { var self = this; return self.$n("irange", [lhs, rhs], self.$range_map(lhs, dot2_t, rhs)) }); $def(self, '$range_exclusive', function $$range_exclusive(lhs, dot3_t, rhs) { var self = this; return self.$n("erange", [lhs, rhs], self.$range_map(lhs, dot3_t, rhs)) }); $def(self, '$self', function $$self(token) { var self = this; return self.$n0("self", self.$token_map(token)) }); $def(self, '$ident', function $$ident(token) { var self = this; return self.$n("ident", [self.$value(token).$to_sym()], self.$variable_map(token)) }); $def(self, '$ivar', function $$ivar(token) { var self = this; return self.$n("ivar", [self.$value(token).$to_sym()], self.$variable_map(token)) }); $def(self, '$gvar', function $$gvar(token) { var self = this, gvar_name = nil; gvar_name = self.$value(token); if (($truthy(gvar_name['$start_with?']("$0")) && ($truthy($rb_gt(gvar_name.$length(), 2))))) { self.$diagnostic("error", "gvar_name", (new Map([["name", gvar_name]])), self.$loc(token)) }; return self.$n("gvar", [gvar_name.$to_sym()], self.$variable_map(token)); }); $def(self, '$cvar', function $$cvar(token) { var self = this; return self.$n("cvar", [self.$value(token).$to_sym()], self.$variable_map(token)) }); $def(self, '$back_ref', function $$back_ref(token) { var self = this; return self.$n("back_ref", [self.$value(token).$to_sym()], self.$token_map(token)) }); $def(self, '$nth_ref', function $$nth_ref(token) { var self = this; return self.$n("nth_ref", [self.$value(token)], self.$token_map(token)) }); $def(self, '$accessible', function $$accessible(node) { var $a, self = this, name = nil; switch (node.$type().valueOf()) { case "__FILE__": if ($truthy(self.emit_file_line_as_literals)) { return self.$n("str", [node.$loc().$expression().$source_buffer().$name()], node.$loc().$dup()) } else { return node } break; case "__LINE__": if ($truthy(self.emit_file_line_as_literals)) { return self.$n("int", [node.$loc().$expression().$line()], node.$loc().$dup()) } else { return node } break; case "__ENCODING__": if ($not(self.$class().$emit_encoding())) { return self.$n("const", [self.$n("const", [nil, "Encoding"], nil), "UTF_8"], node.$loc().$dup()) } else { return node } break; case "ident": $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), $a; if ($truthy($send(["?", "!"], 'any?', [], function $$8(c){ if (c == null) c = nil; return name.$to_s()['$end_with?'](c);}))) { self.$diagnostic("error", "invalid_id_to_get", (new Map([["identifier", name.$to_s()]])), node.$loc().$expression()) }; if (($truthy($rb_ge(self.parser.$version(), 27)) && ($truthy(self.parser.$try_declare_numparam(node))))) { return node.$updated("lvar") }; if (!$truthy(self.parser.$static_env()['$declared?'](name))) { if (((($eqeq(self.parser.$version(), 33) && ($eqeq(name, "it"))) && ($truthy(self.parser.$context().$in_block()))) && ($not(self.parser.$max_numparam_stack()['$has_ordinary_params?']())))) { self.$diagnostic("warning", "ambiguous_it_call", nil, node.$loc().$expression()) }; return self.$n("send", [nil, name], self.$var_send_map(node)); }; if ($eqeq(name.$to_s(), self.$parser().$current_arg_stack().$top())) { self.$diagnostic("error", "circular_argument_reference", (new Map([["var_name", name.$to_s()]])), node.$loc().$expression()) }; return node.$updated("lvar"); default: return node } }); $def(self, '$const', function $Default_const$9(name_t) { var self = this; return self.$n("const", [nil, self.$value(name_t).$to_sym()], self.$constant_map(nil, nil, name_t)) }); $def(self, '$const_global', function $$const_global(t_colon3, name_t) { var self = this, cbase = nil; cbase = self.$n0("cbase", self.$token_map(t_colon3)); return self.$n("const", [cbase, self.$value(name_t).$to_sym()], self.$constant_map(cbase, t_colon3, name_t)); }); $def(self, '$const_fetch', function $$const_fetch(scope, t_colon2, name_t) { var self = this; return self.$n("const", [scope, self.$value(name_t).$to_sym()], self.$constant_map(scope, t_colon2, name_t)) }); $def(self, '$__ENCODING__', function $$__ENCODING__(__ENCODING__t) { var self = this; return self.$n0("__ENCODING__", self.$token_map(__ENCODING__t)) }); $def(self, '$assignable', function $$assignable(node) { var $a, self = this, name = nil, var_name = nil, name_loc = nil; switch (node.$type().valueOf()) { case "cvar": return node.$updated("cvasgn") case "ivar": return node.$updated("ivasgn") case "gvar": return node.$updated("gvasgn") case "const": if ($truthy(self.parser.$context().$in_def())) { self.$diagnostic("error", "dynamic_const", nil, node.$loc().$expression()) }; return node.$updated("casgn"); case "ident": $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), $a; var_name = node.$children()['$[]'](0).$to_s(); name_loc = node.$loc().$expression(); self.$check_assignment_to_numparam(var_name, name_loc); self.$check_reserved_for_numparam(var_name, name_loc); self.parser.$static_env().$declare(name); return node.$updated("lvasgn"); case "match_var": $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), $a; var_name = node.$children()['$[]'](0).$to_s(); name_loc = node.$loc().$expression(); self.$check_assignment_to_numparam(var_name, name_loc); self.$check_reserved_for_numparam(var_name, name_loc); return node; case "nil": case "self": case "true": case "false": case "__FILE__": case "__LINE__": case "__ENCODING__": return self.$diagnostic("error", "invalid_assignment", nil, node.$loc().$expression()) case "back_ref": case "nth_ref": return self.$diagnostic("error", "backref_assignment", nil, node.$loc().$expression()) default: return nil } }); $def(self, '$const_op_assignable', function $$const_op_assignable(node) { return node.$updated("casgn") }); $def(self, '$assign', function $$assign(lhs, eql_t, rhs) { var self = this; return lhs['$<<'](rhs).$updated(nil, nil, (new Map([["location", lhs.$loc().$with_operator(self.$loc(eql_t)).$with_expression(self.$join_exprs(lhs, rhs))]]))) }); $def(self, '$op_assign', function $$op_assign(lhs, op_t, rhs) { var self = this, operator = nil, source_map = nil; switch (lhs.$type().valueOf()) { case "gvasgn": case "ivasgn": case "lvasgn": case "cvasgn": case "casgn": case "send": case "csend": case "index": operator = self.$value(op_t)['$[]']($range(0, -1, false)).$to_sym(); source_map = lhs.$loc().$with_operator(self.$loc(op_t)).$with_expression(self.$join_exprs(lhs, rhs)); if ($eqeq(lhs.$type(), "index")) { lhs = lhs.$updated("indexasgn") }; switch (operator.valueOf()) { case "&&": return self.$n("and_asgn", [lhs, rhs], source_map) case "||": return self.$n("or_asgn", [lhs, rhs], source_map) default: return self.$n("op_asgn", [lhs, operator, rhs], source_map) }; break; case "back_ref": case "nth_ref": return self.$diagnostic("error", "backref_assignment", nil, lhs.$loc().$expression()) default: return nil } }); $def(self, '$multi_lhs', function $$multi_lhs(begin_t, items, end_t) { var self = this; return self.$n("mlhs", [].concat($to_a(items)), self.$collection_map(begin_t, items, end_t)) }); $def(self, '$multi_assign', function $$multi_assign(lhs, eql_t, rhs) { var self = this; return self.$n("masgn", [lhs, rhs], self.$binary_op_map(lhs, eql_t, rhs)) }); $def(self, '$def_class', function $$def_class(class_t, name, lt_t, superclass, body, end_t) { var self = this; return self.$n("class", [name, superclass, body], self.$module_definition_map(class_t, name, lt_t, end_t)) }); $def(self, '$def_sclass', function $$def_sclass(class_t, lshft_t, expr, body, end_t) { var self = this; return self.$n("sclass", [expr, body], self.$module_definition_map(class_t, nil, lshft_t, end_t)) }); $def(self, '$def_module', function $$def_module(module_t, name, body, end_t) { var self = this; return self.$n("module", [name, body], self.$module_definition_map(module_t, name, nil, end_t)) }); $def(self, '$def_method', function $$def_method(def_t, name_t, args, body, end_t) { var self = this; self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)); return self.$n("def", [self.$value(name_t).$to_sym(), args, body], self.$definition_map(def_t, nil, name_t, end_t)); }); $def(self, '$def_endless_method', function $$def_endless_method(def_t, name_t, args, assignment_t, body) { var self = this; self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)); return self.$n("def", [self.$value(name_t).$to_sym(), args, body], self.$endless_definition_map(def_t, nil, name_t, assignment_t, body)); }); $def(self, '$def_singleton', function $$def_singleton(def_t, definee, dot_t, name_t, args, body, end_t) { var self = this; self.$validate_definee(definee); self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)); return self.$n("defs", [definee, self.$value(name_t).$to_sym(), args, body], self.$definition_map(def_t, dot_t, name_t, end_t)); }); $def(self, '$def_endless_singleton', function $$def_endless_singleton(def_t, definee, dot_t, name_t, args, assignment_t, body) { var self = this; self.$validate_definee(definee); self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)); return self.$n("defs", [definee, self.$value(name_t).$to_sym(), args, body], self.$endless_definition_map(def_t, dot_t, name_t, assignment_t, body)); }); $def(self, '$undef_method', function $$undef_method(undef_t, names) { var self = this; return self.$n("undef", [].concat($to_a(names)), self.$keyword_map(undef_t, nil, names, nil)) }); $def(self, '$alias', function $$alias(alias_t, to, from) { var self = this; return self.$n("alias", [to, from], self.$keyword_map(alias_t, nil, [to, from], nil)) }); $def(self, '$args', function $$args(begin_t, args, end_t, check_args) { var self = this, map = nil; if (check_args == null) check_args = true; if ($truthy(check_args)) { args = self.$check_duplicate_args(args) }; self.$validate_no_forward_arg_after_restarg(args); map = self.$collection_map(begin_t, args, end_t); if ((($not(self.$class().$emit_forward_arg()) && ($eqeq(args.$length(), 1))) && ($eqeq(args['$[]'](0).$type(), "forward_arg")))) { return self.$n("forward_args", [], map) } else { return self.$n("args", args, map) }; }, -4); $def(self, '$numargs', function $$numargs(max_numparam) { var self = this; return self.$n("numargs", [max_numparam], nil) }); $def(self, '$forward_only_args', function $$forward_only_args(begin_t, dots_t, end_t) { var self = this, arg = nil; if ($truthy(self.$class().$emit_forward_arg())) { arg = self.$forward_arg(dots_t); return self.$n("args", [arg], self.$collection_map(begin_t, [arg], end_t)); } else { return self.$n("forward_args", [], self.$collection_map(begin_t, self.$token_map(dots_t), end_t)) } }); $def(self, '$forward_arg', function $$forward_arg(dots_t) { var self = this; return self.$n("forward_arg", [], self.$token_map(dots_t)) }); $def(self, '$arg', function $$arg(name_t) { var self = this; self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)); return self.$n("arg", [self.$value(name_t).$to_sym()], self.$variable_map(name_t)); }); $def(self, '$optarg', function $$optarg(name_t, eql_t, value) { var self = this; self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)); return self.$n("optarg", [self.$value(name_t).$to_sym(), value], self.$variable_map(name_t).$with_operator(self.$loc(eql_t)).$with_expression(self.$loc(name_t).$join(value.$loc().$expression()))); }); $def(self, '$restarg', function $$restarg(star_t, name_t) { var self = this; if (name_t == null) name_t = nil; if ($truthy(name_t)) { self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)); return self.$n("restarg", [self.$value(name_t).$to_sym()], self.$arg_prefix_map(star_t, name_t)); } else { return self.$n0("restarg", self.$arg_prefix_map(star_t)) }; }, -2); $def(self, '$kwarg', function $$kwarg(name_t) { var self = this; self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)); return self.$n("kwarg", [self.$value(name_t).$to_sym()], self.$kwarg_map(name_t)); }); $def(self, '$kwoptarg', function $$kwoptarg(name_t, value) { var self = this; self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)); return self.$n("kwoptarg", [self.$value(name_t).$to_sym(), value], self.$kwarg_map(name_t, value)); }); $def(self, '$kwrestarg', function $$kwrestarg(dstar_t, name_t) { var self = this; if (name_t == null) name_t = nil; if ($truthy(name_t)) { self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)); return self.$n("kwrestarg", [self.$value(name_t).$to_sym()], self.$arg_prefix_map(dstar_t, name_t)); } else { return self.$n0("kwrestarg", self.$arg_prefix_map(dstar_t)) }; }, -2); $def(self, '$kwnilarg', function $$kwnilarg(dstar_t, nil_t) { var self = this; return self.$n0("kwnilarg", self.$arg_prefix_map(dstar_t, nil_t)) }); $def(self, '$shadowarg', function $$shadowarg(name_t) { var self = this; self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)); return self.$n("shadowarg", [self.$value(name_t).$to_sym()], self.$variable_map(name_t)); }); $def(self, '$blockarg', function $$blockarg(amper_t, name_t) { var self = this, arg_name = nil; if ($not(name_t['$nil?']())) { self.$check_reserved_for_numparam(self.$value(name_t), self.$loc(name_t)) }; arg_name = ($truthy(name_t) ? (self.$value(name_t).$to_sym()) : (nil)); return self.$n("blockarg", [arg_name], self.$arg_prefix_map(amper_t, name_t)); }); $def(self, '$procarg0', function $$procarg0(arg) { var self = this; if ($truthy(self.$class().$emit_procarg0())) { if (($eqeq(arg.$type(), "arg") && ($truthy(self.$class().$emit_arg_inside_procarg0())))) { return self.$n("procarg0", [arg], $$$($$$($$('Source'), 'Map'), 'Collection').$new(nil, nil, arg.$location().$expression())) } else { return arg.$updated("procarg0") } } else { return arg } }); $def(self, '$arg_expr', function $$arg_expr(expr) { var self = this; if ($eqeq(expr.$type(), "lvasgn")) { return expr.$updated("arg") } else { return self.$n("arg_expr", [expr], expr.$loc().$dup()) } }); $def(self, '$restarg_expr', function $$restarg_expr(star_t, expr) { var self = this; if (expr == null) expr = nil; if ($truthy(expr['$nil?']())) { return self.$n0("restarg", self.$token_map(star_t)) } else if ($eqeq(expr.$type(), "lvasgn")) { return expr.$updated("restarg") } else { return self.$n("restarg_expr", [expr], expr.$loc().$dup()) }; }, -2); $def(self, '$blockarg_expr', function $$blockarg_expr(amper_t, expr) { var self = this; if ($eqeq(expr.$type(), "lvasgn")) { return expr.$updated("blockarg") } else { return self.$n("blockarg_expr", [expr], expr.$loc().$dup()) } }); $def(self, '$objc_kwarg', function $$objc_kwarg(kwname_t, assoc_t, name_t) { var self = this, kwname_l = nil, operator_l = nil; kwname_l = self.$loc(kwname_t); if ($truthy(assoc_t['$nil?']())) { kwname_l = kwname_l.$resize($rb_minus(kwname_l.$size(), 1)); operator_l = kwname_l.$end().$resize(1); } else { operator_l = self.$loc(assoc_t) }; return self.$n("objc_kwarg", [self.$value(kwname_t).$to_sym(), self.$value(name_t).$to_sym()], $$$($$$($$('Source'), 'Map'), 'ObjcKwarg').$new(kwname_l, operator_l, self.$loc(name_t), kwname_l.$join(self.$loc(name_t)))); }); $def(self, '$objc_restarg', function $$objc_restarg(star_t, name) { var self = this; if (name == null) name = nil; if ($truthy(name['$nil?']())) { return self.$n0("restarg", self.$arg_prefix_map(star_t)) } else if ($eqeq(name.$type(), "arg")) { return name.$updated("restarg", nil, (new Map([["location", name.$loc().$with_operator(self.$loc(star_t))]]))) } else { return self.$n("objc_restarg", [name], self.$unary_op_map(star_t, name)) }; }, -2); $def(self, '$call_type_for_dot', function $$call_type_for_dot(dot_t) { var self = this; if (($not(dot_t['$nil?']()) && ($eqeq(self.$value(dot_t), "anddot")))) { return "csend" } else { return "send" } }); $def(self, '$forwarded_args', function $$forwarded_args(dots_t) { var self = this; return self.$n("forwarded_args", [], self.$token_map(dots_t)) }); $def(self, '$forwarded_restarg', function $$forwarded_restarg(star_t) { var self = this; return self.$n("forwarded_restarg", [], self.$token_map(star_t)) }); $def(self, '$forwarded_kwrestarg', function $$forwarded_kwrestarg(dstar_t) { var self = this; return self.$n("forwarded_kwrestarg", [], self.$token_map(dstar_t)) }); $def(self, '$call_method', function $$call_method(receiver, dot_t, selector_t, lparen_t, args, rparen_t) { var self = this, type = nil; if (lparen_t == null) lparen_t = nil; if (args == null) args = []; if (rparen_t == null) rparen_t = nil; type = self.$call_type_for_dot(dot_t); if ($truthy(self.$class().$emit_kwargs())) { self.$rewrite_hash_args_to_kwargs(args) }; if ($truthy(selector_t['$nil?']())) { return self.$n(type, [receiver, "call"].concat($to_a(args)), self.$send_map(receiver, dot_t, nil, lparen_t, args, rparen_t)) } else { return self.$n(type, [receiver, self.$value(selector_t).$to_sym()].concat($to_a(args)), self.$send_map(receiver, dot_t, selector_t, lparen_t, args, rparen_t)) }; }, -4); $def(self, '$call_lambda', function $$call_lambda(lambda_t) { var self = this; if ($truthy(self.$class().$emit_lambda())) { return self.$n0("lambda", self.$expr_map(self.$loc(lambda_t))) } else { return self.$n("send", [nil, "lambda"], self.$send_map(nil, nil, lambda_t)) } }); $def(self, '$block', function $$block(method_call, begin_t, args, body, end_t) { var $a, self = this, _receiver = nil, _selector = nil, call_args = nil, last_arg = nil, block_type = nil, actual_send = nil, block = nil; $a = [].concat($to_a(method_call)), (_receiver = ($a[0] == null ? nil : $a[0])), (_selector = ($a[1] == null ? nil : $a[1])), (call_args = $slice($a, 2)), $a; if ($eqeq(method_call.$type(), "yield")) { self.$diagnostic("error", "block_given_to_yield", nil, method_call.$loc().$keyword(), [self.$loc(begin_t)]) }; last_arg = call_args.$last(); if (($truthy(last_arg) && (($eqeq(last_arg.$type(), "block_pass") || ($eqeq(last_arg.$type(), "forwarded_args")))))) { self.$diagnostic("error", "block_and_blockarg", nil, last_arg.$loc().$expression(), [self.$loc(begin_t)]) }; if ($eqeq(args.$type(), "numargs")) { block_type = "numblock"; args = args.$children()['$[]'](0); } else { block_type = "block" }; if ($truthy(["send", "csend", "index", "super", "zsuper", "lambda"]['$include?'](method_call.$type()))) { return self.$n(block_type, [method_call, args, body], self.$block_map(method_call.$loc().$expression(), begin_t, end_t)) } else { $a = [].concat($to_a(method_call)), (actual_send = ($a[0] == null ? nil : $a[0])), $a; block = self.$n(block_type, [actual_send, args, body], self.$block_map(actual_send.$loc().$expression(), begin_t, end_t)); return self.$n(method_call.$type(), [block], method_call.$loc().$with_expression(self.$join_exprs(method_call, block))); }; }); $def(self, '$block_pass', function $$block_pass(amper_t, arg) { var self = this; return self.$n("block_pass", [arg], self.$unary_op_map(amper_t, arg)) }); $def(self, '$objc_varargs', function $$objc_varargs(pair, rest_of_varargs) { var $a, self = this, value = nil, first_vararg = nil, vararg_array = nil; $a = [].concat($to_a(pair)), (value = ($a[0] == null ? nil : $a[0])), (first_vararg = ($a[1] == null ? nil : $a[1])), $a; vararg_array = self.$array(nil, [first_vararg].concat($to_a(rest_of_varargs)), nil).$updated("objc_varargs"); return pair.$updated(nil, [value, vararg_array], (new Map([["location", pair.$loc().$with_expression(pair.$loc().$expression().$join(vararg_array.$loc().$expression()))]]))); }); $def(self, '$attr_asgn', function $$attr_asgn(receiver, dot_t, selector_t) { var self = this, method_name = nil, type = nil; method_name = $rb_plus(self.$value(selector_t), "=").$to_sym(); type = self.$call_type_for_dot(dot_t); return self.$n(type, [receiver, method_name], self.$send_map(receiver, dot_t, selector_t)); }); $def(self, '$index', function $$index(receiver, lbrack_t, indexes, rbrack_t) { var self = this; if ($truthy(self.$class().$emit_kwargs())) { self.$rewrite_hash_args_to_kwargs(indexes) }; if ($truthy(self.$class().$emit_index())) { return self.$n("index", [receiver].concat($to_a(indexes)), self.$index_map(receiver, lbrack_t, rbrack_t)) } else { return self.$n("send", [receiver, "[]"].concat($to_a(indexes)), self.$send_index_map(receiver, lbrack_t, rbrack_t)) }; }); $def(self, '$index_asgn', function $$index_asgn(receiver, lbrack_t, indexes, rbrack_t) { var self = this; if ($truthy(self.$class().$emit_index())) { return self.$n("indexasgn", [receiver].concat($to_a(indexes)), self.$index_map(receiver, lbrack_t, rbrack_t)) } else { return self.$n("send", [receiver, "[]="].concat($to_a(indexes)), self.$send_index_map(receiver, lbrack_t, rbrack_t)) } }); $def(self, '$binary_op', function $$binary_op(receiver, operator_t, arg) { var self = this, source_map = nil, operator = nil, method_call = nil; source_map = self.$send_binary_op_map(receiver, operator_t, arg); if ($eqeq(self.parser.$version(), 18)) { operator = self.$value(operator_t); if ($eqeq(operator, "!=")) { method_call = self.$n("send", [receiver, "==", arg], source_map) } else if ($eqeq(operator, "!~")) { method_call = self.$n("send", [receiver, "=~", arg], source_map) }; if ($truthy(["!=", "!~"]['$include?'](operator))) { return self.$n("not", [method_call], self.$expr_map(source_map.$expression())) }; }; return self.$n("send", [receiver, self.$value(operator_t).$to_sym(), arg], source_map); }); $def(self, '$match_op', function $$match_op(receiver, match_t, arg) { var self = this, source_map = nil, regexp = nil; source_map = self.$send_binary_op_map(receiver, match_t, arg); if ($truthy((regexp = self.$static_regexp_node(receiver)))) { $send(regexp.$names(), 'each', [], function $$10(name){var self = $$10.$$s == null ? this : $$10.$$s; if (self.parser == null) self.parser = nil; if (name == null) name = nil; return self.parser.$static_env().$declare(name);}, {$$s: self}); return self.$n("match_with_lvasgn", [receiver, arg], source_map); } else { return self.$n("send", [receiver, "=~", arg], source_map) }; }); $def(self, '$unary_op', function $$unary_op(op_t, receiver) { var self = this, method = nil; switch (self.$value(op_t).valueOf()) { case "+": case "-": method = $rb_plus(self.$value(op_t), "@") break; default: method = self.$value(op_t) }; return self.$n("send", [receiver, method.$to_sym()], self.$send_unary_op_map(op_t, receiver)); }); $def(self, '$not_op', function $$not_op(not_t, begin_t, receiver, end_t) { var self = this, nil_node = nil; if (begin_t == null) begin_t = nil; if (receiver == null) receiver = nil; if (end_t == null) end_t = nil; if ($eqeq(self.parser.$version(), 18)) { return self.$n("not", [self.$check_condition(receiver)], self.$unary_op_map(not_t, receiver)) } else if ($truthy(receiver['$nil?']())) { nil_node = self.$n0("begin", self.$collection_map(begin_t, nil, end_t)); return self.$n("send", [nil_node, "!"], self.$send_unary_op_map(not_t, nil_node)); } else { return self.$n("send", [self.$check_condition(receiver), "!"], self.$send_map(nil, nil, not_t, begin_t, [receiver], end_t)) }; }, -2); $def(self, '$logical_op', function $$logical_op(type, lhs, op_t, rhs) { var self = this; return self.$n(type, [lhs, rhs], self.$binary_op_map(lhs, op_t, rhs)) }); $def(self, '$condition', function $$condition(cond_t, cond, then_t, if_true, else_t, if_false, end_t) { var self = this; return self.$n("if", [self.$check_condition(cond), if_true, if_false], self.$condition_map(cond_t, cond, then_t, if_true, else_t, if_false, end_t)) }); $def(self, '$condition_mod', function $$condition_mod(if_true, if_false, cond_t, cond) { var self = this, $ret_or_1 = nil; return self.$n("if", [self.$check_condition(cond), if_true, if_false], self.$keyword_mod_map(($truthy(($ret_or_1 = if_true)) ? ($ret_or_1) : (if_false)), cond_t, cond)) }); $def(self, '$ternary', function $$ternary(cond, question_t, if_true, colon_t, if_false) { var self = this; return self.$n("if", [self.$check_condition(cond), if_true, if_false], self.$ternary_map(cond, question_t, if_true, colon_t, if_false)) }); $def(self, '$when', function $$when(when_t, patterns, then_t, body) { var self = this, children = nil; children = patterns['$<<'](body); return self.$n("when", children, self.$keyword_map(when_t, then_t, children, nil)); }); $def(self, '$case', function $Default_case$11(case_t, expr, when_bodies, else_t, else_body, end_t) { var self = this; return self.$n("case", [expr].concat($to_a(when_bodies['$<<'](else_body))), self.$condition_map(case_t, expr, nil, nil, else_t, else_body, end_t)) }); $def(self, '$loop', function $$loop(type, keyword_t, cond, do_t, body, end_t) { var self = this; return self.$n(type, [self.$check_condition(cond), body], self.$keyword_map(keyword_t, do_t, nil, end_t)) }); $def(self, '$loop_mod', function $$loop_mod(type, body, keyword_t, cond) { var self = this; if ($eqeq(body.$type(), "kwbegin")) { type = "" + (type) + "_post" }; return self.$n(type, [self.$check_condition(cond), body], self.$keyword_mod_map(body, keyword_t, cond)); }); $def(self, '$for', function $Default_for$12(for_t, iterator, in_t, iteratee, do_t, body, end_t) { var self = this; return self.$n("for", [iterator, iteratee, body], self.$for_map(for_t, in_t, do_t, end_t)) }); $def(self, '$keyword_cmd', function $$keyword_cmd(type, keyword_t, lparen_t, args, rparen_t) { var self = this, last_arg = nil; if (lparen_t == null) lparen_t = nil; if (args == null) args = []; if (rparen_t == null) rparen_t = nil; if (($eqeq(type, "yield") && ($truthy($rb_gt(args.$count(), 0))))) { last_arg = args.$last(); if ($eqeq(last_arg.$type(), "block_pass")) { self.$diagnostic("error", "block_given_to_yield", nil, self.$loc(keyword_t), [last_arg.$loc().$expression()]) }; }; if (($truthy(["yield", "super"]['$include?'](type)) && ($truthy(self.$class().$emit_kwargs())))) { self.$rewrite_hash_args_to_kwargs(args) }; return self.$n(type, args, self.$keyword_map(keyword_t, lparen_t, args, rparen_t)); }, -3); $def(self, '$preexe', function $$preexe(preexe_t, lbrace_t, compstmt, rbrace_t) { var self = this; return self.$n("preexe", [compstmt], self.$keyword_map(preexe_t, lbrace_t, [], rbrace_t)) }); $def(self, '$postexe', function $$postexe(postexe_t, lbrace_t, compstmt, rbrace_t) { var self = this; return self.$n("postexe", [compstmt], self.$keyword_map(postexe_t, lbrace_t, [], rbrace_t)) }); $def(self, '$rescue_body', function $$rescue_body(rescue_t, exc_list, assoc_t, exc_var, then_t, compound_stmt) { var self = this; return self.$n("resbody", [exc_list, exc_var, compound_stmt], self.$rescue_body_map(rescue_t, exc_list, assoc_t, exc_var, then_t, compound_stmt)) }); $def(self, '$begin_body', function $$begin_body(compound_stmt, rescue_bodies, else_t, else_, ensure_t, ensure_) { var self = this, statements = nil; if (rescue_bodies == null) rescue_bodies = []; if (else_t == null) else_t = nil; if (else_ == null) else_ = nil; if (ensure_t == null) ensure_t = nil; if (ensure_ == null) ensure_ = nil; if ($truthy(rescue_bodies['$any?']())) { if ($truthy(else_t)) { compound_stmt = self.$n("rescue", [compound_stmt].concat($to_a($rb_plus(rescue_bodies, [else_]))), self.$eh_keyword_map(compound_stmt, nil, rescue_bodies, else_t, else_)) } else { compound_stmt = self.$n("rescue", [compound_stmt].concat($to_a($rb_plus(rescue_bodies, [nil]))), self.$eh_keyword_map(compound_stmt, nil, rescue_bodies, nil, nil)) } } else if ($truthy(else_t)) { statements = []; if ($not(compound_stmt['$nil?']())) { if ($eqeq(compound_stmt.$type(), "begin")) { statements = $rb_plus(statements, compound_stmt.$children()) } else { statements.$push(compound_stmt) } }; statements.$push(self.$n("begin", [else_], self.$collection_map(else_t, [else_], nil))); compound_stmt = self.$n("begin", statements, self.$collection_map(nil, statements, nil)); }; if ($truthy(ensure_t)) { compound_stmt = self.$n("ensure", [compound_stmt, ensure_], self.$eh_keyword_map(compound_stmt, ensure_t, [ensure_], nil, nil)) }; return compound_stmt; }, -2); $def(self, '$compstmt', function $$compstmt(statements) { var self = this; if ($truthy(statements['$none?']())) { return nil } else if ($truthy(statements['$one?']())) { return statements.$first() } else { return self.$n("begin", statements, self.$collection_map(nil, statements, nil)) } }); $def(self, '$begin', function $$begin(begin_t, body, end_t) { var self = this; if ($truthy(body['$nil?']())) { return self.$n0("begin", self.$collection_map(begin_t, nil, end_t)) } else if (($eqeq(body.$type(), "mlhs") || ((($eqeq(body.$type(), "begin") && ($truthy(body.$loc().$begin()['$nil?']()))) && ($truthy(body.$loc().$end()['$nil?']())))))) { return self.$n(body.$type(), body.$children(), self.$collection_map(begin_t, body.$children(), end_t)) } else { return self.$n("begin", [body], self.$collection_map(begin_t, [body], end_t)) } }); $def(self, '$begin_keyword', function $$begin_keyword(begin_t, body, end_t) { var self = this; if ($truthy(body['$nil?']())) { return self.$n0("kwbegin", self.$collection_map(begin_t, nil, end_t)) } else if ((($eqeq(body.$type(), "begin") && ($truthy(body.$loc().$begin()['$nil?']()))) && ($truthy(body.$loc().$end()['$nil?']())))) { return self.$n("kwbegin", body.$children(), self.$collection_map(begin_t, body.$children(), end_t)) } else { return self.$n("kwbegin", [body], self.$collection_map(begin_t, [body], end_t)) } }); $def(self, '$case_match', function $$case_match(case_t, expr, in_bodies, else_t, else_body, end_t) { var self = this; if (($truthy(else_t) && ($not(else_body)))) { else_body = self.$n("empty_else", nil, self.$token_map(else_t)) }; return self.$n("case_match", [expr].concat($to_a(in_bodies['$<<'](else_body))), self.$condition_map(case_t, expr, nil, nil, else_t, else_body, end_t)); }); $def(self, '$in_match', function $$in_match(lhs, in_t, rhs) { var self = this; return self.$n("in_match", [lhs, rhs], self.$binary_op_map(lhs, in_t, rhs)) }); $def(self, '$match_pattern', function $$match_pattern(lhs, match_t, rhs) { var self = this; return self.$n("match_pattern", [lhs, rhs], self.$binary_op_map(lhs, match_t, rhs)) }); $def(self, '$match_pattern_p', function $$match_pattern_p(lhs, match_t, rhs) { var self = this; return self.$n("match_pattern_p", [lhs, rhs], self.$binary_op_map(lhs, match_t, rhs)) }); $def(self, '$in_pattern', function $$in_pattern(in_t, pattern, guard, then_t, body) { var self = this, children = nil; children = [pattern, guard, body]; return self.$n("in_pattern", children, self.$keyword_map(in_t, then_t, children.$compact(), nil)); }); $def(self, '$if_guard', function $$if_guard(if_t, if_body) { var self = this; return self.$n("if_guard", [if_body], self.$guard_map(if_t, if_body)) }); $def(self, '$unless_guard', function $$unless_guard(unless_t, unless_body) { var self = this; return self.$n("unless_guard", [unless_body], self.$guard_map(unless_t, unless_body)) }); $def(self, '$match_var', function $$match_var(name_t) { var self = this, name = nil, name_l = nil; name = self.$value(name_t).$to_sym(); name_l = self.$loc(name_t); self.$check_lvar_name(name, name_l); self.$check_duplicate_pattern_variable(name, name_l); self.parser.$static_env().$declare(name); return self.$n("match_var", [name], self.$variable_map(name_t)); }); $def(self, '$match_hash_var', function $$match_hash_var(name_t) { var self = this, name = nil, expr_l = nil, name_l = nil; name = self.$value(name_t).$to_sym(); expr_l = self.$loc(name_t); name_l = expr_l.$adjust((new Map([["end_pos", -1]]))); self.$check_lvar_name(name, name_l); self.$check_duplicate_pattern_variable(name, name_l); self.parser.$static_env().$declare(name); return self.$n("match_var", [name], $$$($$$($$('Source'), 'Map'), 'Variable').$new(name_l, expr_l)); }); $def(self, '$match_hash_var_from_str', function $$match_hash_var_from_str(begin_t, strings, end_t) { var $a, self = this, string = nil, name = nil, name_l = nil, begin_l = nil, end_l = nil, expr_l = nil; if ($truthy($rb_gt(strings.$length(), 1))) { self.$diagnostic("error", "pm_interp_in_var_name", nil, self.$loc(begin_t).$join(self.$loc(end_t))) }; string = strings['$[]'](0); switch (string.$type().valueOf()) { case "str": $a = [].concat($to_a(string)), (name = ($a[0] == null ? nil : $a[0])), $a; name_l = string.$loc().$expression(); self.$check_lvar_name(name, name_l); self.$check_duplicate_pattern_variable(name, name_l); self.parser.$static_env().$declare(name); if ($truthy((begin_l = string.$loc().$begin()))) { name_l = name_l.$adjust((new Map([["begin_pos", begin_l.$length()]]))) }; if ($truthy((end_l = string.$loc().$end()))) { name_l = name_l.$adjust((new Map([["end_pos", end_l.$length()['$-@']()]]))) }; expr_l = self.$loc(begin_t).$join(string.$loc().$expression()).$join(self.$loc(end_t)); return self.$n("match_var", [name.$to_sym()], $$$($$$($$('Source'), 'Map'), 'Variable').$new(name_l, expr_l)); case "begin": return self.$match_hash_var_from_str(begin_t, string.$children(), end_t) default: return self.$diagnostic("error", "pm_interp_in_var_name", nil, self.$loc(begin_t).$join(self.$loc(end_t))) }; }); $def(self, '$match_rest', function $$match_rest(star_t, name_t) { var self = this, name = nil; if (name_t == null) name_t = nil; if ($truthy(name_t['$nil?']())) { return self.$n0("match_rest", self.$unary_op_map(star_t)) } else { name = self.$match_var(name_t); return self.$n("match_rest", [name], self.$unary_op_map(star_t, name)); }; }, -2); $def(self, '$hash_pattern', function $$hash_pattern(lbrace_t, kwargs, rbrace_t) { var self = this, args = nil; args = self.$check_duplicate_args(kwargs); return self.$n("hash_pattern", args, self.$collection_map(lbrace_t, args, rbrace_t)); }); $def(self, '$array_pattern', function $$array_pattern(lbrack_t, elements, rbrack_t) { var self = this, trailing_comma = nil, node_elements = nil, node_type = nil; if ($truthy(elements['$nil?']())) { return self.$n("array_pattern", nil, self.$collection_map(lbrack_t, [], rbrack_t)) }; trailing_comma = false; node_elements = $send(elements, 'map', [], function $$13(element){ if (element == null) element = nil; if ($eqeq(element.$type(), "match_with_trailing_comma")) { trailing_comma = true; return element.$children().$first(); } else { trailing_comma = false; return element; };}); node_type = ($truthy(trailing_comma) ? ("array_pattern_with_tail") : ("array_pattern")); return self.$n(node_type, node_elements, self.$collection_map(lbrack_t, elements, rbrack_t)); }); $def(self, '$find_pattern', function $$find_pattern(lbrack_t, elements, rbrack_t) { var self = this; return self.$n("find_pattern", elements, self.$collection_map(lbrack_t, elements, rbrack_t)) }); $def(self, '$match_with_trailing_comma', function $$match_with_trailing_comma(match, comma_t) { var self = this; return self.$n("match_with_trailing_comma", [match], self.$expr_map(match.$loc().$expression().$join(self.$loc(comma_t)))) }); $def(self, '$const_pattern', function $$const_pattern(const$, ldelim_t, pattern, rdelim_t) { var self = this; return self.$n("const_pattern", [const$, pattern], $$$($$$($$('Source'), 'Map'), 'Collection').$new(self.$loc(ldelim_t), self.$loc(rdelim_t), const$.$loc().$expression().$join(self.$loc(rdelim_t)))) }); $def(self, '$pin', function $$pin(pin_t, var$) { var self = this; return self.$n("pin", [var$], self.$send_unary_op_map(pin_t, var$)) }); $def(self, '$match_alt', function $$match_alt(left, pipe_t, right) { var self = this, source_map = nil; source_map = self.$binary_op_map(left, pipe_t, right); return self.$n("match_alt", [left, right], source_map); }); $def(self, '$match_as', function $$match_as(value, assoc_t, as) { var self = this, source_map = nil; source_map = self.$binary_op_map(value, assoc_t, as); return self.$n("match_as", [value, as], source_map); }); $def(self, '$match_nil_pattern', function $$match_nil_pattern(dstar_t, nil_t) { var self = this; return self.$n0("match_nil_pattern", self.$arg_prefix_map(dstar_t, nil_t)) }); $def(self, '$match_pair', function $$match_pair(label_type, label, value) { var $a, $b, self = this, begin_t = nil, parts = nil, end_t = nil, label_loc = nil, var_name = nil; if ($eqeq(label_type, "label")) { self.$check_duplicate_pattern_key(label['$[]'](0), label['$[]'](1)); return self.$pair_keyword(label, value); } else { $b = label, $a = $to_ary($b), (begin_t = ($a[0] == null ? nil : $a[0])), (parts = ($a[1] == null ? nil : $a[1])), (end_t = ($a[2] == null ? nil : $a[2])), $b; label_loc = self.$loc(begin_t).$join(self.$loc(end_t)); if ($truthy((var_name = self.$static_string(parts)))) { self.$check_duplicate_pattern_key(var_name, label_loc) } else { self.$diagnostic("error", "pm_interp_in_var_name", nil, label_loc) }; return self.$pair_quoted(begin_t, parts, end_t, value); } }); $def(self, '$match_label', function $$match_label(label_type, label) { var $a, $b, self = this, begin_t = nil, strings = nil, end_t = nil; if ($eqeq(label_type, "label")) { return self.$match_hash_var(label) } else { $b = label, $a = $to_ary($b), (begin_t = ($a[0] == null ? nil : $a[0])), (strings = ($a[1] == null ? nil : $a[1])), (end_t = ($a[2] == null ? nil : $a[2])), $b; return self.$match_hash_var_from_str(begin_t, strings, end_t); } }); self.$private(); $def(self, '$check_condition', function $$check_condition(cond) { var $a, self = this, lhs = nil, rhs = nil, type = nil, $ret_or_2 = nil, lhs_condition = nil, rhs_condition = nil; switch (cond.$type().valueOf()) { case "masgn": if ($truthy($rb_le(self.parser.$version(), 23))) { return self.$diagnostic("error", "masgn_as_condition", nil, cond.$loc().$expression()) } else { return cond } break; case "begin": if ($eqeq(cond.$children().$count(), 1)) { return cond.$updated(nil, [self.$check_condition(cond.$children().$last())]) } else { return cond } break; case "and": case "or": $a = [].concat($to_a(cond)), (lhs = ($a[0] == null ? nil : $a[0])), (rhs = ($a[1] == null ? nil : $a[1])), $a; if ($eqeq(self.parser.$version(), 18)) { return cond } else { return cond.$updated(cond.$type(), [self.$check_condition(lhs), self.$check_condition(rhs)]) }; break; case "irange": case "erange": $a = [].concat($to_a(cond)), (lhs = ($a[0] == null ? nil : $a[0])), (rhs = ($a[1] == null ? nil : $a[1])), $a; type = ($eqeqeq("irange", ($ret_or_2 = cond.$type())) ? ("iflipflop") : ($eqeqeq("erange", $ret_or_2) ? ("eflipflop") : (nil))); if (!$truthy(lhs['$nil?']())) { lhs_condition = self.$check_condition(lhs) }; if (!$truthy(rhs['$nil?']())) { rhs_condition = self.$check_condition(rhs) }; return cond.$updated(type, [lhs_condition, rhs_condition]); case "regexp": return self.$n("match_current_line", [cond], self.$expr_map(cond.$loc().$expression())) default: return cond } }); $def(self, '$check_duplicate_args', function $$check_duplicate_args(args, map) { var self = this; if (map == null) map = (new Map()); return $send(args, 'each', [], function $$14(this_arg){var self = $$14.$$s == null ? this : $$14.$$s; if (this_arg == null) this_arg = nil; switch (this_arg.$type().valueOf()) { case "arg": case "optarg": case "restarg": case "blockarg": case "kwarg": case "kwoptarg": case "kwrestarg": case "shadowarg": return self.$check_duplicate_arg(this_arg, map) case "procarg0": if ($truthy(this_arg.$children()['$[]'](0)['$is_a?']($$('Symbol')))) { return self.$check_duplicate_arg(this_arg, map) } else { return self.$check_duplicate_args(this_arg.$children(), map) } break; case "mlhs": return self.$check_duplicate_args(this_arg.$children(), map) default: return nil };}, {$$s: self}); }, -2); $def(self, '$check_duplicate_arg', function $$check_duplicate_arg(this_arg, map) { var $a, self = this, this_name = nil, that_arg = nil, that_name = nil; if (map == null) map = (new Map()); $a = [].concat($to_a(this_arg)), (this_name = ($a[0] == null ? nil : $a[0])), $a; that_arg = map['$[]'](this_name); $a = [].concat($to_a(that_arg)), (that_name = ($a[0] == null ? nil : $a[0])), $a; if ($truthy(that_arg['$nil?']())) { return ($a = [this_name, this_arg], $send(map, '[]=', $a), $a[$a.length - 1]) } else if ($truthy(self['$arg_name_collides?'](this_name, that_name))) { return self.$diagnostic("error", "duplicate_argument", nil, this_arg.$loc().$name(), [that_arg.$loc().$name()]) } else { return nil }; }, -2); $def(self, '$validate_no_forward_arg_after_restarg', function $$validate_no_forward_arg_after_restarg(args) { var self = this, restarg = nil, forward_arg = nil; restarg = nil; forward_arg = nil; $send(args, 'each', [], function $$15(arg){ if (arg == null) arg = nil; switch (arg.$type().valueOf()) { case "restarg": return (restarg = arg) case "forward_arg": return (forward_arg = arg) default: return nil };}); if (($not(forward_arg['$nil?']()) && ($not(restarg['$nil?']())))) { return self.$diagnostic("error", "forward_arg_after_restarg", nil, forward_arg.$loc().$expression(), [restarg.$loc().$expression()]) } else { return nil }; }); $def(self, '$check_assignment_to_numparam', function $$check_assignment_to_numparam(name, loc) { var self = this, assigning_to_numparam = nil, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy($rb_lt(self.parser.$version(), 27))) { return nil }; assigning_to_numparam = ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.parser.$context()['$in_dynamic_block?']())) ? (name['$=~'](/^_([1-9])$/)) : ($ret_or_2)))) ? (self.parser.$max_numparam_stack()['$has_numparams?']()) : ($ret_or_1)); if ($truthy(assigning_to_numparam)) { return self.$diagnostic("error", "cant_assign_to_numparam", (new Map([["name", name]])), loc) } else { return nil }; }); $def(self, '$check_reserved_for_numparam', function $$check_reserved_for_numparam(name, loc) { var self = this; if ($truthy($rb_lt(self.parser.$version(), 30))) { return nil }; if ($truthy(name['$=~'](/^_([1-9])$/))) { return self.$diagnostic("error", "reserved_for_numparam", (new Map([["name", name]])), loc) } else { return nil }; }); $def(self, '$arg_name_collides?', function $Default_arg_name_collides$ques$16(this_name, that_name) { var self = this, $ret_or_2 = nil, $ret_or_3 = nil; switch (self.parser.$version().valueOf()) { case 18: return this_name['$=='](that_name) case 19: if ($truthy(($ret_or_2 = this_name['$!=']("_")))) { return this_name['$=='](that_name) } else { return $ret_or_2 } break; default: if ($truthy(($ret_or_2 = ($truthy(($ret_or_3 = this_name)) ? (this_name['$[]'](0)['$!=']("_")) : ($ret_or_3))))) { return this_name['$=='](that_name) } else { return $ret_or_2 } } }); $def(self, '$check_lvar_name', function $$check_lvar_name(name, loc) { var self = this; if ($truthy(name['$=~'](/^[[[:lower:]]_][[[:alnum:]]_]*$/))) { return nil } else { return self.$diagnostic("error", "lvar_name", (new Map([["name", name]])), loc) } }); $def(self, '$check_duplicate_pattern_variable', function $$check_duplicate_pattern_variable(name, loc) { var self = this; if ($truthy(name.$to_s()['$start_with?']("_"))) { return nil }; if ($truthy(self.parser.$pattern_variables()['$declared?'](name))) { self.$diagnostic("error", "duplicate_variable_name", (new Map([["name", name.$to_s()]])), loc) }; return self.parser.$pattern_variables().$declare(name); }); $def(self, '$check_duplicate_pattern_key', function $$check_duplicate_pattern_key(name, loc) { var self = this; if ($truthy(self.parser.$pattern_hash_keys()['$declared?'](name))) { self.$diagnostic("error", "duplicate_pattern_key", (new Map([["name", name.$to_s()]])), loc) }; return self.parser.$pattern_hash_keys().$declare(name); }); $def(self, '$n', function $$n(type, children, source_map) { return $$$($$('AST'), 'Node').$new(type, children, (new Map([["location", source_map]]))) }); $def(self, '$n0', function $$n0(type, source_map) { var self = this; return self.$n(type, [], source_map) }); $def(self, '$join_exprs', function $$join_exprs(left_expr, right_expr) { return left_expr.$loc().$expression().$join(right_expr.$loc().$expression()) }); $def(self, '$token_map', function $$token_map(token) { var self = this; return $$$($$('Source'), 'Map').$new(self.$loc(token)) }); $def(self, '$delimited_string_map', function $$delimited_string_map(string_t) { var self = this, str_range = nil, begin_l = nil, end_l = nil; str_range = self.$loc(string_t); begin_l = str_range.$with((new Map([["end_pos", $rb_plus(str_range.$begin_pos(), 1)]]))); end_l = str_range.$with((new Map([["begin_pos", $rb_minus(str_range.$end_pos(), 1)]]))); return $$$($$$($$('Source'), 'Map'), 'Collection').$new(begin_l, end_l, self.$loc(string_t)); }); $def(self, '$prefix_string_map', function $$prefix_string_map(symbol) { var self = this, str_range = nil, begin_l = nil; str_range = self.$loc(symbol); begin_l = str_range.$with((new Map([["end_pos", $rb_plus(str_range.$begin_pos(), 1)]]))); return $$$($$$($$('Source'), 'Map'), 'Collection').$new(begin_l, nil, self.$loc(symbol)); }); $def(self, '$unquoted_map', function $$unquoted_map(token) { var self = this; return $$$($$$($$('Source'), 'Map'), 'Collection').$new(nil, nil, self.$loc(token)) }); $def(self, '$pair_keyword_map', function $$pair_keyword_map(key_t, value_e) { var self = this, key_range = nil, key_l = nil, colon_l = nil; key_range = self.$loc(key_t); key_l = key_range.$adjust((new Map([["end_pos", -1]]))); colon_l = key_range.$with((new Map([["begin_pos", $rb_minus(key_range.$end_pos(), 1)]]))); return [$$$($$$($$('Source'), 'Map'), 'Collection').$new(nil, nil, key_l), $$$($$$($$('Source'), 'Map'), 'Operator').$new(colon_l, key_range.$join(value_e.$loc().$expression()))]; }); $def(self, '$pair_quoted_map', function $$pair_quoted_map(begin_t, end_t, value_e) { var self = this, end_l = nil, quote_l = nil, colon_l = nil; end_l = self.$loc(end_t); quote_l = end_l.$with((new Map([["begin_pos", $rb_minus(end_l.$end_pos(), 2)], ["end_pos", $rb_minus(end_l.$end_pos(), 1)]]))); colon_l = end_l.$with((new Map([["begin_pos", $rb_minus(end_l.$end_pos(), 1)]]))); return [[self.$value(end_t), quote_l], $$$($$$($$('Source'), 'Map'), 'Operator').$new(colon_l, self.$loc(begin_t).$join(value_e.$loc().$expression()))]; }); $def(self, '$expr_map', function $$expr_map(loc) { return $$$($$('Source'), 'Map').$new(loc) }); $def(self, '$collection_map', function $$collection_map(begin_t, parts, end_t) { var self = this, expr_l = nil; if (($truthy(begin_t['$nil?']()) || ($truthy(end_t['$nil?']())))) { if ($truthy(parts['$any?']())) { expr_l = self.$join_exprs(parts.$first(), parts.$last()) } else if ($not(begin_t['$nil?']())) { expr_l = self.$loc(begin_t) } else if ($not(end_t['$nil?']())) { expr_l = self.$loc(end_t) } } else { expr_l = self.$loc(begin_t).$join(self.$loc(end_t)) }; return $$$($$$($$('Source'), 'Map'), 'Collection').$new(self.$loc(begin_t), self.$loc(end_t), expr_l); }); $def(self, '$string_map', function $$string_map(begin_t, parts, end_t) { var self = this, expr_l = nil; if (($truthy(begin_t) && ($truthy(self.$value(begin_t)['$start_with?']("<<"))))) { if ($truthy(parts['$any?']())) { expr_l = self.$join_exprs(parts.$first(), parts.$last()) } else { expr_l = self.$loc(end_t).$begin() }; return $$$($$$($$('Source'), 'Map'), 'Heredoc').$new(self.$loc(begin_t), expr_l, self.$loc(end_t)); } else { return self.$collection_map(begin_t, parts, end_t) } }); $def(self, '$regexp_map', function $$regexp_map(begin_t, end_t, options_e) { var self = this; return $$$($$$($$('Source'), 'Map'), 'Collection').$new(self.$loc(begin_t), self.$loc(end_t), self.$loc(begin_t).$join(options_e.$loc().$expression())) }); $def(self, '$constant_map', function $$constant_map(scope, colon2_t, name_t) { var self = this, expr_l = nil; if ($truthy(scope['$nil?']())) { expr_l = self.$loc(name_t) } else { expr_l = scope.$loc().$expression().$join(self.$loc(name_t)) }; return $$$($$$($$('Source'), 'Map'), 'Constant').$new(self.$loc(colon2_t), self.$loc(name_t), expr_l); }); $def(self, '$variable_map', function $$variable_map(name_t) { var self = this; return $$$($$$($$('Source'), 'Map'), 'Variable').$new(self.$loc(name_t)) }); $def(self, '$binary_op_map', function $$binary_op_map(left_e, op_t, right_e) { var self = this; return $$$($$$($$('Source'), 'Map'), 'Operator').$new(self.$loc(op_t), self.$join_exprs(left_e, right_e)) }); $def(self, '$unary_op_map', function $$unary_op_map(op_t, arg_e) { var self = this, expr_l = nil; if (arg_e == null) arg_e = nil; if ($truthy(arg_e['$nil?']())) { expr_l = self.$loc(op_t) } else { expr_l = self.$loc(op_t).$join(arg_e.$loc().$expression()) }; return $$$($$$($$('Source'), 'Map'), 'Operator').$new(self.$loc(op_t), expr_l); }, -2); $def(self, '$range_map', function $$range_map(start_e, op_t, end_e) { var self = this, expr_l = nil; if (($truthy(start_e) && ($truthy(end_e)))) { expr_l = self.$join_exprs(start_e, end_e) } else if ($truthy(start_e)) { expr_l = start_e.$loc().$expression().$join(self.$loc(op_t)) } else if ($truthy(end_e)) { expr_l = self.$loc(op_t).$join(end_e.$loc().$expression()) }; return $$$($$$($$('Source'), 'Map'), 'Operator').$new(self.$loc(op_t), expr_l); }); $def(self, '$arg_prefix_map', function $$arg_prefix_map(op_t, name_t) { var self = this, expr_l = nil; if (name_t == null) name_t = nil; if ($truthy(name_t['$nil?']())) { expr_l = self.$loc(op_t) } else { expr_l = self.$loc(op_t).$join(self.$loc(name_t)) }; return $$$($$$($$('Source'), 'Map'), 'Variable').$new(self.$loc(name_t), expr_l); }, -2); $def(self, '$kwarg_map', function $$kwarg_map(name_t, value_e) { var self = this, label_range = nil, name_range = nil, expr_l = nil; if (value_e == null) value_e = nil; label_range = self.$loc(name_t); name_range = label_range.$adjust((new Map([["end_pos", -1]]))); if ($truthy(value_e)) { expr_l = self.$loc(name_t).$join(value_e.$loc().$expression()) } else { expr_l = self.$loc(name_t) }; return $$$($$$($$('Source'), 'Map'), 'Variable').$new(name_range, expr_l); }, -2); $def(self, '$module_definition_map', function $$module_definition_map(keyword_t, name_e, operator_t, end_t) { var self = this, name_l = nil; if ($truthy(name_e)) { name_l = name_e.$loc().$expression() }; return $$$($$$($$('Source'), 'Map'), 'Definition').$new(self.$loc(keyword_t), self.$loc(operator_t), name_l, self.$loc(end_t)); }); $def(self, '$definition_map', function $$definition_map(keyword_t, operator_t, name_t, end_t) { var self = this; return $$$($$$($$('Source'), 'Map'), 'MethodDefinition').$new(self.$loc(keyword_t), self.$loc(operator_t), self.$loc(name_t), self.$loc(end_t), nil, nil) }); $def(self, '$endless_definition_map', function $$endless_definition_map(keyword_t, operator_t, name_t, assignment_t, body_e) { var self = this, body_l = nil; body_l = body_e.$loc().$expression(); return $$$($$$($$('Source'), 'Map'), 'MethodDefinition').$new(self.$loc(keyword_t), self.$loc(operator_t), self.$loc(name_t), nil, self.$loc(assignment_t), body_l); }); $def(self, '$send_map', function $$send_map(receiver_e, dot_t, selector_t, begin_t, args, end_t) { var self = this, begin_l = nil, end_l = nil; if (begin_t == null) begin_t = nil; if (args == null) args = []; if (end_t == null) end_t = nil; if ($truthy(receiver_e)) { begin_l = receiver_e.$loc().$expression() } else if ($truthy(selector_t)) { begin_l = self.$loc(selector_t) }; if ($truthy(end_t)) { end_l = self.$loc(end_t) } else if ($truthy(args['$any?']())) { end_l = args.$last().$loc().$expression() } else if ($truthy(selector_t)) { end_l = self.$loc(selector_t) }; return $$$($$$($$('Source'), 'Map'), 'Send').$new(self.$loc(dot_t), self.$loc(selector_t), self.$loc(begin_t), self.$loc(end_t), begin_l.$join(end_l)); }, -4); $def(self, '$var_send_map', function $$var_send_map(variable_e) { return $$$($$$($$('Source'), 'Map'), 'Send').$new(nil, variable_e.$loc().$expression(), nil, nil, variable_e.$loc().$expression()) }); $def(self, '$send_binary_op_map', function $$send_binary_op_map(lhs_e, selector_t, rhs_e) { var self = this; return $$$($$$($$('Source'), 'Map'), 'Send').$new(nil, self.$loc(selector_t), nil, nil, self.$join_exprs(lhs_e, rhs_e)) }); $def(self, '$send_unary_op_map', function $$send_unary_op_map(selector_t, arg_e) { var self = this, expr_l = nil; if ($truthy(arg_e['$nil?']())) { expr_l = self.$loc(selector_t) } else { expr_l = self.$loc(selector_t).$join(arg_e.$loc().$expression()) }; return $$$($$$($$('Source'), 'Map'), 'Send').$new(nil, self.$loc(selector_t), nil, nil, expr_l); }); $def(self, '$index_map', function $$index_map(receiver_e, lbrack_t, rbrack_t) { var self = this; return $$$($$$($$('Source'), 'Map'), 'Index').$new(self.$loc(lbrack_t), self.$loc(rbrack_t), receiver_e.$loc().$expression().$join(self.$loc(rbrack_t))) }); $def(self, '$send_index_map', function $$send_index_map(receiver_e, lbrack_t, rbrack_t) { var self = this; return $$$($$$($$('Source'), 'Map'), 'Send').$new(nil, self.$loc(lbrack_t).$join(self.$loc(rbrack_t)), nil, nil, receiver_e.$loc().$expression().$join(self.$loc(rbrack_t))) }); $def(self, '$block_map', function $$block_map(receiver_l, begin_t, end_t) { var self = this; return $$$($$$($$('Source'), 'Map'), 'Collection').$new(self.$loc(begin_t), self.$loc(end_t), receiver_l.$join(self.$loc(end_t))) }); $def(self, '$keyword_map', function $$keyword_map(keyword_t, begin_t, args, end_t) { var self = this, $ret_or_1 = nil, end_l = nil; args = ($truthy(($ret_or_1 = args)) ? ($ret_or_1) : ([])); if ($truthy(end_t)) { end_l = self.$loc(end_t) } else if (($truthy(args['$any?']()) && ($not(args.$last()['$nil?']())))) { end_l = args.$last().$loc().$expression() } else if (($truthy(args['$any?']()) && ($truthy($rb_gt(args.$count(), 1))))) { end_l = args['$[]'](-2).$loc().$expression() } else { end_l = self.$loc(keyword_t) }; return $$$($$$($$('Source'), 'Map'), 'Keyword').$new(self.$loc(keyword_t), self.$loc(begin_t), self.$loc(end_t), self.$loc(keyword_t).$join(end_l)); }); $def(self, '$keyword_mod_map', function $$keyword_mod_map(pre_e, keyword_t, post_e) { var self = this; return $$$($$$($$('Source'), 'Map'), 'Keyword').$new(self.$loc(keyword_t), nil, nil, self.$join_exprs(pre_e, post_e)) }); $def(self, '$condition_map', function $$condition_map(keyword_t, cond_e, begin_t, body_e, else_t, else_e, end_t) { var self = this, end_l = nil; if ($truthy(end_t)) { end_l = self.$loc(end_t) } else if (($truthy(else_e) && ($truthy(else_e.$loc().$expression())))) { end_l = else_e.$loc().$expression() } else if ($truthy(self.$loc(else_t))) { end_l = self.$loc(else_t) } else if (($truthy(body_e) && ($truthy(body_e.$loc().$expression())))) { end_l = body_e.$loc().$expression() } else if ($truthy(self.$loc(begin_t))) { end_l = self.$loc(begin_t) } else { end_l = cond_e.$loc().$expression() }; return $$$($$$($$('Source'), 'Map'), 'Condition').$new(self.$loc(keyword_t), self.$loc(begin_t), self.$loc(else_t), self.$loc(end_t), self.$loc(keyword_t).$join(end_l)); }); $def(self, '$ternary_map', function $$ternary_map(begin_e, question_t, mid_e, colon_t, end_e) { var self = this; return $$$($$$($$('Source'), 'Map'), 'Ternary').$new(self.$loc(question_t), self.$loc(colon_t), self.$join_exprs(begin_e, end_e)) }); $def(self, '$for_map', function $$for_map(keyword_t, in_t, begin_t, end_t) { var self = this; return $$$($$$($$('Source'), 'Map'), 'For').$new(self.$loc(keyword_t), self.$loc(in_t), self.$loc(begin_t), self.$loc(end_t), self.$loc(keyword_t).$join(self.$loc(end_t))) }); $def(self, '$rescue_body_map', function $$rescue_body_map(keyword_t, exc_list_e, assoc_t, exc_var_e, then_t, compstmt_e) { var self = this, end_l = nil; if ($truthy(compstmt_e)) { end_l = compstmt_e.$loc().$expression() }; if (($truthy(end_l['$nil?']()) && ($truthy(then_t)))) { end_l = self.$loc(then_t) }; if (($truthy(end_l['$nil?']()) && ($truthy(exc_var_e)))) { end_l = exc_var_e.$loc().$expression() }; if (($truthy(end_l['$nil?']()) && ($truthy(exc_list_e)))) { end_l = exc_list_e.$loc().$expression() }; if ($truthy(end_l['$nil?']())) { end_l = self.$loc(keyword_t) }; return $$$($$$($$('Source'), 'Map'), 'RescueBody').$new(self.$loc(keyword_t), self.$loc(assoc_t), self.$loc(then_t), self.$loc(keyword_t).$join(end_l)); }); $def(self, '$eh_keyword_map', function $$eh_keyword_map(compstmt_e, keyword_t, body_es, else_t, else_e) { var self = this, begin_l = nil, end_l = nil; if ($truthy(compstmt_e['$nil?']())) { if ($truthy(keyword_t['$nil?']())) { begin_l = body_es.$first().$loc().$expression() } else { begin_l = self.$loc(keyword_t) } } else { begin_l = compstmt_e.$loc().$expression() }; if ($truthy(else_t)) { if ($truthy(else_e['$nil?']())) { end_l = self.$loc(else_t) } else { end_l = else_e.$loc().$expression() } } else if ($not(body_es.$last()['$nil?']())) { end_l = body_es.$last().$loc().$expression() } else { end_l = self.$loc(keyword_t) }; return $$$($$$($$('Source'), 'Map'), 'Condition').$new(self.$loc(keyword_t), nil, self.$loc(else_t), nil, begin_l.$join(end_l)); }); $def(self, '$guard_map', function $$guard_map(keyword_t, guard_body_e) { var self = this, keyword_l = nil, guard_body_l = nil; keyword_l = self.$loc(keyword_t); guard_body_l = guard_body_e.$loc().$expression(); return $$$($$$($$('Source'), 'Map'), 'Keyword').$new(keyword_l, nil, nil, keyword_l.$join(guard_body_l)); }); $def(self, '$static_string', function $$static_string(nodes) {try { var $t_return = $thrower('return'); var self = this; return $send(nodes, 'map', [], function $$17(node){var self = $$17.$$s == null ? this : $$17.$$s, string = nil; if (node == null) node = nil; switch (node.$type().valueOf()) { case "str": return node.$children()['$[]'](0) case "begin": if ($truthy((string = self.$static_string(node.$children())))) { return string } else { $t_return.$throw(nil, $$17.$$is_lambda) } break; default: $t_return.$throw(nil, $$17.$$is_lambda) };}, {$$s: self, $$ret: $t_return}).$join()} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }); $def(self, '$static_regexp', function $$static_regexp(parts, options) { var self = this, source = nil; source = self.$static_string(parts); if ($truthy(source['$nil?']())) { return nil }; source = ($truthy(options.$children()['$include?']("u")) ? (source.$encode($$$($$('Encoding'), 'UTF_8'))) : ($truthy(options.$children()['$include?']("e")) ? (source.$encode($$$($$('Encoding'), 'EUC_JP'))) : ($truthy(options.$children()['$include?']("s")) ? (source.$encode($$$($$('Encoding'), 'WINDOWS_31J'))) : ($truthy(options.$children()['$include?']("n")) ? (source.$encode($$$($$('Encoding'), 'BINARY'))) : (source))))); return $$('Regexp').$new(source, ($truthy(options.$children()['$include?']("x")) ? ($$$($$('Regexp'), 'EXTENDED')) : nil)); }); $def(self, '$static_regexp_node', function $$static_regexp_node(node) { var $a, self = this, parts = nil, options = nil; if ($eqeq(node.$type(), "regexp")) { if (($truthy($rb_ge(self.parser.$version(), 33)) && ($truthy($send(node.$children()['$[]']($range(0, -2, false)), 'any?', [], function $$18(child){ if (child == null) child = nil; return child.$type()['$!=']("str");}))))) { return nil }; $a = [node.$children()['$[]']($range(0, -2, false)), node.$children()['$[]'](-1)], (parts = $a[0]), (options = $a[1]), $a; return self.$static_regexp(parts, options); } else { return nil } }); $def(self, '$collapse_string_parts?', function $Default_collapse_string_parts$ques$19(parts) { var $ret_or_1 = nil; if ($truthy(($ret_or_1 = parts['$one?']()))) { return ["str", "dstr"]['$include?'](parts.$first().$type()) } else { return $ret_or_1 } }); $def(self, '$value', function $$value(token) { return token['$[]'](0) }); $def(self, '$string_value', function $$string_value(token) { var self = this; if (!$truthy(token['$[]'](0)['$valid_encoding?']())) { self.$diagnostic("error", "invalid_encoding", nil, token['$[]'](1)) }; return token['$[]'](0); }); $def(self, '$loc', function $$loc(token) { if (($truthy(token) && ($truthy(token['$[]'](0))))) { return token['$[]'](1) } else { return nil } }); $def(self, '$diagnostic', function $$diagnostic(type, reason, arguments$, location, highlights) { var self = this; if (highlights == null) highlights = []; self.parser.$diagnostics().$process($$('Diagnostic').$new(type, reason, arguments$, location, highlights)); if ($eqeq(type, "error")) { return self.parser.$send("yyerror") } else { return nil }; }, -5); $def(self, '$validate_definee', function $$validate_definee(definee) { var self = this; switch (definee.$type().valueOf()) { case "int": case "str": case "dstr": case "sym": case "dsym": case "regexp": case "array": case "hash": self.$diagnostic("error", "singleton_literal", nil, definee.$loc().$expression()); return false; default: return true } }); $def(self, '$rewrite_hash_args_to_kwargs', function $$rewrite_hash_args_to_kwargs(args) { var $a, self = this; if (($truthy(args['$any?']()) && ($truthy(self['$kwargs?'](args.$last()))))) { return ($a = [$rb_minus(args.$length(), 1), args['$[]']($rb_minus(args.$length(), 1)).$updated("kwargs")], $send(args, '[]=', $a), $a[$a.length - 1]) } else if ((($truthy($rb_gt(args.$length(), 1)) && ($eqeq(args.$last().$type(), "block_pass"))) && ($truthy(self['$kwargs?'](args['$[]']($rb_minus(args.$length(), 2))))))) { return ($a = [$rb_minus(args.$length(), 2), args['$[]']($rb_minus(args.$length(), 2)).$updated("kwargs")], $send(args, '[]=', $a), $a[$a.length - 1]) } else { return nil } }); return $def(self, '$kwargs?', function $Default_kwargs$ques$20(node) { var $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = node.$type()['$==']("hash"))) ? (node.$loc().$begin()['$nil?']()) : ($ret_or_2))))) { return node.$loc().$end()['$nil?']() } else { return $ret_or_1 } }); })($$('Builders'), null, $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/context"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $def = Opal.def, $send = Opal.send, $to_a = Opal.to_a, $truthy = Opal.truthy, $nesting = [], nil = Opal.nil; Opal.add_stubs('reset,attr_accessor,in_block,in_lambda'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Context'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $const_set($nesting[0], 'FLAGS', ["in_defined", "in_kwarg", "in_argdef", "in_def", "in_class", "in_block", "in_lambda"]); $def(self, '$initialize', function $$initialize() { var self = this; return self.$reset() }); $def(self, '$reset', function $$reset() { var self = this; self.in_defined = false; self.in_kwarg = false; self.in_argdef = false; self.in_def = false; self.in_class = false; self.in_block = false; return (self.in_lambda = false); }); $send(self, 'attr_accessor', $to_a($$('FLAGS'))); return $def(self, '$in_dynamic_block?', function $Context_in_dynamic_block$ques$1() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$in_block()))) { return $ret_or_1 } else { return self.$in_lambda() } }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/max_numparam_stack"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $def = Opal.def, $truthy = Opal.truthy, $rb_gt = Opal.rb_gt, $ensure_kwargs = Opal.ensure_kwargs, $get_kwarg = Opal.get_kwarg, $send = Opal.send, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,==,size,set,top,>,max,[],last,push,pop,private,[]='); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'MaxNumparamStack'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.stack = nil; self.$attr_reader("stack"); $const_set($nesting[0], 'ORDINARY_PARAMS', -1); $def(self, '$initialize', function $$initialize() { var self = this; return (self.stack = []) }); $def(self, '$empty?', function $MaxNumparamStack_empty$ques$1() { var self = this; return self.stack.$size()['$=='](0) }); $def(self, '$has_ordinary_params!', function $MaxNumparamStack_has_ordinary_params$excl$2() { var self = this; return self.$set($$('ORDINARY_PARAMS')) }); $def(self, '$has_ordinary_params?', function $MaxNumparamStack_has_ordinary_params$ques$3() { var self = this; return self.$top()['$==']($$('ORDINARY_PARAMS')) }); $def(self, '$has_numparams?', function $MaxNumparamStack_has_numparams$ques$4() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$top()))) { return $rb_gt(self.$top(), 0) } else { return $ret_or_1 } }); $def(self, '$register', function $$register(numparam) { var self = this; return self.$set([self.$top(), numparam].$max()) }); $def(self, '$top', function $$top() { var self = this; return self.stack.$last()['$[]']("value") }); $def(self, '$push', function $$push($kwargs) { var static$, self = this; $kwargs = $ensure_kwargs($kwargs); static$ = $get_kwarg($kwargs, "static"); return self.stack.$push((new Map([["value", 0], ["static", static$]]))); }); $def(self, '$pop', function $$pop() { var self = this; return self.stack.$pop()['$[]']("value") }); self.$private(); return $def(self, '$set', function $$set(value) { var $a, self = this; return ($a = ["value", value], $send(self.stack.$last(), '[]=', $a), $a[$a.length - 1]) }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/current_arg_stack"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $rb_minus = Opal.rb_minus, $send = Opal.send, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,freeze,==,size,<<,[]=,-,length,pop,clear,last'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $super) { var self = $klass($base, $super, 'CurrentArgStack'); var $proto = self.$$prototype; $proto.stack = nil; self.$attr_reader("stack"); $def(self, '$initialize', function $$initialize() { var self = this; self.stack = []; return self.$freeze(); }); $def(self, '$empty?', function $CurrentArgStack_empty$ques$1() { var self = this; return self.stack.$size()['$=='](0) }); $def(self, '$push', function $$push(value) { var self = this; return self.stack['$<<'](value) }); $def(self, '$set', function $$set(value) { var $a, self = this; return ($a = [$rb_minus(self.stack.$length(), 1), value], $send(self.stack, '[]=', $a), $a[$a.length - 1]) }); $def(self, '$pop', function $$pop() { var self = this; return self.stack.$pop() }); $def(self, '$reset', function $$reset() { var self = this; return self.stack.$clear() }); return $def(self, '$top', function $$top() { var self = this; return self.stack.$last() }); })($nesting[0], null) })($nesting[0], $nesting) }; Opal.modules["parser/variables_stack"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('push,empty?,<<,new,pop,clear,last,to_sym,include?'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'VariablesStack'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.stack = nil; $def(self, '$initialize', function $$initialize() { var self = this; self.stack = []; return self.$push(); }); $def(self, '$empty?', function $VariablesStack_empty$ques$1() { var self = this; return self.stack['$empty?']() }); $def(self, '$push', function $$push() { var self = this; return self.stack['$<<']($$('Set').$new()) }); $def(self, '$pop', function $$pop() { var self = this; return self.stack.$pop() }); $def(self, '$reset', function $$reset() { var self = this; return self.stack.$clear() }); $def(self, '$declare', function $$declare(name) { var self = this; return self.stack.$last()['$<<'](name.$to_sym()) }); return $def(self, '$declared?', function $VariablesStack_declared$ques$2(name) { var self = this; return self.stack.$last()['$include?'](name.$to_sym()) }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/base"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $defs = Opal.defs, $send = Opal.send, $gvars = Opal.gvars, $eqeq = Opal.eqeq, $truthy = Opal.truthy, $def = Opal.def, $not = Opal.not, $eqeqeq = Opal.eqeqeq, $to_ary = Opal.to_ary, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('default_parser,setup_source_buffer,default_encoding,parse,parse_with_comments,read,new,all_errors_are_fatal=,diagnostics,ignore_warnings=,consumer=,lambda,puts,render,force_encoding,dup,==,name,raw_source=,source=,private_class_method,attr_reader,version,diagnostics=,static_env=,context=,parser=,[],class,reset,source_buffer=,do_parse,comments=,comments,tokens=,!,raise,tokens,private,advance,===,diagnostic,map,process,yyerror,token_to_str'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Base'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.lexer = $proto.diagnostics = $proto.static_env = $proto.context = $proto.builder = $proto.current_arg_stack = $proto.pattern_variables = $proto.pattern_hash_keys = nil; $defs(self, '$parse', function $$parse(string, file, line) { var self = this, parser = nil, source_buffer = nil; if (file == null) file = "(string)"; if (line == null) line = 1; parser = self.$default_parser(); source_buffer = self.$setup_source_buffer(file, line, string, parser.$default_encoding()); return parser.$parse(source_buffer); }, -2); $defs(self, '$parse_with_comments', function $$parse_with_comments(string, file, line) { var self = this, parser = nil, source_buffer = nil; if (file == null) file = "(string)"; if (line == null) line = 1; parser = self.$default_parser(); source_buffer = self.$setup_source_buffer(file, line, string, parser.$default_encoding()); return parser.$parse_with_comments(source_buffer); }, -2); $defs(self, '$parse_file', function $$parse_file(filename) { var self = this; return self.$parse($$('File').$read(filename), filename) }); $defs(self, '$parse_file_with_comments', function $$parse_file_with_comments(filename) { var self = this; return self.$parse_with_comments($$('File').$read(filename), filename) }); $defs(self, '$default_parser', function $$default_parser() { var self = this, parser = nil; parser = self.$new(); parser.$diagnostics()['$all_errors_are_fatal='](true); parser.$diagnostics()['$ignore_warnings='](true); parser.$diagnostics()['$consumer=']($send(self, 'lambda', [], function $$1(diagnostic){ if ($gvars.stderr == null) $gvars.stderr = nil; if (diagnostic == null) diagnostic = nil; return $gvars.stderr.$puts(diagnostic.$render());})); return parser; }); $defs(self, '$setup_source_buffer', function $$setup_source_buffer(file, line, string, encoding) { var self = this, source_buffer = nil; string = string.$dup().$force_encoding(encoding); source_buffer = $$$($$('Source'), 'Buffer').$new(file, line); if ($eqeq(self.$name(), "Parser::Ruby18")) { source_buffer['$raw_source='](string) } else { source_buffer['$source='](string) }; return source_buffer; }); self.$private_class_method("setup_source_buffer"); self.$attr_reader("lexer"); self.$attr_reader("diagnostics"); self.$attr_reader("builder"); self.$attr_reader("static_env"); self.$attr_reader("source_buffer"); self.$attr_reader("context"); self.$attr_reader("max_numparam_stack"); self.$attr_reader("current_arg_stack"); self.$attr_reader("pattern_variables"); self.$attr_reader("pattern_hash_keys"); $def(self, '$initialize', function $$initialize(builder) { var self = this; if (builder == null) builder = $$$($$$($$('Parser'), 'Builders'), 'Default').$new(); self.diagnostics = $$$($$('Diagnostic'), 'Engine').$new(); self.static_env = $$('StaticEnvironment').$new(); self.context = $$('Context').$new(); self.max_numparam_stack = $$('MaxNumparamStack').$new(); self.current_arg_stack = $$('CurrentArgStack').$new(); self.pattern_variables = $$('VariablesStack').$new(); self.pattern_hash_keys = $$('VariablesStack').$new(); self.lexer = $$('Lexer').$new(self.$version()); self.lexer['$diagnostics='](self.diagnostics); self.lexer['$static_env='](self.static_env); self.lexer['$context='](self.context); self.builder = builder; self.builder['$parser='](self); self.last_token = nil; if (($truthy($$$(self.$class(), 'Racc_debug_parser')) && ($truthy($$('ENV')['$[]']("RACC_DEBUG"))))) { self.yydebug = true }; return self.$reset(); }, -1); $def(self, '$reset', function $$reset() { var self = this; self.source_buffer = nil; self.lexer.$reset(); self.static_env.$reset(); self.context.$reset(); self.current_arg_stack.$reset(); self.pattern_variables.$reset(); self.pattern_hash_keys.$reset(); return self; }); $def(self, '$parse', function $$parse(source_buffer) { var $a, self = this, $ret_or_1 = nil; return (function() { try { self.lexer['$source_buffer='](source_buffer); self.source_buffer = source_buffer; if ($truthy(($ret_or_1 = self.$do_parse()))) { return $ret_or_1 } else { return nil }; } finally { ((self.source_buffer = nil), ($a = [nil], $send(self.lexer, 'source_buffer=', $a), $a[$a.length - 1])) }; })() }); $def(self, '$parse_with_comments', function $$parse_with_comments(source_buffer) { var $a, self = this; return (function() { try { self.lexer['$comments=']([]); return [self.$parse(source_buffer), self.lexer.$comments()]; } finally { ($a = [nil], $send(self.lexer, 'comments=', $a), $a[$a.length - 1]) }; })() }); $def(self, '$tokenize', function $$tokenize(source_buffer, recover) { var $a, self = this, ast = nil; if (recover == null) recover = false; return (function() { try { self.lexer['$tokens=']([]); self.lexer['$comments=']([]); try { ast = self.$parse(source_buffer) } catch ($err) { if (Opal.rescue($err, [$$$($$('Parser'), 'SyntaxError')])) { try { if ($not(recover)) { self.$raise() } } finally { Opal.pop_exception($err); } } else { throw $err; } };; return [ast, self.lexer.$comments(), self.lexer.$tokens()]; } finally { (($a = [nil], $send(self.lexer, 'tokens=', $a), $a[$a.length - 1]), ($a = [nil], $send(self.lexer, 'comments=', $a), $a[$a.length - 1])) }; })(); }, -2); self.$private(); $def(self, '$next_token', function $$next_token() { var self = this, token = nil; token = self.lexer.$advance(); self.last_token = token; return token; }); $def(self, '$check_kwarg_name', function $$check_kwarg_name(name_t) { var self = this, $ret_or_1 = nil; if ($eqeqeq(/^[a-z_]/, ($ret_or_1 = name_t['$[]'](0)))) { return nil } else if ($eqeqeq(/^[A-Z]/, $ret_or_1)) { return self.$diagnostic("error", "argument_const", nil, name_t) } else { return nil } }); $def(self, '$diagnostic', function $$diagnostic(level, reason, arguments$, location_t, highlights_ts) { var $a, $b, self = this, _ = nil, location = nil, highlights = nil; if (highlights_ts == null) highlights_ts = []; $b = location_t, $a = $to_ary($b), (_ = ($a[0] == null ? nil : $a[0])), (location = ($a[1] == null ? nil : $a[1])), $b; highlights = $send(highlights_ts, 'map', [], function $$2(token){var $c, $d, range = nil; if (token == null) token = nil; $d = token, $c = $to_ary($d), (_ = ($c[0] == null ? nil : $c[0])), (range = ($c[1] == null ? nil : $c[1])), $d; return range;}); self.diagnostics.$process($$('Diagnostic').$new(level, reason, arguments$, location, highlights)); if ($eqeq(level, "error")) { return self.$yyerror() } else { return nil }; }, -5); return $def(self, '$on_error', function $$on_error(error_token_id, error_value, value_stack) { var $a, $b, self = this, token_name = nil, _ = nil, location = nil; token_name = self.$token_to_str(error_token_id); $b = error_value, $a = $to_ary($b), (_ = ($a[0] == null ? nil : $a[0])), (location = ($a[1] == null ? nil : $a[1])), $b; return self.diagnostics.$process($$('Diagnostic').$new("error", "unexpected_token", (new Map([["token", token_name]])), location)); }); })($nesting[0], $$$($$('Racc'), 'Parser'), $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/rewriter"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $const_set = Opal.const_set, $slice = Opal.slice, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('new,process,include?,type,remove,wrap,insert_before,insert_after,replace,freeze,join,extend,warn_of_deprecation,class,warned_of_deprecation='); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Rewriter'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.source_rewriter = nil; $def(self, '$rewrite', function $$rewrite(source_buffer, ast) { var self = this; self.source_rewriter = $$$($$('Source'), 'Rewriter').$new(source_buffer); self.$process(ast); return self.source_rewriter.$process(); }); $def(self, '$assignment?', function $Rewriter_assignment$ques$1(node) { return ["lvasgn", "ivasgn", "gvasgn", "cvasgn", "casgn"]['$include?'](node.$type()) }); $def(self, '$remove', function $$remove(range) { var self = this; return self.source_rewriter.$remove(range) }); $def(self, '$wrap', function $$wrap(range, before, after) { var self = this; return self.source_rewriter.$wrap(range, before, after) }); $def(self, '$insert_before', function $$insert_before(range, content) { var self = this; return self.source_rewriter.$insert_before(range, content) }); $def(self, '$insert_after', function $$insert_after(range, content) { var self = this; return self.source_rewriter.$insert_after(range, content) }); $def(self, '$replace', function $$replace(range, content) { var self = this; return self.source_rewriter.$replace(range, content) }); $const_set($nesting[0], 'DEPRECATION_WARNING', ["Parser::Rewriter is deprecated.", "Please update your code to use Parser::TreeRewriter instead"].$join("\n").$freeze()); self.$extend($$('Deprecation')); return $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; self.$class().$warn_of_deprecation(); $$$($$('Source'), 'Rewriter')['$warned_of_deprecation='](true); return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', $to_a($fwd_rest), $yield); }, -1); })($nesting[0], $$$($$$($$('Parser'), 'AST'), 'Processor'), $nesting) })($nesting[0], $nesting) }; Opal.modules["parser/tree_rewriter"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $ensure_kwargs = Opal.ensure_kwargs, $kwrestargs = Opal.kwrestargs, $def = Opal.def, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('new,process,include?,type,remove,wrap,insert_before,insert_after,replace'); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'TreeRewriter'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.source_rewriter = nil; $def(self, '$rewrite', function $$rewrite(source_buffer, ast, $kwargs) { var policy, self = this; $kwargs = $ensure_kwargs($kwargs); policy = $kwrestargs($kwargs, {}); self.source_rewriter = $$$($$$($$('Parser'), 'Source'), 'TreeRewriter').$new(source_buffer, Opal.to_hash(policy)); self.$process(ast); return self.source_rewriter.$process(); }, -3); $def(self, '$assignment?', function $TreeRewriter_assignment$ques$1(node) { return ["lvasgn", "ivasgn", "gvasgn", "cvasgn", "casgn"]['$include?'](node.$type()) }); $def(self, '$remove', function $$remove(range) { var self = this; return self.source_rewriter.$remove(range) }); $def(self, '$wrap', function $$wrap(range, before, after) { var self = this; return self.source_rewriter.$wrap(range, before, after) }); $def(self, '$insert_before', function $$insert_before(range, content) { var self = this; return self.source_rewriter.$insert_before(range, content) }); $def(self, '$insert_after', function $$insert_after(range, content) { var self = this; return self.source_rewriter.$insert_after(range, content) }); return $def(self, '$replace', function $$replace(range, content) { var self = this; return self.source_rewriter.$replace(range, content) }); })($nesting[0], $$$($$$($$('Parser'), 'AST'), 'Processor'), $nesting) })($nesting[0], $nesting) }; Opal.modules["parser"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $truthy = Opal.truthy, $module = Opal.module, $eqeq = Opal.eqeq, self = Opal.top, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('=~,raise,require,=='); if ($truthy($$('RUBY_VERSION')['$=~'](/^1\.[89]\./))) { self.$require("./parser.rb"+ '/../' + "parser/version"); self.$raise($$('LoadError'), "parser v" + ($$$($$('Parser'), 'VERSION')) + " cannot run on Ruby " + ($$('RUBY_VERSION')) + ".\n" + "Please upgrade to Ruby 2.0.0 or higher, or use an older version of the parser gem.\n"); }; self.$require("set"); self.$require("racc/parser"); self.$require("ast"); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$require("./parser.rb"+ '/../' + "parser/version"); self.$require("./parser.rb"+ '/../' + "parser/messages"); self.$require("./parser.rb"+ '/../' + "parser/deprecation"); (function($base) { var self = $module($base, 'AST'); self.$require("./parser.rb"+ '/../' + "parser/ast/node"); self.$require("./parser.rb"+ '/../' + "parser/ast/processor"); return self.$require("./parser.rb"+ '/../' + "parser/meta"); })($nesting[0]); (function($base) { var self = $module($base, 'Source'); self.$require("./parser.rb"+ '/../' + "parser/source/buffer"); self.$require("./parser.rb"+ '/../' + "parser/source/range"); self.$require("./parser.rb"+ '/../' + "parser/source/comment"); self.$require("./parser.rb"+ '/../' + "parser/source/comment/associator"); self.$require("./parser.rb"+ '/../' + "parser/source/rewriter"); self.$require("./parser.rb"+ '/../' + "parser/source/rewriter/action"); self.$require("./parser.rb"+ '/../' + "parser/source/tree_rewriter"); self.$require("./parser.rb"+ '/../' + "parser/source/tree_rewriter/action"); self.$require("./parser.rb"+ '/../' + "parser/source/map"); self.$require("./parser.rb"+ '/../' + "parser/source/map/operator"); self.$require("./parser.rb"+ '/../' + "parser/source/map/collection"); self.$require("./parser.rb"+ '/../' + "parser/source/map/constant"); self.$require("./parser.rb"+ '/../' + "parser/source/map/variable"); self.$require("./parser.rb"+ '/../' + "parser/source/map/keyword"); self.$require("./parser.rb"+ '/../' + "parser/source/map/definition"); self.$require("./parser.rb"+ '/../' + "parser/source/map/method_definition"); self.$require("./parser.rb"+ '/../' + "parser/source/map/send"); self.$require("./parser.rb"+ '/../' + "parser/source/map/index"); self.$require("./parser.rb"+ '/../' + "parser/source/map/condition"); self.$require("./parser.rb"+ '/../' + "parser/source/map/ternary"); self.$require("./parser.rb"+ '/../' + "parser/source/map/for"); self.$require("./parser.rb"+ '/../' + "parser/source/map/rescue_body"); self.$require("./parser.rb"+ '/../' + "parser/source/map/heredoc"); return self.$require("./parser.rb"+ '/../' + "parser/source/map/objc_kwarg"); })($nesting[0]); self.$require("./parser.rb"+ '/../' + "parser/syntax_error"); self.$require("./parser.rb"+ '/../' + "parser/clobbering_error"); self.$require("./parser.rb"+ '/../' + "parser/unknown_encoding_in_magic_comment_error"); self.$require("./parser.rb"+ '/../' + "parser/diagnostic"); self.$require("./parser.rb"+ '/../' + "parser/diagnostic/engine"); self.$require("./parser.rb"+ '/../' + "parser/static_environment"); if ($eqeq($$('RUBY_ENGINE'), "truffleruby")) { self.$require("./parser.rb"+ '/../' + "parser/lexer-F0") } else { self.$require("./parser.rb"+ '/../' + "parser/lexer-F1") }; self.$require("./parser.rb"+ '/../' + "parser/lexer-strings"); self.$require("./parser.rb"+ '/../' + "parser/lexer/literal"); self.$require("./parser.rb"+ '/../' + "parser/lexer/stack_state"); self.$require("./parser.rb"+ '/../' + "parser/lexer/dedenter"); (function($base) { var self = $module($base, 'Builders'); return self.$require("./parser.rb"+ '/../' + "parser/builders/default") })($nesting[0]); self.$require("./parser.rb"+ '/../' + "parser/context"); self.$require("./parser.rb"+ '/../' + "parser/max_numparam_stack"); self.$require("./parser.rb"+ '/../' + "parser/current_arg_stack"); self.$require("./parser.rb"+ '/../' + "parser/variables_stack"); self.$require("./parser.rb"+ '/../' + "parser/base"); self.$require("./parser.rb"+ '/../' + "parser/rewriter"); return self.$require("./parser.rb"+ '/../' + "parser/tree_rewriter"); })($nesting[0], $nesting); }; Opal.modules["parser/ruby32"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $return_val = Opal.return_val, $def = Opal.def, $truthy = Opal.truthy, $not = Opal.not, $send = Opal.send, $rb_gt = Opal.rb_gt, $thrower = Opal.thrower, $hash_rehash = Opal.hash_rehash, $const_set = Opal.const_set, $to_a = Opal.to_a, $to_ary = Opal.to_ary, $eqeq = Opal.eqeq, $slice = Opal.slice, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,end_with?,[],!,include?,diagnostic,extend_static,push,cmdarg,cond,unextend,pop,children,in_dynamic_block?,declared?,static_env,=~,expression,loc,has_ordinary_params?,max_numparam_stack,dup,stack,reverse_each,>,declare,register,to_i,make_shareable,compstmt,<<,preexe,nil?,empty?,begin_body,state=,alias,gvar,back_ref,undef_method,condition_mod,loop_mod,rescue_body,postexe,multi_assign,assign,array,op_assign,index,call_method,const_op_assignable,const_fetch,endless_method_name,def_endless_method,local_pop,in_def=,in_def,def_endless_singleton,logical_op,not_op,command_start=,in_kwarg,in_kwarg=,match_pattern,match_pattern_p,local_push,in_argdef=,in_block=,in_block,block,keyword_cmd,multi_lhs,begin,splat,concat,assignable,index_asgn,==,attr_asgn,const_global,const,symbol_internal,range_inclusive,range_exclusive,binary_op,unary_op,match_op,in_defined=,ternary,associate,declared_forward_args?,forwarded_args,block_pass,declared_anonymous_blockarg?,declared_anonymous_restarg?,forwarded_restarg,begin_keyword,condition,loop,case,case_match,for,in_class=,def_class,in_class,def_sclass,def_module,def_method,def_singleton,context,in_lambda,arg,restarg,size,procarg0,args,has_ordinary_params!,set,shadowarg,extend_dynamic,in_lambda=,call_lambda,has_numparams?,numargs,top,any?,when,in_pattern,if_guard,unless_guard,match_with_trailing_comma,array_pattern,find_pattern,hash_pattern,match_as,match_alt,const_pattern,match_rest,match_pair,match_label,match_nil_pattern,accessible,match_var,ident,pin,string_compose,dedent_string,dedent_level,string,character,xstring_compose,regexp_options,regexp_compose,words_compose,word,symbols_compose,string_internal,ivar,cvar,symbol,symbol_compose,respond_to?,negate,unary_num,integer,float,rational,complex,nil,self,true,false,__FILE__,__LINE__,__ENCODING__,nth_ref,declare_forward_args,forward_arg,check_kwarg_name,kwoptarg,kwarg,kwnilarg,kwrestarg,declare_anonymous_kwrestarg,optarg,declare_anonymous_restarg,blockarg,declare_anonymous_blockarg,pair,pair_keyword,pair_label,pair_quoted,kwsplat,declared_anonymous_kwrestarg?,forwarded_kwrestarg,yyerrok'); self.$require("racc/parser.rb"); self.$require("parser/ruby32.rb"+ '/../' + "../parser"); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Ruby32'); var $a, $b, $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), racc_action_table = nil, racc_action_check = nil, racc_action_pointer = nil, racc_action_default = nil, racc_goto_table = nil, racc_goto_check = nil, racc_goto_pointer = nil, racc_goto_default = nil, racc_reduce_table = nil, racc_reduce_n = nil, racc_shift_n = nil, racc_token_table = nil, racc_nt_base = nil, racc_use_result_var = nil, $proto = self.$$prototype; $proto.static_env = $proto.lexer = $proto.max_numparam_stack = $proto.context = $proto.current_arg_stack = $proto.builder = $proto.pattern_variables = $proto.pattern_hash_keys = $proto.last_token = nil; $def(self, '$version', $return_val(32)); $def(self, '$default_encoding', function $$default_encoding() { return $$$($$('Encoding'), 'UTF_8') }); $def(self, '$endless_method_name', function $$endless_method_name(name_t) { var self = this; if (($not(["===", "==", "!=", "<=", ">="]['$include?'](name_t['$[]'](0))) && ($truthy(name_t['$[]'](0)['$end_with?']("="))))) { return self.$diagnostic("error", "endless_setter", nil, name_t) } else { return nil } }); $def(self, '$local_push', function $$local_push() { var self = this; self.static_env.$extend_static(); self.lexer.$cmdarg().$push(false); self.lexer.$cond().$push(false); return self.max_numparam_stack.$push((new Map([["static", true]]))); }); $def(self, '$local_pop', function $$local_pop() { var self = this; self.static_env.$unextend(); self.lexer.$cmdarg().$pop(); self.lexer.$cond().$pop(); return self.max_numparam_stack.$pop(); }); $def(self, '$try_declare_numparam', function $$try_declare_numparam(node) { var self = this, name = nil, location = nil, raw_max_numparam_stack = nil; name = node.$children()['$[]'](0); if ((($truthy(name['$=~'](/^_[1-9]$/)) && ($not(self.$static_env()['$declared?'](name)))) && ($truthy(self.context['$in_dynamic_block?']())))) { location = node.$loc().$expression(); if ($truthy(self.$max_numparam_stack()['$has_ordinary_params?']())) { self.$diagnostic("error", "ordinary_param_defined", nil, [nil, location]) }; raw_max_numparam_stack = self.$max_numparam_stack().$stack().$dup(); raw_max_numparam_stack.$pop(); (function(){try { var $t_break = $thrower('break'); return $send(raw_max_numparam_stack, 'reverse_each', [], function $$1(outer_scope){var self = $$1.$$s == null ? this : $$1.$$s, outer_scope_has_numparams = nil; if (outer_scope == null) outer_scope = nil; if ($truthy(outer_scope['$[]']("static"))) { $t_break.$throw(nil, $$1.$$is_lambda) } else { outer_scope_has_numparams = $rb_gt(outer_scope['$[]']("value"), 0); if ($truthy(outer_scope_has_numparams)) { return self.$diagnostic("error", "numparam_used_in_outer_scope", nil, [nil, location]) } else { return nil }; };}, {$$s: self})} catch($e) { if ($e === $t_break) return $e.$v; throw $e; } finally {$t_break.is_orphan = true;}})(); self.$static_env().$declare(name); self.$max_numparam_stack().$register(name['$[]'](1).$to_i()); return true; } else { return false }; }); racc_action_table = Opal.large_array_unpack("-614,222,223,222,223,234,-116,-614,-614,-614,928,623,-614,-614,-614,228,-614,312,240,664,127,265,227,623,-614,126,-614,-614,-614,222,223,225,699,666,-117,-124,-614,-614,623,-614,-614,-614,-614,-614,623,623,623,-116,-117,-729,700,-123,895,262,-124,928,927,264,263,241,312,-740,836,-626,-119,-121,-614,-614,-614,-614,-614,-614,-614,-614,-614,-614,-614,-614,-614,-614,229,307,-614,-614,-614,663,-614,-614,831,241,-614,1000,-118,-614,-614,241,-614,241,-614,665,-614,-511,-614,-614,311,-614,-614,-614,-614,-614,-123,-614,-615,-614,-119,-107,312,222,223,-615,-615,-615,-116,241,-615,-615,-615,-614,-615,127,-614,-614,-614,-614,126,-614,-615,-614,-615,-615,-615,127,-614,-108,-115,-614,126,311,-615,-615,-121,-615,-615,-615,-615,-615,127,-120,-118,989,-114,126,127,127,127,-116,-117,126,126,126,-116,-117,-124,-110,-112,-120,-122,-124,-615,-615,-615,-615,-615,-615,-615,-615,-615,-615,-615,-615,-615,-615,127,-122,-615,-615,-615,126,-615,-615,999,-109,-615,311,3,-615,-615,-729,-615,928,-615,127,-615,651,-615,-615,126,-615,-615,-615,-615,-615,-322,-615,241,-615,123,-627,-123,-322,-322,-322,-119,-123,-715,-322,-322,-119,-322,-615,-715,-716,-615,-615,-615,-615,-322,-615,228,-615,312,234,241,651,-615,305,136,-615,-322,-322,-110,-322,-322,-322,-322,-322,104,105,-121,241,-716,219,614,-121,-112,-120,-118,653,652,525,-120,-118,104,105,-111,-113,-117,862,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,220,228,-322,-322,-322,-740,690,-322,305,-122,-322,229,307,-322,-122,653,652,649,-322,221,-322,651,-322,-322,-110,-322,-322,-322,-322,-322,238,-322,-720,-322,699,311,-124,603,-112,-720,-720,-720,106,107,-729,-720,-720,-322,-720,127,-322,-322,951,-113,126,-322,-720,-720,106,107,-109,922,-322,224,-110,-122,229,-110,-720,-720,923,-720,-720,-720,-720,-720,-102,-614,-112,-110,241,-112,-111,301,-614,653,652,651,-88,-124,685,651,127,-112,234,864,-123,126,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,362,757,-720,-720,-720,-358,691,-720,-119,363,-720,502,-358,-720,-109,686,651,-121,-720,1034,-720,-358,-720,-720,651,-720,-720,-720,-720,-720,-614,-720,-720,-720,241,-715,-111,-119,-740,653,652,649,651,653,652,649,238,-720,651,503,-720,-720,-715,-111,-109,-720,803,-109,651,-720,1062,1055,-720,234,432,-120,-720,-720,-720,-109,-358,-720,-720,-720,-121,-720,-111,127,-118,-111,653,652,126,-720,-720,-720,-720,-720,653,652,654,-111,-716,-115,473,-720,-720,1062,-720,-720,-720,-720,-720,-633,-614,-124,653,652,656,651,630,-614,653,652,658,513,-715,878,836,-740,-614,524,653,652,662,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-715,526,-720,-720,-720,-615,924,-720,222,223,-720,636,-615,-720,-720,637,-720,-716,-720,127,-720,-615,-720,-720,126,-720,-720,-720,-720,-720,-614,-720,-720,-720,653,652,667,-118,228,-615,-716,-622,-621,282,283,522,-615,-720,-622,-621,-720,-720,-720,-720,523,-720,-623,-720,-626,-322,222,223,-720,-623,-627,-120,-322,-322,-322,527,-615,-322,-322,-322,-620,-322,895,240,630,281,280,-620,-617,-322,561,-322,-322,-322,429,-617,510,509,573,431,430,-322,-322,603,-322,-322,-322,-322,-322,229,-615,-107,-622,-621,-618,-619,636,-108,575,934,959,-618,-619,-116,930,577,636,-623,931,-117,959,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-620,757,-322,-322,-322,-114,925,-322,-617,685,-322,502,241,-322,-322,617,-322,-123,-322,136,-322,241,-322,-322,617,-322,-322,-322,-322,-322,-322,-322,-87,-322,-618,-619,90,-322,-322,-322,952,953,241,-322,-322,617,-322,-322,91,503,-322,-322,-322,-322,-322,-322,-110,-322,92,984,895,1055,-322,686,241,-122,-322,-322,-119,-322,-322,-322,-322,-322,241,1147,1148,1194,494,-624,491,490,489,499,492,588,-624,878,494,589,491,490,489,502,492,-624,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-322,-112,596,-322,-322,-322,497,690,-322,984,895,-322,316,-121,-322,507,506,510,509,-322,241,-322,503,-322,-322,-109,-322,-322,-322,-322,-322,234,-322,-720,-322,-624,234,-118,307,600,-720,-720,-720,606,265,609,-720,-720,-322,-720,241,-322,-322,618,-322,619,-322,-720,-720,577,630,421,488,-322,634,635,-122,643,668,-720,-720,671,-720,-720,-720,-720,-720,672,-293,674,675,494,-625,491,490,489,499,492,956,-625,109,108,679,241,110,683,502,684,-625,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,-720,307,697,-720,-720,-720,497,691,-720,698,241,-720,702,958,-720,507,506,510,509,-720,705,-720,503,-720,-720,706,-720,-720,-720,-720,-720,499,-720,-720,-720,-625,708,228,710,-387,722,502,-313,228,595,723,727,729,-720,-313,605,-720,-720,593,-720,735,-720,228,-313,523,736,265,488,-720,633,265,-120,7,81,82,83,11,65,631,510,509,71,72,265,503,265,75,-720,73,74,76,35,36,79,80,130,131,132,133,134,84,33,32,115,114,116,117,229,241,23,791,241,-313,229,241,10,53,9,12,119,118,120,111,64,109,108,112,229,110,121,122,228,104,105,49,50,48,228,639,-720,241,-323,-102,806,678,241,-720,641,-323,609,817,-715,822,676,241,-720,45,-323,824,38,827,832,66,67,-323,833,68,837,40,861,865,-323,52,866,-720,-294,265,879,856,857,-323,24,858,121,122,561,102,90,93,94,561,95,97,96,98,891,229,895,913,91,101,916,229,917,-720,241,-323,85,262,92,106,107,264,263,46,47,334,81,82,83,11,65,920,241,929,71,72,946,947,-323,75,948,73,74,76,35,36,79,80,257,961,963,301,969,84,33,32,115,114,116,117,971,1157,23,491,490,489,973,492,10,53,336,12,119,118,120,111,64,109,108,112,575,110,121,122,577,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,-322,258,259,817,241,275,276,-322,45,307,256,338,-716,307,66,67,-322,817,68,265,40,262,895,268,52,264,263,986,260,261,281,280,266,24,267,987,241,241,102,90,93,94,228,95,97,96,98,997,241,1162,-296,91,101,241,279,1008,1012,-293,1160,85,1016,92,106,107,705,-322,46,47,7,81,82,83,11,65,700,1019,1021,71,72,1023,1025,1025,75,241,73,74,76,35,36,79,80,130,131,132,133,134,84,33,32,115,114,116,117,777,241,23,241,229,1053,1056,680,10,53,9,12,119,118,120,111,64,109,108,112,928,110,121,122,971,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,-322,258,259,1068,241,275,276,-322,45,817,1085,38,-716,1087,66,67,-322,1092,68,1093,40,262,1098,268,52,264,263,1099,260,261,281,280,266,24,267,1100,-297,1113,102,90,93,94,228,95,97,96,98,1114,1115,1185,241,91,101,241,279,241,-265,241,641,85,241,92,106,107,241,-322,46,47,334,81,82,83,11,65,928,1122,1123,71,72,241,1127,241,75,1130,73,74,76,35,36,79,80,130,131,132,133,134,84,33,32,115,114,116,117,705,1133,23,1136,229,1138,1140,680,10,53,336,12,119,118,120,111,64,109,108,112,241,110,121,122,-387,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,228,258,259,1152,1163,275,276,1185,45,1164,1025,38,499,1025,66,67,641,1025,68,1183,40,262,502,268,52,264,263,1186,260,261,281,280,266,24,267,1191,1192,697,102,90,93,94,1114,95,97,96,98,1202,1202,705,1204,91,101,1206,279,510,509,1208,1210,85,503,92,106,107,1210,229,46,47,334,81,82,83,11,65,241,1025,-716,71,72,-715,1227,1210,75,1210,73,74,76,35,36,79,80,130,131,132,133,134,84,33,32,115,114,116,117,1210,1210,23,,,,,892,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,258,259,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,279,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,921,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,258,259,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,279,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,1157,23,491,490,489,,492,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,258,259,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,279,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,258,259,,,275,276,,45,,,338,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,241,279,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,258,259,,,275,276,,45,,,338,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,279,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,258,259,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,279,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,258,259,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,279,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,258,259,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,279,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,258,259,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,279,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,258,259,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,279,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,258,259,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,279,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,494,23,491,490,489,,492,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,494,,491,490,489,,492,,715,,494,,491,490,489,,492,719,,45,,,38,,,66,67,,,68,494,40,491,490,489,52,492,715,,,,,,,24,,719,715,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,715,,,85,,92,106,107,,719,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,-741,-741,,,275,276,,45,,,38,,,66,67,,265,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,262,,91,101,264,263,,260,261,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,-741,-741,,,275,276,,45,,,38,,,66,67,,265,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,262,,91,101,264,263,,260,261,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,-741,-741,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,494,,491,490,489,85,492,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,715,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,278,273,274,,-741,-741,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,494,,491,490,489,85,492,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,715,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,-741,-741,-741,-741,282,283,,,-741,-741,,,,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,-741,-741,-741,-741,282,283,,,-741,-741,,,,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,-741,-741,-741,-741,282,283,,,-741,-741,,,,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,-741,-741,-741,-741,282,283,,,-741,-741,,,,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,-741,-741,-741,-741,282,283,,,-741,-741,,,,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,-741,-741,-741,-741,282,283,,,-741,-741,,,,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,,,273,274,,,,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,269,270,271,272,282,283,277,,273,274,,,,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,281,280,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,334,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,,,,,,,,,,,,,,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,,,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,9,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,,,,,,,,,,,,,,,,275,276,,45,,,38,,,66,67,,,68,,40,262,,268,52,264,263,,260,261,,,266,24,267,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,265,,,,,,,,,,,,,,,,275,276,,246,,,254,,,66,67,,,68,,,262,,268,52,264,263,,260,261,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,-443,,46,47,,,,-443,-443,-443,,,-443,-443,-443,265,-443,,,,,,,,-443,-443,-443,-443,,,,275,276,,,,-443,-443,,-443,-443,-443,-443,-443,,,,262,,268,,264,263,,260,261,,,,,,,,,,,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,-443,,,-443,-443,-443,,,-443,,307,-443,,,-443,-443,,-443,,-443,,-443,,-443,-443,,-443,-443,-443,-443,-443,-329,-443,-443,-443,,,,-329,-329,-329,,,-329,-329,-329,,-329,-443,265,,-443,-443,,-443,-329,-443,-329,-329,,,,,-443,,275,276,-329,-329,,-329,-329,-329,-329,-329,,,,,,,262,,,,264,263,,260,261,,,,,,,,-329,-329,-329,-329,-329,-329,-329,-329,-329,-329,-329,-329,-329,-329,,,-329,-329,-329,,,-329,,316,-329,,,-329,-329,,-329,,-329,,-329,,-329,-329,,-329,-329,-329,-329,-329,,-329,,-329,,,,,,,,,,,,,,-329,,,-329,-329,,-329,,-329,81,82,83,,65,,-329,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,-314,,46,47,,,,-314,-314,-314,,,-314,-314,-314,,-314,,,,,,,,-314,,-314,-314,-314,,,,115,114,116,117,-314,-314,,-314,-314,-314,-314,-314,,,,,119,118,120,,,,,,,,,,,104,105,,,359,-314,-314,-314,-314,-314,-314,-314,-314,-314,-314,-314,-314,-314,-314,,,-314,-314,-314,,,-314,,,-314,,,-314,-314,,-314,,-314,,-314,,-314,-314,,-314,-314,-314,-314,-314,,-314,,-314,,102,90,93,94,,95,97,96,98,,,,-314,91,101,-314,-314,-314,-314,,-314,85,-314,92,106,107,,-314,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,127,,,,,126,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,9,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,421,85,,92,106,107,,,46,47,81,82,83,,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,437,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,437,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,241,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,563,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,241,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,-275,,46,47,,,,-275,-275,-275,,,-275,-275,-275,,-275,,,,,,,,-275,-275,-275,-275,,,,,,,,,-275,-275,,-275,-275,-275,-275,-275,,,,,,,,,,,,,,,,,,,,,,,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,,,-275,-275,-275,,,-275,,307,-275,,,-275,-275,,-275,,-275,,-275,,-275,-275,,-275,-275,-275,-275,-275,,-275,-275,-275,494,,491,490,489,499,492,,,,,,,-275,,502,-275,-275,-721,-275,,-275,,,,-721,-721,-721,-275,,-721,-721,-721,,-721,,,497,,,,,-721,-721,-721,-721,-721,,510,509,,,,503,-721,-721,,-721,-721,-721,-721,-721,,,,,,,,,,,,,,,,,,,,,,,-721,-721,-721,-721,-721,-721,-721,-721,-721,-721,-721,-721,-721,-721,,,-721,-721,-721,,,-721,,,-721,,,-721,-721,,-721,,-721,,-721,,-721,-721,,-721,-721,-721,-721,-721,,-721,-721,-721,,,,,,,,,,,,,,-721,,,-721,-721,-721,-721,,-721,-722,-721,,,,,-721,-722,-722,-722,,,-722,-722,-722,,-722,,,,,,,,-722,-722,-722,-722,-722,,,,,,,,-722,-722,,-722,-722,-722,-722,-722,,,,,,,,,,,,,,,,,,,,,,,-722,-722,-722,-722,-722,-722,-722,-722,-722,-722,-722,-722,-722,-722,,,-722,-722,-722,,,-722,,,-722,,,-722,-722,,-722,,-722,,-722,,-722,-722,,-722,-722,-722,-722,-722,,-722,-722,-722,,,,,,,,,,,,,,-722,,,-722,-722,-722,-722,,-722,,-722,,81,82,83,-722,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,-275,,46,47,,,,-275,-275,-275,,,-275,-275,-275,494,-275,491,490,489,499,492,,,-275,-275,-275,,,,502,,,,,,-275,-275,,-275,-275,-275,-275,-275,,494,,491,490,489,499,492,497,647,,,,,,,502,507,506,510,509,,,,503,,494,,491,490,489,499,492,-275,,,,,497,,-275,502,,,,307,-275,507,506,510,509,,,,503,,,,,,,,,497,488,,,,-275,-275,,,507,506,510,509,,,,503,,,,-275,,,-275,,81,82,83,-275,65,,488,,71,72,-275,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,800,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,336,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,421,85,,92,106,107,,,46,47,81,82,83,,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,800,,,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,870,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,10,53,,12,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,800,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,437,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,800,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,563,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,800,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,251,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,23,,,,,,,53,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,115,114,116,117,,,255,,,,,,,53,,,119,118,120,111,64,109,108,112,328,110,121,122,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,246,,,254,,,66,67,,,68,,325,,323,,52,,,329,,,,,,251,,,,,102,326,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,347,,,343,,,66,67,,,68,,342,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,347,,,254,,,66,67,,,68,,,494,,491,490,489,499,492,,,,,,,,,502,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,361,,497,85,,92,106,107,81,82,83,,65,510,509,,71,72,503,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,396,,,38,,,66,67,,,68,,40,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,401,64,109,108,402,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,408,,,403,,,254,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,401,64,109,108,402,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,403,,,254,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,347,,,254,,,66,67,,,68,,,494,,491,490,489,499,492,,,,,,,,,502,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,591,,497,85,,92,106,107,81,82,83,,65,510,509,,71,72,503,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,347,,,343,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,347,,,343,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,347,,,343,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,347,,,343,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,347,,,343,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,1106,,,254,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,1144,,,254,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,355,356,79,80,,,,,,84,350,358,115,114,116,117,,,255,,,,,,,351,,,119,118,120,111,64,109,108,112,,110,121,122,,104,105,,,359,,,,,,,,,,,,,,,,,,,,1144,,,254,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,186,197,187,210,183,203,193,192,213,214,208,191,190,185,211,215,216,195,184,198,202,204,196,189,,,,205,212,207,206,199,209,194,182,201,200,,,,,,181,188,179,180,176,177,178,139,141,138,,140,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,,,175,102,,,,,,,,,,,,,,101,186,197,187,210,183,203,193,192,213,214,208,191,190,185,211,215,216,195,184,198,202,204,196,189,,,,205,212,207,206,199,209,194,182,201,200,,,,,,181,188,179,180,176,177,178,139,141,,,140,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,,,175,102,,,,,,,,,,,,,,101,186,197,187,210,183,203,193,192,213,214,208,191,190,185,211,215,216,195,184,198,202,204,196,189,,,,205,212,207,206,199,209,194,182,201,200,,,,,,181,188,179,180,176,177,178,139,141,,,140,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,,,175,102,,,,,,,,,,,,,,101,186,197,187,210,183,203,193,192,213,214,208,191,190,185,211,215,216,195,184,198,202,204,196,189,,,,205,212,207,206,199,209,194,182,201,200,,,,,,181,188,179,180,176,177,178,139,141,,,140,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,,,175,102,,,,,,,,,,,,,,101,186,197,187,210,183,203,193,192,213,214,208,191,190,185,211,215,216,195,184,198,202,204,196,189,,,,205,212,207,295,294,296,293,182,201,200,,,,,,181,188,179,180,290,291,292,288,141,109,108,289,,110,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,300,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,,,175,115,114,116,117,,,494,,491,490,489,499,492,,,,119,118,120,777,,502,,780,757,,,,,104,105,,,359,502,,,,,,,,,497,,,,,,,,,,779,510,509,750,,,503,748,,,749,,752,,,,,,,503,,,,,,,778,,,,102,758,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,,780,757,,,,,104,105,,,359,502,,,,,,,,,,,,,,,,,,,779,,,750,,,,748,,,749,,752,,,,,,,503,,,,,,,778,,,,102,758,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,,780,,,,,,104,105,,,359,,,,,,,,,,,,,,,,,,,,779,,,750,,,,748,,,749,,752,,,,,,,494,,491,490,489,499,492,778,,,,102,90,93,94,502,95,97,96,98,,,,,91,101,241,115,114,116,117,,85,,92,106,107,497,,765,766,,,119,118,120,777,,510,509,780,,,503,,,104,105,,,359,,,,,,,,,,,,,,,,,,,,779,,,750,,,,748,,,749,,,488,,,,,,,,,,,,,778,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,765,766,186,197,187,210,183,203,193,192,213,214,208,191,190,185,211,215,216,195,184,198,202,204,196,189,,,,205,212,207,206,199,209,194,182,201,200,,,,,,181,188,179,180,176,177,178,139,141,,,140,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,,,175,115,114,116,117,,,,,,494,,491,490,489,499,492,119,118,120,777,,,,780,502,,,,,104,105,,,359,,,,,,,,,,,,,497,,,,,,,779,,,750,510,509,,748,,503,749,,752,,,,,,,,,,,,,,778,,,,102,90,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,488,,85,,92,106,107,,,765,766,,119,118,120,777,,,494,780,491,490,489,499,492,104,105,,,359,,,,502,,,,,,,,,,,,,,,,779,,,750,,,497,748,,,749,,,,,507,506,510,509,,,,503,,,,778,,,,102,90,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,,780,757,,,,,104,105,,,359,502,,,,,,,,,,,,,,,,,,,779,,,750,,,,748,,,749,,752,,,,,,,503,,,,,,,778,,,,102,758,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,,780,757,,,,,104,105,,,359,502,,,,,,,,,,,,,,,,,,,779,,,750,,,,748,,,749,,752,,,,,,,503,,,,,,,778,,,,102,758,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,494,780,491,490,489,499,492,104,105,,,359,,,,502,,,,,,,,,,,,,,,,779,,,750,,,497,748,,,749,,752,,,507,506,510,509,,,,503,,,,778,,,,102,90,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,494,780,491,490,489,499,492,104,105,,,359,,,,502,,,,,,,,,,,,,,,,779,,,750,,,497,748,,,749,,,,,,,510,509,,,,503,,,,778,,,,102,90,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,,780,,,,,,104,105,,,359,,,,,,,,,,,,,,,,,,,,779,,,750,,,,748,,,749,,,,,,,,,,,,,,,,778,,,,102,90,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,,780,757,,,,,104,105,,,359,502,,,,,,,,,,,,,,,,,,,779,,,750,,,,748,,,749,,752,,,,,,,503,,,,,,,778,,,,102,758,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,,780,,,,,,104,105,,,359,,,,,,,,,,,,,,,,,,,,779,,,750,,,,748,,,749,,,,,,,,,,,,,,,,778,,,,102,90,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,,780,,,,,,104,105,,,359,,,,,,,,,,,,,,,,,,,,779,,,750,,,,748,,,749,,,,,,,,,,,,,,,,778,,,,102,90,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,,780,,,,,,104,105,,,359,,,,,,,,,,,,,,,,,,,,779,,,750,,,,748,,,749,,752,,,,,,,,,,,,,,778,,,,102,90,93,94,,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,,,765,766,,119,118,120,777,,,,780,,,,,,104,105,,,359,,,,,,,,115,114,116,117,,,,,,,,,779,,,750,119,118,120,748,,,749,,,,,,,104,105,,,359,,,,,778,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,765,766,494,,491,490,489,499,492,,,,,102,90,93,94,502,95,97,96,98,,,,,91,101,115,114,116,117,,,85,,92,106,107,497,,,,,119,118,120,,507,506,510,509,,,,503,,104,105,,,359,115,114,116,117,,,,,,,,,,,,,119,118,120,241,,,,,,,,,,104,105,,,359,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,494,,491,490,489,499,492,,494,,491,490,489,499,492,502,,,,,,,,502,,494,,491,490,489,499,492,,,,,,497,,,502,,,,,497,507,506,510,509,,,,503,507,506,510,509,,,,503,497,,,,,,,,,507,506,510,509,,,494,503,491,490,489,499,492,494,,491,490,489,499,492,,502,488,,,,,,502,,488,494,,491,490,489,499,492,,,,,,497,,,502,488,,,497,,,,510,509,,,,503,,510,509,,,,503,,497,,,,,,,,,,,510,509,,,,503,,,,,,,,,,,,459,463,,488,460,,,,,,488,,170,171,,167,149,150,151,158,155,157,,,152,153,,,488,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,467,471,175,,466,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,559,463,175,,560,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,730,463,175,,731,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,732,471,175,,733,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,810,463,175,,811,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,813,471,175,,814,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,730,463,175,,731,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,732,471,175,,733,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,840,463,175,,841,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,842,471,175,,843,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,845,471,175,,846,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,559,463,175,,560,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,872,463,175,,873,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,875,471,175,,874,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,1197,463,175,,1198,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,1199,471,175,,1200,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,1214,471,175,,1213,,,,,,,,170,171,,167,149,150,151,158,155,157,,,152,153,,,,172,173,159,160,,,,,,307,,,,,,,,164,163,,148,169,166,165,174,161,162,156,154,146,168,147,,,175"); racc_action_check = Opal.large_array_unpack("111,518,518,556,556,19,393,111,111,111,738,385,111,111,111,18,111,31,23,417,5,534,18,386,111,5,111,111,111,980,980,18,478,418,394,397,111,111,838,111,111,111,111,111,1015,1086,1088,1103,1104,930,478,634,1216,534,1107,935,738,534,534,23,69,19,1216,244,840,841,111,111,111,111,111,111,111,111,111,111,111,111,111,111,18,31,111,111,111,417,111,111,625,930,111,853,991,111,111,518,111,556,111,418,111,935,111,111,31,111,111,111,111,111,1163,111,112,111,1197,393,788,644,644,112,112,112,244,980,112,112,112,111,112,385,111,111,111,111,385,111,112,111,112,112,112,386,111,394,397,111,386,69,112,112,1198,112,112,112,112,112,838,1199,1218,838,634,838,1015,1086,1088,1103,1104,1015,1086,1088,1103,1104,1107,840,841,842,843,1107,112,112,112,112,112,112,112,112,112,112,112,112,112,112,625,1200,112,112,112,625,112,112,853,991,112,788,1,112,112,749,112,1057,112,644,112,659,112,112,644,112,112,112,112,112,466,112,749,112,3,245,1163,466,466,466,1197,1163,1199,466,466,1197,466,112,842,843,112,112,112,112,466,112,29,112,352,20,1057,412,112,29,9,112,466,466,810,466,466,466,466,466,48,48,1198,377,1200,12,377,1198,811,1199,1218,659,659,247,1199,1218,359,359,842,843,245,659,466,466,466,466,466,466,466,466,466,466,466,466,466,466,14,287,466,466,466,20,466,466,287,1200,466,29,352,466,1200,412,412,412,466,15,466,661,466,466,810,466,466,466,466,466,444,466,467,466,759,352,247,524,811,467,467,467,48,48,931,467,467,466,467,332,466,466,759,466,332,466,467,467,359,359,978,730,466,17,810,466,287,810,467,467,731,467,467,467,467,467,805,288,811,810,931,811,813,27,288,661,661,579,805,444,872,950,390,811,252,661,524,390,467,467,467,467,467,467,467,467,467,467,467,467,467,467,42,942,467,467,467,54,467,467,730,45,467,942,54,467,978,873,1125,731,467,926,467,54,467,467,413,467,467,467,467,467,288,467,467,467,53,813,813,872,252,579,579,579,414,950,950,950,21,467,415,942,467,467,401,467,978,467,579,978,416,732,950,942,467,253,217,467,732,732,732,978,54,732,732,732,873,732,813,512,926,813,1125,1125,512,732,732,732,732,732,413,413,413,813,402,21,230,732,732,1125,732,732,732,732,732,232,401,21,414,414,414,419,628,401,415,415,415,236,401,1005,628,253,401,246,416,416,416,732,732,732,732,732,732,732,732,732,732,732,732,732,732,401,248,732,732,732,402,732,732,16,16,732,403,402,732,732,403,732,402,732,995,732,402,732,732,995,732,732,732,732,732,401,732,732,732,419,419,419,1005,243,289,402,290,291,51,51,243,289,732,290,291,732,732,732,732,243,732,292,732,43,733,384,384,732,292,44,732,733,733,733,249,402,733,733,733,293,733,1091,255,1091,51,51,293,294,733,306,733,733,733,138,294,705,705,320,138,138,733,733,363,733,733,733,733,733,243,289,43,290,291,295,296,779,44,321,747,779,295,296,43,747,324,934,292,747,44,934,733,733,733,733,733,733,733,733,733,733,733,733,733,733,293,948,733,733,733,363,733,733,294,459,733,948,378,733,733,378,733,363,733,336,733,381,733,733,381,733,733,733,733,733,874,733,337,733,295,296,88,874,874,874,762,762,825,874,874,825,874,733,88,948,733,733,733,733,874,733,459,733,88,826,826,948,733,460,339,733,874,874,459,874,874,874,874,874,1155,1089,1089,1155,234,344,234,234,234,234,234,340,344,681,719,341,719,719,719,234,719,344,874,874,874,874,874,874,874,874,874,874,874,874,874,874,460,347,874,874,874,234,874,874,1187,1187,874,350,460,874,234,234,234,234,874,351,874,234,874,874,681,874,874,874,874,874,353,874,875,874,344,354,681,358,360,875,875,875,367,369,372,875,875,874,875,375,874,874,379,874,380,874,875,875,382,391,392,234,874,396,398,874,407,427,875,875,433,875,875,875,875,875,435,436,438,441,235,345,235,235,235,235,235,778,345,778,778,445,455,778,457,235,458,345,875,875,875,875,875,875,875,875,875,875,875,875,875,875,468,474,875,875,875,235,875,875,475,479,875,480,778,875,235,235,235,235,875,481,875,235,875,875,484,875,875,875,875,875,702,875,875,875,345,485,346,486,496,508,702,348,364,346,511,514,520,875,348,364,875,875,346,875,528,875,395,348,364,529,536,235,875,395,537,875,2,2,2,2,2,2,395,702,702,2,2,538,702,539,2,845,2,2,2,2,2,2,2,8,8,8,8,8,2,2,2,2,2,2,2,346,564,2,565,566,348,364,570,2,2,2,2,2,2,2,2,2,2,2,2,395,2,2,2,405,2,2,2,2,2,443,405,845,586,596,587,590,443,592,845,405,596,597,601,845,610,443,611,845,2,596,612,2,622,626,2,2,637,627,2,629,2,656,664,637,2,666,845,673,535,682,652,652,637,2,652,652,652,687,2,2,2,2,692,2,2,2,2,694,405,696,712,2,2,717,443,718,845,720,596,2,535,2,2,2,535,535,2,2,38,38,38,38,38,38,725,734,743,38,38,751,752,637,38,753,38,38,38,38,38,38,38,25,782,785,787,793,38,38,38,38,38,38,38,794,1098,38,1098,1098,1098,795,1098,38,38,38,38,38,38,38,38,38,38,38,38,797,38,38,38,799,38,38,38,38,38,25,25,25,25,25,25,25,25,25,25,25,814,25,25,807,809,25,25,814,38,812,25,38,814,815,38,38,814,816,38,819,38,25,828,25,38,25,25,834,25,25,25,25,25,38,25,835,839,848,38,38,38,38,1105,38,38,38,38,852,854,1105,869,38,38,871,25,880,893,896,1105,38,897,38,38,38,900,814,38,38,136,136,136,136,136,136,902,905,906,136,136,908,909,911,136,915,136,136,136,136,136,136,136,335,335,335,335,335,136,136,136,136,136,136,136,928,936,136,937,1105,941,944,448,136,136,136,136,136,136,136,136,136,136,136,136,949,136,136,136,964,136,136,136,136,136,448,448,448,448,448,448,448,448,448,448,448,846,448,448,967,968,448,448,846,136,977,982,136,846,985,136,136,846,992,136,994,136,448,1001,448,136,448,448,1002,448,448,448,448,448,136,448,1003,1004,1030,136,136,136,136,1143,136,136,136,136,1031,1036,1143,1041,136,136,1042,448,1043,448,1044,1143,136,1045,136,136,136,1046,846,136,136,219,219,219,219,219,219,1050,1051,1052,219,219,1054,1058,1065,219,1070,219,219,219,219,219,219,219,374,374,374,374,374,219,219,219,219,219,219,219,1071,1073,219,1074,1143,1075,1077,454,219,219,219,219,219,219,219,219,219,219,219,219,1078,219,219,219,1079,219,219,219,219,219,454,454,454,454,454,454,454,454,454,454,454,1184,454,454,1095,1106,454,454,1184,219,1109,1110,219,1130,1111,219,219,1184,1112,219,1141,219,454,1130,454,219,454,454,1144,454,454,454,454,454,219,454,1153,1154,1159,219,219,219,219,1169,219,219,219,219,1170,1171,1174,1177,219,219,1178,454,1130,1130,1179,1180,219,1130,219,219,219,1182,1184,219,219,231,231,231,231,231,231,1196,1201,1213,231,231,1214,1220,1221,231,1222,231,231,231,231,231,231,231,584,584,584,584,584,231,231,231,231,231,231,231,1223,1232,231,,,,,695,231,231,231,231,231,231,231,231,231,231,231,231,,231,231,231,,231,231,231,231,231,695,695,695,695,695,695,695,695,695,695,695,,695,695,,,695,695,,231,,,231,,,231,231,,,231,,231,695,,695,231,695,695,,695,695,695,695,695,231,695,,,,231,231,231,231,,231,231,231,231,,,,,231,231,,695,,,,,231,,231,231,231,,,231,231,237,237,237,237,237,237,,,,237,237,,,,237,,237,237,237,237,237,237,237,,,,,,237,237,237,237,237,237,237,,,237,,,,,726,237,237,237,237,237,237,237,237,237,237,237,237,,237,237,237,,237,237,237,237,237,726,726,726,726,726,726,726,726,726,726,726,,726,726,,,726,726,,237,,,237,,,237,237,,,237,,237,726,,726,237,726,726,,726,726,726,726,726,237,726,,,,237,237,237,237,,237,237,237,237,,,,,237,237,,726,,,,,237,,237,237,237,,,237,237,254,254,254,254,254,254,,,,254,254,,,,254,,254,254,254,254,254,254,254,,,,,,254,254,254,254,254,254,254,,1194,254,1194,1194,1194,,1194,254,254,254,254,254,254,254,254,254,254,254,254,,254,254,254,,254,254,254,254,254,318,318,318,318,318,318,318,318,318,318,318,,318,318,,,318,318,,254,,,254,,,254,254,,,254,,254,318,,318,254,318,318,,318,318,318,318,318,254,318,,,,254,254,254,254,,254,254,254,254,,,,,254,254,,318,,,,,254,,254,254,254,,,254,254,338,338,338,338,338,338,,,,338,338,,,,338,,338,338,338,338,338,338,338,,,,,,338,338,338,338,338,338,338,,,338,,,,,,338,338,338,338,338,338,338,338,338,338,338,338,,338,338,338,,338,338,338,338,338,553,553,553,553,553,553,553,553,553,553,553,,553,553,,,553,553,,338,,,338,,,338,338,,,338,,338,553,,553,338,553,553,,553,553,553,553,553,338,553,,,,338,338,338,338,,338,338,338,338,,,,,338,338,553,553,,,,,338,,338,338,338,,,338,338,343,343,343,343,343,343,,,,343,343,,,,343,,343,343,343,343,343,343,343,,,,,,343,343,343,343,343,343,343,,,343,,,,,,343,343,343,343,343,343,343,343,343,343,343,343,,343,343,343,,343,343,343,343,343,820,820,820,820,820,820,820,820,820,820,820,,820,820,,,820,820,,343,,,343,,,343,343,,,343,,343,820,,820,343,820,820,,820,820,820,820,820,343,820,,,,343,343,343,343,,343,343,343,343,,,,,343,343,,820,,,,,343,,343,343,343,,,343,343,373,373,373,373,373,373,,,,373,373,,,,373,,373,373,373,373,373,373,373,,,,,,373,373,373,373,373,373,373,,,373,,,,,,373,373,373,373,373,373,373,373,373,373,373,373,,373,373,373,,373,373,373,373,373,877,877,877,877,877,877,877,877,877,877,877,,877,877,,,877,877,,373,,,373,,,373,373,,,373,,373,877,,877,373,877,877,,877,877,877,877,877,373,877,,,,373,373,373,373,,373,373,373,373,,,,,373,373,,877,,,,,373,,373,373,373,,,373,373,388,388,388,388,388,388,,,,388,388,,,,388,,388,388,388,388,388,388,388,,,,,,388,388,388,388,388,388,388,,,388,,,,,,388,388,388,388,388,388,388,388,388,388,388,388,,388,388,388,,388,388,388,388,388,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,,1009,1009,,,1009,1009,,388,,,388,,,388,388,,,388,,388,1009,,1009,388,1009,1009,,1009,1009,1009,1009,1009,388,1009,,,,388,388,388,388,,388,388,388,388,,,,,388,388,,1009,,,,,388,,388,388,388,,,388,388,389,389,389,389,389,389,,,,389,389,,,,389,,389,389,389,389,389,389,389,,,,,,389,389,389,389,389,389,389,,,389,,,,,,389,389,389,389,389,389,389,389,389,389,389,389,,389,389,389,,389,389,389,389,389,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,,1010,1010,,,1010,1010,,389,,,389,,,389,389,,,389,,389,1010,,1010,389,1010,1010,,1010,1010,1010,1010,1010,389,1010,,,,389,389,389,389,,389,389,389,389,,,,,389,389,,1010,,,,,389,,389,389,389,,,389,389,621,621,621,621,621,621,,,,621,621,,,,621,,621,621,621,621,621,621,621,,,,,,621,621,621,621,621,621,621,,,621,,,,,,621,621,621,621,621,621,621,621,621,621,621,621,,621,621,621,,621,621,621,621,621,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,,1032,1032,,,1032,1032,,621,,,621,,,621,621,,,621,,621,1032,,1032,621,1032,1032,,1032,1032,1032,1032,1032,621,1032,,,,621,621,621,621,,621,621,621,621,,,,,621,621,,1032,,,,,621,,621,621,621,,,621,621,624,624,624,624,624,624,,,,624,624,,,,624,,624,624,624,624,624,624,624,,,,,,624,624,624,624,624,624,624,,,624,,,,,,624,624,624,624,624,624,624,624,624,624,624,624,,624,624,624,,624,624,624,624,624,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,,1033,1033,,,1033,1033,,624,,,624,,,624,624,,,624,,624,1033,,1033,624,1033,1033,,1033,1033,1033,1033,1033,624,1033,,,,624,624,624,624,,624,624,624,624,,,,,624,624,,1033,,,,,624,,624,624,624,,,624,624,645,645,645,645,645,645,,,,645,645,,,,645,,645,645,645,645,645,645,645,,,,,,645,645,645,645,645,645,645,,,645,,,,,,645,645,645,645,645,645,645,645,645,645,645,645,,645,645,645,,645,645,645,645,645,1066,1066,1066,1066,1066,1066,1066,1066,1066,1066,1066,,1066,1066,,,1066,1066,,645,,,645,,,645,645,,,645,,645,1066,,1066,645,1066,1066,,1066,1066,1066,1066,1066,645,1066,,,,645,645,645,645,,645,645,645,645,,,,,645,645,,1066,,,,,645,,645,645,645,,,645,645,844,844,844,844,844,844,,,,844,844,,,,844,,844,844,844,844,844,844,844,,,,,,844,844,844,844,844,844,844,,497,844,497,497,497,,497,844,844,844,844,844,844,844,844,844,844,844,844,,844,844,844,,844,844,844,844,844,715,,715,715,715,,715,,497,,917,,917,917,917,,917,497,,844,,,844,,,844,844,,,844,916,844,916,916,916,844,916,715,,,,,,,844,,715,917,,844,844,844,844,,844,844,844,844,,,,,844,844,,,,916,,,844,,844,844,844,,916,844,844,849,849,849,849,849,849,,,,849,849,,,,849,,849,849,849,849,849,849,849,,,,,,849,849,849,849,849,849,849,,,849,,,,,,849,849,849,849,849,849,849,849,849,849,849,849,,849,849,849,,849,849,849,849,849,365,365,365,365,365,365,365,365,365,365,365,,365,365,,,365,365,,849,,,849,,,849,849,,549,849,,849,365,,365,849,365,365,,365,365,365,365,365,849,365,,,,849,849,849,849,,849,849,849,849,,,549,,849,849,549,549,,549,549,,849,,849,849,849,,,849,849,860,860,860,860,860,860,,,,860,860,,,,860,,860,860,860,860,860,860,860,,,,,,860,860,860,860,860,860,860,,,860,,,,,,860,860,860,860,860,860,860,860,860,860,860,860,,860,860,860,,860,860,860,860,860,366,366,366,366,366,366,366,366,366,366,366,,366,366,,,366,366,,860,,,860,,,860,860,,550,860,,860,366,,366,860,366,366,,366,366,366,366,366,860,366,,,,860,860,860,860,,860,860,860,860,,,550,,860,860,550,550,,550,550,,860,,860,860,860,,,860,860,895,895,895,895,895,895,,,,895,895,,,,895,,895,895,895,895,895,895,895,,,,,,895,895,895,895,895,895,895,,,895,,,,,,895,895,895,895,895,895,895,895,895,895,895,895,,895,895,895,,895,895,895,895,895,532,532,532,532,532,532,532,532,532,532,532,,532,532,,,532,532,,895,,,895,,,895,895,,,895,,895,532,,532,895,532,532,,532,532,532,532,532,895,532,,,,895,895,895,895,,895,895,895,895,,,,,895,895,,1113,,1113,1113,1113,895,1113,895,895,895,,,895,895,972,972,972,972,972,972,,,,972,972,,,,972,,972,972,972,972,972,972,972,1113,,,,,972,972,972,972,972,972,972,,,972,,,,,,972,972,972,972,972,972,972,972,972,972,972,972,,972,972,972,,972,972,972,972,972,533,533,533,533,533,533,533,533,533,533,533,,533,533,,,533,533,,972,,,972,,,972,972,,,972,,972,533,,533,972,533,533,,533,533,533,533,533,972,533,,,,972,972,972,972,,972,972,972,972,,,,,972,972,,1114,,1114,1114,1114,972,1114,972,972,972,,,972,972,990,990,990,990,990,990,,,,990,990,,,,990,,990,990,990,990,990,990,990,1114,,,,,990,990,990,990,990,990,990,,,990,,,,,,990,990,990,990,990,990,990,990,990,990,990,990,,990,990,990,,990,990,990,990,990,543,543,543,543,543,543,543,,,543,543,,,,,,543,543,,990,,,990,,,990,990,,,990,,990,543,,543,990,543,543,,543,543,543,543,543,990,543,,,,990,990,990,990,,990,990,990,990,,,,,990,990,,,,,,,990,,990,990,990,,,990,990,996,996,996,996,996,996,,,,996,996,,,,996,,996,996,996,996,996,996,996,,,,,,996,996,996,996,996,996,996,,,996,,,,,,996,996,996,996,996,996,996,996,996,996,996,996,,996,996,996,,996,996,996,996,996,544,544,544,544,544,544,544,,,544,544,,,,,,544,544,,996,,,996,,,996,996,,,996,,996,544,,544,996,544,544,,544,544,544,544,544,996,544,,,,996,996,996,996,,996,996,996,996,,,,,996,996,,,,,,,996,,996,996,996,,,996,996,1012,1012,1012,1012,1012,1012,,,,1012,1012,,,,1012,,1012,1012,1012,1012,1012,1012,1012,,,,,,1012,1012,1012,1012,1012,1012,1012,,,1012,,,,,,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,,1012,1012,1012,,1012,1012,1012,1012,1012,545,545,545,545,545,545,545,,,545,545,,,,,,545,545,,1012,,,1012,,,1012,1012,,,1012,,1012,545,,545,1012,545,545,,545,545,545,545,545,1012,545,,,,1012,1012,1012,1012,,1012,1012,1012,1012,,,,,1012,1012,,,,,,,1012,,1012,1012,1012,,,1012,1012,1067,1067,1067,1067,1067,1067,,,,1067,1067,,,,1067,,1067,1067,1067,1067,1067,1067,1067,,,,,,1067,1067,1067,1067,1067,1067,1067,,,1067,,,,,,1067,1067,1067,1067,1067,1067,1067,1067,1067,1067,1067,1067,,1067,1067,1067,,1067,1067,1067,1067,1067,546,546,546,546,546,546,546,,,546,546,,,,,,546,546,,1067,,,1067,,,1067,1067,,,1067,,1067,546,,546,1067,546,546,,546,546,546,546,546,1067,546,,,,1067,1067,1067,1067,,1067,1067,1067,1067,,,,,1067,1067,,,,,,,1067,,1067,1067,1067,,,1067,1067,1096,1096,1096,1096,1096,1096,,,,1096,1096,,,,1096,,1096,1096,1096,1096,1096,1096,1096,,,,,,1096,1096,1096,1096,1096,1096,1096,,,1096,,,,,,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,,1096,1096,1096,,1096,1096,1096,1096,1096,547,547,547,547,547,547,547,,,547,547,,,,,,547,547,,1096,,,1096,,,1096,1096,,,1096,,1096,547,,547,1096,547,547,,547,547,547,547,547,1096,547,,,,1096,1096,1096,1096,,1096,1096,1096,1096,,,,,1096,1096,,,,,,,1096,,1096,1096,1096,,,1096,1096,1097,1097,1097,1097,1097,1097,,,,1097,1097,,,,1097,,1097,1097,1097,1097,1097,1097,1097,,,,,,1097,1097,1097,1097,1097,1097,1097,,,1097,,,,,,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,,1097,1097,1097,,1097,1097,1097,1097,1097,548,548,548,548,548,548,548,,,548,548,,,,,,548,548,,1097,,,1097,,,1097,1097,,,1097,,1097,548,,548,1097,548,548,,548,548,548,548,548,1097,548,,,,1097,1097,1097,1097,,1097,1097,1097,1097,,,,,1097,1097,,,,,,,1097,,1097,1097,1097,,,1097,1097,1102,1102,1102,1102,1102,1102,,,,1102,1102,,,,1102,,1102,1102,1102,1102,1102,1102,1102,,,,,,1102,1102,1102,1102,1102,1102,1102,,,1102,,,,,,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,,1102,1102,1102,,1102,1102,1102,1102,1102,551,551,551,551,551,551,551,,,551,551,,,,,,551,551,,1102,,,1102,,,1102,1102,,,1102,,1102,551,,551,1102,551,551,,551,551,551,551,551,1102,551,,,,1102,1102,1102,1102,,1102,1102,1102,1102,,,,,1102,1102,,,,,,,1102,,1102,1102,1102,,,1102,1102,1145,1145,1145,1145,1145,1145,,,,1145,1145,,,,1145,,1145,1145,1145,1145,1145,1145,1145,,,,,,1145,1145,1145,1145,1145,1145,1145,,,1145,,,,,,1145,1145,1145,1145,1145,1145,1145,1145,1145,1145,1145,1145,,1145,1145,1145,,1145,1145,1145,1145,1145,552,552,552,552,552,552,552,552,,552,552,,,,,,552,552,,1145,,,1145,,,1145,1145,,,1145,,1145,552,,552,1145,552,552,,552,552,552,552,552,1145,552,,,,1145,1145,1145,1145,,1145,1145,1145,1145,,,,,1145,1145,,,,,,,1145,,1145,1145,1145,,,1145,1145,1188,1188,1188,1188,1188,1188,,,,1188,1188,,,,1188,,1188,1188,1188,1188,1188,1188,1188,,,,,,1188,1188,1188,1188,1188,1188,1188,,,1188,,,,,,1188,1188,1188,1188,1188,1188,1188,1188,1188,1188,1188,1188,,1188,1188,1188,,1188,1188,1188,1188,1188,554,,,,,,,,,,,,,,,,554,554,,1188,,,1188,,,1188,1188,,,1188,,1188,554,,554,1188,554,554,,554,554,,,554,1188,554,,,,1188,1188,1188,1188,,1188,1188,1188,1188,,,,,1188,1188,,,,,,,1188,,1188,1188,1188,,,1188,1188,7,7,7,7,7,,,,7,7,,,,7,,7,7,7,7,7,7,7,,,,,,7,7,7,7,7,7,7,,,7,,,,,,7,7,7,7,7,7,7,7,7,7,7,7,,7,7,7,,7,7,7,7,7,607,,,,,,,,,,,,,,,,607,607,,7,,,7,,,7,7,,,7,,7,607,,607,7,607,607,,607,607,,,607,7,607,,,,7,7,7,7,,7,7,7,7,,,,,7,7,,,,24,24,24,7,24,7,7,7,24,24,7,7,,24,,24,24,24,24,24,24,24,,,,,,24,24,24,24,24,24,24,,,24,,,,,,,24,,,24,24,24,24,24,24,24,24,,24,24,24,,24,24,24,24,24,540,,,,,,,,,,,,,,,,540,540,,24,,,24,,,24,24,,,24,,,540,,540,24,540,540,,540,540,,,,24,,,,,24,24,24,24,,24,24,24,24,,,,,24,24,,,,,,,24,,24,24,24,32,,24,24,,,,32,32,32,,,32,32,32,541,32,,,,,,,,32,32,32,32,,,,541,541,,,,32,32,,32,32,32,32,32,,,,541,,541,,541,541,,541,541,,,,,,,,,,,32,32,32,32,32,32,32,32,32,32,32,32,32,32,,,32,32,32,,,32,,32,32,,,32,32,,32,,32,,32,,32,32,,32,32,32,32,32,33,32,32,32,,,,33,33,33,,,33,33,33,,33,32,542,,32,32,,32,33,32,33,33,,,,,32,,542,542,33,33,,33,33,33,33,33,,,,,,,542,,,,542,542,,542,542,,,,,,,,33,33,33,33,33,33,33,33,33,33,33,33,33,33,,,33,33,33,,,33,,33,33,,,33,33,,33,,33,,33,,33,33,,33,33,33,33,33,,33,,33,,,,,,,,,,,,,,33,,,33,33,,33,,33,34,34,34,,34,,33,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34,34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,34,,,,,,34,,,,,34,34,34,34,,34,34,34,34,,,,,34,34,,,,35,35,35,34,35,34,34,34,35,35,34,34,,35,,35,35,35,35,35,35,35,,,,,,35,35,35,35,35,35,35,,,35,,,,,,,35,,,35,35,35,35,35,35,35,35,35,35,35,35,,35,35,35,35,35,,,,,,,,,,,,,,,,,,,,35,,,35,,,35,35,,,35,,35,,35,,35,,,35,,,,,,35,,,,,35,35,35,35,,35,35,35,35,,,,,35,35,,,,36,36,36,35,36,35,35,35,36,36,35,35,,36,,36,36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,,36,,,36,36,36,36,36,36,36,36,36,36,36,36,,36,36,36,36,36,,,,,,,,,,,,,,,,,,,,36,,,36,,,36,36,,,36,,36,,36,,36,,,36,,,,,,36,,,,,36,36,36,36,,36,36,36,36,,,,,36,36,,,,46,46,46,36,46,36,36,36,46,46,36,36,,46,,46,46,46,46,46,46,46,,,,,,46,46,46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46,46,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,,,46,,,,,46,46,46,46,,46,46,46,46,,,,,46,46,,,,47,47,47,46,47,46,46,46,47,47,46,46,,47,,47,47,47,47,47,47,47,,,,,,47,47,47,47,47,47,47,,,47,,,,,,,47,,,47,47,47,47,47,47,47,47,,47,47,47,,47,47,47,47,47,,,,,,,,,,,,,,,,,,,,47,,,47,,,47,47,,,47,,,,,,47,,,,,,,,,47,,,,,47,47,47,47,,47,47,47,47,,,,,47,47,,,,49,49,49,47,49,47,47,47,49,49,47,47,,49,,49,49,49,49,49,49,49,,,,,,49,49,49,49,49,49,49,,,49,,,,,,,49,,,49,49,49,49,49,49,49,49,,49,49,49,,49,49,49,49,49,,,,,,,,,,,,,,,,,,,,49,,,49,,,49,49,,,49,,,,,,49,,,,,,,,,49,,,,,49,49,49,49,,49,49,49,49,,,,,49,49,,,,50,50,50,49,50,49,49,49,50,50,49,49,,50,,50,50,50,50,50,50,50,,,,,,50,50,50,50,50,50,50,,,50,,,,,,,50,,,50,50,50,50,50,50,50,50,,50,50,50,,50,50,50,50,50,,,,,,,,,,,,,,,,,,,,50,,,50,,,50,50,,,50,,,,,,50,,,,,,,,,50,,,,,50,50,50,50,,50,50,50,50,,,,,50,50,,,,52,52,52,50,52,50,50,50,52,52,50,50,,52,,52,52,52,52,52,52,52,,,,,,52,52,52,52,52,52,52,,,52,,,,,,,52,,,52,52,52,52,52,52,52,52,,52,52,52,,52,52,52,52,52,,,,,,,,,,,,,,,,,,,,52,,,52,,,52,52,,,52,,,,,,52,,,,,,,,,52,,,,,52,52,52,52,,52,52,52,52,,,,,52,52,,,,,,,52,,52,52,52,64,,52,52,,,,64,64,64,,,64,64,64,,64,,,,,,,,64,,64,64,64,,,,765,765,765,765,64,64,,64,64,64,64,64,,,,,765,765,765,,,,,,,,,,,765,765,,,765,64,64,64,64,64,64,64,64,64,64,64,64,64,64,,,64,64,64,,,64,,,64,,,64,64,,64,,64,,64,,64,64,,64,64,64,64,64,,64,,64,,765,765,765,765,,765,765,765,765,,,,64,765,765,64,64,64,64,,64,765,64,765,765,765,,64,66,66,66,66,66,,,,66,66,,,,66,,66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,66,66,,66,66,66,66,66,66,66,66,66,,66,66,66,,66,66,66,66,66,,,,,,,,,,,,,,,,,,,,66,,,66,,,66,66,,,66,,66,,,,66,,,,,,,,,66,,,,,66,66,66,66,,66,66,66,66,,,,,66,66,,,,67,67,67,66,67,66,66,66,67,67,66,66,,67,,67,67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,67,67,67,67,,67,67,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,67,,,,67,,,67,,,,,,67,,,,,67,67,67,67,,67,67,67,67,,,,,67,67,,,,68,68,68,67,68,67,67,67,68,68,67,67,,68,,68,68,68,68,68,68,68,,,,,,68,68,68,68,68,68,68,,,68,,,,,,,68,,,68,68,68,68,68,68,68,68,68,68,68,68,,68,68,68,68,68,,,,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,,68,,,,,,68,,,68,,,,,,68,,,,,68,68,68,68,,68,68,68,68,,,,,68,68,,,,71,71,71,68,71,68,68,68,71,71,68,68,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,71,71,71,,,,,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,,,,,71,,,,,,,,,71,,,,,71,71,71,71,,71,71,71,71,,,,,71,71,,,,72,72,72,71,72,71,71,71,72,72,71,71,,72,,72,72,72,72,72,72,72,,,,,,72,72,72,72,72,72,72,,,72,,,,,,,72,,,72,72,72,72,72,72,72,72,,72,72,72,,72,72,72,72,72,,,,,,,,,,,,,,,,,,,,72,,,72,,,72,72,,,72,,,,,,72,,,,,,,,,72,,,,,72,72,72,72,,72,72,72,72,,,,,72,72,,,,75,75,75,72,75,72,72,72,75,75,72,72,,75,,75,75,75,75,75,75,75,,,,,,75,75,75,75,75,75,75,,,75,,,,,,,75,,,75,75,75,75,75,75,75,75,,75,75,75,,75,75,75,75,75,,,,,,,,,,,,,,,,,,,,75,,,75,,,75,75,,,75,,,,,,75,,,,,,,,,75,,,,,75,75,75,75,,75,75,75,75,,,,,75,75,75,,,,,75,75,,75,75,75,,,75,75,125,125,125,125,125,,,,125,125,,,,125,,125,125,125,125,125,125,125,,,,,,125,125,125,125,125,125,125,,,125,,,,,,125,125,125,125,125,125,125,125,125,125,125,125,,125,125,125,,125,125,125,125,125,,,,,,,,,,,,,,,,,,,,125,,,125,,,125,125,,,125,,125,,,,125,,,,,,,,,125,,,,,125,125,125,125,,125,125,125,125,,,,,125,125,,,,,,125,125,,125,125,125,,,125,125,130,130,130,,130,,,,130,130,,,,130,,130,130,130,130,130,130,130,,,,,,130,130,130,130,130,130,130,,,130,,,,,,,130,,,130,130,130,130,130,130,130,130,,130,130,130,,130,130,130,130,130,,,,,,,,,,,,,,,,,,,,130,,,130,,,130,130,,,130,,,,,,130,,,,,,,,,130,,,,,130,130,130,130,,130,130,130,130,,,,,130,130,,,,131,131,131,130,131,130,130,130,131,131,130,130,,131,,131,131,131,131,131,131,131,,,,,,131,131,131,131,131,131,131,,,131,,,,,,,131,,,131,131,131,131,131,131,131,131,,131,131,131,,131,131,131,131,131,,,,,,,,,,,,,,,,,,,,131,,,131,,,131,131,,,131,,,,,,131,,,,,,,,,131,,,,,131,131,131,131,,131,131,131,131,,,,,131,131,,,,132,132,132,131,132,131,131,131,132,132,131,131,,132,,132,132,132,132,132,132,132,,,,,,132,132,132,132,132,132,132,,,132,,,,,,,132,,,132,132,132,132,132,132,132,132,,132,132,132,,132,132,132,132,132,,,,,,,,,,,,,,,,,,,,132,,,132,,,132,132,,,132,,,,,,132,,,,,,,,,132,,,,,132,132,132,132,,132,132,132,132,,,,,132,132,,,,133,133,133,132,133,132,132,132,133,133,132,132,,133,,133,133,133,133,133,133,133,,,,,,133,133,133,133,133,133,133,,,133,,,,,,,133,,,133,133,133,133,133,133,133,133,,133,133,133,,133,133,133,133,133,,,,,,,,,,,,,,,,,,,,133,,,133,,,133,133,,,133,,,,,,133,,,,,,,,,133,,,,,133,133,133,133,,133,133,133,133,,,,,133,133,,,,,,,133,,133,133,133,,,133,133,134,134,134,134,134,,,,134,134,,,,134,,134,134,134,134,134,134,134,,,,,,134,134,134,134,134,134,134,,,134,,,,,,134,134,,134,134,134,134,134,134,134,134,134,,134,134,134,,134,134,134,134,134,,,,,,,,,,,,,,,,,,,,134,,,134,,,134,134,,,134,,134,,,,134,,,,,,,,,134,,,,,134,134,134,134,,134,134,134,134,,,,,134,134,,,,220,220,220,134,220,134,134,134,220,220,134,134,,220,,220,220,220,220,220,220,220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,220,220,220,220,220,220,,220,220,220,,220,220,220,220,220,,,,,,,,,,,,,,,,,,,,220,,,220,,,220,220,,,220,,220,,,,220,,,,,,,,,220,,,,,220,220,220,220,,220,220,220,220,,,,,220,220,,,,221,221,221,220,221,220,220,220,221,221,220,220,,221,,221,221,221,221,221,221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,,,221,,,221,221,221,221,221,221,221,221,,221,221,221,,221,221,221,221,221,,,,,,,,,,,,,,,,,,,,221,,,221,,,221,221,,,221,,221,,,,221,,,,,,,,,221,,,,,221,221,221,221,,221,221,221,221,,,,,221,221,,,,222,222,222,221,222,221,221,221,222,222,221,221,,222,,222,222,222,222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,,222,,,222,222,222,222,222,222,222,222,,222,222,222,,222,222,222,222,222,,,,,,,,,,,,,,,,,,,,222,,,222,,,222,222,,,222,,,,,,222,,,,,,,,,222,,,,,222,222,222,222,,222,222,222,222,,,,,222,222,,,,223,223,223,222,223,222,222,222,223,223,222,222,,223,,223,223,223,223,223,223,223,,,,,,223,223,223,223,223,223,223,,,223,,,,,,,223,,,223,223,223,223,223,223,223,223,,223,223,223,,223,223,223,223,223,,,,,,,,,,,,,,,,,,,,223,,,223,,,223,223,,,223,,,,,,223,,,,,,,,,223,,,,,223,223,223,223,,223,223,223,223,,,,,223,223,,,,224,224,224,223,224,223,223,223,224,224,223,223,,224,,224,224,224,224,224,224,224,,,,,,224,224,224,224,224,224,224,,,224,,,,,,,224,,,224,224,224,224,224,224,224,224,,224,224,224,,224,224,224,224,224,,,,,,,,,,,,,,,,,,,,224,,,224,,,224,224,,,224,,,,,,224,,,,,,,,,224,,,,,224,224,224,224,,224,224,224,224,,,,,224,224,,,,225,225,225,224,225,224,224,224,225,225,224,224,,225,,225,225,225,225,225,225,225,,,,,,225,225,225,225,225,225,225,,,225,,,,,,,225,,,225,225,225,225,225,225,225,225,225,225,225,225,,225,225,225,225,225,,,,,,,,,,,,,,,,,,,,225,,,225,,,225,225,,,225,,225,,225,,225,,,225,,,,,,225,,,,,225,225,225,225,,225,225,225,225,,,,,225,225,,,,238,238,238,225,238,225,225,225,238,238,225,225,,238,,238,238,238,238,238,238,238,,,,,,238,238,238,238,238,238,238,,,238,,,,,,,238,,,238,238,238,238,238,238,238,238,,238,238,238,,238,238,238,238,238,,,,,,,,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,,,,,238,,,,,,,,,238,,,,,238,238,238,238,,238,238,238,238,,,,,238,238,,,,239,239,239,238,239,238,238,238,239,239,238,238,,239,,239,239,239,239,239,239,239,,,,,,239,239,239,239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239,239,,239,239,239,,239,239,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239,,,239,239,,,239,,,,,,239,,,,,,,,,239,,,,,239,239,239,239,,239,239,239,239,,,,,239,239,,,,240,240,240,239,240,239,239,239,240,240,239,239,,240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240,240,240,,,240,,,,,,,240,,,240,240,240,240,240,240,240,240,,240,240,240,,240,240,240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,240,,,240,,,,,,240,,,,,,,,,240,,,,,240,240,240,240,,240,240,240,240,,,,,240,240,240,,,251,251,251,240,251,240,240,240,251,251,240,240,,251,,251,251,251,251,251,251,251,,,,,,251,251,251,251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251,251,251,251,,251,251,251,,251,251,251,251,251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,,,,,251,,,,,,,,,251,,,,,251,251,251,251,,251,251,251,251,,,,,251,251,,,,258,258,258,251,258,251,251,251,258,258,251,251,,258,,258,258,258,258,258,258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,,,258,,,258,258,258,258,258,258,258,258,,258,258,258,,258,258,258,258,258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,,258,,,,,258,258,258,258,,258,258,258,258,,,,,258,258,,,,259,259,259,258,259,258,258,258,259,259,258,258,,259,,259,259,259,259,259,259,259,,,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259,259,,259,259,259,,259,259,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259,,,259,,,,,,259,,,,,,,,,259,,,,,259,259,259,259,,259,259,259,259,,,,,259,259,,,,260,260,260,259,260,259,259,259,260,260,259,259,,260,,260,260,260,260,260,260,260,,,,,,260,260,260,260,260,260,260,,,260,,,,,,,260,,,260,260,260,260,260,260,260,260,,260,260,260,,260,260,260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,,,,,260,,,,,,,,,260,,,,,260,260,260,260,,260,260,260,260,,,,,260,260,,,,261,261,261,260,261,260,260,260,261,261,260,260,,261,,261,261,261,261,261,261,261,,,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261,261,261,261,261,261,261,261,,261,261,261,,261,261,261,261,261,,,,,,,,,,,,,,,,,,,,261,,,261,,,261,261,,,261,,,,,,261,,,,,,,,,261,,,,,261,261,261,261,,261,261,261,261,,,,,261,261,,,,262,262,262,261,262,261,261,261,262,262,261,261,,262,,262,262,262,262,262,262,262,,,,,,262,262,262,262,262,262,262,,,262,,,,,,,262,,,262,262,262,262,262,262,262,262,,262,262,262,,262,262,262,262,262,,,,,,,,,,,,,,,,,,,,262,,,262,,,262,262,,,262,,,,,,262,,,,,,,,,262,,,,,262,262,262,262,,262,262,262,262,,,,,262,262,,,,263,263,263,262,263,262,262,262,263,263,262,262,,263,,263,263,263,263,263,263,263,,,,,,263,263,263,263,263,263,263,,,263,,,,,,,263,,,263,263,263,263,263,263,263,263,,263,263,263,,263,263,263,263,263,,,,,,,,,,,,,,,,,,,,263,,,263,,,263,263,,,263,,,,,,263,,,,,,,,,263,,,,,263,263,263,263,,263,263,263,263,,,,,263,263,,,,264,264,264,263,264,263,263,263,264,264,263,263,,264,,264,264,264,264,264,264,264,,,,,,264,264,264,264,264,264,264,,,264,,,,,,,264,,,264,264,264,264,264,264,264,264,,264,264,264,,264,264,264,264,264,,,,,,,,,,,,,,,,,,,,264,,,264,,,264,264,,,264,,,,,,264,,,,,,,,,264,,,,,264,264,264,264,,264,264,264,264,,,,,264,264,,,,265,265,265,264,265,264,264,264,265,265,264,264,,265,,265,265,265,265,265,265,265,,,,,,265,265,265,265,265,265,265,,,265,,,,,,,265,,,265,265,265,265,265,265,265,265,,265,265,265,,265,265,265,265,265,,,,,,,,,,,,,,,,,,,,265,,,265,,,265,265,,,265,,,,,,265,,,,,,,,,265,,,,,265,265,265,265,,265,265,265,265,,,,,265,265,,,,266,266,266,265,266,265,265,265,266,266,265,265,,266,,266,266,266,266,266,266,266,,,,,,266,266,266,266,266,266,266,,,266,,,,,,,266,,,266,266,266,266,266,266,266,266,,266,266,266,,266,266,266,266,266,,,,,,,,,,,,,,,,,,,,266,,,266,,,266,266,,,266,,,,,,266,,,,,,,,,266,,,,,266,266,266,266,,266,266,266,266,,,,,266,266,,,,267,267,267,266,267,266,266,266,267,267,266,266,,267,,267,267,267,267,267,267,267,,,,,,267,267,267,267,267,267,267,,,267,,,,,,,267,,,267,267,267,267,267,267,267,267,,267,267,267,,267,267,267,267,267,,,,,,,,,,,,,,,,,,,,267,,,267,,,267,267,,,267,,,,,,267,,,,,,,,,267,,,,,267,267,267,267,,267,267,267,267,,,,,267,267,,,,268,268,268,267,268,267,267,267,268,268,267,267,,268,,268,268,268,268,268,268,268,,,,,,268,268,268,268,268,268,268,,,268,,,,,,,268,,,268,268,268,268,268,268,268,268,,268,268,268,,268,268,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268,,,268,268,,,268,,,,,,268,,,,,,,,,268,,,,,268,268,268,268,,268,268,268,268,,,,,268,268,,,,269,269,269,268,269,268,268,268,269,269,268,268,,269,,269,269,269,269,269,269,269,,,,,,269,269,269,269,269,269,269,,,269,,,,,,,269,,,269,269,269,269,269,269,269,269,,269,269,269,,269,269,269,269,269,,,,,,,,,,,,,,,,,,,,269,,,269,,,269,269,,,269,,,,,,269,,,,,,,,,269,,,,,269,269,269,269,,269,269,269,269,,,,,269,269,,,,270,270,270,269,270,269,269,269,270,270,269,269,,270,,270,270,270,270,270,270,270,,,,,,270,270,270,270,270,270,270,,,270,,,,,,,270,,,270,270,270,270,270,270,270,270,,270,270,270,,270,270,270,270,270,,,,,,,,,,,,,,,,,,,,270,,,270,,,270,270,,,270,,,,,,270,,,,,,,,,270,,,,,270,270,270,270,,270,270,270,270,,,,,270,270,,,,271,271,271,270,271,270,270,270,271,271,270,270,,271,,271,271,271,271,271,271,271,,,,,,271,271,271,271,271,271,271,,,271,,,,,,,271,,,271,271,271,271,271,271,271,271,,271,271,271,,271,271,271,271,271,,,,,,,,,,,,,,,,,,,,271,,,271,,,271,271,,,271,,,,,,271,,,,,,,,,271,,,,,271,271,271,271,,271,271,271,271,,,,,271,271,,,,272,272,272,271,272,271,271,271,272,272,271,271,,272,,272,272,272,272,272,272,272,,,,,,272,272,272,272,272,272,272,,,272,,,,,,,272,,,272,272,272,272,272,272,272,272,,272,272,272,,272,272,272,272,272,,,,,,,,,,,,,,,,,,,,272,,,272,,,272,272,,,272,,,,,,272,,,,,,,,,272,,,,,272,272,272,272,,272,272,272,272,,,,,272,272,,,,273,273,273,272,273,272,272,272,273,273,272,272,,273,,273,273,273,273,273,273,273,,,,,,273,273,273,273,273,273,273,,,273,,,,,,,273,,,273,273,273,273,273,273,273,273,,273,273,273,,273,273,273,273,273,,,,,,,,,,,,,,,,,,,,273,,,273,,,273,273,,,273,,,,,,273,,,,,,,,,273,,,,,273,273,273,273,,273,273,273,273,,,,,273,273,,,,274,274,274,273,274,273,273,273,274,274,273,273,,274,,274,274,274,274,274,274,274,,,,,,274,274,274,274,274,274,274,,,274,,,,,,,274,,,274,274,274,274,274,274,274,274,,274,274,274,,274,274,274,274,274,,,,,,,,,,,,,,,,,,,,274,,,274,,,274,274,,,274,,,,,,274,,,,,,,,,274,,,,,274,274,274,274,,274,274,274,274,,,,,274,274,,,,275,275,275,274,275,274,274,274,275,275,274,274,,275,,275,275,275,275,275,275,275,,,,,,275,275,275,275,275,275,275,,,275,,,,,,,275,,,275,275,275,275,275,275,275,275,,275,275,275,,275,275,275,275,275,,,,,,,,,,,,,,,,,,,,275,,,275,,,275,275,,,275,,,,,,275,,,,,,,,,275,,,,,275,275,275,275,,275,275,275,275,,,,,275,275,,,,276,276,276,275,276,275,275,275,276,276,275,275,,276,,276,276,276,276,276,276,276,,,,,,276,276,276,276,276,276,276,,,276,,,,,,,276,,,276,276,276,276,276,276,276,276,,276,276,276,,276,276,276,276,276,,,,,,,,,,,,,,,,,,,,276,,,276,,,276,276,,,276,,,,,,276,,,,,,,,,276,,,,,276,276,276,276,,276,276,276,276,,,,,276,276,,,,277,277,277,276,277,276,276,276,277,277,276,276,,277,,277,277,277,277,277,277,277,,,,,,277,277,277,277,277,277,277,,,277,,,,,,,277,,,277,277,277,277,277,277,277,277,,277,277,277,,277,277,277,277,277,,,,,,,,,,,,,,,,,,,,277,,,277,,,277,277,,,277,,,,,,277,,,,,,,,,277,,,,,277,277,277,277,,277,277,277,277,,,,,277,277,,,,278,278,278,277,278,277,277,277,278,278,277,277,,278,,278,278,278,278,278,278,278,,,,,,278,278,278,278,278,278,278,,,278,,,,,,,278,,,278,278,278,278,278,278,278,278,,278,278,278,,278,278,278,278,278,,,,,,,,,,,,,,,,,,,,278,,,278,,,278,278,,,278,,,,,,278,,,,,,,,,278,,,,,278,278,278,278,,278,278,278,278,,,,,278,278,,,,279,279,279,278,279,278,278,278,279,279,278,278,,279,,279,279,279,279,279,279,279,,,,,,279,279,279,279,279,279,279,,,279,,,,,,,279,,,279,279,279,279,279,279,279,279,,279,279,279,,279,279,279,279,279,,,,,,,,,,,,,,,,,,,,279,,,279,,,279,279,,,279,,,,,,279,,,,,,,,,279,,,,,279,279,279,279,,279,279,279,279,,,,,279,279,,,,284,284,284,279,284,279,279,279,284,284,279,279,,284,,284,284,284,284,284,284,284,,,,,,284,284,284,284,284,284,284,,,284,,,,,,,284,,,284,284,284,284,284,284,284,284,,284,284,284,,284,284,284,284,284,,,,,,,,,,,,,,,,,,,,284,,,284,,,284,284,,,284,,,,,,284,,,,,,,,,284,,,,,284,284,284,284,,284,284,284,284,,,,,284,284,,,,300,300,300,284,300,284,284,284,300,300,284,284,,300,,300,300,300,300,300,300,300,,,,,,300,300,300,300,300,300,300,,,300,,,,,,,300,,,300,300,300,300,300,300,300,300,,300,300,300,,300,300,300,300,300,,,,,,,,,,,,,,,,,,,,300,,,300,,,300,300,,,300,,,,,,300,,,,,,,,,300,,,,,300,300,300,300,,300,300,300,300,,,,,300,300,,,,307,307,307,300,307,300,300,300,307,307,300,300,,307,,307,307,307,307,307,307,307,,,,,,307,307,307,307,307,307,307,,,307,,,,,,,307,,,307,307,307,307,307,307,307,307,307,307,307,307,,307,307,307,307,307,,,,,,,,,,,,,,,,,,,,307,,,307,,,307,307,,,307,,307,,307,,307,,,307,,,,,,307,,,,,307,307,307,307,,307,307,307,307,,,,,307,307,,,,308,308,308,307,308,307,307,307,308,308,307,307,,308,,308,308,308,308,308,308,308,,,,,,308,308,308,308,308,308,308,,,308,,,,,,,308,,,308,308,308,308,308,308,308,308,308,308,308,308,,308,308,308,308,308,,,,,,,,,,,,,,,,,,,,308,,,308,,,308,308,,,308,,308,,308,,308,,,308,,,,,,308,,,,,308,308,308,308,,308,308,308,308,,,,,308,308,,,,316,316,316,308,316,308,308,308,316,316,308,308,,316,,316,316,316,316,316,316,316,,,,,,316,316,316,316,316,316,316,,,316,,,,,,,316,,,316,316,316,316,316,316,316,316,316,316,316,316,,316,316,316,316,316,,,,,,,,,,,,,,,,,,,,316,,,316,,,316,316,,,316,,316,,316,,316,,,316,,,,,,316,,,,,316,316,316,316,,316,316,316,316,,,,,316,316,316,,,323,323,323,316,323,316,316,316,323,323,316,316,,323,,323,323,323,323,323,323,323,,,,,,323,323,323,323,323,323,323,,,323,,,,,,,323,,,323,323,323,323,323,323,323,323,,323,323,323,,323,323,323,323,323,,,,,,,,,,,,,,,,,,,,323,,,323,,,323,323,,,323,,,,,,323,,,,,,,,,323,,,,,323,323,323,323,,323,323,323,323,,,,,323,323,,,,325,325,325,323,325,323,323,323,325,325,323,323,,325,,325,325,325,325,325,325,325,,,,,,325,325,325,325,325,325,325,,,325,,,,,,,325,,,325,325,325,325,325,325,325,325,,325,325,325,,325,325,325,325,325,,,,,,,,,,,,,,,,,,,,325,,,325,,,325,325,,,325,,,,,,325,,,,,,,,,325,,,,,325,325,325,325,,325,325,325,325,,,,,325,325,,,,328,328,328,325,328,325,325,325,328,328,325,325,,328,,328,328,328,328,328,328,328,,,,,,328,328,328,328,328,328,328,,,328,,,,,,,328,,,328,328,328,328,328,328,328,328,,328,328,328,,328,328,328,328,328,,,,,,,,,,,,,,,,,,,,328,,,328,,,328,328,,,328,,,,,,328,,,,,,,,,328,,,,,328,328,328,328,,328,328,328,328,,,,,328,328,,,,329,329,329,328,329,328,328,328,329,329,328,328,,329,,329,329,329,329,329,329,329,,,,,,329,329,329,329,329,329,329,,,329,,,,,,,329,,,329,329,329,329,329,329,329,329,,329,329,329,,329,329,329,329,329,,,,,,,,,,,,,,,,,,,,329,,,329,,,329,329,,,329,,,,,,329,,,,,,,,,329,,,,,329,329,329,329,,329,329,329,329,,,,,329,329,,,,,,,329,,329,329,329,,,329,329,334,334,334,334,334,,,,334,334,,,,334,,334,334,334,334,334,334,334,,,,,,334,334,334,334,334,334,334,,,334,,,,,,334,334,,334,334,334,334,334,334,334,334,334,,334,334,334,,334,334,334,334,334,,,,,,,,,,,,,,,,,,,,334,,,334,,,334,334,,,334,,334,,,,334,,,,,,,,,334,,,,,334,334,334,334,,334,334,334,334,,,,,334,334,,,,370,370,370,334,370,334,334,334,370,370,334,334,,370,,370,370,370,370,370,370,370,,,,,,370,370,370,370,370,370,370,,,370,,,,,,,370,,,370,370,370,370,370,370,370,370,,370,370,370,,370,370,370,370,370,,,,,,,,,,,,,,,,,,,,370,,,370,,,370,370,,,370,,,,,,370,,,,,,,,,370,,,,,370,370,370,370,,370,370,370,370,,,,,370,370,,,,387,387,387,370,387,370,370,370,387,387,370,370,,387,,387,387,387,387,387,387,387,,,,,,387,387,387,387,387,387,387,,,387,,,,,,,387,,,387,387,387,387,387,387,387,387,,387,387,387,,387,387,387,387,387,,,,,,,,,,,,,,,,,,,,387,,,387,,,387,387,,,387,,,,,,387,,,,,,,,,387,,,,,387,387,387,387,,387,387,387,387,,,,,387,387,,,,408,408,408,387,408,387,387,387,408,408,387,387,,408,,408,408,408,408,408,408,408,,,,,,408,408,408,408,408,408,408,,,408,,,,,,,408,,,408,408,408,408,408,408,408,408,,408,408,408,,408,408,408,408,408,,,,,,,,,,,,,,,,,,,,408,,,408,,,408,408,,,408,,,,,,408,,,,,,,,,408,,,,,408,408,408,408,,408,408,408,408,,,,,408,408,,,,437,437,437,408,437,408,408,408,437,437,408,408,,437,,437,437,437,437,437,437,437,,,,,,437,437,437,437,437,437,437,,,437,,,,,,,437,,,437,437,437,437,437,437,437,437,,437,437,437,,437,437,437,437,437,,,,,,,,,,,,,,,,,,,,437,,,437,,,437,437,,,437,,,,,,437,,,,,,,,,437,,,,,437,437,437,437,,437,437,437,437,,,,,437,437,,,,,,,437,,437,437,437,461,,437,437,,,,461,461,461,,,461,461,461,,461,,,,,,,,461,461,461,461,,,,,,,,,461,461,,461,461,461,461,461,,,,,,,,,,,,,,,,,,,,,,,461,461,461,461,461,461,461,461,461,461,461,461,461,461,,,461,461,461,,,461,,461,461,,,461,461,,461,,461,,461,,461,461,,461,461,461,461,461,,461,461,461,1138,,1138,1138,1138,1138,1138,,,,,,,461,,1138,461,461,471,461,,461,,,,471,471,471,461,,471,471,471,,471,,,1138,,,,,471,471,471,471,471,,1138,1138,,,,1138,471,471,,471,471,471,471,471,,,,,,,,,,,,,,,,,,,,,,,471,471,471,471,471,471,471,471,471,471,471,471,471,471,,,471,471,471,,,471,,,471,,,471,471,,471,,471,,471,,471,471,,471,471,471,471,471,,471,471,471,,,,,,,,,,,,,,471,,,471,471,471,471,,471,472,471,,,,,471,472,472,472,,,472,472,472,,472,,,,,,,,472,472,472,472,472,,,,,,,,472,472,,472,472,472,472,472,,,,,,,,,,,,,,,,,,,,,,,472,472,472,472,472,472,472,472,472,472,472,472,472,472,,,472,472,472,,,472,,,472,,,472,472,,472,,472,,472,,472,472,,472,472,472,472,472,,472,472,472,,,,,,,,,,,,,,472,,,472,472,472,472,,472,,472,,473,473,473,472,473,,,,473,473,,,,473,,473,473,473,473,473,473,473,,,,,,473,473,473,473,473,473,473,,,473,,,,,,,473,,,473,473,473,473,473,473,473,473,,473,473,473,,473,473,473,473,473,,,,,,,,,,,,,,,,,,,,473,,,473,,,473,473,,,473,,,,,,473,,,,,,,,,473,,,,,473,473,473,473,,473,473,473,473,,,,,473,473,,,,500,500,500,473,500,473,473,473,500,500,473,473,,500,,500,500,500,500,500,500,500,,,,,,500,500,500,500,500,500,500,,,500,,,,,,,500,,,500,500,500,500,500,500,500,500,,500,500,500,,500,500,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500,,,500,500,,,500,,,,,,500,,,,,,,,,500,,,,,500,500,500,500,,500,500,500,500,,,,,500,500,,,,513,513,513,500,513,500,500,500,513,513,500,500,,513,,513,513,513,513,513,513,513,,,,,,513,513,513,513,513,513,513,,,513,,,,,,,513,,,513,513,513,513,513,513,513,513,,513,513,513,,513,513,513,513,513,,,,,,,,,,,,,,,,,,,,513,,,513,,,513,513,,,513,,,,,,513,,,,,,,,,513,,,,,513,513,513,513,,513,513,513,513,,,,,513,513,,,,523,523,523,513,523,513,513,513,523,523,513,513,,523,,523,523,523,523,523,523,523,,,,,,523,523,523,523,523,523,523,,,523,,,,,,,523,,,523,523,523,523,523,523,523,523,523,523,523,523,,523,523,523,523,523,,,,,,,,,,,,,,,,,,,,523,,,523,,,523,523,,,523,,523,,523,,523,,,523,,,,,,523,,,,,523,523,523,523,,523,523,523,523,,,,,523,523,,,,525,525,525,523,525,523,523,523,525,525,523,523,,525,,525,525,525,525,525,525,525,,,,,,525,525,525,525,525,525,525,,,525,,,,,,,525,,,525,525,525,525,525,525,525,525,,525,525,525,,525,525,525,525,525,,,,,,,,,,,,,,,,,,,,525,,,525,,,525,525,,,525,,,,,,525,,,,,,,,,525,,,,,525,525,525,525,,525,525,525,525,,,,,525,525,,,,526,526,526,525,526,525,525,525,526,526,525,525,,526,,526,526,526,526,526,526,526,,,,,,526,526,526,526,526,526,526,,,526,,,,,,,526,,,526,526,526,526,526,526,526,526,,526,526,526,,526,526,526,526,526,,,,,,,,,,,,,,,,,,,,526,,,526,,,526,526,,,526,,,,,,526,,,,,,,,,526,,,,,526,526,526,526,,526,526,526,526,,,,,526,526,,,,527,527,527,526,527,526,526,526,527,527,526,526,,527,,527,527,527,527,527,527,527,,,,,,527,527,527,527,527,527,527,,,527,,,,,,,527,,,527,527,527,527,527,527,527,527,,527,527,527,,527,527,527,527,527,,,,,,,,,,,,,,,,,,,,527,,,527,,,527,527,,,527,,,,,,527,,,,,,,,,527,,,,,527,527,527,527,,527,527,527,527,,,,,527,527,,,,,,,527,,527,527,527,558,,527,527,,,,558,558,558,,,558,558,558,410,558,410,410,410,410,410,,,558,558,558,,,,410,,,,,,558,558,,558,558,558,558,558,,647,,647,647,647,647,647,410,410,,,,,,,647,410,410,410,410,,,,410,,1133,,1133,1133,1133,1133,1133,558,,,,,647,,558,1133,,,,558,558,647,647,647,647,,,,647,,,,,,,,,1133,410,,,,558,558,,,1133,1133,1133,1133,,,,1133,,,,558,,,558,,563,563,563,558,563,,647,,563,563,558,,,563,,563,563,563,563,563,563,563,,,,,,563,563,563,563,563,563,563,,,563,,,,,,,563,,,563,563,563,563,563,563,563,563,,563,563,563,,563,563,563,563,563,,,,,,,,,,,,,,,,,,,,563,,,563,,,563,563,,,563,,,,,,563,,,,,,,,,563,,,,,563,563,563,563,,563,563,563,563,,,,,563,563,,,,573,573,573,563,573,563,563,563,573,573,563,563,,573,,573,573,573,573,573,573,573,,,,,,573,573,573,573,573,573,573,,,573,,,,,,,573,,,573,573,573,573,573,573,573,573,573,573,573,573,,573,573,573,573,573,,,,,,,,,,,,,,,,,,,,573,,,573,,,573,573,,,573,,573,,573,,573,,,573,,,,,,573,,,,,573,573,573,573,,573,573,573,573,,,,,573,573,,,,575,575,575,573,575,573,573,573,575,575,573,573,,575,,575,575,575,575,575,575,575,,,,,,575,575,575,575,575,575,575,,,575,,,,,,,575,,,575,575,575,575,575,575,575,575,575,575,575,575,,575,575,575,575,575,,,,,,,,,,,,,,,,,,,,575,,,575,,,575,575,,,575,,,,575,,575,,,575,,,,,,575,,,,,575,575,575,575,,575,575,575,575,,,,,575,575,,,,577,577,577,575,577,575,575,575,577,577,575,575,,577,,577,577,577,577,577,577,577,,,,,,577,577,577,577,577,577,577,,,577,,,,,,,577,,,577,577,577,577,577,577,577,577,,577,577,577,,577,577,577,577,577,,,,,,,,,,,,,,,,,,,,577,,,577,,,577,577,,,577,,,,,,577,,,,,,,,,577,,,,,577,577,577,577,,577,577,577,577,,,,,577,577,,,,,,,577,,577,577,577,,,577,577,583,583,583,583,583,,,,583,583,,,,583,,583,583,583,583,583,583,583,,,,,,583,583,583,583,583,583,583,,,583,,,,,,583,583,583,583,583,583,583,583,583,583,583,583,,583,583,583,,583,583,583,583,583,,,,,,,,,,,,,,,,,,,,583,,,583,,,583,583,,,583,,583,,,,583,,,,,,,,,583,,,,,583,583,583,583,,583,583,583,583,,,,,583,583,,,,,,583,583,,583,583,583,,,583,583,593,593,593,,593,,,,593,593,,,,593,,593,593,593,593,593,593,593,,,,,,593,593,593,593,593,593,593,,,593,,,,,,,593,,,593,593,593,593,593,593,593,593,593,593,593,593,,593,593,593,593,593,,,,,,,,,,,,,,,,,,,,593,,,593,,,593,593,,,593,,593,,593,,593,,,593,,,,,,593,,,,,593,593,593,593,,593,593,593,593,,,,,593,593,,,,603,603,603,593,603,593,593,593,603,603,593,593,,603,,603,603,603,603,603,603,603,,,,,,603,603,603,603,603,603,603,,,603,,,,,,,603,,,603,603,603,603,603,603,603,603,,603,603,603,,603,603,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603,,,603,603,,,603,,,,,,603,,,,,,,,,603,,,,,603,603,603,603,,603,603,603,603,,,,,603,603,,,,606,606,606,603,606,603,603,603,606,606,603,603,,606,,606,606,606,606,606,606,606,,,,,,606,606,606,606,606,606,606,,,606,,,,,,,606,,,606,606,606,606,606,606,606,606,,606,606,606,,606,606,606,606,606,,,,,,,,,,,,,,,,,,,,606,,,606,,,606,606,,,606,,,,,,606,,,,,,,,,606,,,,,606,606,606,606,,606,606,606,606,,,,,606,606,,,,608,608,608,606,608,606,606,606,608,608,606,606,,608,,608,608,608,608,608,608,608,,,,,,608,608,608,608,608,608,608,,,608,,,,,,,608,,,608,608,608,608,608,608,608,608,,608,608,608,,608,608,608,608,608,,,,,,,,,,,,,,,,,,,,608,,,608,,,608,608,,,608,,,,,,608,,,,,,,,,608,,,,,608,608,608,608,,608,608,608,608,,,,,608,608,,,,614,614,614,608,614,608,608,608,614,614,608,608,,614,,614,614,614,614,614,614,614,,,,,,614,614,614,614,614,614,614,,,614,,,,,,,614,,,614,614,614,614,614,614,614,614,614,614,614,614,,614,614,614,614,614,,,,,,,,,,,,,,,,,,,,614,,,614,,,614,614,,,614,,614,,,,614,,,614,,,,,,614,,,,,614,614,614,614,,614,614,614,614,,,,,614,614,,,,617,617,617,614,617,614,614,614,617,617,614,614,,617,,617,617,617,617,617,617,617,,,,,,617,617,617,617,617,617,617,,,617,,,,,,,617,,,617,617,617,617,617,617,617,617,617,617,617,617,,617,617,617,617,617,,,,,,,,,,,,,,,,,,,,617,,,617,,,617,617,,,617,,,,,,617,,,617,,,,,,617,,,,,617,617,617,617,,617,617,617,617,,,,,617,617,,,,630,630,630,617,630,617,617,617,630,630,617,617,,630,,630,630,630,630,630,630,630,,,,,,630,630,630,630,630,630,630,,,630,,,,,,,630,,,630,630,630,630,630,630,630,630,,630,630,630,,630,630,630,630,630,,,,,,,,,,,,,,,,,,,,630,,,630,,,630,630,,,630,,630,,,,630,,,,,,,,,630,,,,,630,630,630,630,,630,630,630,630,,,,,630,630,,,,631,631,631,630,631,630,630,630,631,631,630,630,,631,,631,631,631,631,631,631,631,,,,,,631,631,631,631,631,631,631,,,631,,,,,,,631,,,631,631,631,631,631,631,631,631,631,631,631,631,,631,631,631,631,631,,,,,,,,,,,,,,,,,,,,631,,,631,,,631,631,,,631,,631,,631,,631,,,631,,,,,,631,,,,,631,631,631,631,,631,631,631,631,,,,,631,631,,,,641,641,641,631,641,631,631,631,641,641,631,631,,641,,641,641,641,641,641,641,641,,,,,,641,641,641,641,641,641,641,,,641,,,,,,,641,,,641,641,641,641,641,641,641,641,641,641,641,641,,641,641,641,641,641,,,,,,,,,,,,,,,,,,,,641,,,641,,,641,641,,,641,,641,,641,,641,,,641,,,,,,641,,,,,641,641,641,641,,641,641,641,641,,,,,641,641,,,,,,,641,,641,641,641,,,641,641,672,672,672,672,672,,,,672,672,,,,672,,672,672,672,672,672,672,672,,,,,,672,672,672,672,672,672,672,,,672,,,,,,672,672,,672,672,672,672,672,672,672,672,672,,672,672,672,,672,672,672,672,672,,,,,,,,,,,,,,,,,,,,672,,,672,,,672,672,,,672,,672,,,,672,,,,,,,,,672,,,,,672,672,672,672,,672,672,672,672,,,,,672,672,,,,674,674,674,672,674,672,672,672,674,674,672,672,,674,,674,674,674,674,674,674,674,,,,,,674,674,674,674,674,674,674,,,674,,,,,,,674,,,674,674,674,674,674,674,674,674,,674,674,674,,674,674,674,674,674,,,,,,,,,,,,,,,,,,,,674,,,674,,,674,674,,,674,,674,,,,674,,,,,,,,,674,,,,,674,674,674,674,,674,674,674,674,,,,,674,674,,,,675,675,675,674,675,674,674,674,675,675,674,674,,675,,675,675,675,675,675,675,675,,,,,,675,675,675,675,675,675,675,,,675,,,,,,,675,,,675,675,675,675,675,675,675,675,,675,675,675,,675,675,675,675,675,,,,,,,,,,,,,,,,,,,,675,,,675,,,675,675,,,675,,,,,,675,,,,,,,,,675,,,,,675,675,675,675,,675,675,675,675,,,,,675,675,,,,676,676,676,675,676,675,675,675,676,676,675,675,,676,,676,676,676,676,676,676,676,,,,,,676,676,676,676,676,676,676,,,676,,,,,,,676,,,676,676,676,676,676,676,676,676,676,676,676,676,,676,676,676,676,676,,,,,,,,,,,,,,,,,,,,676,,,676,,,676,676,,,676,,676,,676,,676,,,676,,,,,,676,,,,,676,676,676,676,,676,676,676,676,,,,,676,676,,,,,,,676,,676,676,676,,,676,676,679,679,679,679,679,,,,679,679,,,,679,,679,679,679,679,679,679,679,,,,,,679,679,679,679,679,679,679,,,679,,,,,,679,679,,679,679,679,679,679,679,679,679,679,,679,679,679,,679,679,679,679,679,,,,,,,,,,,,,,,,,,,,679,,,679,,,679,679,,,679,,679,,,,679,,,,,,,,,679,,,,,679,679,679,679,,679,679,679,679,,,,,679,679,,,,680,680,680,679,680,679,679,679,680,680,679,679,,680,,680,680,680,680,680,680,680,,,,,,680,680,680,680,680,680,680,,,680,,,,,,,680,,,680,680,680,680,680,680,680,680,,680,680,680,,680,680,680,680,680,,,,,,,,,,,,,,,,,,,,680,,,680,,,680,680,,,680,,,,,,680,,,,,,,,,680,,,,,680,680,680,680,,680,680,680,680,,,,,680,680,,,,683,683,683,680,683,680,680,680,683,683,680,680,,683,,683,683,683,683,683,683,683,,,,,,683,683,683,683,683,683,683,,,683,,,,,,,683,,,683,683,683,683,683,683,683,683,683,683,683,683,,683,683,683,683,683,,,,,,,,,,,,,,,,,,,,683,,,683,,,683,683,,,683,,683,,683,,683,,,683,,,,,,683,,,,,683,683,683,683,,683,683,683,683,,,,,683,683,,,,684,684,684,683,684,683,683,683,684,684,683,683,,684,,684,684,684,684,684,684,684,,,,,,684,684,684,684,684,684,684,,,684,,,,,,,684,,,684,684,684,684,684,684,684,684,684,684,684,684,,684,684,684,684,684,,,,,,,,,,,,,,,,,,,,684,,,684,,,684,684,,,684,,,,684,,684,,,684,,,,,,684,,,,,684,684,684,684,,684,684,684,684,,,,,684,684,,,,685,685,685,684,685,684,684,684,685,685,684,684,,685,,685,685,685,685,685,685,685,,,,,,685,685,685,685,685,685,685,,,685,,,,,,,685,,,685,685,685,685,685,685,685,685,,685,685,685,,685,685,685,685,685,,,,,,,,,,,,,,,,,,,,685,,,685,,,685,685,,,685,,,,,,685,,,,,,,,,685,,,,,685,685,685,685,,685,685,685,685,,,,,685,685,,,,686,686,686,685,686,685,685,685,686,686,685,685,,686,,686,686,686,686,686,686,686,,,,,,686,686,686,686,686,686,686,,,686,,,,,,,686,,,686,686,686,686,686,686,686,686,,686,686,686,,686,686,686,686,686,,,,,,,,,,,,,,,,,,,,686,,,686,,,686,686,,,686,,,,,,686,,,,,,,,,686,,,,,686,686,686,686,,686,686,686,686,,,,,686,686,,,,690,690,690,686,690,686,686,686,690,690,686,686,,690,,690,690,690,690,690,690,690,,,,,,690,690,690,690,690,690,690,,,690,,,,,,,690,,,690,690,690,690,690,690,690,690,,690,690,690,,690,690,690,690,690,,,,,,,,,,,,,,,,,,,,690,,,690,,,690,690,,,690,,,,,,690,,,,,,,,,690,,,,,690,690,690,690,,690,690,690,690,,,,,690,690,,,,691,691,691,690,691,690,690,690,691,691,690,690,,691,,691,691,691,691,691,691,691,,,,,,691,691,691,691,691,691,691,,,691,,,,,,,691,,,691,691,691,691,691,691,691,691,,691,691,691,,691,691,691,691,691,,,,,,,,,,,,,,,,,,,,691,,,691,,,691,691,,,691,,,,,,691,,,,,,,,,691,,,,,691,691,691,691,,691,691,691,691,,,,,691,691,,,,697,697,697,691,697,691,691,691,697,697,691,691,,697,,697,697,697,697,697,697,697,,,,,,697,697,697,697,697,697,697,,,697,,,,,,,697,,,697,697,697,697,697,697,697,697,,697,697,697,,697,697,697,697,697,,,,,,,,,,,,,,,,,,,,697,,,697,,,697,697,,,697,,697,,,,697,,,,,,,,,697,,,,,697,697,697,697,,697,697,697,697,,,,,697,697,,,,713,713,713,697,713,697,697,697,713,713,697,697,,713,,713,713,713,713,713,713,713,,,,,,713,713,713,713,713,713,713,,,713,,,,,,,713,,,713,713,713,713,713,713,713,713,,713,713,713,,713,713,713,713,713,,,,,,,,,,,,,,,,,,,,713,,,713,,,713,713,,,713,,,,,,713,,,,,,,,,713,,,,,713,713,713,713,,713,713,713,713,,,,,713,713,,,,735,735,735,713,735,713,713,713,735,735,713,713,,735,,735,735,735,735,735,735,735,,,,,,735,735,735,735,735,735,735,,,735,,,,,,,735,,,735,735,735,735,735,735,735,735,,735,735,735,,735,735,735,735,735,,,,,,,,,,,,,,,,,,,,735,,,735,,,735,735,,,735,,,,,,735,,,,,,,,,735,,,,,735,735,735,735,,735,735,735,735,,,,,735,735,,,,736,736,736,735,736,735,735,735,736,736,735,735,,736,,736,736,736,736,736,736,736,,,,,,736,736,736,736,736,736,736,,,736,,,,,,,736,,,736,736,736,736,736,736,736,736,,736,736,736,,736,736,736,736,736,,,,,,,,,,,,,,,,,,,,736,,,736,,,736,736,,,736,,,,,,736,,,,,,,,,736,,,,,736,736,736,736,,736,736,736,736,,,,,736,736,,,,791,791,791,736,791,736,736,736,791,791,736,736,,791,,791,791,791,791,791,791,791,,,,,,791,791,791,791,791,791,791,,,791,,,,,,,791,,,791,791,791,791,791,791,791,791,791,791,791,791,,791,791,791,791,791,,,,,,,,,,,,,,,,,,,,791,,,791,,,791,791,,,791,,791,,791,,791,,,791,,,,,,791,,,,,791,791,791,791,,791,791,791,791,,,,,791,791,,,,800,800,800,791,800,791,791,791,800,800,791,791,,800,,800,800,800,800,800,800,800,,,,,,800,800,800,800,800,800,800,,,800,,,,,,,800,,,800,800,800,800,800,800,800,800,,800,800,800,,800,800,800,800,800,,,,,,,,,,,,,,,,,,,,800,,,800,,,800,800,,,800,,,,,,800,,,,,,,,,800,,,,,800,800,800,800,,800,800,800,800,,,,,800,800,,,,803,803,803,800,803,800,800,800,803,803,800,800,,803,,803,803,803,803,803,803,803,,,,,,803,803,803,803,803,803,803,,,803,,,,,,,803,,,803,803,803,803,803,803,803,803,,803,803,803,,803,803,803,803,803,,,,,,,,,,,,,,,,,,,,803,,,803,,,803,803,,,803,,,,,,803,,,,,,,,,803,,,,,803,803,803,803,,803,803,803,803,,,,,803,803,,,,821,821,821,803,821,803,803,803,821,821,803,803,,821,,821,821,821,821,821,821,821,,,,,,821,821,821,821,821,821,821,,,821,,,,,,,821,,,821,821,821,821,821,821,821,821,,821,821,821,,821,821,821,821,821,,,,,,,,,,,,,,,,,,,,821,,,821,,,821,821,,,821,,,,,,821,,,,,,,,,821,,,,,821,821,821,821,,821,821,821,821,,,,,821,821,,,,850,850,850,821,850,821,821,821,850,850,821,821,,850,,850,850,850,850,850,850,850,,,,,,850,850,850,850,850,850,850,,,850,,,,,,,850,,,850,850,850,850,850,850,850,850,,850,850,850,,850,850,850,850,850,,,,,,,,,,,,,,,,,,,,850,,,850,,,850,850,,,850,,,,,,850,,,,,,,,,850,,,,,850,850,850,850,,850,850,850,850,,,,,850,850,,,,870,870,870,850,870,850,850,850,870,870,850,850,,870,,870,870,870,870,870,870,870,,,,,,870,870,870,870,870,870,870,,,870,,,,,,,870,,,870,870,870,870,870,870,870,870,,870,870,870,,870,870,870,870,870,,,,,,,,,,,,,,,,,,,,870,,,870,,,870,870,,,870,,,,,,870,,,,,,,,,870,,,,,870,870,870,870,,870,870,870,870,,,,,870,870,,,,878,878,878,870,878,870,870,870,878,878,870,870,,878,,878,878,878,878,878,878,878,,,,,,878,878,878,878,878,878,878,,,878,,,,,,,878,,,878,878,878,878,878,878,878,878,,878,878,878,,878,878,878,878,878,,,,,,,,,,,,,,,,,,,,878,,,878,,,878,878,,,878,,,,,,878,,,,,,,,,878,,,,,878,878,878,878,,878,878,878,878,,,,,878,878,,,,891,891,891,878,891,878,878,878,891,891,878,878,,891,,891,891,891,891,891,891,891,,,,,,891,891,891,891,891,891,891,,,891,,,,,,,891,,,891,891,891,891,891,891,891,891,,891,891,891,,891,891,891,891,891,,,,,,,,,,,,,,,,,,,,891,,,891,,,891,891,,,891,,,,,,891,,,,,,,,,891,,,,,891,891,891,891,,891,891,891,891,,,,,891,891,,,,892,892,892,891,892,891,891,891,892,892,891,891,,892,,892,892,892,892,892,892,892,,,,,,892,892,892,892,892,892,892,,,892,,,,,,,892,,,892,892,892,892,892,892,892,892,,892,892,892,,892,892,892,892,892,,,,,,,,,,,,,,,,,,,,892,,,892,,,892,892,,,892,,,,,,892,,,,,,,,,892,,,,,892,892,892,892,,892,892,892,892,,,,,892,892,,,,920,920,920,892,920,892,892,892,920,920,892,892,,920,,920,920,920,920,920,920,920,,,,,,920,920,920,920,920,920,920,,,920,,,,,,,920,,,920,920,920,920,920,920,920,920,,920,920,920,,920,920,920,920,920,,,,,,,,,,,,,,,,,,,,920,,,920,,,920,920,,,920,,,,,,920,,,,,,,,,920,,,,,920,920,920,920,,920,920,920,920,,,,,920,920,,,,921,921,921,920,921,920,920,920,921,921,920,920,,921,,921,921,921,921,921,921,921,,,,,,921,921,921,921,921,921,921,,,921,,,,,,,921,,,921,921,921,921,921,921,921,921,,921,921,921,,921,921,921,921,921,,,,,,,,,,,,,,,,,,,,921,,,921,,,921,921,,,921,,,,,,921,,,,,,,,,921,,,,,921,921,921,921,,921,921,921,921,,,,,921,921,,,,922,922,922,921,922,921,921,921,922,922,921,921,,922,,922,922,922,922,922,922,922,,,,,,922,922,922,922,922,922,922,,,922,,,,,,,922,,,922,922,922,922,922,922,922,922,,922,922,922,,922,922,922,922,922,,,,,,,,,,,,,,,,,,,,922,,,922,,,922,922,,,922,,,,,,922,,,,,,,,,922,,,,,922,922,922,922,,922,922,922,922,,,,,922,922,,,,923,923,923,922,923,922,922,922,923,923,922,922,,923,,923,923,923,923,923,923,923,,,,,,923,923,923,923,923,923,923,,,923,,,,,,,923,,,923,923,923,923,923,923,923,923,,923,923,923,,923,923,923,923,923,,,,,,,,,,,,,,,,,,,,923,,,923,,,923,923,,,923,,,,,,923,,,,,,,,,923,,,,,923,923,923,923,,923,923,923,923,,,,,923,923,,,,924,924,924,923,924,923,923,923,924,924,923,923,,924,,924,924,924,924,924,924,924,,,,,,924,924,924,924,924,924,924,,,924,,,,,,,924,,,924,924,924,924,924,924,924,924,,924,924,924,,924,924,924,924,924,,,,,,,,,,,,,,,,,,,,924,,,924,,,924,924,,,924,,,,,,924,,,,,,,,,924,,,,,924,924,924,924,,924,924,924,924,,,,,924,924,,,,925,925,925,924,925,924,924,924,925,925,924,924,,925,,925,925,925,925,925,925,925,,,,,,925,925,925,925,925,925,925,,,925,,,,,,,925,,,925,925,925,925,925,925,925,925,,925,925,925,,925,925,925,925,925,,,,,,,,,,,,,,,,,,,,925,,,925,,,925,925,,,925,,,,,,925,,,,,,,,,925,,,,,925,925,925,925,,925,925,925,925,,,,,925,925,,,,958,958,958,925,958,925,925,925,958,958,925,925,,958,,958,958,958,958,958,958,958,,,,,,958,958,958,958,958,958,958,,,958,,,,,,,958,,,958,958,958,958,958,958,958,958,,958,958,958,,958,958,958,958,958,,,,,,,,,,,,,,,,,,,,958,,,958,,,958,958,,,958,,,,,,958,,,,,,,,,958,,,,,958,958,958,958,,958,958,958,958,,,,,958,958,,,,961,961,961,958,961,958,958,958,961,961,958,958,,961,,961,961,961,961,961,961,961,,,,,,961,961,961,961,961,961,961,,,961,,,,,,,961,,,961,961,961,961,961,961,961,961,,961,961,961,,961,961,961,961,961,,,,,,,,,,,,,,,,,,,,961,,,961,,,961,961,,,961,,,,,,961,,,,,,,,,961,,,,,961,961,961,961,,961,961,961,961,,,,,961,961,,,,984,984,984,961,984,961,961,961,984,984,961,961,,984,,984,984,984,984,984,984,984,,,,,,984,984,984,984,984,984,984,,,984,,,,,,,984,,,984,984,984,984,984,984,984,984,,984,984,984,,984,984,984,984,984,,,,,,,,,,,,,,,,,,,,984,,,984,,,984,984,,,984,,,,,,984,,,,,,,,,984,,,,,984,984,984,984,,984,984,984,984,,,,,984,984,,,,989,989,989,984,989,984,984,984,989,989,984,984,,989,,989,989,989,989,989,989,989,,,,,,989,989,989,989,989,989,989,,,989,,,,,,,989,,,989,989,989,989,989,989,989,989,,989,989,989,,989,989,989,989,989,,,,,,,,,,,,,,,,,,,,989,,,989,,,989,989,,,989,,989,,,,989,,,,,,,,,989,,,,,989,989,989,989,,989,989,989,989,,,,,989,989,,,,1008,1008,1008,989,1008,989,989,989,1008,1008,989,989,,1008,,1008,1008,1008,1008,1008,1008,1008,,,,,,1008,1008,1008,1008,1008,1008,1008,,,1008,,,,,,,1008,,,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,,1008,1008,1008,1008,1008,,,,,,,,,,,,,,,,,,,,1008,,,1008,,,1008,1008,,,1008,,,,1008,,1008,,,1008,,,,,,1008,,,,,1008,1008,1008,1008,,1008,1008,1008,1008,,,,,1008,1008,,,,1034,1034,1034,1008,1034,1008,1008,1008,1034,1034,1008,1008,,1034,,1034,1034,1034,1034,1034,1034,1034,,,,,,1034,1034,1034,1034,1034,1034,1034,,,1034,,,,,,,1034,,,1034,1034,1034,1034,1034,1034,1034,1034,,1034,1034,1034,,1034,1034,1034,1034,1034,,,,,,,,,,,,,,,,,,,,1034,,,1034,,,1034,1034,,,1034,,,,,,1034,,,,,,,,,1034,,,,,1034,1034,1034,1034,,1034,1034,1034,1034,,,,,1034,1034,,,,1147,1147,1147,1034,1147,1034,1034,1034,1147,1147,1034,1034,,1147,,1147,1147,1147,1147,1147,1147,1147,,,,,,1147,1147,1147,1147,1147,1147,1147,,,1147,,,,,,,1147,,,1147,1147,1147,1147,1147,1147,1147,1147,,1147,1147,1147,,1147,1147,1147,1147,1147,,,,,,,,,,,,,,,,,,,,1147,,,1147,,,1147,1147,,,1147,,,,,,1147,,,,,,,,,1147,,,,,1147,1147,1147,1147,,1147,1147,1147,1147,,,,,1147,1147,,,,1148,1148,1148,1147,1148,1147,1147,1147,1148,1148,1147,1147,,1148,,1148,1148,1148,1148,1148,1148,1148,,,,,,1148,1148,1148,1148,1148,1148,1148,,,1148,,,,,,,1148,,,1148,1148,1148,1148,1148,1148,1148,1148,,1148,1148,1148,,1148,1148,1148,1148,1148,,,,,,,,,,,,,,,,,,,,1148,,,1148,,,1148,1148,,,1148,,,,,,1148,,,,,,,,,1148,,,,,1148,1148,1148,1148,,1148,1148,1148,1148,,,,,1148,1148,,,,1160,1160,1160,1148,1160,1148,1148,1148,1160,1160,1148,1148,,1160,,1160,1160,1160,1160,1160,1160,1160,,,,,,1160,1160,1160,1160,1160,1160,1160,,,1160,,,,,,,1160,,,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,,1160,1160,1160,1160,1160,,,,,,,,,,,,,,,,,,,,1160,,,1160,,,1160,1160,,,1160,,1160,,1160,,1160,,,1160,,,,,,1160,,,,,1160,1160,1160,1160,,1160,1160,1160,1160,,,,,1160,1160,,,,39,39,39,1160,39,1160,1160,1160,39,39,1160,1160,,39,,39,39,39,39,39,39,39,,,,,,39,39,39,39,39,39,39,,,39,,,,,,,39,,,39,39,39,39,39,39,39,39,,39,39,39,,39,39,,,39,,,,,,,,,,,,,,,,,,,,39,,,39,,,39,39,,,39,,39,,,,,,,,,,,,,,,,,,39,39,39,39,,39,39,39,39,,,,,39,39,,,,40,40,40,39,40,39,39,39,40,40,,,,40,,40,40,40,40,40,40,40,,,,,,40,40,40,40,40,40,40,,,40,,,,,,,40,,,40,40,40,40,40,40,40,40,,40,40,40,,40,40,,,40,,,,,,,,,,,,,,,,,,,,40,,,40,,,40,40,,,40,,,1206,,1206,1206,1206,1206,1206,,,,,,,,,1206,,40,40,40,40,,40,40,40,40,,,,,40,40,,,,40,,1206,40,,40,40,40,76,76,76,,76,1206,1206,,76,76,1206,,,76,,76,76,76,76,76,76,76,,,,,,76,76,76,76,76,76,76,,,76,,,,,,,76,,,76,76,76,76,76,76,76,76,,76,76,76,,76,76,,,76,,,,,,,,,,,,,,,,,,,,76,,,76,,,76,76,,,76,,76,,,,,,,,,,,,,,,,,,76,76,76,76,,76,76,76,76,,,,,76,76,,,,77,77,77,76,77,76,76,76,77,77,,,,77,,77,77,77,77,77,77,77,,,,,,77,77,77,77,77,77,77,,,77,,,,,,,77,,,77,77,77,77,77,77,77,77,,77,77,77,,77,77,,,77,,,,,,,,,,,,,,,,,77,,,77,,,77,,,77,77,,,77,,,,,,,,,,,,,,,,,,,,77,77,77,77,,77,77,77,77,,,,,77,77,,,,78,78,78,77,78,77,77,77,78,78,,,,78,,78,78,78,78,78,78,78,,,,,,78,78,78,78,78,78,78,,,78,,,,,,,78,,,78,78,78,78,78,78,78,78,,78,78,78,,78,78,,,78,,,,,,,,,,,,,,,,,,,,78,,,78,,,78,78,,,78,,,,,,,,,,,,,,,,,,,,78,78,78,78,,78,78,78,78,,,,,78,78,,,,342,342,342,78,342,78,78,78,342,342,,,,342,,342,342,342,342,342,342,342,,,,,,342,342,342,342,342,342,342,,,342,,,,,,,342,,,342,342,342,342,342,342,342,342,,342,342,342,,342,342,,,342,,,,,,,,,,,,,,,,,,,,342,,,342,,,342,342,,,342,,,1208,,1208,1208,1208,1208,1208,,,,,,,,,1208,,342,342,342,342,,342,342,342,342,,,,,342,342,,,,342,,1208,342,,342,342,342,361,361,361,,361,1208,1208,,361,361,1208,,,361,,361,361,361,361,361,361,361,,,,,,361,361,361,361,361,361,361,,,361,,,,,,,361,,,361,361,361,361,361,361,361,361,,361,361,361,,361,361,,,361,,,,,,,,,,,,,,,,,,,,361,,,361,,,361,361,,,361,,,,,,,,,,,,,,,,,,,,361,361,361,361,,361,361,361,361,,,,,361,361,,,,591,591,591,361,591,361,361,361,591,591,,,,591,,591,591,591,591,591,591,591,,,,,,591,591,591,591,591,591,591,,,591,,,,,,,591,,,591,591,591,591,591,591,591,591,,591,591,591,,591,591,,,591,,,,,,,,,,,,,,,,,,,,591,,,591,,,591,591,,,591,,,,,,,,,,,,,,,,,,,,591,591,591,591,,591,591,591,591,,,,,591,591,,,,600,600,600,591,600,591,591,591,600,600,,,,600,,600,600,600,600,600,600,600,,,,,,600,600,600,600,600,600,600,,,600,,,,,,,600,,,600,600,600,600,600,600,600,600,,600,600,600,,600,600,,,600,,,,,,,,,,,,,,,,,,,,600,,,600,,,600,600,,,600,,,,,,,,,,,,,,,,,,,,600,600,600,600,,600,600,600,600,,,,,600,600,,,,806,806,806,600,806,600,600,600,806,806,,,,806,,806,806,806,806,806,806,806,,,,,,806,806,806,806,806,806,806,,,806,,,,,,,806,,,806,806,806,806,806,806,806,806,,806,806,806,,806,806,,,806,,,,,,,,,,,,,,,,,,,,806,,,806,,,806,806,,,806,,,,,,,,,,,,,,,,,,,,806,806,806,806,,806,806,806,806,,,,,806,806,,,,817,817,817,806,817,806,806,806,817,817,,,,817,,817,817,817,817,817,817,817,,,,,,817,817,817,817,817,817,817,,,817,,,,,,,817,,,817,817,817,817,817,817,817,817,,817,817,817,,817,817,,,817,,,,,,,,,,,,,,,,,,,,817,,,817,,,817,817,,,817,,,,,,,,,,,,,,,,,,,,817,817,817,817,,817,817,817,817,,,,,817,817,,,,1016,1016,1016,817,1016,817,817,817,1016,1016,,,,1016,,1016,1016,1016,1016,1016,1016,1016,,,,,,1016,1016,1016,1016,1016,1016,1016,,,1016,,,,,,,1016,,,1016,1016,1016,1016,1016,1016,1016,1016,,1016,1016,1016,,1016,1016,,,1016,,,,,,,,,,,,,,,,,,,,1016,,,1016,,,1016,1016,,,1016,,,,,,,,,,,,,,,,,,,,1016,1016,1016,1016,,1016,1016,1016,1016,,,,,1016,1016,,,,1080,1080,1080,1016,1080,1016,1016,1016,1080,1080,,,,1080,,1080,1080,1080,1080,1080,1080,1080,,,,,,1080,1080,1080,1080,1080,1080,1080,,,1080,,,,,,,1080,,,1080,1080,1080,1080,1080,1080,1080,1080,,1080,1080,1080,,1080,1080,,,1080,,,,,,,,,,,,,,,,,,,,1080,,,1080,,,1080,1080,,,1080,,,,,,,,,,,,,,,,,,,,1080,1080,1080,1080,,1080,1080,1080,1080,,,,,1080,1080,,,,1142,1142,1142,1080,1142,1080,1080,1080,1142,1142,,,,1142,,1142,1142,1142,1142,1142,1142,1142,,,,,,1142,1142,1142,1142,1142,1142,1142,,,1142,,,,,,,1142,,,1142,1142,1142,1142,1142,1142,1142,1142,,1142,1142,1142,,1142,1142,,,1142,,,,,,,,,,,,,,,,,,,,1142,,,1142,,,1142,1142,,,1142,,,,,,,,,,,,,,,,,,,,1142,1142,1142,1142,,1142,1142,1142,1142,,,,,1142,1142,,,,,,,1142,,1142,1142,1142,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,,,,10,10,10,10,10,10,10,10,10,10,,,,,,10,10,10,10,10,10,10,10,10,10,,10,,,,,,,,10,10,,10,10,10,10,10,10,10,,,10,10,,,,10,10,10,10,,,,,,,,,,,,,,10,10,,10,10,10,10,10,10,10,10,10,10,10,10,,,10,10,,,,,,,,,,,,,,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11,11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11,,,11,,,,,,,,11,11,,11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,,,,,,11,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,,,,428,428,428,428,428,428,428,428,428,428,,,,,,428,428,428,428,428,428,428,428,428,,,428,,,,,,,,428,428,,428,428,428,428,428,428,428,,,428,428,,,,428,428,428,428,,,,,,,,,,,,,,428,428,,428,428,428,428,428,428,428,428,428,428,428,428,,,428,428,,,,,,,,,,,,,,428,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,,,,670,670,670,670,670,670,670,670,670,670,,,,,,670,670,670,670,670,670,670,670,670,,,670,,,,,,,,670,670,,670,670,670,670,670,670,670,,,670,670,,,,670,670,670,670,,,,,,,,,,,,,,670,670,,670,670,670,670,670,670,670,670,670,670,670,670,,,670,670,,,,,,,,,,,,,,670,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,,,,26,26,26,26,26,26,26,26,26,26,,,,,,26,26,26,26,26,26,26,26,26,26,26,26,,26,,,,,,26,26,,26,26,26,26,26,26,26,,,26,26,,,,26,26,26,26,,,,,,26,,,,,,,,26,26,,26,26,26,26,26,26,26,26,26,26,26,26,,,26,530,530,530,530,,,1210,,1210,1210,1210,1210,1210,,,,530,530,530,530,,1210,,530,530,,,,,530,530,,,530,530,,,,,,,,,1210,,,,,,,,,,530,1210,1210,530,,,1210,530,,,530,,530,,,,,,,530,,,,,,,530,,,,530,530,530,530,,530,530,530,530,,,,,530,530,531,531,531,531,,,530,,530,530,530,,,530,530,,531,531,531,531,,,,531,531,,,,,531,531,,,531,531,,,,,,,,,,,,,,,,,,,531,,,531,,,,531,,,531,,531,,,,,,,531,,,,,,,531,,,,531,531,531,531,,531,531,531,531,,,,,531,531,748,748,748,748,,,531,,531,531,531,,,531,531,,748,748,748,748,,,,748,,,,,,748,748,,,748,,,,,,,,,,,,,,,,,,,,748,,,748,,,,748,,,748,,748,,,,,,,710,,710,710,710,710,710,748,,,,748,748,748,748,710,748,748,748,748,,,,,748,748,748,756,756,756,756,,748,,748,748,748,710,,748,748,,,756,756,756,756,,710,710,756,,,710,,,756,756,,,756,,,,,,,,,,,,,,,,,,,,756,,,756,,,,756,,,756,,,710,,,,,,,,,,,,,756,,,,756,756,756,756,,756,756,756,756,,,,,756,756,,,,,,,756,,756,756,756,,,756,756,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,,,,783,783,783,783,783,783,783,783,783,783,,,,,,783,783,783,783,783,783,783,783,783,,,783,,,,,,,,783,783,,783,783,783,783,783,783,783,,,783,783,,,,783,783,783,783,,,,,,,,,,,,,,783,783,,783,783,783,783,783,783,783,783,783,783,783,783,,,783,927,927,927,927,,,,,,1021,,1021,1021,1021,1021,1021,927,927,927,927,,,,927,1021,,,,,927,927,,,927,,,,,,,,,,,,,1021,,,,,,,927,,,927,1021,1021,,927,,1021,927,,927,,,,,,,,,,,,,,927,,,,927,927,927,927,,927,927,927,927,,,,,927,927,929,929,929,929,1021,,927,,927,927,927,,,927,927,,929,929,929,929,,,1136,929,1136,1136,1136,1136,1136,929,929,,,929,,,,1136,,,,,,,,,,,,,,,,929,,,929,,,1136,929,,,929,,,,,1136,1136,1136,1136,,,,1136,,,,929,,,,929,929,929,929,,929,929,929,929,,,,,929,929,932,932,932,932,,,929,,929,929,929,,,929,929,,932,932,932,932,,,,932,932,,,,,932,932,,,932,932,,,,,,,,,,,,,,,,,,,932,,,932,,,,932,,,932,,932,,,,,,,932,,,,,,,932,,,,932,932,932,932,,932,932,932,932,,,,,932,932,933,933,933,933,,,932,,932,932,932,,,932,932,,933,933,933,933,,,,933,933,,,,,933,933,,,933,933,,,,,,,,,,,,,,,,,,,933,,,933,,,,933,,,933,,933,,,,,,,933,,,,,,,933,,,,933,933,933,933,,933,933,933,933,,,,,933,933,939,939,939,939,,,933,,933,933,933,,,933,933,,939,939,939,939,,,1204,939,1204,1204,1204,1204,1204,939,939,,,939,,,,1204,,,,,,,,,,,,,,,,939,,,939,,,1204,939,,,939,,939,,,1204,1204,1204,1204,,,,1204,,,,939,,,,939,939,939,939,,939,939,939,939,,,,,939,939,945,945,945,945,,,939,,939,939,939,,,939,939,,945,945,945,945,,,1227,945,1227,1227,1227,1227,1227,945,945,,,945,,,,1227,,,,,,,,,,,,,,,,945,,,945,,,1227,945,,,945,,,,,,,1227,1227,,,,1227,,,,945,,,,945,945,945,945,,945,945,945,945,,,,,945,945,946,946,946,946,,,945,,945,945,945,,,945,945,,946,946,946,946,,,,946,,,,,,946,946,,,946,,,,,,,,,,,,,,,,,,,,946,,,946,,,,946,,,946,,,,,,,,,,,,,,,,946,,,,946,946,946,946,,946,946,946,946,,,,,946,946,988,988,988,988,,,946,,946,946,946,,,946,946,,988,988,988,988,,,,988,988,,,,,988,988,,,988,988,,,,,,,,,,,,,,,,,,,988,,,988,,,,988,,,988,,988,,,,,,,988,,,,,,,988,,,,988,988,988,988,,988,988,988,988,,,,,988,988,1115,1115,1115,1115,,,988,,988,988,988,,,988,988,,1115,1115,1115,1115,,,,1115,,,,,,1115,1115,,,1115,,,,,,,,,,,,,,,,,,,,1115,,,1115,,,,1115,,,1115,,,,,,,,,,,,,,,,1115,,,,1115,1115,1115,1115,,1115,1115,1115,1115,,,,,1115,1115,1123,1123,1123,1123,,,1115,,1115,1115,1115,,,1115,1115,,1123,1123,1123,1123,,,,1123,,,,,,1123,1123,,,1123,,,,,,,,,,,,,,,,,,,,1123,,,1123,,,,1123,,,1123,,,,,,,,,,,,,,,,1123,,,,1123,1123,1123,1123,,1123,1123,1123,1123,,,,,1123,1123,1127,1127,1127,1127,,,1123,,1123,1123,1123,,,1123,1123,,1127,1127,1127,1127,,,,1127,,,,,,1127,1127,,,1127,,,,,,,,,,,,,,,,,,,,1127,,,1127,,,,1127,,,1127,,1127,,,,,,,,,,,,,,1127,,,,1127,1127,1127,1127,,1127,1127,1127,1127,,,,,1127,1127,1202,1202,1202,1202,,,1127,,1127,1127,1127,,,1127,1127,,1202,1202,1202,1202,,,,1202,,,,,,1202,1202,,,1202,,,,,,,,766,766,766,766,,,,,,,,,1202,,,1202,766,766,766,1202,,,1202,,,,,,,766,766,,,766,,,,,1202,,,,1202,1202,1202,1202,,1202,1202,1202,1202,,,,,1202,1202,,,,,,,1202,,1202,1202,1202,,,1202,1202,971,,971,971,971,971,971,,,,,766,766,766,766,971,766,766,766,766,,,,,766,766,952,952,952,952,,,766,,766,766,766,971,,,,,952,952,952,,971,971,971,971,,,,971,,952,952,,,952,953,953,953,953,,,,,,,,,,,,,953,953,953,971,,,,,,,,,,953,953,,,953,,,,,,,,,,,,,,,,952,952,952,952,,952,952,952,952,,,,,952,952,,,,,,,952,,952,952,952,,,,,,,,,953,953,953,953,,953,953,953,953,,,,,953,953,,,,,,,953,,953,953,953,706,,706,706,706,706,706,,708,,708,708,708,708,708,706,,,,,,,,708,,1019,,1019,1019,1019,1019,1019,,,,,,706,,,1019,,,,,708,706,706,706,706,,,,706,708,708,708,708,,,,708,1019,,,,,,,,,1019,1019,1019,1019,,,1023,1019,1023,1023,1023,1023,1023,1025,,1025,1025,1025,1025,1025,,1023,706,,,,,,1025,,708,1164,,1164,1164,1164,1164,1164,,,,,,1023,,,1164,1019,,,1025,,,,1023,1023,,,,1023,,1025,1025,,,,1025,,1164,,,,,,,,,,,1164,1164,,,,1164,,,,,,,,,,,,226,226,,1023,226,,,,,,1025,,226,226,,226,226,226,226,226,226,226,,,226,226,,,1164,226,226,226,226,,,,,,226,,,,,,,,226,226,,226,226,226,226,226,226,226,226,226,226,226,226,227,227,226,,227,,,,,,,,227,227,,227,227,227,227,227,227,227,,,227,227,,,,227,227,227,227,,,,,,227,,,,,,,,227,227,,227,227,227,227,227,227,227,227,227,227,227,227,303,303,227,,303,,,,,,,,303,303,,303,303,303,303,303,303,303,,,303,303,,,,303,303,303,303,,,,,,,,,,,,,,303,303,,303,303,303,303,303,303,303,303,303,303,303,303,521,521,303,,521,,,,,,,,521,521,,521,521,521,521,521,521,521,,,521,521,,,,521,521,521,521,,,,,,521,,,,,,,,521,521,,521,521,521,521,521,521,521,521,521,521,521,521,522,522,521,,522,,,,,,,,522,522,,522,522,522,522,522,522,522,,,522,522,,,,522,522,522,522,,,,,,522,,,,,,,,522,522,,522,522,522,522,522,522,522,522,522,522,522,522,594,594,522,,594,,,,,,,,594,594,,594,594,594,594,594,594,594,,,594,594,,,,594,594,594,594,,,,,,594,,,,,,,,594,594,,594,594,594,594,594,594,594,594,594,594,594,594,595,595,594,,595,,,,,,,,595,595,,595,595,595,595,595,595,595,,,595,595,,,,595,595,595,595,,,,,,595,,,,,,,,595,595,,595,595,595,595,595,595,595,595,595,595,595,595,604,604,595,,604,,,,,,,,604,604,,604,604,604,604,604,604,604,,,604,604,,,,604,604,604,604,,,,,,604,,,,,,,,604,604,,604,604,604,604,604,604,604,604,604,604,604,604,605,605,604,,605,,,,,,,,605,605,,605,605,605,605,605,605,605,,,605,605,,,,605,605,605,605,,,,,,605,,,,,,,,605,605,,605,605,605,605,605,605,605,605,605,605,605,605,632,632,605,,632,,,,,,,,632,632,,632,632,632,632,632,632,632,,,632,632,,,,632,632,632,632,,,,,,632,,,,,,,,632,632,,632,632,632,632,632,632,632,632,632,632,632,632,633,633,632,,633,,,,,,,,633,633,,633,633,633,633,633,633,633,,,633,633,,,,633,633,633,633,,,,,,633,,,,,,,,633,633,,633,633,633,633,633,633,633,633,633,633,633,633,639,639,633,,639,,,,,,,,639,639,,639,639,639,639,639,639,639,,,639,639,,,,639,639,639,639,,,,,,639,,,,,,,,639,639,,639,639,639,639,639,639,639,639,639,639,639,639,640,640,639,,640,,,,,,,,640,640,,640,640,640,640,640,640,640,,,640,640,,,,640,640,640,640,,,,,,640,,,,,,,,640,640,,640,640,640,640,640,640,640,640,640,640,640,640,677,677,640,,677,,,,,,,,677,677,,677,677,677,677,677,677,677,,,677,677,,,,677,677,677,677,,,,,,677,,,,,,,,677,677,,677,677,677,677,677,677,677,677,677,677,677,677,678,678,677,,678,,,,,,,,678,678,,678,678,678,678,678,678,678,,,678,678,,,,678,678,678,678,,,,,,678,,,,,,,,678,678,,678,678,678,678,678,678,678,678,678,678,678,678,1161,1161,678,,1161,,,,,,,,1161,1161,,1161,1161,1161,1161,1161,1161,1161,,,1161,1161,,,,1161,1161,1161,1161,,,,,,1161,,,,,,,,1161,1161,,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1162,1162,1161,,1162,,,,,,,,1162,1162,,1162,1162,1162,1162,1162,1162,1162,,,1162,1162,,,,1162,1162,1162,1162,,,,,,1162,,,,,,,,1162,1162,,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1185,1185,1162,,1185,,,,,,,,1185,1185,,1185,1185,1185,1185,1185,1185,1185,,,1185,1185,,,,1185,1185,1185,1185,,,,,,1185,,,,,,,,1185,1185,,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,,,1185"); racc_action_pointer = Opal.large_array_unpack(",204,979,226,,-110,,5154,964,144,24967,25095,159,,157,176,525,279,-62,-84,162,374,,-71,5285,1123,25479,358,,171,,-8,5426,5536,5670,5801,5932,,1123,23109,23240,,281,525,531,368,6063,6194,205,6325,6456,525,6587,318,342,,,,,,,,,,6728,,6869,7000,7131,35,,7262,7393,,,7524,23379,23510,23641,,,,,,,,,,612,,,,,,,,,,,,,,,,,,,,,,,0,112,,,,,,,,,,,,,7667,,,,,7810,7941,8072,8203,8346,,1267,,588,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,345,,1411,8477,8608,8739,8870,9001,9132,27591,27652,,,363,1555,372,,719,831,384,1699,9263,9394,9525,,,514,-23,141,480,193,409,536,,9656,307,388,1843,541,,,9787,9918,10049,10180,10311,10442,10573,10704,10835,10966,11097,11228,11359,11490,11621,11752,11883,12014,12145,12276,12407,12538,,,,,12669,,,226,302,515,517,518,532,550,558,584,585,,,,12800,,,27713,,,541,12931,13062,,,,,,,,13193,,1843,,512,532,,13324,585,13455,,,13586,13717,,,221,,13860,1252,599,579,1987,626,687,648,23772,2131,694,806,873,748,878,,724,691,225,743,748,,,,750,221,707,23911,,564,879,3283,3427,778,,779,13991,,757,2275,1396,721,,139,574,760,743,583,773,,577,-1,11,14122,2419,2563,264,845,727,-18,10,893,810,11,842,,,441,481,513,,962,,761,14253,,15821,,193,378,396,402,412,-41,-27,463,,,,,,,,756,25223,,,,,759,,835,746,14384,747,,,736,,968,246,850,,,1267,,,,,,1411,764,,763,765,615,669,14525,,,,,222,334,825,,,14657,14793,14930,908,913,,,-1,793,792,800,,,805,816,818,,,,,,,,,,807,3125,,,15061,,,,,,,,902,,,907,361,15192,950,,,,-35,,870,27774,27835,15323,253,15454,15585,15716,823,828,25562,25660,3571,3715,-45,1018,908,912,925,927,5285,5375,5488,3859,4003,4147,4291,4435,4579,3311,3455,4723,4867,1987,5011,,-33,,15857,,,,,15987,886,885,889,,,,892,,,16118,,16249,,16380,,329,,,,16523,1540,,918,917,,,918,24042,923,16666,27896,27957,972,968,,,24173,925,,16797,28018,28079,16928,5154,17059,,1051,932,976,,17190,,,17321,,,,2707,1056,,2851,62,1060,1064,508,1066,17452,17583,28140,28201,27,,,995,,28262,28323,17714,,,81,2995,,15851,,,,,1033,,,,958,,,153,,263,,,944,,947,,,,25351,,17857,950,17988,18119,18250,28384,28445,18393,18524,693,991,18655,18786,18917,19048,997,,,19179,19310,1002,,1060,1555,1091,19441,,,,,888,,,544,27424,,27432,,25811,,961,19572,,3154,,976,978,729,983,,,,,1087,1699,,,,277,286,473,612,1001,19703,19834,,-77,,,,,1023,,,,582,25758,94,,1002,1085,1006,,,25857,,,303,,,654,,,6728,27202,,,,,,,,,,,,838,612,,,1016,26000,,1140,,1123,91,,,19965,,1038,1050,1156,,1046,,1096,20096,,,20227,,245,24304,1070,,1074,236,250,1120,360,1123,1124,1084,24435,,1153,2131,20358,,,,604,738,,1208,,,,,,1218,1226,,,26,1106,40,41,151,152,3139,970,1267,,1107,3283,20489,,1238,63,1118,,,,,,3427,,,,,,,,,1117,20620,1123,306,343,722,834,,2275,20751,,1122,,,,,,,,,,,20882,21013,1248,,3571,1124,1173,,,1131,,1223,,,1142,1143,,1146,1147,,1148,,,,1153,3184,3164,,,21144,21275,21406,21537,21668,21799,347,26083,1252,26181,-41,252,26279,26377,622,-32,1174,1176,,26475,,1175,359,,1196,26573,26671,,637,1236,333,,27300,27334,,,,,21930,,,22061,,,1218,,,1234,1218,,,27255,3715,,,,,1220,338,,-7,,1345,,22192,1348,,,26769,22323,3859,68,1352,,1354,442,4003,,,,,1231,1281,1252,1247,445,,,22454,2419,2563,,4147,,,32,24566,,,27449,,26073,,27501,,27508,,,,,1248,1258,2707,2851,22585,,1259,,,,,1264,1267,1269,1271,1274,1278,,,,1331,1286,1287,,1293,,,122,1291,,,,,,,1295,2995,4291,,,1294,1314,,1315,1317,1319,,1344,1337,1326,24697,,,,,,33,,34,728,,615,,,,1482,4435,4579,1109,,,,4723,35,36,1165,1437,42,,1364,1365,1368,1372,3651,3795,26867,,,,,,,,26965,,370,,27063,,,1444,,,15876,,,26184,,14588,,,1398,24828,1309,1460,4867,,22716,22847,,,,,1410,1515,636,,,,1518,22978,28506,28567,98,27526,,,,,1397,1402,1403,,,1404,,,1405,1408,1412,1413,,1419,,1411,28628,,797,5011,,,,,,1829,,1432,102,138,145,181,1430,27161,,26478,,23287,,23819,,25549,,,1475,1478,,38,,146,,1435,1436,1438,1458,,,,26576,,,,,1459,"); racc_action_default = Opal.large_array_unpack("-1,-741,-4,-741,-2,-727,-5,-741,-8,-741,-741,-741,-741,-31,-741,-741,-36,-741,-741,-637,-637,-313,-52,-729,-741,-61,-741,-69,-70,-71,-75,-287,-287,-287,-326,-354,-355,-87,-13,-91,-99,-101,-741,-624,-625,-741,-741,-741,-741,-741,-741,-239,-741,-729,-258,-304,-305,-306,-307,-308,-309,-310,-311,-312,-717,-315,-319,-740,-705,-335,-337,-741,-741,-63,-63,-727,-741,-741,-741,-356,-357,-359,-360,-361,-362,-421,-563,-564,-565,-566,-587,-569,-570,-589,-591,-574,-579,-583,-585,-601,-602,-603,-587,-605,-607,-608,-609,-610,-611,-612,-613,-715,-716,-616,-617,-618,-619,-620,-621,-622,-623,-628,-629,1234,-3,-728,-736,-737,-738,-7,-741,-741,-741,-741,-741,-9,-4,-19,-741,-130,-131,-132,-133,-134,-135,-136,-140,-141,-142,-143,-144,-145,-146,-147,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,-170,-171,-172,-173,-174,-175,-176,-177,-178,-179,-180,-181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,-192,-193,-194,-195,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-24,-137,-13,-741,-741,-741,-741,-741,-277,-741,-741,-725,-726,-741,-13,-636,-634,-660,-660,-741,-13,-741,-741,-729,-730,-56,-741,-624,-625,-741,-313,-741,-741,-245,-741,-637,-637,-13,-741,-57,-59,-222,-223,-741,-741,-741,-741,-741,-741,-741,-741,-741,-741,-741,-741,-741,-741,-741,-741,-741,-741,-741,-741,-259,-260,-261,-262,-741,-65,-66,-741,-130,-131,-170,-171,-172,-188,-193,-200,-203,-624,-625,-703,-741,-430,-432,-741,-723,-724,-76,-277,-741,-334,-436,-445,-447,-82,-442,-83,-729,-84,-265,-282,-292,-292,-286,-290,-293,-295,-587,-707,-711,-714,-85,-86,-727,-14,-741,-17,-741,-89,-13,-729,-741,-92,-95,-13,-107,-108,-741,-741,-115,-326,-329,-729,-741,-637,-637,-354,-355,-358,-443,-741,-97,-741,-103,-323,-741,-224,-225,-606,-233,-234,-741,-246,-251,-13,-317,-729,-266,-729,-729,-741,-741,-729,-741,-336,-62,-741,-741,-741,-13,-13,-727,-741,-728,-624,-625,-741,-741,-313,-741,-372,-373,-125,-126,-741,-128,-741,-313,-632,-741,-350,-660,-567,-741,-741,-741,-741,-741,-741,-741,-741,-6,-739,-25,-26,-27,-28,-29,-741,-741,-21,-22,-23,-138,-741,-32,-35,-300,-295,-741,-299,-33,-741,-37,-741,-313,-49,-51,-211,-270,-293,-53,-54,-38,-212,-270,-729,-278,-292,-292,-715,-716,-287,-440,-717,-718,-719,-716,-715,-287,-439,-441,-717,-719,-741,-555,-741,-385,-386,-686,-729,-702,-702,-642,-643,-645,-645,-645,-659,-661,-662,-663,-664,-665,-666,-667,-668,-669,-741,-671,-673,-675,-680,-682,-683,-684,-691,-693,-694,-696,-697,-698,-700,-741,-741,-741,-48,-219,-55,-729,-333,-741,-741,-741,-277,-323,-741,-741,-741,-741,-741,-741,-741,-220,-221,-226,-227,-228,-229,-230,-231,-235,-236,-237,-238,-240,-241,-242,-243,-244,-247,-248,-249,-250,-729,-263,-67,-729,-451,-287,-715,-716,-73,-77,-661,-729,-292,-729,-288,-449,-451,-729,-328,-283,-741,-284,-741,-289,-741,-294,-741,-710,-713,-12,-728,-16,-18,-729,-88,-321,-104,-93,-741,-729,-277,-741,-741,-114,-741,-636,-606,-741,-100,-105,-741,-741,-741,-741,-264,-741,-330,-741,-729,-741,-267,-735,-734,-269,-735,-324,-325,-706,-13,-363,-364,-13,-741,-741,-741,-741,-741,-741,-277,-741,-741,-323,-63,-125,-126,-127,-741,-741,-277,-346,-630,-741,-13,-422,-660,-425,-568,-588,-593,-741,-595,-571,-590,-741,-592,-573,-741,-576,-741,-578,-581,-741,-582,-741,-604,-10,-20,-741,-30,-741,-303,-741,-741,-277,-741,-741,-741,-741,-444,-741,-279,-281,-741,-741,-78,-276,-437,-741,-741,-80,-438,-44,-254,-740,-740,-352,-524,-685,-635,-741,-640,-641,-741,-741,-652,-741,-655,-741,-657,-741,-741,-374,-741,-376,-378,-381,-384,-729,-674,-695,-699,-638,-46,-256,-353,-332,-731,-715,-716,-715,-716,-729,-741,-741,-58,-465,-468,-469,-470,-471,-473,-475,-478,-479,-534,-729,-491,-494,-504,-508,-513,-515,-516,-519,-520,-587,-523,-525,-526,-527,-532,-533,-741,-741,-537,-538,-539,-540,-541,-542,-543,-544,-545,-546,-547,-741,-741,-553,-60,-741,-741,-704,-741,-452,-72,-433,-449,-272,-279,-274,-741,-411,-741,-327,-292,-291,-296,-298,-708,-709,-741,-15,-90,-741,-96,-102,-729,-715,-716,-275,-720,-113,-741,-98,-741,-218,-232,-252,-741,-316,-318,-320,-729,-740,-365,-740,-64,-366,-367,-340,-341,-741,-741,-457,-343,-741,-729,-715,-716,-720,-322,-13,-125,-126,-129,-729,-13,-741,-348,-741,-741,-729,-594,-597,-598,-599,-600,-13,-572,-575,-577,-580,-584,-586,-139,-34,-301,-298,-729,-715,-716,-716,-715,-50,-271,-741,-732,-292,-40,-214,-41,-215,-79,-42,-217,-43,-216,-81,-741,-741,-740,-370,-13,-556,-740,-557,-558,-702,-681,-686,-701,-644,-645,-645,-672,-645,-645,-692,-645,-669,-388,-687,-729,-741,-741,-383,-670,-741,-741,-741,-741,-741,-741,-444,-466,-741,-741,-476,-477,-741,-741,-741,-496,-729,-729,-490,-497,-501,-741,-741,-493,-741,-741,-741,-507,-514,-518,-741,-522,-530,-531,-535,-536,-548,-549,-741,-126,-551,-741,-68,-431,-411,-435,-434,-741,-729,-446,-412,-729,-13,-448,-285,-297,-712,-94,-444,-106,-729,-268,-741,-368,-741,-741,-342,-344,-741,-741,-13,-444,-741,-444,-741,-741,-13,-351,-423,-426,-428,-415,-741,-741,-302,-444,-39,-213,-280,-45,-255,-11,-13,-562,-371,-741,-741,-560,-639,-741,-648,-741,-650,-741,-653,-741,-656,-658,-375,-377,-379,-382,-47,-257,-741,-467,-504,-472,-474,-483,-487,-729,-729,-729,-729,-729,-729,-552,-488,-489,-511,-498,-499,-502,-729,-587,-733,-729,-505,-509,-512,-517,-521,-528,-529,-729,-253,-13,-74,-273,-702,-702,-392,-394,-394,-394,-410,-741,-729,-669,-677,-678,-689,-450,-331,-338,-741,-339,-741,-462,-296,-740,-345,-347,-631,-741,-13,-13,-741,-424,-596,-561,-13,-624,-625,-741,-741,-313,-559,-645,-645,-645,-645,-741,-741,-741,-480,-481,-482,-484,-485,-486,-503,-741,-492,-741,-495,-741,-550,-453,-741,-390,-391,-395,-401,-403,-741,-406,-741,-408,-413,-741,-741,-676,-741,-13,-458,-741,-741,-454,-455,-456,-349,-741,-741,-729,-417,-419,-420,-555,-277,-741,-741,-323,-741,-646,-649,-651,-654,-380,-505,-500,-506,-510,-702,-679,-393,-394,-394,-394,-394,-690,-394,-414,-688,-741,-323,-740,-13,-463,-464,-427,-429,-416,-741,-554,-729,-715,-716,-720,-322,-645,-741,-389,-741,-398,-741,-400,-741,-404,-741,-407,-409,-322,-720,-369,-740,-418,-444,-647,-394,-394,-394,-394,-459,-460,-461,-741,-396,-399,-402,-405,-394,-397"); racc_goto_table = Opal.large_array_unpack("44,412,475,341,340,44,142,142,514,319,319,319,696,419,233,233,226,302,286,638,496,496,142,285,298,383,128,304,455,385,386,714,893,390,137,218,44,345,345,145,145,713,15,629,357,357,835,15,388,389,566,703,704,900,461,468,907,621,624,737,781,562,376,125,44,135,574,310,314,982,439,440,242,124,394,298,298,798,15,798,801,357,357,357,306,313,315,237,422,423,424,425,367,910,303,906,128,908,793,17,740,740,446,360,17,446,15,337,1029,601,564,613,616,479,512,620,399,487,487,446,720,1031,801,44,707,709,711,1036,320,320,320,558,44,1002,44,17,4,972,339,1052,943,452,129,391,610,785,1074,1,903,1156,1158,903,2,1181,1011,515,804,795,936,1043,1046,377,217,17,985,15,407,409,400,1054,659,661,598,598,15,435,15,954,955,8,317,330,331,428,8,433,530,798,798,801,531,829,1051,287,783,789,496,759,759,1059,319,670,370,574,1058,608,379,788,299,380,398,642,373,655,657,660,660,44,611,375,340,1181,17,472,821,849,996,645,1030,44,937,17,1076,17,1134,44,1078,579,1155,230,236,521,646,374,998,1217,1158,233,233,714,1077,410,44,918,853,847,738,738,1096,15,420,441,462,1097,441,557,568,569,434,445,427,15,445,964,1149,1088,1224,15,441,988,834,1188,319,319,1037,304,445,1038,932,648,933,319,942,487,15,798,321,321,321,945,1060,1061,8,957,340,897,1029,1067,1177,340,1015,426,411,8,438,438,17,1169,17,967,237,17,464,464,413,602,734,1172,17,378,381,414,44,415,17,17,44,1035,915,807,345,44,1041,1044,594,625,416,357,816,461,468,17,555,128,626,627,417,1141,418,345,1075,855,604,860,1063,1064,357,850,1059,902,905,44,901,1170,15,907,1059,1175,15,,1173,1171,,15,,,44,44,310,,583,,585,632,314,960,809,,,464,582,565,320,599,910,590,,337,1109,,320,128,337,15,1042,1045,852,1072,,,,237,812,,142,761,761,1150,15,15,1215,17,812,496,839,17,,,586,,17,677,885,592,848,1124,,890,694,,714,714,669,,567,1173,,145,628,863,812,863,570,,,,239,,812,,17,1018,528,529,935,,384,384,,871,384,1174,949,907,,17,17,,725,,,,496,519,496,,372,688,319,,,,,,693,461,468,,,,990,584,798,801,687,,,1089,472,,,692,1178,,,1179,854,,775,775,487,,,724,968,384,384,384,384,909,,911,974,,,1020,1022,898,1024,1026,1047,1027,1225,,977,602,446,462,740,981,907,,,,602,,446,446,319,571,321,446,446,,,,903,,321,1072,,44,1072,,1072,,,826,,345,828,472,587,1220,688,,357,,345,759,759,472,881,883,,357,319,886,888,759,844,787,,,,759,319,464,464,44,994,,44,15,1142,974,,450,451,472,462,,,,1226,472,,,,,462,1131,1132,44,517,518,830,714,714,,1072,319,1072,935,1072,759,1072,,935,935,,15,,,15,851,142,,462,950,44,1057,,1072,472,,462,44,,,17,,,,,15,,1102,,,464,464,899,,867,,,1195,,145,464,464,,,,556,,,,,,,15,462,738,441,,,17,15,,17,,445,838,441,441,,464,464,441,441,701,445,445,464,464,,445,445,,,17,1151,966,1203,775,,1071,1165,1166,1167,1168,,775,,,1079,1145,446,1146,,,775,775,,,1095,,17,602,728,17,464,464,962,17,965,,142,285,979,17,17,,,,17,17,,,438,384,,597,1006,,902,,,,,1073,,345,496,,,995,784,992,357,,644,,345,,790,612,792,615,615,357,796,615,,1003,761,761,,,,,,,797,,761,1129,805,1080,1219,44,761,,808,,44,688,868,1110,693,1111,,1112,,876,,44,,,1014,,,823,,,,1154,,,,,,,,825,,,,,,,761,15,,,453,1013,15,,,1017,44,,,,,682,,15,516,,,,,,,,,1071,,,1071,382,1071,1065,,441,1079,,,1079,,,775,445,775,,,775,775,,,,15,,775,1083,,,17,1086,775,775,880,17,,,,775,775,,,,,1091,17,,,,,,1196,,,1125,1180,,1182,44,,,919,,17,,,1101,,,1071,,1071,,1071,775,1071,44,812,1079,,17,,44,1201,782,,,1080,,,1080,,1071,1080,,1080,,,44,,15,,1104,,1094,,,,,357,,,,,,,,,15,,,,,1221,15,1222,,1223,,,,,,,,,,,,,15,880,,,1108,,1232,,,,1153,,,44,436,449,1159,17,,,,1080,,1080,,1080,298,1080,,,,,,357,18,17,,,,18,,17,44,44,1080,1135,1137,1139,44,,,1161,,1189,1190,15,243,17,,1187,,775,,,,,243,243,243,775,18,346,346,775,,,,,,,681,,,319,15,15,,,298,,15,44,,,,357,,,18,,,,1216,243,243,,472,243,395,405,405,,17,,,,1028,576,,578,,,580,581,,682,,,,472,,1039,,15,44,,516,,453,682,944,17,17,,,462,,17,775,1205,1207,1209,1211,,1212,,,18,,,,,243,243,243,243,18,,18,1069,,,,,980,,15,,,,,1084,,,,,,,,,17,,1228,1229,1230,1231,,,,,682,,,384,1233,464,464,,,,,,,,818,,615,,,,,,,,,767,767,,,464,682,673,,17,,,,,,682,,,1116,1117,1118,1001,,,,,,18,243,443,243,243,443,243,1126,,,,682,18,,,1128,,,18,443,243,243,,,,,,,,19,,,,,19,18,,,,,,,,721,,882,884,,,,887,889,,,,,,,,,384,,,,,19,353,353,,,,682,,,,,682,682,,,,243,768,768,,,384,,243,243,,,,19,,,,243,,,,,20,353,353,353,,20,926,,,1001,,,,18,799,,382,18,802,,938,346,18,,,,,,,,,,,,,,20,354,354,,346,,,,,,,,,,19,,18,,,799,,,382,19,,19,,,20,,243,18,18,,,449,,,354,354,354,,,,,978,682,682,682,,,243,,,767,,944,,,,,,767,,,,,,,,,767,767,,,991,,,,869,1001,,,,993,,,20,799,382,,,,,,,20,,20,,1007,,896,,,,,1005,19,,19,384,384,19,,,243,,914,,19,,,,,,19,19,,,,,,,,,,,,,,,,19,882,884,889,887,,,,,,,,,243,1193,,,,,768,,,,243,1040,,,768,,1048,1049,,,,,,768,768,20,,20,,,20,,,,,,,20,,,799,,682,20,20,,,,,975,,,976,,,,,,,,20,,,,769,769,,19,,,18,19,,,,353,19,767,346,767,243,,767,767,,,,346,,767,,,,,353,767,767,,,,1007,,767,767,,,19,,18,,,18,,,,,,,243,1004,,19,19,,1119,1120,1121,,243,,,,18,,,,,,767,,20,,,,20,,,,354,20,,,,,,,,,,18,,,443,243,,,18,354,,,,,443,443,,,,443,443,20,,,,,,768,,768,,,768,768,,,20,20,,768,,,,,,768,768,,,,,,768,768,,,,,,,,,,,,,,,,,,,,,,,,,,,1090,,,,,,,,768,,,,,,,,,,,382,,,,,,,,767,,,,,,,,767,,,1218,767,,,,,769,,,,,,,,769,,,346,,,,,,769,769,,,,346,,,,243,,,,21,,,,19,21,,,,,,,353,,,,,,,18,,353,,,18,243,,,,,,,,770,770,18,21,348,348,,767,,19,,,19,,,,,,,,443,,,,,,,,768,,,21,,19,,,768,18,771,771,768,397,406,406,20,,,,,,,,354,,,,,,,,19,354,,19,,,,19,,,,,,19,19,,,,19,19,,,20,,,20,,,,,21,,,,,,772,772,,21,243,21,,,,,20,,,,,,,,18,768,769,,769,,,769,769,,,,243,,769,,,,18,20,769,769,20,,18,,20,769,769,,,,20,20,,,,20,20,,18,,,,1105,,,,,,,,,,,,,,,,,,,769,,,,,,,21,,444,,,444,,,,,353,,21,,,,,,21,444,,353,,,,18,,,,,,,,,770,21,,,1143,,,,770,,,,,,19,,,770,770,19,18,18,,,,,18,,,,19,,,,,,,,771,,,,,,,,771,,19,354,,,,,,771,771,,,,354,,,,,19,1184,,,18,,243,243,,,,,,,,,21,,,243,21,769,20,,348,21,,20,,769,,772,,769,,,,,20,772,,,,348,,,,18,772,772,,,,,,21,20,,,,,,,,,,,,,,21,21,,20,,,,19,,,,,,,,,,,,,,,,,,19,,,,,,19,,,,,,,769,,,,,,770,,770,19,,770,770,353,,,,,770,,,,,,770,770,,,,,,770,770,,,,,,,,,,20,,771,,771,,,771,771,,,,,,771,,,,20,,771,771,19,,20,770,,771,771,,,,,,,353,,,,,20,,,,354,,,,,,,19,19,,,,,19,,,772,,772,771,,772,772,,,,,,772,,,,,,772,772,,,,,,772,772,,,,,,,,,20,,353,773,773,19,,,,,,,,354,,,,,,,21,,,,,,772,,348,20,20,,,,,20,,348,,,,,,,,,,,19,,,,,,,,,770,21,,,21,,,,770,,,,770,,,31,,,354,,31,20,,,,21,,,,,,,859,,,,,31,771,,,,,,,,771,31,31,31,771,31,21,,,444,,43,,21,,,43,,20,444,444,,,,444,444,,,,,,,,31,,297,,,31,31,,770,31,,,,,43,344,344,772,,,,,,,,772,,,,772,,,,,,,,,,,,,43,,,,771,,,,,,393,297,297,,,,,31,,,,,31,31,31,31,31,,31,,,,,,,,,,,,,,,773,,,,,,,,773,,,,,,,,43,773,773,772,,,348,,,43,,43,,,,,,348,,,,,,,,774,774,,,,,,,,,,,,,,,,,,21,,,,,21,,,31,31,31,31,31,31,31,,21,,,,31,,,,,,31,31,31,31,,,,,444,,,,,,,,,31,,,,,,,43,21,,,,,,,,,,,43,,,,,,43,,,,,,,,,,,,,,,,,43,,,,31,,,,,,,31,31,,,,,,,,31,,,,,,,,,,,,,,773,,773,,31,773,773,,31,21,,,773,31,,,,,773,773,,,,,,773,773,21,,,,,,21,,,,,,,,,,31,,,43,,,21,43,,,1107,344,43,,31,31,31,,773,,,,,,,,,,,,344,,,,,31,,774,,,,,43,,34,774,,,,34,,,,,774,774,,43,43,,,21,,,,,34,,,,,,,,406,,34,34,34,,34,,,,,,,,,,21,21,,,,,21,,,,31,,,,,,,,34,,,,,34,34,,,34,,,,,,,,,,,,,,,,,,,406,776,776,21,31,,,,,773,,,,,31,,,773,,,,773,,,,,,,,,,34,,,,,34,34,34,34,34,,34,,,,21,,,,,,,,,,,,,,,,,,,,,,,,,,,,31,,,,,,774,,774,,31,774,774,,,,,,774,,,,773,,774,774,,,,,,774,774,,,,,,31,,,31,43,,,,,,31,,344,34,34,34,34,34,34,34,31,344,,,31,34,,,,774,,34,34,34,34,,,,,,,,43,,,43,,,34,,,31,,,31,31,,,31,,,,,,31,31,43,,,31,31,,,,,,,,,,,,,,,,,,,,,,,43,34,,,,,,43,34,34,,,,,776,,,34,,,,,776,,,,,,,,,776,776,,,34,,,,34,,,,,34,,,,,,,,,,,,,,,,,,,774,,,,,,,,774,,,34,774,,,,,,,,,,,,,34,34,34,,,,,,,,,,,,,,,,,31,,34,,,,,,,,,,,,,,,,,,,,,31,,,,344,31,31,,,,,,,,,344,31,,,,774,,,,,,,,,,,,,,31,,,,,,,,43,,34,,,43,,,,31,,,,,,,43,,,,,776,,776,,,776,776,,,,,,776,,,,,,776,776,,34,,,,776,776,,,,43,34,,,,,,,,,,,,,,,,,,,,31,,,,,,,,,,776,,,,31,,,,,,,,,,,,31,,,,,,31,,,,,,31,,34,,,,,,,,,,34,,,,31,,43,,,,,,,,,,,,,,,,,,43,,,,34,,43,34,,,,,,,34,,,,,,,,43,,34,,1103,,34,,,,,,,31,,,,,,,,,,,,,,,,,,,,34,,,34,34,,,34,776,31,31,,,34,34,31,776,,34,34,776,250,43,,,,,,,,,318,318,318,,297,,,,,,,,365,366,,368,369,,371,,43,43,,,,,43,31,,31,31,,,318,318,,,,,,,,31,,,,,,,,,,,,,,,,,,,,,,776,,297,,,43,31,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,43,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,34,,,,,34,34,,,,,,,,,,34,,,,,,,,,,,,,,,,,,34,,,,,,,,,,,318,448,,,454,318,34,,,,,,,,,,,,454,,,,,,,,,,,,,250,,,,,,,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,,,,,554,,,,,34,,,,,,,,,,,,,,34,,,,318,318,,,,,,,34,318,,,,,34,,318,,318,,34,318,318,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,,,,,607,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,34,,,,,34,,,,318,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,695,,,34,,34,34,,,,,,,,,,,,34,,,,,,,,,318,,,,,,,,,,,,,726,,,,,,34,,,,318,,454,454,454,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,366,,,,,,,,,,318,,318,,318,,,,,,,,,,,,,,,,318,,,,,,,,,,454,,,819,,820,,,,,,318,,,318,,,,,,,,,,,,,318,318,,,,,,,,,,318,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,318,454,318,,,,877,,,318,318,454,454,,,,454,454,,,,,,318,,,,,,,,,,,,,,,,318,,,,,,,,,,,,,,,,,,,,,,695,726,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,318,,,,,,,,,318,,,318,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,318,,,,,,,,454,,,,,,,,,,,,,1009,1010,,,,,,,,,,,,,,,,,,,,,,,,,,,,1032,1033,454,454,454,454,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1066,,,,,,,,,,,,,,,,,,,,,,,,,,,,318,,,,,,,,,,,,,,,,,,,318,,,,,,,,,,,,,,,,,,,,,,,,,,454,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,318"); racc_goto_check = Opal.large_array_unpack("72,198,10,68,11,72,75,75,10,36,36,36,12,198,87,87,33,158,46,73,230,230,75,48,72,107,117,33,31,19,19,128,13,19,17,17,72,72,72,77,77,135,23,112,82,82,113,23,44,44,92,139,139,133,55,55,231,110,110,41,41,57,87,7,72,9,94,91,91,111,24,24,22,5,72,72,72,95,23,95,239,82,82,82,56,56,56,119,19,19,19,19,80,235,51,146,117,146,58,29,177,177,20,69,29,20,23,64,127,70,31,89,89,157,157,89,23,225,225,20,129,130,239,72,228,228,228,192,88,88,88,55,72,149,72,29,2,147,65,192,187,28,6,5,10,161,145,1,140,151,152,140,3,236,14,28,16,161,175,178,178,88,18,29,13,23,74,74,21,178,214,214,224,224,23,25,23,202,202,8,63,63,63,27,8,11,42,95,95,239,43,45,191,50,52,60,230,200,200,191,36,78,83,94,193,84,86,93,105,106,114,116,120,215,215,215,215,72,121,122,11,236,29,75,123,124,125,126,131,72,176,29,136,29,142,72,143,198,150,35,35,33,153,8,154,151,152,87,87,128,149,155,72,128,156,73,174,174,159,23,6,23,91,160,23,162,164,165,22,22,2,23,22,168,169,170,171,23,23,172,112,173,36,36,180,33,22,182,183,157,184,36,188,225,23,95,90,90,90,189,195,196,8,205,11,206,127,147,145,11,207,8,210,8,88,88,29,130,29,58,119,29,61,61,211,68,31,192,29,90,90,212,72,213,29,29,72,175,129,70,72,72,175,175,33,19,216,82,70,55,55,29,51,117,11,11,217,149,218,72,146,219,33,220,202,202,82,223,191,200,229,72,233,193,23,231,191,234,23,,191,193,,23,,,72,72,91,,7,,9,33,91,73,31,,,61,5,88,88,80,235,69,,64,146,,88,117,64,23,176,176,10,140,,,,119,55,,75,201,201,13,23,23,111,29,55,230,31,29,,,65,,29,33,57,65,31,187,,57,36,,128,128,17,,63,191,,77,5,215,55,215,63,,,,40,,55,,29,139,35,35,174,,26,26,,31,26,133,174,231,,29,29,,36,,,,230,66,230,,40,91,36,,,,,,91,55,55,,,,110,8,95,239,56,,,41,75,,,56,146,,,146,157,,72,72,225,,,117,92,26,26,26,26,144,,144,94,,,228,228,24,228,228,73,228,13,,70,68,20,91,177,89,231,,,,68,,20,20,36,66,90,20,20,,,,140,,90,140,,72,140,,140,,,11,,72,11,75,66,146,91,,82,,72,200,200,75,28,28,,82,36,28,28,200,44,56,,,,200,36,61,61,72,10,,72,23,135,94,,26,26,75,91,,,,113,75,,,,,91,139,139,72,26,26,117,128,128,,140,36,140,174,140,200,140,,174,174,,23,,,23,117,75,,91,198,72,174,,140,75,,91,72,,,29,,,,,23,,110,,,61,61,87,,17,,,12,,77,61,61,,,,26,,,,,,,23,91,174,23,,,29,23,,29,,22,88,23,23,,61,61,23,23,66,22,22,61,61,,22,22,,,29,112,107,139,72,,132,228,228,228,228,,72,,,230,110,20,110,,,72,72,,,10,,29,68,66,29,61,61,46,29,158,,75,48,68,29,29,,,,29,29,,,88,26,,40,28,,200,,,,,144,,72,230,,,19,66,11,82,,26,,72,,66,40,66,40,40,82,66,40,,11,201,201,,,,,,,90,,201,10,66,232,228,72,201,,66,,72,91,8,144,91,144,,144,,8,,72,,,11,,,66,,,,10,,,,,,,,90,,,,,,,201,23,,,79,87,23,,,87,72,,,,,40,,23,79,,,,,,,,,132,,,132,85,132,19,,23,230,,,230,,,72,22,72,,,72,72,,,,23,,72,11,,,29,19,72,72,90,29,,,,72,72,,,,,11,29,,,,,,31,,,198,144,,144,72,,,66,,29,,,11,,,132,,132,,132,72,132,72,55,230,,29,,72,144,40,,,232,,,232,,132,232,,232,,,72,,23,,72,,117,,,,,82,,,,,,,,,23,,,,,144,23,144,,144,,,,,,,,,,,,,23,90,,,23,,144,,,,11,,,72,85,85,11,29,,,,232,,232,,232,72,232,,,,,,82,30,29,,,,30,,29,72,72,232,141,141,141,72,,,33,,19,19,23,30,29,,11,,72,,,,,30,30,30,72,30,30,30,72,,,,,,,32,,,36,23,23,,,72,,23,72,,,,82,,,30,,,,11,30,30,,75,30,30,30,30,,29,,,,66,85,,85,,,85,85,,40,,,,75,,66,,23,72,,79,,79,40,40,29,29,,,91,,29,72,141,141,141,141,,141,,,30,,,,,30,30,30,30,30,,30,66,,,,,26,,23,,,,,66,,,,,,,,,29,,141,141,141,141,,,,,40,,,26,141,61,61,,,,,,,,79,,40,,,,,,,,,97,97,,,61,40,85,,29,,,,,,40,,,66,66,66,40,,,,,,30,30,30,30,30,30,30,66,,,,40,30,,,66,,,30,30,30,30,,,,,,,,34,,,,,34,30,,,,,,,,85,,79,79,,,,79,79,,,,,,,,,26,,,,,34,34,34,,,,40,,,,,40,40,,,,30,98,98,,,26,,30,30,,,,34,,,,30,,,,,38,34,34,34,,38,32,,,40,,,,30,85,,85,30,85,,32,30,30,,,,,,,,,,,,,,38,38,38,,30,,,,,,,,,,34,,30,,,85,,,85,34,,34,,,38,,30,30,30,,,85,,,38,38,38,,,,,32,40,40,40,,,30,,,97,,40,,,,,,97,,,,,,,,,97,97,,,32,,,,85,40,,,,32,,,38,85,85,,,,,,,38,,38,,79,,85,,,,,32,34,,34,26,26,34,,,30,,85,,34,,,,,,34,34,,,,,,,,,,,,,,,,34,79,79,79,79,,,,,,,,,30,40,,,,,98,,,,30,32,,,98,,32,32,,,,,,98,98,38,,38,,,38,,,,,,,38,,,85,,40,38,38,,,,,85,,,85,,,,,,,,38,,,,99,99,,34,,,30,34,,,,34,34,97,30,97,30,,97,97,,,,30,,97,,,,,34,97,97,,,,79,,97,97,,,34,,30,,,30,,,,,,,30,85,,34,34,,32,32,32,,30,,,,30,,,,,,97,,38,,,,38,,,,38,38,,,,,,,,,,30,,,30,30,,,30,38,,,,,30,30,,,,30,30,38,,,,,,98,,98,,,98,98,,,38,38,,98,,,,,,98,98,,,,,,98,98,,,,,,,,,,,,,,,,,,,,,,,,,,,85,,,,,,,,98,,,,,,,,,,,85,,,,,,,,97,,,,,,,,97,,,32,97,,,,,99,,,,,,,,99,,,30,,,,,,99,99,,,,30,,,,30,,,,39,,,,34,39,,,,,,,34,,,,,,,30,,34,,,30,30,,,,,,,,100,100,30,39,39,39,,97,,34,,,34,,,,,,,,30,,,,,,,,98,,,39,,34,,,98,30,101,101,98,39,39,39,38,,,,,,,,38,,,,,,,,34,38,,34,,,,34,,,,,,34,34,,,,34,34,,,38,,,38,,,,,39,,,,,,102,102,,39,30,39,,,,,38,,,,,,,,30,98,99,,99,,,99,99,,,,30,,99,,,,30,38,99,99,38,,30,,38,99,99,,,,38,38,,,,38,38,,30,,,,30,,,,,,,,,,,,,,,,,,,99,,,,,,,39,,39,,,39,,,,,34,,39,,,,,,39,39,,34,,,,30,,,,,,,,,100,39,,,30,,,,100,,,,,,34,,,100,100,34,30,30,,,,,30,,,,34,,,,,,,,101,,,,,,,,101,,34,38,,,,,,101,101,,,,38,,,,,34,30,,,30,,30,30,,,,,,,,,39,,,30,39,99,38,,39,39,,38,,99,,102,,99,,,,,38,102,,,,39,,,,30,102,102,,,,,,39,38,,,,,,,,,,,,,,39,39,,38,,,,34,,,,,,,,,,,,,,,,,,34,,,,,,34,,,,,,,99,,,,,,100,,100,34,,100,100,34,,,,,100,,,,,,100,100,,,,,,100,100,,,,,,,,,,38,,101,,101,,,101,101,,,,,,101,,,,38,,101,101,34,,38,100,,101,101,,,,,,,34,,,,,38,,,,38,,,,,,,34,34,,,,,34,,,102,,102,101,,102,102,,,,,,102,,,,,,102,102,,,,,,102,102,,,,,,,,,38,,34,103,103,34,,,,,,,,38,,,,,,,39,,,,,,102,,39,38,38,,,,,38,,39,,,,,,,,,,,34,,,,,,,,,100,39,,,39,,,,100,,,,100,,,59,,,38,,59,38,,,,39,,,,,,,39,,,,,59,101,,,,,,,,101,59,59,59,101,59,39,,,39,,71,,39,,,71,,38,39,39,,,,39,39,,,,,,,,59,,71,,,59,59,,100,59,,,,,71,71,71,102,,,,,,,,102,,,,102,,,,,,,,,,,,,71,,,,101,,,,,,71,71,71,,,,,59,,,,,59,59,59,59,59,,59,,,,,,,,,,,,,,,103,,,,,,,,103,,,,,,,,71,103,103,102,,,39,,,71,,71,,,,,,39,,,,,,,,104,104,,,,,,,,,,,,,,,,,,39,,,,,39,,,59,59,59,59,59,59,59,,39,,,,59,,,,,,59,59,59,59,,,,,39,,,,,,,,,59,,,,,,,71,39,,,,,,,,,,,71,,,,,,71,,,,,,,,,,,,,,,,,71,,,,59,,,,,,,59,59,,,,,,,,59,,,,,,,,,,,,,,103,,103,,59,103,103,,59,39,,,103,59,,,,,103,103,,,,,,103,103,39,,,,,,39,,,,,,,,,,59,,,71,,,39,71,,,39,71,71,,59,59,59,,103,,,,,,,,,,,,71,,,,,59,,104,,,,,71,,62,104,,,,62,,,,,104,104,,71,71,,,39,,,,,62,,,,,,,,39,,62,62,62,,62,,,,,,,,,,39,39,,,,,39,,,,59,,,,,,,,62,,,,,62,62,,,62,,,,,,,,,,,,,,,,,,,39,109,109,39,59,,,,,103,,,,,59,,,103,,,,103,,,,,,,,,,62,,,,,62,62,62,62,62,,62,,,,39,,,,,,,,,,,,,,,,,,,,,,,,,,,,59,,,,,,104,,104,,59,104,104,,,,,,104,,,,103,,104,104,,,,,,104,104,,,,,,59,,,59,71,,,,,,59,,71,62,62,62,62,62,62,62,59,71,,,59,62,,,,104,,62,62,62,62,,,,,,,,71,,,71,,,62,,,59,,,59,59,,,59,,,,,,59,59,71,,,59,59,,,,,,,,,,,,,,,,,,,,,,,71,62,,,,,,71,62,62,,,,,109,,,62,,,,,109,,,,,,,,,109,109,,,62,,,,62,,,,,62,,,,,,,,,,,,,,,,,,,104,,,,,,,,104,,,62,104,,,,,,,,,,,,,62,62,62,,,,,,,,,,,,,,,,,59,,62,,,,,,,,,,,,,,,,,,,,,59,,,,71,59,59,,,,,,,,,71,59,,,,104,,,,,,,,,,,,,,59,,,,,,,,71,,62,,,71,,,,59,,,,,,,71,,,,,109,,109,,,109,109,,,,,,109,,,,,,109,109,,62,,,,109,109,,,,71,62,,,,,,,,,,,,,,,,,,,,59,,,,,,,,,,109,,,,59,,,,,,,,,,,,59,,,,,,59,,,,,,59,,62,,,,,,,,,,62,,,,59,,71,,,,,,,,,,,,,,,,,,71,,,,62,,71,62,,,,,,,62,,,,,,,,71,,62,,71,,62,,,,,,,59,,,,,,,,,,,,,,,,,,,,62,,,62,62,,,62,109,59,59,,,62,62,59,109,,62,62,109,37,71,,,,,,,,,37,37,37,,71,,,,,,,,37,37,,37,37,,37,,71,71,,,,,71,59,,59,59,,,37,37,,,,,,,,59,,,,,,,,,,,,,,,,,,,,,,109,,71,,,71,59,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,71,,,,,,62,,,,,,,,,,,,,,,,,,,,,,,62,,,,,62,62,,,,,,,,,,62,,,,,,,,,,,,,,,,,,62,,,,,,,,,,,37,37,,,37,37,62,,,,,,,,,,,,37,,,,,,,,,,,,,37,,,,,,,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,,,,,37,,,,,62,,,,,,,,,,,,,,62,,,,37,37,,,,,,,62,37,,,,,62,,37,,37,,62,37,37,,,,,,,,,,,,,,62,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,62,,,,,,,,,,,,,,,,,,,,,,,,,,,,,62,62,,,,,62,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,62,,62,62,,,,,,,,,,,,62,,,,,,,,,37,,,,,,,,,,,,,37,,,,,,62,,,,37,,37,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,37,,37,,37,,,,,,,,,,,,,,,,37,,,,,,,,,,37,,,37,,37,,,,,,37,,,37,,,,,,,,,,,,,37,37,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,37,37,,,,37,,,37,37,37,37,,,,37,37,,,,,,37,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,37,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,37,,,,,,,,,,,,,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,37,37,37,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37"); racc_goto_pointer = Opal.large_array_unpack(",147,134,152,,68,135,58,177,56,-229,-34,-462,-664,-739,,-427,24,151,-42,-119,92,48,40,-150,-45,405,46,-83,97,1084,-197,677,-2,1330,220,-25,3624,1403,1907,443,-471,-70,-67,-25,-434,-8,,-3,,167,65,-361,,,-172,53,-245,-470,2540,-366,96,2955,146,69,100,253,,-36,63,-252,2582,-2,-384,89,-4,,29,-231,663,44,,5,151,-167,846,139,-5,94,-266,262,36,-257,-351,-255,-496,,747,855,1131,1412,1450,1508,1943,2202,182,141,-44,,2520,-328,-757,-348,-582,134,,-196,21,,67,147,-156,153,-385,-417,-625,-182,-808,-466,-377,-796,-688,-223,-649,,-455,-739,,,-429,-554,24,-839,-735,-169,-825,-611,-657,,-721,-860,-949,-948,-168,-609,166,-392,-121,-10,-741,-737,-412,-36,,-45,-45,,,-513,-817,-713,-940,-557,-865,-274,-590,-518,-430,-773,,-644,,-642,-459,-457,,,-609,-457,-451,,-747,-800,-742,,-648,-647,,-89,,-333,-105,-588,,,-475,-392,-587,,,224,231,237,238,-245,-200,250,259,260,-291,-290,,,-276,-181,-117,,,-360,-336,-214,-650,-131,-330,-753,-615,-983,,,-495"); racc_goto_default = Opal.large_array_unpack(",,,,5,,6,392,335,,,474,,983,,332,333,,,,13,14,22,248,,,16,,442,249,364,,,640,252,,27,25,253,247,520,,,,,,,387,144,26,,,,28,29,815,,,,352,,30,349,456,37,,,39,42,41,,244,245,404,,465,143,87,,447,103,51,54,284,,324,,894,457,,458,470,483,689,572,322,308,55,56,57,58,59,60,61,62,63,,309,69,70,,,,,,77,,622,78,231,,,,,,,,716,495,,717,718,481,476,477,,1176,712,1070,,482,,,,484,,486,,970,,,,493,,,,,,,,,,,469,,,794,786,,,,,,,1050,,739,940,741,742,746,743,744,,,745,747,,,,939,941,751,,753,754,755,756,,760,478,504,762,763,764,113,,,86,88,89,,,,,650,,,,,,99,100,,232,904,235,480,,485,912,498,500,501,1081,505,1082,508,511,327"); racc_reduce_table = Opal.large_array_unpack("0,0,racc_error,0,150,_reduce_1,2,148,_reduce_2,2,149,_reduce_3,0,151,_reduce_4,1,151,_reduce_5,3,151,_reduce_6,2,151,_reduce_7,1,153,_reduce_none,2,153,_reduce_9,3,156,_reduce_10,4,157,_reduce_11,2,158,_reduce_12,0,162,_reduce_13,1,162,_reduce_14,3,162,_reduce_15,2,162,_reduce_16,1,163,_reduce_none,2,163,_reduce_18,0,174,_reduce_19,4,155,_reduce_20,3,155,_reduce_21,3,155,_reduce_22,3,155,_reduce_23,2,155,_reduce_24,3,155,_reduce_25,3,155,_reduce_26,3,155,_reduce_27,3,155,_reduce_28,3,155,_reduce_29,4,155,_reduce_30,1,155,_reduce_none,3,155,_reduce_32,3,155,_reduce_33,5,155,_reduce_34,3,155,_reduce_35,1,155,_reduce_none,3,167,_reduce_37,3,167,_reduce_38,6,167,_reduce_39,5,167,_reduce_40,5,167,_reduce_41,5,167,_reduce_42,5,167,_reduce_43,4,167,_reduce_44,6,167,_reduce_45,4,167,_reduce_46,6,167,_reduce_47,3,167,_reduce_48,1,175,_reduce_none,3,175,_reduce_50,1,175,_reduce_none,1,173,_reduce_none,3,173,_reduce_53,3,173,_reduce_54,3,173,_reduce_55,2,173,_reduce_56,0,189,_reduce_57,4,173,_reduce_58,0,190,_reduce_59,4,173,_reduce_60,1,173,_reduce_none,1,166,_reduce_none,0,194,_reduce_63,3,191,_reduce_64,1,193,_reduce_65,2,181,_reduce_66,0,199,_reduce_67,5,185,_reduce_68,1,169,_reduce_none,1,169,_reduce_none,1,200,_reduce_none,4,200,_reduce_72,0,207,_reduce_73,4,204,_reduce_74,1,206,_reduce_none,2,183,_reduce_76,3,183,_reduce_77,4,183,_reduce_78,5,183,_reduce_79,4,183,_reduce_80,5,183,_reduce_81,2,183,_reduce_82,2,183,_reduce_83,2,183,_reduce_84,2,183,_reduce_85,2,183,_reduce_86,1,168,_reduce_87,3,168,_reduce_88,1,212,_reduce_89,3,212,_reduce_90,1,211,_reduce_none,2,211,_reduce_92,3,211,_reduce_93,5,211,_reduce_94,2,211,_reduce_95,4,211,_reduce_96,2,211,_reduce_97,4,211,_reduce_98,1,211,_reduce_99,3,211,_reduce_100,1,215,_reduce_none,3,215,_reduce_102,2,214,_reduce_103,3,214,_reduce_104,1,217,_reduce_105,3,217,_reduce_106,1,216,_reduce_107,1,216,_reduce_108,4,216,_reduce_109,3,216,_reduce_110,3,216,_reduce_111,3,216,_reduce_112,3,216,_reduce_113,2,216,_reduce_114,1,216,_reduce_115,1,170,_reduce_116,1,170,_reduce_117,4,170,_reduce_118,3,170,_reduce_119,3,170,_reduce_120,3,170,_reduce_121,3,170,_reduce_122,2,170,_reduce_123,1,170,_reduce_124,1,220,_reduce_125,1,220,_reduce_none,2,221,_reduce_127,1,221,_reduce_128,3,221,_reduce_129,1,195,_reduce_none,1,195,_reduce_none,1,195,_reduce_none,1,195,_reduce_none,1,195,_reduce_none,1,164,_reduce_135,1,164,_reduce_none,1,165,_reduce_137,0,225,_reduce_138,4,165,_reduce_139,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,222,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,1,223,_reduce_none,3,184,_reduce_211,3,184,_reduce_212,6,184,_reduce_213,5,184,_reduce_214,5,184,_reduce_215,5,184,_reduce_216,5,184,_reduce_217,4,184,_reduce_218,3,184,_reduce_219,3,184,_reduce_220,3,184,_reduce_221,2,184,_reduce_222,2,184,_reduce_223,2,184,_reduce_224,2,184,_reduce_225,3,184,_reduce_226,3,184,_reduce_227,3,184,_reduce_228,3,184,_reduce_229,3,184,_reduce_230,3,184,_reduce_231,4,184,_reduce_232,2,184,_reduce_233,2,184,_reduce_234,3,184,_reduce_235,3,184,_reduce_236,3,184,_reduce_237,3,184,_reduce_238,1,184,_reduce_none,3,184,_reduce_240,3,184,_reduce_241,3,184,_reduce_242,3,184,_reduce_243,3,184,_reduce_244,2,184,_reduce_245,2,184,_reduce_246,3,184,_reduce_247,3,184,_reduce_248,3,184,_reduce_249,3,184,_reduce_250,0,231,_reduce_251,4,184,_reduce_252,6,184,_reduce_253,4,184,_reduce_254,6,184,_reduce_255,4,184,_reduce_256,6,184,_reduce_257,1,184,_reduce_none,1,230,_reduce_none,1,230,_reduce_none,1,230,_reduce_none,1,230,_reduce_none,3,228,_reduce_263,3,228,_reduce_264,1,232,_reduce_none,1,233,_reduce_none,2,233,_reduce_none,4,233,_reduce_268,2,233,_reduce_269,1,226,_reduce_none,3,226,_reduce_271,3,238,_reduce_272,5,238,_reduce_273,3,238,_reduce_274,0,240,_reduce_275,1,240,_reduce_none,0,178,_reduce_277,1,178,_reduce_none,2,178,_reduce_none,4,178,_reduce_280,2,178,_reduce_281,1,210,_reduce_282,2,210,_reduce_283,2,210,_reduce_284,4,210,_reduce_285,1,210,_reduce_286,0,243,_reduce_287,2,203,_reduce_288,2,242,_reduce_289,1,242,_reduce_290,2,241,_reduce_291,0,241,_reduce_292,1,235,_reduce_293,2,235,_reduce_294,1,235,_reduce_295,3,235,_reduce_296,4,235,_reduce_297,3,235,_reduce_298,1,172,_reduce_299,1,172,_reduce_none,3,171,_reduce_301,4,171,_reduce_302,2,171,_reduce_303,1,229,_reduce_none,1,229,_reduce_none,1,229,_reduce_none,1,229,_reduce_none,1,229,_reduce_none,1,229,_reduce_none,1,229,_reduce_none,1,229,_reduce_none,1,229,_reduce_none,1,229,_reduce_none,1,229,_reduce_314,0,267,_reduce_315,4,229,_reduce_316,0,268,_reduce_317,4,229,_reduce_318,0,269,_reduce_319,4,229,_reduce_320,3,229,_reduce_321,3,229,_reduce_322,2,229,_reduce_323,3,229,_reduce_324,3,229,_reduce_325,1,229,_reduce_326,4,229,_reduce_327,3,229,_reduce_328,1,229,_reduce_329,0,270,_reduce_330,6,229,_reduce_331,4,229,_reduce_332,3,229,_reduce_333,2,229,_reduce_334,1,229,_reduce_none,2,229,_reduce_336,1,229,_reduce_none,6,229,_reduce_338,6,229,_reduce_339,4,229,_reduce_340,4,229,_reduce_341,5,229,_reduce_342,4,229,_reduce_343,5,229,_reduce_344,6,229,_reduce_345,0,271,_reduce_346,6,229,_reduce_347,0,272,_reduce_348,7,229,_reduce_349,0,273,_reduce_350,5,229,_reduce_351,4,229,_reduce_352,4,229,_reduce_353,1,229,_reduce_354,1,229,_reduce_355,1,229,_reduce_356,1,229,_reduce_357,1,177,_reduce_none,1,262,_reduce_359,1,265,_reduce_360,1,196,_reduce_361,1,209,_reduce_362,1,257,_reduce_none,1,257,_reduce_none,2,257,_reduce_365,1,192,_reduce_none,1,192,_reduce_none,1,258,_reduce_none,5,258,_reduce_369,1,160,_reduce_none,2,160,_reduce_371,1,261,_reduce_none,1,261,_reduce_none,1,274,_reduce_374,3,274,_reduce_375,1,277,_reduce_376,3,277,_reduce_377,1,276,_reduce_none,3,276,_reduce_379,5,276,_reduce_380,1,276,_reduce_381,3,276,_reduce_382,2,278,_reduce_383,1,278,_reduce_384,1,279,_reduce_none,1,279,_reduce_none,0,284,_reduce_387,2,282,_reduce_388,4,283,_reduce_389,2,283,_reduce_390,2,283,_reduce_391,1,283,_reduce_392,2,288,_reduce_393,0,288,_reduce_394,1,289,_reduce_none,6,290,_reduce_396,8,290,_reduce_397,4,290,_reduce_398,6,290,_reduce_399,4,290,_reduce_400,2,290,_reduce_none,6,290,_reduce_402,2,290,_reduce_403,4,290,_reduce_404,6,290,_reduce_405,2,290,_reduce_406,4,290,_reduce_407,2,290,_reduce_408,4,290,_reduce_409,1,290,_reduce_none,0,294,_reduce_411,1,294,_reduce_412,3,295,_reduce_413,4,295,_reduce_414,1,296,_reduce_415,4,296,_reduce_416,1,297,_reduce_417,3,297,_reduce_418,1,298,_reduce_419,1,298,_reduce_none,0,302,_reduce_421,0,303,_reduce_422,5,256,_reduce_423,4,300,_reduce_424,1,300,_reduce_425,0,306,_reduce_426,4,301,_reduce_427,0,307,_reduce_428,4,301,_reduce_429,0,309,_reduce_430,4,305,_reduce_431,2,201,_reduce_432,4,201,_reduce_433,5,201,_reduce_434,5,201,_reduce_435,2,255,_reduce_436,4,255,_reduce_437,4,255,_reduce_438,3,255,_reduce_439,3,255,_reduce_440,3,255,_reduce_441,2,255,_reduce_442,1,255,_reduce_443,4,255,_reduce_444,0,311,_reduce_445,4,254,_reduce_446,0,312,_reduce_447,4,254,_reduce_448,0,313,_reduce_449,3,205,_reduce_450,0,314,_reduce_451,0,315,_reduce_452,4,308,_reduce_453,5,259,_reduce_454,1,316,_reduce_455,1,316,_reduce_none,0,319,_reduce_457,0,320,_reduce_458,7,260,_reduce_459,1,318,_reduce_460,1,318,_reduce_none,1,317,_reduce_462,3,317,_reduce_463,3,317,_reduce_464,1,188,_reduce_none,2,188,_reduce_466,3,188,_reduce_467,1,188,_reduce_468,1,188,_reduce_469,1,188,_reduce_470,1,321,_reduce_none,3,326,_reduce_472,1,326,_reduce_none,3,328,_reduce_474,1,328,_reduce_none,1,330,_reduce_476,1,331,_reduce_477,1,329,_reduce_none,1,329,_reduce_none,4,329,_reduce_480,4,329,_reduce_481,4,329,_reduce_482,3,329,_reduce_483,4,329,_reduce_484,4,329,_reduce_485,4,329,_reduce_486,3,329,_reduce_487,3,329,_reduce_488,3,329,_reduce_489,2,329,_reduce_490,0,335,_reduce_491,4,329,_reduce_492,2,329,_reduce_493,0,336,_reduce_494,4,329,_reduce_495,1,322,_reduce_496,1,322,_reduce_497,2,322,_reduce_498,2,322,_reduce_499,4,322,_reduce_500,1,322,_reduce_none,2,337,_reduce_502,3,337,_reduce_503,1,324,_reduce_504,3,324,_reduce_505,5,323,_reduce_506,2,339,_reduce_507,1,339,_reduce_508,1,340,_reduce_509,3,340,_reduce_510,1,338,_reduce_none,3,325,_reduce_512,1,325,_reduce_513,2,325,_reduce_514,1,325,_reduce_515,1,341,_reduce_516,3,341,_reduce_517,2,343,_reduce_518,1,343,_reduce_519,1,344,_reduce_520,3,344,_reduce_521,2,346,_reduce_522,1,346,_reduce_523,2,348,_reduce_524,1,342,_reduce_none,1,342,_reduce_526,1,332,_reduce_none,3,332,_reduce_528,3,332,_reduce_529,2,332,_reduce_530,2,332,_reduce_531,1,332,_reduce_none,1,332,_reduce_none,1,332,_reduce_none,2,332,_reduce_535,2,332,_reduce_536,1,349,_reduce_none,1,349,_reduce_none,1,349,_reduce_none,1,349,_reduce_none,1,349,_reduce_none,1,349,_reduce_none,1,349,_reduce_none,1,349,_reduce_none,1,349,_reduce_545,1,349,_reduce_none,1,327,_reduce_547,2,350,_reduce_548,2,350,_reduce_549,4,351,_reduce_550,2,333,_reduce_551,3,333,_reduce_552,1,333,_reduce_553,6,159,_reduce_554,0,159,_reduce_555,1,353,_reduce_556,1,353,_reduce_none,1,353,_reduce_none,2,354,_reduce_559,1,354,_reduce_none,2,161,_reduce_561,1,161,_reduce_none,1,244,_reduce_none,1,244,_reduce_none,1,245,_reduce_565,1,356,_reduce_566,2,356,_reduce_567,3,357,_reduce_568,1,357,_reduce_569,1,357,_reduce_570,3,246,_reduce_571,4,247,_reduce_572,3,248,_reduce_573,0,360,_reduce_574,3,360,_reduce_575,1,361,_reduce_576,2,361,_reduce_577,3,250,_reduce_578,0,363,_reduce_579,3,363,_reduce_580,3,249,_reduce_581,3,251,_reduce_582,0,364,_reduce_583,3,364,_reduce_584,0,365,_reduce_585,3,365,_reduce_586,0,345,_reduce_587,2,345,_reduce_588,0,358,_reduce_589,2,358,_reduce_590,0,359,_reduce_591,2,359,_reduce_592,1,362,_reduce_593,2,362,_reduce_594,0,367,_reduce_595,4,362,_reduce_596,1,366,_reduce_597,1,366,_reduce_598,1,366,_reduce_599,1,366,_reduce_none,1,224,_reduce_none,1,224,_reduce_none,1,368,_reduce_603,3,369,_reduce_604,1,355,_reduce_605,2,355,_reduce_606,1,227,_reduce_607,1,227,_reduce_608,1,227,_reduce_609,1,227,_reduce_610,1,352,_reduce_611,1,352,_reduce_612,1,352,_reduce_613,1,218,_reduce_614,1,218,_reduce_615,1,218,_reduce_none,1,219,_reduce_617,1,219,_reduce_618,1,219,_reduce_619,1,219,_reduce_620,1,219,_reduce_621,1,219,_reduce_622,1,219,_reduce_623,1,252,_reduce_624,1,252,_reduce_625,1,176,_reduce_626,1,176,_reduce_627,1,186,_reduce_628,1,186,_reduce_629,0,370,_reduce_630,4,263,_reduce_631,0,263,_reduce_632,1,182,_reduce_none,1,182,_reduce_634,3,371,_reduce_635,1,266,_reduce_none,0,373,_reduce_637,3,266,_reduce_638,4,372,_reduce_639,2,372,_reduce_640,2,372,_reduce_641,1,372,_reduce_642,1,372,_reduce_643,2,375,_reduce_644,0,375,_reduce_645,6,304,_reduce_646,8,304,_reduce_647,4,304,_reduce_648,6,304,_reduce_649,4,304,_reduce_650,6,304,_reduce_651,2,304,_reduce_652,4,304,_reduce_653,6,304,_reduce_654,2,304,_reduce_655,4,304,_reduce_656,2,304,_reduce_657,4,304,_reduce_658,1,304,_reduce_659,0,304,_reduce_660,1,239,_reduce_661,1,299,_reduce_662,1,299,_reduce_663,1,299,_reduce_664,1,299,_reduce_665,1,275,_reduce_none,1,275,_reduce_667,1,377,_reduce_668,1,378,_reduce_669,3,378,_reduce_670,1,291,_reduce_671,3,291,_reduce_672,1,379,_reduce_673,2,380,_reduce_674,1,380,_reduce_675,2,381,_reduce_676,1,381,_reduce_677,1,285,_reduce_678,3,285,_reduce_679,1,374,_reduce_680,3,374,_reduce_681,1,347,_reduce_none,1,347,_reduce_none,1,281,_reduce_684,2,280,_reduce_685,1,280,_reduce_686,3,382,_reduce_687,3,383,_reduce_688,1,292,_reduce_689,3,292,_reduce_690,1,376,_reduce_691,3,376,_reduce_692,1,384,_reduce_none,1,384,_reduce_none,2,293,_reduce_695,1,293,_reduce_696,1,385,_reduce_none,1,385,_reduce_none,2,287,_reduce_699,1,287,_reduce_700,2,286,_reduce_701,0,286,_reduce_702,1,197,_reduce_none,3,197,_reduce_704,0,253,_reduce_705,2,253,_reduce_none,1,237,_reduce_707,3,237,_reduce_708,3,386,_reduce_709,2,386,_reduce_710,1,386,_reduce_711,4,386,_reduce_712,2,386,_reduce_713,1,386,_reduce_714,1,208,_reduce_none,1,208,_reduce_none,1,208,_reduce_none,1,202,_reduce_none,1,202,_reduce_none,1,310,_reduce_none,1,310,_reduce_none,1,310,_reduce_none,1,198,_reduce_none,1,198,_reduce_none,1,180,_reduce_725,1,180,_reduce_726,0,152,_reduce_none,1,152,_reduce_none,0,187,_reduce_none,1,187,_reduce_none,2,213,_reduce_731,2,179,_reduce_732,2,334,_reduce_733,1,236,_reduce_none,1,236,_reduce_none,1,264,_reduce_736,1,264,_reduce_none,1,154,_reduce_none,2,154,_reduce_none,0,234,_reduce_740"); racc_reduce_n = 741; racc_shift_n = 1234; racc_token_table = $hash_rehash(new Map([[false, 0], ["error", 1], ["kCLASS", 2], ["kMODULE", 3], ["kDEF", 4], ["kUNDEF", 5], ["kBEGIN", 6], ["kRESCUE", 7], ["kENSURE", 8], ["kEND", 9], ["kIF", 10], ["kUNLESS", 11], ["kTHEN", 12], ["kELSIF", 13], ["kELSE", 14], ["kCASE", 15], ["kWHEN", 16], ["kWHILE", 17], ["kUNTIL", 18], ["kFOR", 19], ["kBREAK", 20], ["kNEXT", 21], ["kREDO", 22], ["kRETRY", 23], ["kIN", 24], ["kDO", 25], ["kDO_COND", 26], ["kDO_BLOCK", 27], ["kDO_LAMBDA", 28], ["kRETURN", 29], ["kYIELD", 30], ["kSUPER", 31], ["kSELF", 32], ["kNIL", 33], ["kTRUE", 34], ["kFALSE", 35], ["kAND", 36], ["kOR", 37], ["kNOT", 38], ["kIF_MOD", 39], ["kUNLESS_MOD", 40], ["kWHILE_MOD", 41], ["kUNTIL_MOD", 42], ["kRESCUE_MOD", 43], ["kALIAS", 44], ["kDEFINED", 45], ["klBEGIN", 46], ["klEND", 47], ["k__LINE__", 48], ["k__FILE__", 49], ["k__ENCODING__", 50], ["tIDENTIFIER", 51], ["tFID", 52], ["tGVAR", 53], ["tIVAR", 54], ["tCONSTANT", 55], ["tLABEL", 56], ["tCVAR", 57], ["tNTH_REF", 58], ["tBACK_REF", 59], ["tSTRING_CONTENT", 60], ["tINTEGER", 61], ["tFLOAT", 62], ["tUPLUS", 63], ["tUMINUS", 64], ["tUNARY_NUM", 65], ["tPOW", 66], ["tCMP", 67], ["tEQ", 68], ["tEQQ", 69], ["tNEQ", 70], ["tGEQ", 71], ["tLEQ", 72], ["tANDOP", 73], ["tOROP", 74], ["tMATCH", 75], ["tNMATCH", 76], ["tDOT", 77], ["tDOT2", 78], ["tDOT3", 79], ["tAREF", 80], ["tASET", 81], ["tLSHFT", 82], ["tRSHFT", 83], ["tCOLON2", 84], ["tCOLON3", 85], ["tOP_ASGN", 86], ["tASSOC", 87], ["tLPAREN", 88], ["tLPAREN2", 89], ["tRPAREN", 90], ["tLPAREN_ARG", 91], ["tLBRACK", 92], ["tLBRACK2", 93], ["tRBRACK", 94], ["tLBRACE", 95], ["tLBRACE_ARG", 96], ["tSTAR", 97], ["tSTAR2", 98], ["tAMPER", 99], ["tAMPER2", 100], ["tTILDE", 101], ["tPERCENT", 102], ["tDIVIDE", 103], ["tDSTAR", 104], ["tPLUS", 105], ["tMINUS", 106], ["tLT", 107], ["tGT", 108], ["tPIPE", 109], ["tBANG", 110], ["tCARET", 111], ["tLCURLY", 112], ["tRCURLY", 113], ["tBACK_REF2", 114], ["tSYMBEG", 115], ["tSTRING_BEG", 116], ["tXSTRING_BEG", 117], ["tREGEXP_BEG", 118], ["tREGEXP_OPT", 119], ["tWORDS_BEG", 120], ["tQWORDS_BEG", 121], ["tSYMBOLS_BEG", 122], ["tQSYMBOLS_BEG", 123], ["tSTRING_DBEG", 124], ["tSTRING_DVAR", 125], ["tSTRING_END", 126], ["tSTRING_DEND", 127], ["tSTRING", 128], ["tSYMBOL", 129], ["tNL", 130], ["tEH", 131], ["tCOLON", 132], ["tCOMMA", 133], ["tSPACE", 134], ["tSEMI", 135], ["tLAMBDA", 136], ["tLAMBEG", 137], ["tCHARACTER", 138], ["tRATIONAL", 139], ["tIMAGINARY", 140], ["tLABEL_END", 141], ["tANDDOT", 142], ["tBDOT2", 143], ["tBDOT3", 144], ["tEQL", 145], ["tLOWEST", 146]])); racc_nt_base = 147; racc_use_result_var = true; $const_set($nesting[0], 'Racc_arg', [racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var]); if ($truthy((($a = $$('Ractor', 'skip_raise')) ? 'constant' : nil))) { $$('Ractor').$make_shareable($$('Racc_arg')) }; $const_set($nesting[0], 'Racc_token_to_s_table', Opal.large_array_unpack("$end,error,kCLASS,kMODULE,kDEF,kUNDEF,kBEGIN,kRESCUE,kENSURE,kEND,kIF,kUNLESS,kTHEN,kELSIF,kELSE,kCASE,kWHEN,kWHILE,kUNTIL,kFOR,kBREAK,kNEXT,kREDO,kRETRY,kIN,kDO,kDO_COND,kDO_BLOCK,kDO_LAMBDA,kRETURN,kYIELD,kSUPER,kSELF,kNIL,kTRUE,kFALSE,kAND,kOR,kNOT,kIF_MOD,kUNLESS_MOD,kWHILE_MOD,kUNTIL_MOD,kRESCUE_MOD,kALIAS,kDEFINED,klBEGIN,klEND,k__LINE__,k__FILE__,k__ENCODING__,tIDENTIFIER,tFID,tGVAR,tIVAR,tCONSTANT,tLABEL,tCVAR,tNTH_REF,tBACK_REF,tSTRING_CONTENT,tINTEGER,tFLOAT,tUPLUS,tUMINUS,tUNARY_NUM,tPOW,tCMP,tEQ,tEQQ,tNEQ,tGEQ,tLEQ,tANDOP,tOROP,tMATCH,tNMATCH,tDOT,tDOT2,tDOT3,tAREF,tASET,tLSHFT,tRSHFT,tCOLON2,tCOLON3,tOP_ASGN,tASSOC,tLPAREN,tLPAREN2,tRPAREN,tLPAREN_ARG,tLBRACK,tLBRACK2,tRBRACK,tLBRACE,tLBRACE_ARG,tSTAR,tSTAR2,tAMPER,tAMPER2,tTILDE,tPERCENT,tDIVIDE,tDSTAR,tPLUS,tMINUS,tLT,tGT,tPIPE,tBANG,tCARET,tLCURLY,tRCURLY,tBACK_REF2,tSYMBEG,tSTRING_BEG,tXSTRING_BEG,tREGEXP_BEG,tREGEXP_OPT,tWORDS_BEG,tQWORDS_BEG,tSYMBOLS_BEG,tQSYMBOLS_BEG,tSTRING_DBEG,tSTRING_DVAR,tSTRING_END,tSTRING_DEND,tSTRING,tSYMBOL,tNL,tEH,tCOLON,tCOMMA,tSPACE,tSEMI,tLAMBDA,tLAMBEG,tCHARACTER,tRATIONAL,tIMAGINARY,tLABEL_END,tANDDOT,tBDOT2,tBDOT3,tEQL,tLOWEST,$start,program,top_compstmt,@1,top_stmts,opt_terms,top_stmt,terms,stmt,begin_block,bodystmt,compstmt,opt_rescue,opt_else,opt_ensure,stmts,stmt_or_begin,fitem,undef_list,expr_value,command_asgn,mlhs,command_call,lhs,mrhs,mrhs_arg,expr,@2,command_rhs,var_lhs,primary_value,opt_call_args,rbracket,call_op,defn_head,f_opt_paren_args,command,arg,defs_head,backref,opt_nl,p_top_expr_body,@3,@4,expr_value_do,do,def_name,@5,fname,k_def,singleton,dot_or_colon,@6,block_command,block_call,operation2,command_args,cmd_brace_block,brace_body,fcall,@7,operation,k_return,call_args,mlhs_basic,mlhs_inner,rparen,mlhs_head,mlhs_item,mlhs_node,mlhs_post,user_variable,keyword_variable,cname,cpath,op,reswords,symbol,@8,arg_rhs,simple_numeric,rel_expr,primary,relop,@9,arg_value,aref_args,none,args,trailer,assocs,paren_args,args_forward,opt_paren_args,opt_block_arg,block_arg,@10,literal,strings,xstring,regexp,words,qwords,symbols,qsymbols,var_ref,assoc_list,brace_block,method_call,lambda,then,if_tail,case_body,p_case_body,for_var,k_class,superclass,term,k_module,f_arglist,@11,@12,@13,@14,@15,@16,@17,f_marg,f_norm_arg,f_margs,f_marg_list,f_rest_marg,f_any_kwrest,f_kwrest,f_no_kwarg,f_eq,block_args_tail,@18,f_block_kwarg,opt_f_block_arg,f_block_arg,opt_block_args_tail,excessed_comma,block_param,f_arg,f_block_optarg,f_rest_arg,opt_block_param,block_param_def,opt_bv_decl,bv_decls,bvar,f_bad_arg,f_larglist,lambda_body,@19,@20,f_args,do_block,@21,@22,do_body,@23,operation3,@24,@25,@26,@27,@28,cases,p_top_expr,p_cases,@29,@30,p_expr,p_args,p_find,p_args_tail,p_kwargs,p_as,p_variable,p_alt,p_expr_basic,p_lparen,p_lbracket,p_value,p_const,rbrace,@31,@32,p_args_head,p_arg,p_rest,p_args_post,p_kwarg,p_any_kwrest,p_kw,p_kw_label,string_contents,p_kwrest,kwrest_mark,p_kwnorest,p_primitive,p_var_ref,p_expr_ref,nonlocal_var,exc_list,exc_var,numeric,string,string1,xstring_contents,regexp_contents,word_list,word,string_content,symbol_list,qword_list,qsym_list,string_dvar,@33,ssym,dsym,@34,f_paren_args,args_tail,@35,f_kwarg,opt_args_tail,f_optarg,f_arg_asgn,f_arg_item,f_label,f_kw,f_block_kw,f_opt,f_block_opt,restarg_mark,blkarg_mark,assoc")); if ($truthy((($b = $$('Ractor', 'skip_raise')) ? 'constant' : nil))) { $$('Ractor').$make_shareable($$('Racc_token_to_s_table')) }; $const_set($nesting[0], 'Racc_debug_parser', false); $def(self, '$_reduce_1', function $$_reduce_1(val, _values, result) { var self = this; self.current_arg_stack.$push(nil); self.max_numparam_stack.$push((new Map([["static", true]]))); return result; }); $def(self, '$_reduce_2', function $$_reduce_2(val, _values, result) { var self = this; result = val['$[]'](1); self.current_arg_stack.$pop(); self.max_numparam_stack.$pop(); return result; }); $def(self, '$_reduce_3', function $$_reduce_3(val, _values, result) { var self = this; return self.builder.$compstmt(val['$[]'](0)) }); $def(self, '$_reduce_4', function $$_reduce_4(val, _values, result) { return [] }); $def(self, '$_reduce_5', function $$_reduce_5(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_6', function $$_reduce_6(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_7', function $$_reduce_7(val, _values, result) { return [val['$[]'](1)] }); $def(self, '$_reduce_9', function $$_reduce_9(val, _values, result) { var self = this; return $send(self.builder, 'preexe', [val['$[]'](0)].concat($to_a(val['$[]'](1)))) }); $def(self, '$_reduce_10', function $$_reduce_10(val, _values, result) { return val }); $def(self, '$_reduce_11', function $$_reduce_11(val, _values, result) { var $a, $b, self = this, rescue_bodies = nil, else_t = nil, else_ = nil, ensure_t = nil, ensure_ = nil; rescue_bodies = val['$[]'](1); $b = val['$[]'](2), $a = $to_ary($b), (else_t = ($a[0] == null ? nil : $a[0])), (else_ = ($a[1] == null ? nil : $a[1])), $b; $b = val['$[]'](3), $a = $to_ary($b), (ensure_t = ($a[0] == null ? nil : $a[0])), (ensure_ = ($a[1] == null ? nil : $a[1])), $b; if (($truthy(rescue_bodies['$empty?']()) && ($not(else_t['$nil?']())))) { self.$diagnostic("error", "useless_else", nil, else_t) }; return self.builder.$begin_body(val['$[]'](0), rescue_bodies, else_t, else_, ensure_t, ensure_); }); $def(self, '$_reduce_12', function $$_reduce_12(val, _values, result) { var self = this; return self.builder.$compstmt(val['$[]'](0)) }); $def(self, '$_reduce_13', function $$_reduce_13(val, _values, result) { return [] }); $def(self, '$_reduce_14', function $$_reduce_14(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_15', function $$_reduce_15(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_16', function $$_reduce_16(val, _values, result) { return [val['$[]'](1)] }); $def(self, '$_reduce_18', function $$_reduce_18(val, _values, result) { var self = this; self.$diagnostic("error", "begin_in_method", nil, val['$[]'](0)); return result; }); $def(self, '$_reduce_19', function $$_reduce_19(val, _values, result) { var self = this; self.lexer['$state=']("expr_fname"); return result; }); $def(self, '$_reduce_20', function $$_reduce_20(val, _values, result) { var self = this; return self.builder.$alias(val['$[]'](0), val['$[]'](1), val['$[]'](3)) }); $def(self, '$_reduce_21', function $$_reduce_21(val, _values, result) { var self = this; return self.builder.$alias(val['$[]'](0), self.builder.$gvar(val['$[]'](1)), self.builder.$gvar(val['$[]'](2))) }); $def(self, '$_reduce_22', function $$_reduce_22(val, _values, result) { var self = this; return self.builder.$alias(val['$[]'](0), self.builder.$gvar(val['$[]'](1)), self.builder.$back_ref(val['$[]'](2))) }); $def(self, '$_reduce_23', function $$_reduce_23(val, _values, result) { var self = this; self.$diagnostic("error", "nth_ref_alias", nil, val['$[]'](2)); return result; }); $def(self, '$_reduce_24', function $$_reduce_24(val, _values, result) { var self = this; return self.builder.$undef_method(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_25', function $$_reduce_25(val, _values, result) { var self = this; return self.builder.$condition_mod(val['$[]'](0), nil, val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_26', function $$_reduce_26(val, _values, result) { var self = this; return self.builder.$condition_mod(nil, val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_27', function $$_reduce_27(val, _values, result) { var self = this; return self.builder.$loop_mod("while", val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_28', function $$_reduce_28(val, _values, result) { var self = this; return self.builder.$loop_mod("until", val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_29', function $$_reduce_29(val, _values, result) { var self = this, rescue_body = nil; rescue_body = self.builder.$rescue_body(val['$[]'](1), nil, nil, nil, nil, val['$[]'](2)); return self.builder.$begin_body(val['$[]'](0), [rescue_body]); }); $def(self, '$_reduce_30', function $$_reduce_30(val, _values, result) { var self = this; return self.builder.$postexe(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3)) }); $def(self, '$_reduce_32', function $$_reduce_32(val, _values, result) { var self = this; return self.builder.$multi_assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_33', function $$_reduce_33(val, _values, result) { var self = this; return self.builder.$assign(val['$[]'](0), val['$[]'](1), self.builder.$array(nil, val['$[]'](2), nil)) }); $def(self, '$_reduce_34', function $$_reduce_34(val, _values, result) { var self = this, rescue_body = nil, begin_body = nil; rescue_body = self.builder.$rescue_body(val['$[]'](3), nil, nil, nil, nil, val['$[]'](4)); begin_body = self.builder.$begin_body(val['$[]'](2), [rescue_body]); return self.builder.$multi_assign(val['$[]'](0), val['$[]'](1), begin_body); }); $def(self, '$_reduce_35', function $$_reduce_35(val, _values, result) { var self = this; return self.builder.$multi_assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_37', function $$_reduce_37(val, _values, result) { var self = this; return self.builder.$assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_38', function $$_reduce_38(val, _values, result) { var self = this; return self.builder.$op_assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_39', function $$_reduce_39(val, _values, result) { var self = this; return self.builder.$op_assign(self.builder.$index(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3)), val['$[]'](4), val['$[]'](5)) }); $def(self, '$_reduce_40', function $$_reduce_40(val, _values, result) { var self = this; return self.builder.$op_assign(self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2)), val['$[]'](3), val['$[]'](4)) }); $def(self, '$_reduce_41', function $$_reduce_41(val, _values, result) { var self = this; return self.builder.$op_assign(self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2)), val['$[]'](3), val['$[]'](4)) }); $def(self, '$_reduce_42', function $$_reduce_42(val, _values, result) { var self = this, const$ = nil; const$ = self.builder.$const_op_assignable(self.builder.$const_fetch(val['$[]'](0), val['$[]'](1), val['$[]'](2))); return self.builder.$op_assign(const$, val['$[]'](3), val['$[]'](4)); }); $def(self, '$_reduce_43', function $$_reduce_43(val, _values, result) { var self = this; return self.builder.$op_assign(self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2)), val['$[]'](3), val['$[]'](4)) }); $def(self, '$_reduce_44', function $$_reduce_44(val, _values, result) { var $a, $b, $c, self = this, def_t = nil, name_t = nil, ctx = nil; $b = val['$[]'](0), $a = $to_ary($b), (def_t = ($a[0] == null ? nil : $a[0])), ($c = $to_ary(($a[1] == null ? nil : $a[1])), (name_t = ($c[0] == null ? nil : $c[0])), (ctx = ($c[1] == null ? nil : $c[1]))), $b; self.$endless_method_name(name_t); result = self.builder.$def_endless_method(def_t, name_t, val['$[]'](1), val['$[]'](2), val['$[]'](3)); self.$local_pop(); self.current_arg_stack.$pop(); self.context['$in_def='](ctx.$in_def()); return result; }); $def(self, '$_reduce_45', function $$_reduce_45(val, _values, result) { var $a, $b, $c, self = this, def_t = nil, name_t = nil, ctx = nil, rescue_body = nil, method_body = nil; $b = val['$[]'](0), $a = $to_ary($b), (def_t = ($a[0] == null ? nil : $a[0])), ($c = $to_ary(($a[1] == null ? nil : $a[1])), (name_t = ($c[0] == null ? nil : $c[0])), (ctx = ($c[1] == null ? nil : $c[1]))), $b; self.$endless_method_name(name_t); rescue_body = self.builder.$rescue_body(val['$[]'](4), nil, nil, nil, nil, val['$[]'](5)); method_body = self.builder.$begin_body(val['$[]'](3), [rescue_body]); result = self.builder.$def_endless_method(def_t, name_t, val['$[]'](1), val['$[]'](2), method_body); self.$local_pop(); self.current_arg_stack.$pop(); self.context['$in_def='](ctx.$in_def()); return result; }); $def(self, '$_reduce_46', function $$_reduce_46(val, _values, result) { var $a, $b, $c, self = this, def_t = nil, recv = nil, dot_t = nil, name_t = nil, ctx = nil; $b = val['$[]'](0), $a = $to_ary($b), (def_t = ($a[0] == null ? nil : $a[0])), (recv = ($a[1] == null ? nil : $a[1])), (dot_t = ($a[2] == null ? nil : $a[2])), ($c = $to_ary(($a[3] == null ? nil : $a[3])), (name_t = ($c[0] == null ? nil : $c[0])), (ctx = ($c[1] == null ? nil : $c[1]))), $b; self.$endless_method_name(name_t); result = self.builder.$def_endless_singleton(def_t, recv, dot_t, name_t, val['$[]'](1), val['$[]'](2), val['$[]'](3)); self.$local_pop(); self.current_arg_stack.$pop(); self.context['$in_def='](ctx.$in_def()); return result; }); $def(self, '$_reduce_47', function $$_reduce_47(val, _values, result) { var $a, $b, $c, self = this, def_t = nil, recv = nil, dot_t = nil, name_t = nil, ctx = nil, rescue_body = nil, method_body = nil; $b = val['$[]'](0), $a = $to_ary($b), (def_t = ($a[0] == null ? nil : $a[0])), (recv = ($a[1] == null ? nil : $a[1])), (dot_t = ($a[2] == null ? nil : $a[2])), ($c = $to_ary(($a[3] == null ? nil : $a[3])), (name_t = ($c[0] == null ? nil : $c[0])), (ctx = ($c[1] == null ? nil : $c[1]))), $b; self.$endless_method_name(name_t); rescue_body = self.builder.$rescue_body(val['$[]'](4), nil, nil, nil, nil, val['$[]'](5)); method_body = self.builder.$begin_body(val['$[]'](3), [rescue_body]); result = self.builder.$def_endless_singleton(def_t, recv, dot_t, name_t, val['$[]'](1), val['$[]'](2), method_body); self.$local_pop(); self.current_arg_stack.$pop(); self.context['$in_def='](ctx.$in_def()); return result; }); $def(self, '$_reduce_48', function $$_reduce_48(val, _values, result) { var self = this; self.builder.$op_assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return result; }); $def(self, '$_reduce_50', function $$_reduce_50(val, _values, result) { var self = this, rescue_body = nil; rescue_body = self.builder.$rescue_body(val['$[]'](1), nil, nil, nil, nil, val['$[]'](2)); return self.builder.$begin_body(val['$[]'](0), [rescue_body]); }); $def(self, '$_reduce_53', function $$_reduce_53(val, _values, result) { var self = this; return self.builder.$logical_op("and", val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_54', function $$_reduce_54(val, _values, result) { var self = this; return self.builder.$logical_op("or", val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_55', function $$_reduce_55(val, _values, result) { var self = this; return self.builder.$not_op(val['$[]'](0), nil, val['$[]'](2), nil) }); $def(self, '$_reduce_56', function $$_reduce_56(val, _values, result) { var self = this; return self.builder.$not_op(val['$[]'](0), nil, val['$[]'](1), nil) }); $def(self, '$_reduce_57', function $$_reduce_57(val, _values, result) { var self = this; self.lexer['$state=']("expr_beg"); self.lexer['$command_start='](false); self.pattern_variables.$push(); self.pattern_hash_keys.$push(); result = self.context.$in_kwarg(); self.context['$in_kwarg='](true); return result; }); $def(self, '$_reduce_58', function $$_reduce_58(val, _values, result) { var self = this; self.pattern_variables.$pop(); self.pattern_hash_keys.$pop(); self.context['$in_kwarg='](val['$[]'](2)); return self.builder.$match_pattern(val['$[]'](0), val['$[]'](1), val['$[]'](3)); }); $def(self, '$_reduce_59', function $$_reduce_59(val, _values, result) { var self = this; self.lexer['$state=']("expr_beg"); self.lexer['$command_start='](false); self.pattern_variables.$push(); self.pattern_hash_keys.$push(); result = self.context.$in_kwarg(); self.context['$in_kwarg='](true); return result; }); $def(self, '$_reduce_60', function $$_reduce_60(val, _values, result) { var self = this; self.pattern_variables.$pop(); self.pattern_hash_keys.$pop(); self.context['$in_kwarg='](val['$[]'](2)); return self.builder.$match_pattern_p(val['$[]'](0), val['$[]'](1), val['$[]'](3)); }); $def(self, '$_reduce_63', function $$_reduce_63(val, _values, result) { var self = this; self.lexer.$cond().$push(true); return result; }); $def(self, '$_reduce_64', function $$_reduce_64(val, _values, result) { var self = this; self.lexer.$cond().$pop(); return [val['$[]'](1), val['$[]'](2)]; }); $def(self, '$_reduce_65', function $$_reduce_65(val, _values, result) { var self = this; self.$local_push(); self.current_arg_stack.$push(nil); result = [val['$[]'](0), self.context.$dup()]; self.context['$in_def='](true); return result; }); $def(self, '$_reduce_66', function $$_reduce_66(val, _values, result) { return [val['$[]'](0), val['$[]'](1)] }); $def(self, '$_reduce_67', function $$_reduce_67(val, _values, result) { var self = this; self.lexer['$state=']("expr_fname"); self.context['$in_argdef='](true); return result; }); $def(self, '$_reduce_68', function $$_reduce_68(val, _values, result) { return [val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](4)] }); $def(self, '$_reduce_72', function $$_reduce_72(val, _values, result) { var self = this; return self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2), nil, val['$[]'](3), nil) }); $def(self, '$_reduce_73', function $$_reduce_73(val, _values, result) { var self = this; result = self.context.$dup(); self.context['$in_block='](true); return result; }); $def(self, '$_reduce_74', function $$_reduce_74(val, _values, result) { var self = this; self.context['$in_block='](val['$[]'](1).$in_block()); return [val['$[]'](0)].concat($to_a(val['$[]'](2))).concat([val['$[]'](3)]); }); $def(self, '$_reduce_76', function $$_reduce_76(val, _values, result) { var self = this; return self.builder.$call_method(nil, nil, val['$[]'](0), nil, val['$[]'](1), nil) }); $def(self, '$_reduce_77', function $$_reduce_77(val, _values, result) { var $a, $b, self = this, method_call = nil, begin_t = nil, args = nil, body = nil, end_t = nil; method_call = self.builder.$call_method(nil, nil, val['$[]'](0), nil, val['$[]'](1), nil); $b = val['$[]'](2), $a = $to_ary($b), (begin_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), (end_t = ($a[3] == null ? nil : $a[3])), $b; return self.builder.$block(method_call, begin_t, args, body, end_t); }); $def(self, '$_reduce_78', function $$_reduce_78(val, _values, result) { var self = this; return self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2), nil, val['$[]'](3), nil) }); $def(self, '$_reduce_79', function $$_reduce_79(val, _values, result) { var $a, $b, self = this, method_call = nil, begin_t = nil, args = nil, body = nil, end_t = nil; method_call = self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2), nil, val['$[]'](3), nil); $b = val['$[]'](4), $a = $to_ary($b), (begin_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), (end_t = ($a[3] == null ? nil : $a[3])), $b; return self.builder.$block(method_call, begin_t, args, body, end_t); }); $def(self, '$_reduce_80', function $$_reduce_80(val, _values, result) { var self = this; return self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2), nil, val['$[]'](3), nil) }); $def(self, '$_reduce_81', function $$_reduce_81(val, _values, result) { var $a, $b, self = this, method_call = nil, begin_t = nil, args = nil, body = nil, end_t = nil; method_call = self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2), nil, val['$[]'](3), nil); $b = val['$[]'](4), $a = $to_ary($b), (begin_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), (end_t = ($a[3] == null ? nil : $a[3])), $b; return self.builder.$block(method_call, begin_t, args, body, end_t); }); $def(self, '$_reduce_82', function $$_reduce_82(val, _values, result) { var self = this; return self.builder.$keyword_cmd("super", val['$[]'](0), nil, val['$[]'](1), nil) }); $def(self, '$_reduce_83', function $$_reduce_83(val, _values, result) { var self = this; return self.builder.$keyword_cmd("yield", val['$[]'](0), nil, val['$[]'](1), nil) }); $def(self, '$_reduce_84', function $$_reduce_84(val, _values, result) { var self = this; return self.builder.$keyword_cmd("return", val['$[]'](0), nil, val['$[]'](1), nil) }); $def(self, '$_reduce_85', function $$_reduce_85(val, _values, result) { var self = this; return self.builder.$keyword_cmd("break", val['$[]'](0), nil, val['$[]'](1), nil) }); $def(self, '$_reduce_86', function $$_reduce_86(val, _values, result) { var self = this; return self.builder.$keyword_cmd("next", val['$[]'](0), nil, val['$[]'](1), nil) }); $def(self, '$_reduce_87', function $$_reduce_87(val, _values, result) { var self = this; return self.builder.$multi_lhs(nil, val['$[]'](0), nil) }); $def(self, '$_reduce_88', function $$_reduce_88(val, _values, result) { var self = this; return self.builder.$begin(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_89', function $$_reduce_89(val, _values, result) { var self = this; return self.builder.$multi_lhs(nil, val['$[]'](0), nil) }); $def(self, '$_reduce_90', function $$_reduce_90(val, _values, result) { var self = this; return self.builder.$multi_lhs(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_92', function $$_reduce_92(val, _values, result) { return val['$[]'](0).$push(val['$[]'](1)) }); $def(self, '$_reduce_93', function $$_reduce_93(val, _values, result) { var self = this; return val['$[]'](0).$push(self.builder.$splat(val['$[]'](1), val['$[]'](2))) }); $def(self, '$_reduce_94', function $$_reduce_94(val, _values, result) { var self = this; return val['$[]'](0).$push(self.builder.$splat(val['$[]'](1), val['$[]'](2))).$concat(val['$[]'](4)) }); $def(self, '$_reduce_95', function $$_reduce_95(val, _values, result) { var self = this; return val['$[]'](0).$push(self.builder.$splat(val['$[]'](1))) }); $def(self, '$_reduce_96', function $$_reduce_96(val, _values, result) { var self = this; return val['$[]'](0).$push(self.builder.$splat(val['$[]'](1))).$concat(val['$[]'](3)) }); $def(self, '$_reduce_97', function $$_reduce_97(val, _values, result) { var self = this; return [self.builder.$splat(val['$[]'](0), val['$[]'](1))] }); $def(self, '$_reduce_98', function $$_reduce_98(val, _values, result) { var self = this; return [self.builder.$splat(val['$[]'](0), val['$[]'](1))].concat($to_a(val['$[]'](3))) }); $def(self, '$_reduce_99', function $$_reduce_99(val, _values, result) { var self = this; return [self.builder.$splat(val['$[]'](0))] }); $def(self, '$_reduce_100', function $$_reduce_100(val, _values, result) { var self = this; return [self.builder.$splat(val['$[]'](0))].concat($to_a(val['$[]'](2))) }); $def(self, '$_reduce_102', function $$_reduce_102(val, _values, result) { var self = this; return self.builder.$begin(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_103', function $$_reduce_103(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_104', function $$_reduce_104(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](1)) }); $def(self, '$_reduce_105', function $$_reduce_105(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_106', function $$_reduce_106(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_107', function $$_reduce_107(val, _values, result) { var self = this; return self.builder.$assignable(val['$[]'](0)) }); $def(self, '$_reduce_108', function $$_reduce_108(val, _values, result) { var self = this; return self.builder.$assignable(val['$[]'](0)) }); $def(self, '$_reduce_109', function $$_reduce_109(val, _values, result) { var self = this; return self.builder.$index_asgn(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3)) }); $def(self, '$_reduce_110', function $$_reduce_110(val, _values, result) { var self = this; if ($eqeq(val['$[]'](1)['$[]'](0), "anddot")) { self.$diagnostic("error", "csend_in_lhs_of_masgn", nil, val['$[]'](1)) }; return self.builder.$attr_asgn(val['$[]'](0), val['$[]'](1), val['$[]'](2)); }); $def(self, '$_reduce_111', function $$_reduce_111(val, _values, result) { var self = this; return self.builder.$attr_asgn(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_112', function $$_reduce_112(val, _values, result) { var self = this; if ($eqeq(val['$[]'](1)['$[]'](0), "anddot")) { self.$diagnostic("error", "csend_in_lhs_of_masgn", nil, val['$[]'](1)) }; return self.builder.$attr_asgn(val['$[]'](0), val['$[]'](1), val['$[]'](2)); }); $def(self, '$_reduce_113', function $$_reduce_113(val, _values, result) { var self = this; return self.builder.$assignable(self.builder.$const_fetch(val['$[]'](0), val['$[]'](1), val['$[]'](2))) }); $def(self, '$_reduce_114', function $$_reduce_114(val, _values, result) { var self = this; return self.builder.$assignable(self.builder.$const_global(val['$[]'](0), val['$[]'](1))) }); $def(self, '$_reduce_115', function $$_reduce_115(val, _values, result) { var self = this; return self.builder.$assignable(val['$[]'](0)) }); $def(self, '$_reduce_116', function $$_reduce_116(val, _values, result) { var self = this; return self.builder.$assignable(val['$[]'](0)) }); $def(self, '$_reduce_117', function $$_reduce_117(val, _values, result) { var self = this; return self.builder.$assignable(val['$[]'](0)) }); $def(self, '$_reduce_118', function $$_reduce_118(val, _values, result) { var self = this; return self.builder.$index_asgn(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3)) }); $def(self, '$_reduce_119', function $$_reduce_119(val, _values, result) { var self = this; return self.builder.$attr_asgn(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_120', function $$_reduce_120(val, _values, result) { var self = this; return self.builder.$attr_asgn(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_121', function $$_reduce_121(val, _values, result) { var self = this; return self.builder.$attr_asgn(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_122', function $$_reduce_122(val, _values, result) { var self = this; return self.builder.$assignable(self.builder.$const_fetch(val['$[]'](0), val['$[]'](1), val['$[]'](2))) }); $def(self, '$_reduce_123', function $$_reduce_123(val, _values, result) { var self = this; return self.builder.$assignable(self.builder.$const_global(val['$[]'](0), val['$[]'](1))) }); $def(self, '$_reduce_124', function $$_reduce_124(val, _values, result) { var self = this; return self.builder.$assignable(val['$[]'](0)) }); $def(self, '$_reduce_125', function $$_reduce_125(val, _values, result) { var self = this; self.$diagnostic("error", "module_name_const", nil, val['$[]'](0)); return result; }); $def(self, '$_reduce_127', function $$_reduce_127(val, _values, result) { var self = this; return self.builder.$const_global(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_128', function $$_reduce_128(val, _values, result) { var self = this; return self.builder.$const(val['$[]'](0)) }); $def(self, '$_reduce_129', function $$_reduce_129(val, _values, result) { var self = this; return self.builder.$const_fetch(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_135', function $$_reduce_135(val, _values, result) { var self = this; return self.builder.$symbol_internal(val['$[]'](0)) }); $def(self, '$_reduce_137', function $$_reduce_137(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_138', function $$_reduce_138(val, _values, result) { var self = this; self.lexer['$state=']("expr_fname"); return result; }); $def(self, '$_reduce_139', function $$_reduce_139(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](3)) }); $def(self, '$_reduce_211', function $$_reduce_211(val, _values, result) { var self = this; return self.builder.$assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_212', function $$_reduce_212(val, _values, result) { var self = this; return self.builder.$op_assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_213', function $$_reduce_213(val, _values, result) { var self = this; return self.builder.$op_assign(self.builder.$index(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3)), val['$[]'](4), val['$[]'](5)) }); $def(self, '$_reduce_214', function $$_reduce_214(val, _values, result) { var self = this; return self.builder.$op_assign(self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2)), val['$[]'](3), val['$[]'](4)) }); $def(self, '$_reduce_215', function $$_reduce_215(val, _values, result) { var self = this; return self.builder.$op_assign(self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2)), val['$[]'](3), val['$[]'](4)) }); $def(self, '$_reduce_216', function $$_reduce_216(val, _values, result) { var self = this; return self.builder.$op_assign(self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2)), val['$[]'](3), val['$[]'](4)) }); $def(self, '$_reduce_217', function $$_reduce_217(val, _values, result) { var self = this, const$ = nil; const$ = self.builder.$const_op_assignable(self.builder.$const_fetch(val['$[]'](0), val['$[]'](1), val['$[]'](2))); return self.builder.$op_assign(const$, val['$[]'](3), val['$[]'](4)); }); $def(self, '$_reduce_218', function $$_reduce_218(val, _values, result) { var self = this, const$ = nil; const$ = self.builder.$const_op_assignable(self.builder.$const_global(val['$[]'](0), val['$[]'](1))); return self.builder.$op_assign(const$, val['$[]'](2), val['$[]'](3)); }); $def(self, '$_reduce_219', function $$_reduce_219(val, _values, result) { var self = this; return self.builder.$op_assign(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_220', function $$_reduce_220(val, _values, result) { var self = this; return self.builder.$range_inclusive(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_221', function $$_reduce_221(val, _values, result) { var self = this; return self.builder.$range_exclusive(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_222', function $$_reduce_222(val, _values, result) { var self = this; return self.builder.$range_inclusive(val['$[]'](0), val['$[]'](1), nil) }); $def(self, '$_reduce_223', function $$_reduce_223(val, _values, result) { var self = this; return self.builder.$range_exclusive(val['$[]'](0), val['$[]'](1), nil) }); $def(self, '$_reduce_224', function $$_reduce_224(val, _values, result) { var self = this; return self.builder.$range_inclusive(nil, val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_225', function $$_reduce_225(val, _values, result) { var self = this; return self.builder.$range_exclusive(nil, val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_226', function $$_reduce_226(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_227', function $$_reduce_227(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_228', function $$_reduce_228(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_229', function $$_reduce_229(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_230', function $$_reduce_230(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_231', function $$_reduce_231(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_232', function $$_reduce_232(val, _values, result) { var self = this; return self.builder.$unary_op(val['$[]'](0), self.builder.$binary_op(val['$[]'](1), val['$[]'](2), val['$[]'](3))) }); $def(self, '$_reduce_233', function $$_reduce_233(val, _values, result) { var self = this; return self.builder.$unary_op(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_234', function $$_reduce_234(val, _values, result) { var self = this; return self.builder.$unary_op(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_235', function $$_reduce_235(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_236', function $$_reduce_236(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_237', function $$_reduce_237(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_238', function $$_reduce_238(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_240', function $$_reduce_240(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_241', function $$_reduce_241(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_242', function $$_reduce_242(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_243', function $$_reduce_243(val, _values, result) { var self = this; return self.builder.$match_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_244', function $$_reduce_244(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_245', function $$_reduce_245(val, _values, result) { var self = this; return self.builder.$not_op(val['$[]'](0), nil, val['$[]'](1), nil) }); $def(self, '$_reduce_246', function $$_reduce_246(val, _values, result) { var self = this; return self.builder.$unary_op(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_247', function $$_reduce_247(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_248', function $$_reduce_248(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_249', function $$_reduce_249(val, _values, result) { var self = this; return self.builder.$logical_op("and", val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_250', function $$_reduce_250(val, _values, result) { var self = this; return self.builder.$logical_op("or", val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_251', function $$_reduce_251(val, _values, result) { var self = this; self.context['$in_defined='](true); return result; }); $def(self, '$_reduce_252', function $$_reduce_252(val, _values, result) { var self = this; self.context['$in_defined='](false); return self.builder.$keyword_cmd("defined?", val['$[]'](0), nil, [val['$[]'](3)], nil); }); $def(self, '$_reduce_253', function $$_reduce_253(val, _values, result) { var self = this; return self.builder.$ternary(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](4), val['$[]'](5)) }); $def(self, '$_reduce_254', function $$_reduce_254(val, _values, result) { var $a, $b, $c, self = this, def_t = nil, name_t = nil, ctx = nil; $b = val['$[]'](0), $a = $to_ary($b), (def_t = ($a[0] == null ? nil : $a[0])), ($c = $to_ary(($a[1] == null ? nil : $a[1])), (name_t = ($c[0] == null ? nil : $c[0])), (ctx = ($c[1] == null ? nil : $c[1]))), $b; self.$endless_method_name(name_t); result = self.builder.$def_endless_method(def_t, name_t, val['$[]'](1), val['$[]'](2), val['$[]'](3)); self.$local_pop(); self.current_arg_stack.$pop(); self.context['$in_def='](ctx.$in_def()); return result; }); $def(self, '$_reduce_255', function $$_reduce_255(val, _values, result) { var $a, $b, $c, self = this, def_t = nil, name_t = nil, ctx = nil, rescue_body = nil, method_body = nil; $b = val['$[]'](0), $a = $to_ary($b), (def_t = ($a[0] == null ? nil : $a[0])), ($c = $to_ary(($a[1] == null ? nil : $a[1])), (name_t = ($c[0] == null ? nil : $c[0])), (ctx = ($c[1] == null ? nil : $c[1]))), $b; self.$endless_method_name(name_t); rescue_body = self.builder.$rescue_body(val['$[]'](4), nil, nil, nil, nil, val['$[]'](5)); method_body = self.builder.$begin_body(val['$[]'](3), [rescue_body]); result = self.builder.$def_endless_method(def_t, name_t, val['$[]'](1), val['$[]'](2), method_body); self.$local_pop(); self.current_arg_stack.$pop(); self.context['$in_def='](ctx.$in_def()); return result; }); $def(self, '$_reduce_256', function $$_reduce_256(val, _values, result) { var $a, $b, $c, self = this, def_t = nil, recv = nil, dot_t = nil, name_t = nil, ctx = nil; $b = val['$[]'](0), $a = $to_ary($b), (def_t = ($a[0] == null ? nil : $a[0])), (recv = ($a[1] == null ? nil : $a[1])), (dot_t = ($a[2] == null ? nil : $a[2])), ($c = $to_ary(($a[3] == null ? nil : $a[3])), (name_t = ($c[0] == null ? nil : $c[0])), (ctx = ($c[1] == null ? nil : $c[1]))), $b; self.$endless_method_name(name_t); result = self.builder.$def_endless_singleton(def_t, recv, dot_t, name_t, val['$[]'](1), val['$[]'](2), val['$[]'](3)); self.$local_pop(); self.current_arg_stack.$pop(); self.context['$in_def='](ctx.$in_def()); return result; }); $def(self, '$_reduce_257', function $$_reduce_257(val, _values, result) { var $a, $b, $c, self = this, def_t = nil, recv = nil, dot_t = nil, name_t = nil, ctx = nil, rescue_body = nil, method_body = nil; $b = val['$[]'](0), $a = $to_ary($b), (def_t = ($a[0] == null ? nil : $a[0])), (recv = ($a[1] == null ? nil : $a[1])), (dot_t = ($a[2] == null ? nil : $a[2])), ($c = $to_ary(($a[3] == null ? nil : $a[3])), (name_t = ($c[0] == null ? nil : $c[0])), (ctx = ($c[1] == null ? nil : $c[1]))), $b; self.$endless_method_name(name_t); rescue_body = self.builder.$rescue_body(val['$[]'](4), nil, nil, nil, nil, val['$[]'](5)); method_body = self.builder.$begin_body(val['$[]'](3), [rescue_body]); result = self.builder.$def_endless_singleton(def_t, recv, dot_t, name_t, val['$[]'](1), val['$[]'](2), method_body); self.$local_pop(); self.current_arg_stack.$pop(); self.context['$in_def='](ctx.$in_def()); return result; }); $def(self, '$_reduce_263', function $$_reduce_263(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_264', function $$_reduce_264(val, _values, result) { var self = this; return self.builder.$binary_op(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_268', function $$_reduce_268(val, _values, result) { var self = this; return val['$[]'](0)['$<<'](self.builder.$associate(nil, val['$[]'](2), nil)) }); $def(self, '$_reduce_269', function $$_reduce_269(val, _values, result) { var self = this; return [self.builder.$associate(nil, val['$[]'](0), nil)] }); $def(self, '$_reduce_271', function $$_reduce_271(val, _values, result) { var self = this, rescue_body = nil; rescue_body = self.builder.$rescue_body(val['$[]'](1), nil, nil, nil, nil, val['$[]'](2)); return self.builder.$begin_body(val['$[]'](0), [rescue_body]); }); $def(self, '$_reduce_272', function $$_reduce_272(val, _values, result) { return val }); $def(self, '$_reduce_273', function $$_reduce_273(val, _values, result) { var self = this; if (!$truthy(self.static_env['$declared_forward_args?']())) { self.$diagnostic("error", "unexpected_token", (new Map([["token", "tBDOT3"]])), val['$[]'](3)) }; return [val['$[]'](0), [].concat($to_a(val['$[]'](1))).concat([self.builder.$forwarded_args(val['$[]'](3))]), val['$[]'](4)]; }); $def(self, '$_reduce_274', function $$_reduce_274(val, _values, result) { var self = this; if (!$truthy(self.static_env['$declared_forward_args?']())) { self.$diagnostic("error", "unexpected_token", (new Map([["token", "tBDOT3"]])), val['$[]'](1)) }; return [val['$[]'](0), [self.builder.$forwarded_args(val['$[]'](1))], val['$[]'](2)]; }); $def(self, '$_reduce_275', function $$_reduce_275(val, _values, result) { return [nil, [], nil] }); $def(self, '$_reduce_277', function $$_reduce_277(val, _values, result) { return [] }); $def(self, '$_reduce_280', function $$_reduce_280(val, _values, result) { var self = this; return val['$[]'](0)['$<<'](self.builder.$associate(nil, val['$[]'](2), nil)) }); $def(self, '$_reduce_281', function $$_reduce_281(val, _values, result) { var self = this; return [self.builder.$associate(nil, val['$[]'](0), nil)] }); $def(self, '$_reduce_282', function $$_reduce_282(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_283', function $$_reduce_283(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](1)) }); $def(self, '$_reduce_284', function $$_reduce_284(val, _values, result) { var self = this; result = [self.builder.$associate(nil, val['$[]'](0), nil)]; result.$concat(val['$[]'](1)); return result; }); $def(self, '$_reduce_285', function $$_reduce_285(val, _values, result) { var self = this, assocs = nil; assocs = self.builder.$associate(nil, val['$[]'](2), nil); result = val['$[]'](0)['$<<'](assocs); result.$concat(val['$[]'](3)); return result; }); $def(self, '$_reduce_286', function $$_reduce_286(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_287', function $$_reduce_287(val, _values, result) { var self = this, last_token = nil, lookahead = nil, $ret_or_1 = nil, top = nil; last_token = self.last_token['$[]'](0); lookahead = ($truthy(($ret_or_1 = last_token['$==']("tLBRACK"))) ? ($ret_or_1) : (last_token['$==']("tLPAREN_ARG"))); if ($truthy(lookahead)) { top = self.lexer.$cmdarg().$pop(); self.lexer.$cmdarg().$push(true); self.lexer.$cmdarg().$push(top); } else { self.lexer.$cmdarg().$push(true) }; return result; }); $def(self, '$_reduce_288', function $$_reduce_288(val, _values, result) { var self = this, last_token = nil, lookahead = nil, top = nil; last_token = self.last_token['$[]'](0); lookahead = last_token['$==']("tLBRACE_ARG"); if ($truthy(lookahead)) { top = self.lexer.$cmdarg().$pop(); self.lexer.$cmdarg().$pop(); self.lexer.$cmdarg().$push(top); } else { self.lexer.$cmdarg().$pop() }; return val['$[]'](1); }); $def(self, '$_reduce_289', function $$_reduce_289(val, _values, result) { var self = this; return self.builder.$block_pass(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_290', function $$_reduce_290(val, _values, result) { var self = this; if ($not(self.static_env['$declared_anonymous_blockarg?']())) { self.$diagnostic("error", "no_anonymous_blockarg", nil, val['$[]'](0)) }; return self.builder.$block_pass(val['$[]'](0), nil); }); $def(self, '$_reduce_291', function $$_reduce_291(val, _values, result) { return [val['$[]'](1)] }); $def(self, '$_reduce_292', function $$_reduce_292(val, _values, result) { return [] }); $def(self, '$_reduce_293', function $$_reduce_293(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_294', function $$_reduce_294(val, _values, result) { var self = this; return [self.builder.$splat(val['$[]'](0), val['$[]'](1))] }); $def(self, '$_reduce_295', function $$_reduce_295(val, _values, result) { var self = this; if ($not(self.static_env['$declared_anonymous_restarg?']())) { self.$diagnostic("error", "no_anonymous_restarg", nil, val['$[]'](0)) }; return [self.builder.$forwarded_restarg(val['$[]'](0))]; }); $def(self, '$_reduce_296', function $$_reduce_296(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_297', function $$_reduce_297(val, _values, result) { var self = this; return val['$[]'](0)['$<<'](self.builder.$splat(val['$[]'](2), val['$[]'](3))) }); $def(self, '$_reduce_298', function $$_reduce_298(val, _values, result) { var self = this; if ($not(self.static_env['$declared_anonymous_restarg?']())) { self.$diagnostic("error", "no_anonymous_restarg", nil, val['$[]'](2)) }; return val['$[]'](0)['$<<'](self.builder.$forwarded_restarg(val['$[]'](2))); }); $def(self, '$_reduce_299', function $$_reduce_299(val, _values, result) { var self = this; return self.builder.$array(nil, val['$[]'](0), nil) }); $def(self, '$_reduce_301', function $$_reduce_301(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_302', function $$_reduce_302(val, _values, result) { var self = this; return val['$[]'](0)['$<<'](self.builder.$splat(val['$[]'](2), val['$[]'](3))) }); $def(self, '$_reduce_303', function $$_reduce_303(val, _values, result) { var self = this; return [self.builder.$splat(val['$[]'](0), val['$[]'](1))] }); $def(self, '$_reduce_314', function $$_reduce_314(val, _values, result) { var self = this; return self.builder.$call_method(nil, nil, val['$[]'](0)) }); $def(self, '$_reduce_315', function $$_reduce_315(val, _values, result) { var self = this; self.lexer.$cmdarg().$push(false); return result; }); $def(self, '$_reduce_316', function $$_reduce_316(val, _values, result) { var self = this; self.lexer.$cmdarg().$pop(); return self.builder.$begin_keyword(val['$[]'](0), val['$[]'](2), val['$[]'](3)); }); $def(self, '$_reduce_317', function $$_reduce_317(val, _values, result) { var self = this; self.lexer['$state=']("expr_endarg"); return result; }); $def(self, '$_reduce_318', function $$_reduce_318(val, _values, result) { var self = this; return self.builder.$begin(val['$[]'](0), val['$[]'](1), val['$[]'](3)) }); $def(self, '$_reduce_319', function $$_reduce_319(val, _values, result) { var self = this; self.lexer['$state=']("expr_endarg"); return result; }); $def(self, '$_reduce_320', function $$_reduce_320(val, _values, result) { var self = this; return self.builder.$begin(val['$[]'](0), nil, val['$[]'](3)) }); $def(self, '$_reduce_321', function $$_reduce_321(val, _values, result) { var self = this; return self.builder.$begin(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_322', function $$_reduce_322(val, _values, result) { var self = this; return self.builder.$const_fetch(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_323', function $$_reduce_323(val, _values, result) { var self = this; return self.builder.$const_global(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_324', function $$_reduce_324(val, _values, result) { var self = this; return self.builder.$array(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_325', function $$_reduce_325(val, _values, result) { var self = this; return self.builder.$associate(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_326', function $$_reduce_326(val, _values, result) { var self = this; return self.builder.$keyword_cmd("return", val['$[]'](0)) }); $def(self, '$_reduce_327', function $$_reduce_327(val, _values, result) { var self = this; return self.builder.$keyword_cmd("yield", val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3)) }); $def(self, '$_reduce_328', function $$_reduce_328(val, _values, result) { var self = this; return self.builder.$keyword_cmd("yield", val['$[]'](0), val['$[]'](1), [], val['$[]'](2)) }); $def(self, '$_reduce_329', function $$_reduce_329(val, _values, result) { var self = this; return self.builder.$keyword_cmd("yield", val['$[]'](0)) }); $def(self, '$_reduce_330', function $$_reduce_330(val, _values, result) { var self = this; self.context['$in_defined='](true); return result; }); $def(self, '$_reduce_331', function $$_reduce_331(val, _values, result) { var self = this; self.context['$in_defined='](false); return self.builder.$keyword_cmd("defined?", val['$[]'](0), val['$[]'](2), [val['$[]'](4)], val['$[]'](5)); }); $def(self, '$_reduce_332', function $$_reduce_332(val, _values, result) { var self = this; return self.builder.$not_op(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3)) }); $def(self, '$_reduce_333', function $$_reduce_333(val, _values, result) { var self = this; return self.builder.$not_op(val['$[]'](0), val['$[]'](1), nil, val['$[]'](2)) }); $def(self, '$_reduce_334', function $$_reduce_334(val, _values, result) { var $a, $b, self = this, method_call = nil, begin_t = nil, args = nil, body = nil, end_t = nil; method_call = self.builder.$call_method(nil, nil, val['$[]'](0)); $b = val['$[]'](1), $a = $to_ary($b), (begin_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), (end_t = ($a[3] == null ? nil : $a[3])), $b; return self.builder.$block(method_call, begin_t, args, body, end_t); }); $def(self, '$_reduce_336', function $$_reduce_336(val, _values, result) { var $a, $b, self = this, begin_t = nil, args = nil, body = nil, end_t = nil; $b = val['$[]'](1), $a = $to_ary($b), (begin_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), (end_t = ($a[3] == null ? nil : $a[3])), $b; return self.builder.$block(val['$[]'](0), begin_t, args, body, end_t); }); $def(self, '$_reduce_338', function $$_reduce_338(val, _values, result) { var $a, $b, self = this, else_t = nil, else_ = nil; $b = val['$[]'](4), $a = $to_ary($b), (else_t = ($a[0] == null ? nil : $a[0])), (else_ = ($a[1] == null ? nil : $a[1])), $b; return self.builder.$condition(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3), else_t, else_, val['$[]'](5)); }); $def(self, '$_reduce_339', function $$_reduce_339(val, _values, result) { var $a, $b, self = this, else_t = nil, else_ = nil; $b = val['$[]'](4), $a = $to_ary($b), (else_t = ($a[0] == null ? nil : $a[0])), (else_ = ($a[1] == null ? nil : $a[1])), $b; return self.builder.$condition(val['$[]'](0), val['$[]'](1), val['$[]'](2), else_, else_t, val['$[]'](3), val['$[]'](5)); }); $def(self, '$_reduce_340', function $$_reduce_340(val, _values, result) { var self = this; return $send(self.builder, 'loop', ["while", val['$[]'](0)].concat($to_a(val['$[]'](1))).concat([val['$[]'](2), val['$[]'](3)])) }); $def(self, '$_reduce_341', function $$_reduce_341(val, _values, result) { var self = this; return $send(self.builder, 'loop', ["until", val['$[]'](0)].concat($to_a(val['$[]'](1))).concat([val['$[]'](2), val['$[]'](3)])) }); $def(self, '$_reduce_342', function $$_reduce_342(val, _values, result) { var $a, $b, $c, self = this, when_bodies = nil, else_t = nil, else_body = nil; $a = [].concat($to_a(val['$[]'](3))), $b = $a.length - 1, $b = ($b < 0) ? 0 : $b, (when_bodies = $slice($a, 0, $b)), ($c = $to_ary(($a[$b] == null ? nil : $a[$b])), (else_t = ($c[0] == null ? nil : $c[0])), (else_body = ($c[1] == null ? nil : $c[1]))), $a; return self.builder.$case(val['$[]'](0), val['$[]'](1), when_bodies, else_t, else_body, val['$[]'](4)); }); $def(self, '$_reduce_343', function $$_reduce_343(val, _values, result) { var $a, $b, $c, self = this, when_bodies = nil, else_t = nil, else_body = nil; $a = [].concat($to_a(val['$[]'](2))), $b = $a.length - 1, $b = ($b < 0) ? 0 : $b, (when_bodies = $slice($a, 0, $b)), ($c = $to_ary(($a[$b] == null ? nil : $a[$b])), (else_t = ($c[0] == null ? nil : $c[0])), (else_body = ($c[1] == null ? nil : $c[1]))), $a; return self.builder.$case(val['$[]'](0), nil, when_bodies, else_t, else_body, val['$[]'](3)); }); $def(self, '$_reduce_344', function $$_reduce_344(val, _values, result) { var $a, $b, $c, self = this, in_bodies = nil, else_t = nil, else_body = nil; $a = [].concat($to_a(val['$[]'](3))), $b = $a.length - 1, $b = ($b < 0) ? 0 : $b, (in_bodies = $slice($a, 0, $b)), ($c = $to_ary(($a[$b] == null ? nil : $a[$b])), (else_t = ($c[0] == null ? nil : $c[0])), (else_body = ($c[1] == null ? nil : $c[1]))), $a; return self.builder.$case_match(val['$[]'](0), val['$[]'](1), in_bodies, else_t, else_body, val['$[]'](4)); }); $def(self, '$_reduce_345', function $$_reduce_345(val, _values, result) { var self = this; return $send(self.builder, 'for', [val['$[]'](0), val['$[]'](1), val['$[]'](2)].concat($to_a(val['$[]'](3))).concat([val['$[]'](4), val['$[]'](5)])) }); $def(self, '$_reduce_346', function $$_reduce_346(val, _values, result) { var self = this; self.context['$in_class='](true); self.$local_push(); return result; }); $def(self, '$_reduce_347', function $$_reduce_347(val, _values, result) { var $a, $b, self = this, k_class = nil, ctx = nil, lt_t = nil, superclass = nil; $b = val['$[]'](0), $a = $to_ary($b), (k_class = ($a[0] == null ? nil : $a[0])), (ctx = ($a[1] == null ? nil : $a[1])), $b; if ($truthy(self.context.$in_def())) { self.$diagnostic("error", "class_in_def", nil, k_class) }; $b = val['$[]'](2), $a = $to_ary($b), (lt_t = ($a[0] == null ? nil : $a[0])), (superclass = ($a[1] == null ? nil : $a[1])), $b; result = self.builder.$def_class(k_class, val['$[]'](1), lt_t, superclass, val['$[]'](4), val['$[]'](5)); self.$local_pop(); self.context['$in_class='](ctx.$in_class()); return result; }); $def(self, '$_reduce_348', function $$_reduce_348(val, _values, result) { var self = this; self.context['$in_def='](false); self.context['$in_class='](false); self.$local_push(); return result; }); $def(self, '$_reduce_349', function $$_reduce_349(val, _values, result) { var $a, $b, self = this, k_class = nil, ctx = nil; $b = val['$[]'](0), $a = $to_ary($b), (k_class = ($a[0] == null ? nil : $a[0])), (ctx = ($a[1] == null ? nil : $a[1])), $b; result = self.builder.$def_sclass(k_class, val['$[]'](1), val['$[]'](2), val['$[]'](5), val['$[]'](6)); self.$local_pop(); self.context['$in_def='](ctx.$in_def()); self.context['$in_class='](ctx.$in_class()); return result; }); $def(self, '$_reduce_350', function $$_reduce_350(val, _values, result) { var self = this; self.context['$in_class='](true); self.$local_push(); return result; }); $def(self, '$_reduce_351', function $$_reduce_351(val, _values, result) { var $a, $b, self = this, k_mod = nil, ctx = nil; $b = val['$[]'](0), $a = $to_ary($b), (k_mod = ($a[0] == null ? nil : $a[0])), (ctx = ($a[1] == null ? nil : $a[1])), $b; if ($truthy(self.context.$in_def())) { self.$diagnostic("error", "module_in_def", nil, k_mod) }; result = self.builder.$def_module(k_mod, val['$[]'](1), val['$[]'](3), val['$[]'](4)); self.$local_pop(); self.context['$in_class='](ctx.$in_class()); return result; }); $def(self, '$_reduce_352', function $$_reduce_352(val, _values, result) { var $a, $b, $c, self = this, def_t = nil, name_t = nil, ctx = nil; $b = val['$[]'](0), $a = $to_ary($b), (def_t = ($a[0] == null ? nil : $a[0])), ($c = $to_ary(($a[1] == null ? nil : $a[1])), (name_t = ($c[0] == null ? nil : $c[0])), (ctx = ($c[1] == null ? nil : $c[1]))), $b; result = self.builder.$def_method(def_t, name_t, val['$[]'](1), val['$[]'](2), val['$[]'](3)); self.$local_pop(); self.current_arg_stack.$pop(); self.context['$in_def='](ctx.$in_def()); return result; }); $def(self, '$_reduce_353', function $$_reduce_353(val, _values, result) { var $a, $b, $c, self = this, def_t = nil, recv = nil, dot_t = nil, name_t = nil, ctx = nil; $b = val['$[]'](0), $a = $to_ary($b), (def_t = ($a[0] == null ? nil : $a[0])), (recv = ($a[1] == null ? nil : $a[1])), (dot_t = ($a[2] == null ? nil : $a[2])), ($c = $to_ary(($a[3] == null ? nil : $a[3])), (name_t = ($c[0] == null ? nil : $c[0])), (ctx = ($c[1] == null ? nil : $c[1]))), $b; result = self.builder.$def_singleton(def_t, recv, dot_t, name_t, val['$[]'](1), val['$[]'](2), val['$[]'](3)); self.$local_pop(); self.current_arg_stack.$pop(); self.context['$in_def='](ctx.$in_def()); return result; }); $def(self, '$_reduce_354', function $$_reduce_354(val, _values, result) { var self = this; return self.builder.$keyword_cmd("break", val['$[]'](0)) }); $def(self, '$_reduce_355', function $$_reduce_355(val, _values, result) { var self = this; return self.builder.$keyword_cmd("next", val['$[]'](0)) }); $def(self, '$_reduce_356', function $$_reduce_356(val, _values, result) { var self = this; return self.builder.$keyword_cmd("redo", val['$[]'](0)) }); $def(self, '$_reduce_357', function $$_reduce_357(val, _values, result) { var self = this; return self.builder.$keyword_cmd("retry", val['$[]'](0)) }); $def(self, '$_reduce_359', function $$_reduce_359(val, _values, result) { var self = this; return [val['$[]'](0), self.context.$dup()] }); $def(self, '$_reduce_360', function $$_reduce_360(val, _values, result) { var self = this; return [val['$[]'](0), self.context.$dup()] }); $def(self, '$_reduce_361', function $$_reduce_361(val, _values, result) { var self = this; result = val['$[]'](0); self.context['$in_argdef='](true); return result; }); $def(self, '$_reduce_362', function $$_reduce_362(val, _values, result) { var self = this, $ret_or_1 = nil; if ((($truthy(self.context.$in_class()) && ($not(self.context.$in_def()))) && ($not(($truthy(($ret_or_1 = self.$context().$in_block())) ? ($ret_or_1) : (self.$context().$in_lambda())))))) { self.$diagnostic("error", "invalid_return", nil, val['$[]'](0)) }; return result; }); $def(self, '$_reduce_365', function $$_reduce_365(val, _values, result) { return val['$[]'](1) }); $def(self, '$_reduce_369', function $$_reduce_369(val, _values, result) { var $a, $b, self = this, else_t = nil, else_ = nil; $b = val['$[]'](4), $a = $to_ary($b), (else_t = ($a[0] == null ? nil : $a[0])), (else_ = ($a[1] == null ? nil : $a[1])), $b; return [val['$[]'](0), self.builder.$condition(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3), else_t, else_, nil)]; }); $def(self, '$_reduce_371', function $$_reduce_371(val, _values, result) { return val }); $def(self, '$_reduce_374', function $$_reduce_374(val, _values, result) { var self = this; return self.builder.$arg(val['$[]'](0)) }); $def(self, '$_reduce_375', function $$_reduce_375(val, _values, result) { var self = this; return self.builder.$multi_lhs(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_376', function $$_reduce_376(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_377', function $$_reduce_377(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_379', function $$_reduce_379(val, _values, result) { return val['$[]'](0).$push(val['$[]'](2)) }); $def(self, '$_reduce_380', function $$_reduce_380(val, _values, result) { return val['$[]'](0).$push(val['$[]'](2)).$concat(val['$[]'](4)) }); $def(self, '$_reduce_381', function $$_reduce_381(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_382', function $$_reduce_382(val, _values, result) { return [val['$[]'](0)].concat($to_a(val['$[]'](2))) }); $def(self, '$_reduce_383', function $$_reduce_383(val, _values, result) { var self = this; return self.builder.$restarg(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_384', function $$_reduce_384(val, _values, result) { var self = this; return self.builder.$restarg(val['$[]'](0)) }); $def(self, '$_reduce_387', function $$_reduce_387(val, _values, result) { var self = this; self.context['$in_argdef='](false); return result; }); $def(self, '$_reduce_388', function $$_reduce_388(val, _values, result) { return val['$[]'](1) }); $def(self, '$_reduce_389', function $$_reduce_389(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_390', function $$_reduce_390(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](1)) }); $def(self, '$_reduce_391', function $$_reduce_391(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](1)) }); $def(self, '$_reduce_392', function $$_reduce_392(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_393', function $$_reduce_393(val, _values, result) { return val['$[]'](1) }); $def(self, '$_reduce_394', function $$_reduce_394(val, _values, result) { return [] }); $def(self, '$_reduce_396', function $$_reduce_396(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](4)).$concat(val['$[]'](5)) }); $def(self, '$_reduce_397', function $$_reduce_397(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](4)).$concat(val['$[]'](6)).$concat(val['$[]'](7)) }); $def(self, '$_reduce_398', function $$_reduce_398(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_399', function $$_reduce_399(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](4)).$concat(val['$[]'](5)) }); $def(self, '$_reduce_400', function $$_reduce_400(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_402', function $$_reduce_402(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](4)).$concat(val['$[]'](5)) }); $def(self, '$_reduce_403', function $$_reduce_403(val, _values, result) { var self = this; if (($truthy(val['$[]'](1)['$empty?']()) && ($eqeq(val['$[]'](0).$size(), 1)))) { result = [self.builder.$procarg0(val['$[]'](0)['$[]'](0))] } else { result = val['$[]'](0).$concat(val['$[]'](1)) }; return result; }); $def(self, '$_reduce_404', function $$_reduce_404(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_405', function $$_reduce_405(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](4)).$concat(val['$[]'](5)) }); $def(self, '$_reduce_406', function $$_reduce_406(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](1)) }); $def(self, '$_reduce_407', function $$_reduce_407(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_408', function $$_reduce_408(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](1)) }); $def(self, '$_reduce_409', function $$_reduce_409(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_411', function $$_reduce_411(val, _values, result) { var self = this; return self.builder.$args(nil, [], nil) }); $def(self, '$_reduce_412', function $$_reduce_412(val, _values, result) { var self = this; self.lexer['$state=']("expr_value"); return result; }); $def(self, '$_reduce_413', function $$_reduce_413(val, _values, result) { var self = this; self.max_numparam_stack['$has_ordinary_params!'](); self.current_arg_stack.$set(nil); self.context['$in_argdef='](false); return self.builder.$args(val['$[]'](0), val['$[]'](1), val['$[]'](2)); }); $def(self, '$_reduce_414', function $$_reduce_414(val, _values, result) { var self = this; self.max_numparam_stack['$has_ordinary_params!'](); self.current_arg_stack.$set(nil); self.context['$in_argdef='](false); return self.builder.$args(val['$[]'](0), val['$[]'](1).$concat(val['$[]'](2)), val['$[]'](3)); }); $def(self, '$_reduce_415', function $$_reduce_415(val, _values, result) { return [] }); $def(self, '$_reduce_416', function $$_reduce_416(val, _values, result) { return val['$[]'](2) }); $def(self, '$_reduce_417', function $$_reduce_417(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_418', function $$_reduce_418(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_419', function $$_reduce_419(val, _values, result) { var self = this; self.static_env.$declare(val['$[]'](0)['$[]'](0)); return self.builder.$shadowarg(val['$[]'](0)); }); $def(self, '$_reduce_421', function $$_reduce_421(val, _values, result) { var self = this; self.static_env.$extend_dynamic(); self.max_numparam_stack.$push((new Map([["static", false]]))); result = self.context.$dup(); self.context['$in_lambda='](true); return result; }); $def(self, '$_reduce_422', function $$_reduce_422(val, _values, result) { var self = this; self.lexer.$cmdarg().$push(false); return result; }); $def(self, '$_reduce_423', function $$_reduce_423(val, _values, result) { var $a, $b, self = this, lambda_call = nil, args = nil, begin_t = nil, body = nil, end_t = nil; lambda_call = self.builder.$call_lambda(val['$[]'](0)); args = ($truthy(self.max_numparam_stack['$has_numparams?']()) ? (self.builder.$numargs(self.max_numparam_stack.$top())) : (val['$[]'](2))); $b = val['$[]'](4), $a = $to_ary($b), (begin_t = ($a[0] == null ? nil : $a[0])), (body = ($a[1] == null ? nil : $a[1])), (end_t = ($a[2] == null ? nil : $a[2])), $b; self.max_numparam_stack.$pop(); self.static_env.$unextend(); self.lexer.$cmdarg().$pop(); self.context['$in_lambda='](val['$[]'](1).$in_lambda()); return self.builder.$block(lambda_call, begin_t, args, body, end_t); }); $def(self, '$_reduce_424', function $$_reduce_424(val, _values, result) { var self = this; self.context['$in_argdef='](false); self.max_numparam_stack['$has_ordinary_params!'](); return self.builder.$args(val['$[]'](0), val['$[]'](1).$concat(val['$[]'](2)), val['$[]'](3)); }); $def(self, '$_reduce_425', function $$_reduce_425(val, _values, result) { var self = this; self.context['$in_argdef='](false); if ($truthy(val['$[]'](0)['$any?']())) { self.max_numparam_stack['$has_ordinary_params!']() }; return self.builder.$args(nil, val['$[]'](0), nil); }); $def(self, '$_reduce_426', function $$_reduce_426(val, _values, result) { var self = this; result = self.context.$dup(); self.context['$in_lambda='](true); return result; }); $def(self, '$_reduce_427', function $$_reduce_427(val, _values, result) { var self = this; self.context['$in_lambda='](val['$[]'](1).$in_lambda()); return [val['$[]'](0), val['$[]'](2), val['$[]'](3)]; }); $def(self, '$_reduce_428', function $$_reduce_428(val, _values, result) { var self = this; result = self.context.$dup(); self.context['$in_lambda='](true); return result; }); $def(self, '$_reduce_429', function $$_reduce_429(val, _values, result) { var self = this; self.context['$in_lambda='](val['$[]'](1).$in_lambda()); return [val['$[]'](0), val['$[]'](2), val['$[]'](3)]; }); $def(self, '$_reduce_430', function $$_reduce_430(val, _values, result) { var self = this; result = self.context.$dup(); self.context['$in_block='](true); return result; }); $def(self, '$_reduce_431', function $$_reduce_431(val, _values, result) { var self = this; self.context['$in_block='](val['$[]'](1).$in_block()); return [val['$[]'](0)].concat($to_a(val['$[]'](2))).concat([val['$[]'](3)]); }); $def(self, '$_reduce_432', function $$_reduce_432(val, _values, result) { var $a, $b, self = this, begin_t = nil, block_args = nil, body = nil, end_t = nil; $b = val['$[]'](1), $a = $to_ary($b), (begin_t = ($a[0] == null ? nil : $a[0])), (block_args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), (end_t = ($a[3] == null ? nil : $a[3])), $b; return self.builder.$block(val['$[]'](0), begin_t, block_args, body, end_t); }); $def(self, '$_reduce_433', function $$_reduce_433(val, _values, result) { var $a, $b, self = this, lparen_t = nil, args = nil, rparen_t = nil; $b = val['$[]'](3), $a = $to_ary($b), (lparen_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (rparen_t = ($a[2] == null ? nil : $a[2])), $b; return self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2), lparen_t, args, rparen_t); }); $def(self, '$_reduce_434', function $$_reduce_434(val, _values, result) { var $a, $b, self = this, lparen_t = nil, args = nil, rparen_t = nil, method_call = nil, begin_t = nil, body = nil, end_t = nil; $b = val['$[]'](3), $a = $to_ary($b), (lparen_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (rparen_t = ($a[2] == null ? nil : $a[2])), $b; method_call = self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2), lparen_t, args, rparen_t); $b = val['$[]'](4), $a = $to_ary($b), (begin_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), (end_t = ($a[3] == null ? nil : $a[3])), $b; return self.builder.$block(method_call, begin_t, args, body, end_t); }); $def(self, '$_reduce_435', function $$_reduce_435(val, _values, result) { var $a, $b, self = this, method_call = nil, begin_t = nil, args = nil, body = nil, end_t = nil; method_call = self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2), nil, val['$[]'](3), nil); $b = val['$[]'](4), $a = $to_ary($b), (begin_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), (end_t = ($a[3] == null ? nil : $a[3])), $b; return self.builder.$block(method_call, begin_t, args, body, end_t); }); $def(self, '$_reduce_436', function $$_reduce_436(val, _values, result) { var $a, $b, self = this, lparen_t = nil, args = nil, rparen_t = nil; $b = val['$[]'](1), $a = $to_ary($b), (lparen_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (rparen_t = ($a[2] == null ? nil : $a[2])), $b; return self.builder.$call_method(nil, nil, val['$[]'](0), lparen_t, args, rparen_t); }); $def(self, '$_reduce_437', function $$_reduce_437(val, _values, result) { var $a, $b, self = this, lparen_t = nil, args = nil, rparen_t = nil; $b = val['$[]'](3), $a = $to_ary($b), (lparen_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (rparen_t = ($a[2] == null ? nil : $a[2])), $b; return self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2), lparen_t, args, rparen_t); }); $def(self, '$_reduce_438', function $$_reduce_438(val, _values, result) { var $a, $b, self = this, lparen_t = nil, args = nil, rparen_t = nil; $b = val['$[]'](3), $a = $to_ary($b), (lparen_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (rparen_t = ($a[2] == null ? nil : $a[2])), $b; return self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2), lparen_t, args, rparen_t); }); $def(self, '$_reduce_439', function $$_reduce_439(val, _values, result) { var self = this; return self.builder.$call_method(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_440', function $$_reduce_440(val, _values, result) { var $a, $b, self = this, lparen_t = nil, args = nil, rparen_t = nil; $b = val['$[]'](2), $a = $to_ary($b), (lparen_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (rparen_t = ($a[2] == null ? nil : $a[2])), $b; return self.builder.$call_method(val['$[]'](0), val['$[]'](1), nil, lparen_t, args, rparen_t); }); $def(self, '$_reduce_441', function $$_reduce_441(val, _values, result) { var $a, $b, self = this, lparen_t = nil, args = nil, rparen_t = nil; $b = val['$[]'](2), $a = $to_ary($b), (lparen_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (rparen_t = ($a[2] == null ? nil : $a[2])), $b; return self.builder.$call_method(val['$[]'](0), val['$[]'](1), nil, lparen_t, args, rparen_t); }); $def(self, '$_reduce_442', function $$_reduce_442(val, _values, result) { var $a, $b, self = this, lparen_t = nil, args = nil, rparen_t = nil; $b = val['$[]'](1), $a = $to_ary($b), (lparen_t = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (rparen_t = ($a[2] == null ? nil : $a[2])), $b; return self.builder.$keyword_cmd("super", val['$[]'](0), lparen_t, args, rparen_t); }); $def(self, '$_reduce_443', function $$_reduce_443(val, _values, result) { var self = this; return self.builder.$keyword_cmd("zsuper", val['$[]'](0)) }); $def(self, '$_reduce_444', function $$_reduce_444(val, _values, result) { var self = this; return self.builder.$index(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3)) }); $def(self, '$_reduce_445', function $$_reduce_445(val, _values, result) { var self = this; result = self.context.$dup(); self.context['$in_block='](true); return result; }); $def(self, '$_reduce_446', function $$_reduce_446(val, _values, result) { var self = this; self.context['$in_block='](val['$[]'](1).$in_block()); return [val['$[]'](0)].concat($to_a(val['$[]'](2))).concat([val['$[]'](3)]); }); $def(self, '$_reduce_447', function $$_reduce_447(val, _values, result) { var self = this; result = self.context.$dup(); self.context['$in_block='](true); return result; }); $def(self, '$_reduce_448', function $$_reduce_448(val, _values, result) { var self = this; self.context['$in_block='](val['$[]'](1).$in_block()); return [val['$[]'](0)].concat($to_a(val['$[]'](2))).concat([val['$[]'](3)]); }); $def(self, '$_reduce_449', function $$_reduce_449(val, _values, result) { var self = this; self.static_env.$extend_dynamic(); self.max_numparam_stack.$push((new Map([["static", false]]))); return result; }); $def(self, '$_reduce_450', function $$_reduce_450(val, _values, result) { var self = this, args = nil; args = ($truthy(self.max_numparam_stack['$has_numparams?']()) ? (self.builder.$numargs(self.max_numparam_stack.$top())) : (val['$[]'](1))); result = [args, val['$[]'](2)]; self.max_numparam_stack.$pop(); self.static_env.$unextend(); return result; }); $def(self, '$_reduce_451', function $$_reduce_451(val, _values, result) { var self = this; self.static_env.$extend_dynamic(); self.max_numparam_stack.$push((new Map([["static", false]]))); return result; }); $def(self, '$_reduce_452', function $$_reduce_452(val, _values, result) { var self = this; self.lexer.$cmdarg().$push(false); return result; }); $def(self, '$_reduce_453', function $$_reduce_453(val, _values, result) { var self = this, args = nil; args = ($truthy(self.max_numparam_stack['$has_numparams?']()) ? (self.builder.$numargs(self.max_numparam_stack.$top())) : (val['$[]'](2))); result = [args, val['$[]'](3)]; self.max_numparam_stack.$pop(); self.static_env.$unextend(); self.lexer.$cmdarg().$pop(); return result; }); $def(self, '$_reduce_454', function $$_reduce_454(val, _values, result) { var self = this; return [self.builder.$when(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3))].concat($to_a(val['$[]'](4))) }); $def(self, '$_reduce_455', function $$_reduce_455(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_457', function $$_reduce_457(val, _values, result) { var self = this; self.lexer['$state=']("expr_beg"); self.lexer['$command_start='](false); self.pattern_variables.$push(); self.pattern_hash_keys.$push(); result = self.context.$in_kwarg(); self.context['$in_kwarg='](true); return result; }); $def(self, '$_reduce_458', function $$_reduce_458(val, _values, result) { var self = this; self.pattern_variables.$pop(); self.pattern_hash_keys.$pop(); self.context['$in_kwarg='](val['$[]'](1)); return result; }); $def(self, '$_reduce_459', function $$_reduce_459(val, _values, result) { var self = this; return [$send(self.builder, 'in_pattern', [val['$[]'](0)].concat($to_a(val['$[]'](2))).concat([val['$[]'](3), val['$[]'](5)]))].concat($to_a(val['$[]'](6))) }); $def(self, '$_reduce_460', function $$_reduce_460(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_462', function $$_reduce_462(val, _values, result) { return [val['$[]'](0), nil] }); $def(self, '$_reduce_463', function $$_reduce_463(val, _values, result) { var self = this; return [val['$[]'](0), self.builder.$if_guard(val['$[]'](1), val['$[]'](2))] }); $def(self, '$_reduce_464', function $$_reduce_464(val, _values, result) { var self = this; return [val['$[]'](0), self.builder.$unless_guard(val['$[]'](1), val['$[]'](2))] }); $def(self, '$_reduce_466', function $$_reduce_466(val, _values, result) { var self = this, item = nil; item = self.builder.$match_with_trailing_comma(val['$[]'](0), val['$[]'](1)); return self.builder.$array_pattern(nil, [item], nil); }); $def(self, '$_reduce_467', function $$_reduce_467(val, _values, result) { var self = this; return self.builder.$array_pattern(nil, [val['$[]'](0)].$concat(val['$[]'](2)), nil) }); $def(self, '$_reduce_468', function $$_reduce_468(val, _values, result) { var self = this; return self.builder.$find_pattern(nil, val['$[]'](0), nil) }); $def(self, '$_reduce_469', function $$_reduce_469(val, _values, result) { var self = this; return self.builder.$array_pattern(nil, val['$[]'](0), nil) }); $def(self, '$_reduce_470', function $$_reduce_470(val, _values, result) { var self = this; return self.builder.$hash_pattern(nil, val['$[]'](0), nil) }); $def(self, '$_reduce_472', function $$_reduce_472(val, _values, result) { var self = this; return self.builder.$match_as(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_474', function $$_reduce_474(val, _values, result) { var self = this; return self.builder.$match_alt(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_476', function $$_reduce_476(val, _values, result) { var self = this; result = val['$[]'](0); self.pattern_hash_keys.$push(); return result; }); $def(self, '$_reduce_477', function $$_reduce_477(val, _values, result) { var self = this; result = val['$[]'](0); self.pattern_hash_keys.$push(); return result; }); $def(self, '$_reduce_480', function $$_reduce_480(val, _values, result) { var self = this, pattern = nil; self.pattern_hash_keys.$pop(); pattern = self.builder.$array_pattern(nil, val['$[]'](2), nil); return self.builder.$const_pattern(val['$[]'](0), val['$[]'](1), pattern, val['$[]'](3)); }); $def(self, '$_reduce_481', function $$_reduce_481(val, _values, result) { var self = this, pattern = nil; self.pattern_hash_keys.$pop(); pattern = self.builder.$find_pattern(nil, val['$[]'](2), nil); return self.builder.$const_pattern(val['$[]'](0), val['$[]'](1), pattern, val['$[]'](3)); }); $def(self, '$_reduce_482', function $$_reduce_482(val, _values, result) { var self = this, pattern = nil; self.pattern_hash_keys.$pop(); pattern = self.builder.$hash_pattern(nil, val['$[]'](2), nil); return self.builder.$const_pattern(val['$[]'](0), val['$[]'](1), pattern, val['$[]'](3)); }); $def(self, '$_reduce_483', function $$_reduce_483(val, _values, result) { var self = this, pattern = nil; pattern = self.builder.$array_pattern(val['$[]'](1), nil, val['$[]'](2)); return self.builder.$const_pattern(val['$[]'](0), val['$[]'](1), pattern, val['$[]'](2)); }); $def(self, '$_reduce_484', function $$_reduce_484(val, _values, result) { var self = this, pattern = nil; self.pattern_hash_keys.$pop(); pattern = self.builder.$array_pattern(nil, val['$[]'](2), nil); return self.builder.$const_pattern(val['$[]'](0), val['$[]'](1), pattern, val['$[]'](3)); }); $def(self, '$_reduce_485', function $$_reduce_485(val, _values, result) { var self = this, pattern = nil; self.pattern_hash_keys.$pop(); pattern = self.builder.$find_pattern(nil, val['$[]'](2), nil); return self.builder.$const_pattern(val['$[]'](0), val['$[]'](1), pattern, val['$[]'](3)); }); $def(self, '$_reduce_486', function $$_reduce_486(val, _values, result) { var self = this, pattern = nil; self.pattern_hash_keys.$pop(); pattern = self.builder.$hash_pattern(nil, val['$[]'](2), nil); return self.builder.$const_pattern(val['$[]'](0), val['$[]'](1), pattern, val['$[]'](3)); }); $def(self, '$_reduce_487', function $$_reduce_487(val, _values, result) { var self = this, pattern = nil; pattern = self.builder.$array_pattern(val['$[]'](1), nil, val['$[]'](2)); return self.builder.$const_pattern(val['$[]'](0), val['$[]'](1), pattern, val['$[]'](2)); }); $def(self, '$_reduce_488', function $$_reduce_488(val, _values, result) { var self = this; return self.builder.$array_pattern(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_489', function $$_reduce_489(val, _values, result) { var self = this; return self.builder.$find_pattern(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_490', function $$_reduce_490(val, _values, result) { var self = this; return self.builder.$array_pattern(val['$[]'](0), [], val['$[]'](1)) }); $def(self, '$_reduce_491', function $$_reduce_491(val, _values, result) { var self = this; self.pattern_hash_keys.$push(); result = self.context.$in_kwarg(); self.context['$in_kwarg='](false); return result; }); $def(self, '$_reduce_492', function $$_reduce_492(val, _values, result) { var self = this; self.pattern_hash_keys.$pop(); self.context['$in_kwarg='](val['$[]'](1)); return self.builder.$hash_pattern(val['$[]'](0), val['$[]'](2), val['$[]'](3)); }); $def(self, '$_reduce_493', function $$_reduce_493(val, _values, result) { var self = this; return self.builder.$hash_pattern(val['$[]'](0), [], val['$[]'](1)) }); $def(self, '$_reduce_494', function $$_reduce_494(val, _values, result) { var self = this; self.pattern_hash_keys.$push(); return result; }); $def(self, '$_reduce_495', function $$_reduce_495(val, _values, result) { var self = this; self.pattern_hash_keys.$pop(); return self.builder.$begin(val['$[]'](0), val['$[]'](2), val['$[]'](3)); }); $def(self, '$_reduce_496', function $$_reduce_496(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_497', function $$_reduce_497(val, _values, result) { return val['$[]'](0) }); $def(self, '$_reduce_498', function $$_reduce_498(val, _values, result) { return [].concat($to_a(val['$[]'](0))).concat([val['$[]'](1)]) }); $def(self, '$_reduce_499', function $$_reduce_499(val, _values, result) { return [].concat($to_a(val['$[]'](0))).concat([val['$[]'](1)]) }); $def(self, '$_reduce_500', function $$_reduce_500(val, _values, result) { return [].concat($to_a(val['$[]'](0))).concat([val['$[]'](1)]).concat($to_a(val['$[]'](3))) }); $def(self, '$_reduce_502', function $$_reduce_502(val, _values, result) { var self = this, item = nil; item = self.builder.$match_with_trailing_comma(val['$[]'](0), val['$[]'](1)); return [item]; }); $def(self, '$_reduce_503', function $$_reduce_503(val, _values, result) { var self = this, last_item = nil; last_item = self.builder.$match_with_trailing_comma(val['$[]'](1), val['$[]'](2)); return [].concat($to_a(val['$[]'](0))).concat([last_item]); }); $def(self, '$_reduce_504', function $$_reduce_504(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_505', function $$_reduce_505(val, _values, result) { return [val['$[]'](0)].concat($to_a(val['$[]'](2))) }); $def(self, '$_reduce_506', function $$_reduce_506(val, _values, result) { return [val['$[]'](0)].concat($to_a(val['$[]'](2))).concat([val['$[]'](4)]) }); $def(self, '$_reduce_507', function $$_reduce_507(val, _values, result) { var self = this; return self.builder.$match_rest(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_508', function $$_reduce_508(val, _values, result) { var self = this; return self.builder.$match_rest(val['$[]'](0)) }); $def(self, '$_reduce_509', function $$_reduce_509(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_510', function $$_reduce_510(val, _values, result) { return [].concat($to_a(val['$[]'](0))).concat([val['$[]'](2)]) }); $def(self, '$_reduce_512', function $$_reduce_512(val, _values, result) { return [].concat($to_a(val['$[]'](0))).concat($to_a(val['$[]'](2))) }); $def(self, '$_reduce_513', function $$_reduce_513(val, _values, result) { return val['$[]'](0) }); $def(self, '$_reduce_514', function $$_reduce_514(val, _values, result) { return val['$[]'](0) }); $def(self, '$_reduce_515', function $$_reduce_515(val, _values, result) { return val['$[]'](0) }); $def(self, '$_reduce_516', function $$_reduce_516(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_517', function $$_reduce_517(val, _values, result) { return [].concat($to_a(val['$[]'](0))).concat([val['$[]'](2)]) }); $def(self, '$_reduce_518', function $$_reduce_518(val, _values, result) { var self = this; return $send(self.builder, 'match_pair', $to_a(val['$[]'](0)).concat([val['$[]'](1)])) }); $def(self, '$_reduce_519', function $$_reduce_519(val, _values, result) { var self = this; return $send(self.builder, 'match_label', $to_a(val['$[]'](0))) }); $def(self, '$_reduce_520', function $$_reduce_520(val, _values, result) { return ["label", val['$[]'](0)] }); $def(self, '$_reduce_521', function $$_reduce_521(val, _values, result) { return ["quoted", [val['$[]'](0), val['$[]'](1), val['$[]'](2)]] }); $def(self, '$_reduce_522', function $$_reduce_522(val, _values, result) { var self = this; return [self.builder.$match_rest(val['$[]'](0), val['$[]'](1))] }); $def(self, '$_reduce_523', function $$_reduce_523(val, _values, result) { var self = this; return [self.builder.$match_rest(val['$[]'](0), nil)] }); $def(self, '$_reduce_524', function $$_reduce_524(val, _values, result) { return val }); $def(self, '$_reduce_526', function $$_reduce_526(val, _values, result) { var self = this; return [self.builder.$match_nil_pattern(val['$[]'](0)['$[]'](0), val['$[]'](0)['$[]'](1))] }); $def(self, '$_reduce_528', function $$_reduce_528(val, _values, result) { var self = this; return self.builder.$range_inclusive(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_529', function $$_reduce_529(val, _values, result) { var self = this; return self.builder.$range_exclusive(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_530', function $$_reduce_530(val, _values, result) { var self = this; return self.builder.$range_inclusive(val['$[]'](0), val['$[]'](1), nil) }); $def(self, '$_reduce_531', function $$_reduce_531(val, _values, result) { var self = this; return self.builder.$range_exclusive(val['$[]'](0), val['$[]'](1), nil) }); $def(self, '$_reduce_535', function $$_reduce_535(val, _values, result) { var self = this; return self.builder.$range_inclusive(nil, val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_536', function $$_reduce_536(val, _values, result) { var self = this; return self.builder.$range_exclusive(nil, val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_545', function $$_reduce_545(val, _values, result) { var self = this; return self.builder.$accessible(val['$[]'](0)) }); $def(self, '$_reduce_547', function $$_reduce_547(val, _values, result) { var self = this; return self.builder.$assignable(self.builder.$match_var(val['$[]'](0))) }); $def(self, '$_reduce_548', function $$_reduce_548(val, _values, result) { var self = this, name = nil, lvar = nil; name = val['$[]'](1)['$[]'](0); if (!$truthy(self.$static_env()['$declared?'](name))) { self.$diagnostic("error", "undefined_lvar", (new Map([["name", name]])), val['$[]'](1)) }; lvar = self.builder.$accessible(self.builder.$ident(val['$[]'](1))); return self.builder.$pin(val['$[]'](0), lvar); }); $def(self, '$_reduce_549', function $$_reduce_549(val, _values, result) { var self = this, non_lvar = nil; non_lvar = self.builder.$accessible(val['$[]'](1)); return self.builder.$pin(val['$[]'](0), non_lvar); }); $def(self, '$_reduce_550', function $$_reduce_550(val, _values, result) { var self = this, expr = nil; expr = self.builder.$begin(val['$[]'](1), val['$[]'](2), val['$[]'](3)); return self.builder.$pin(val['$[]'](0), expr); }); $def(self, '$_reduce_551', function $$_reduce_551(val, _values, result) { var self = this; return self.builder.$const_global(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_552', function $$_reduce_552(val, _values, result) { var self = this; return self.builder.$const_fetch(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_553', function $$_reduce_553(val, _values, result) { var self = this; return self.builder.$const(val['$[]'](0)) }); $def(self, '$_reduce_554', function $$_reduce_554(val, _values, result) { var $a, $b, self = this, assoc_t = nil, exc_var = nil, exc_list = nil; $b = val['$[]'](2), $a = $to_ary($b), (assoc_t = ($a[0] == null ? nil : $a[0])), (exc_var = ($a[1] == null ? nil : $a[1])), $b; if ($truthy(val['$[]'](1))) { exc_list = self.builder.$array(nil, val['$[]'](1), nil) }; return [self.builder.$rescue_body(val['$[]'](0), exc_list, assoc_t, exc_var, val['$[]'](3), val['$[]'](4))].concat($to_a(val['$[]'](5))); }); $def(self, '$_reduce_555', function $$_reduce_555(val, _values, result) { return [] }); $def(self, '$_reduce_556', function $$_reduce_556(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_559', function $$_reduce_559(val, _values, result) { return [val['$[]'](0), val['$[]'](1)] }); $def(self, '$_reduce_561', function $$_reduce_561(val, _values, result) { return [val['$[]'](0), val['$[]'](1)] }); $def(self, '$_reduce_565', function $$_reduce_565(val, _values, result) { var self = this; return self.builder.$string_compose(nil, val['$[]'](0), nil) }); $def(self, '$_reduce_566', function $$_reduce_566(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_567', function $$_reduce_567(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](1)) }); $def(self, '$_reduce_568', function $$_reduce_568(val, _values, result) { var self = this, string = nil; string = self.builder.$string_compose(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return self.builder.$dedent_string(string, self.lexer.$dedent_level()); }); $def(self, '$_reduce_569', function $$_reduce_569(val, _values, result) { var self = this, string = nil; string = self.builder.$string(val['$[]'](0)); return self.builder.$dedent_string(string, self.lexer.$dedent_level()); }); $def(self, '$_reduce_570', function $$_reduce_570(val, _values, result) { var self = this; return self.builder.$character(val['$[]'](0)) }); $def(self, '$_reduce_571', function $$_reduce_571(val, _values, result) { var self = this, string = nil; string = self.builder.$xstring_compose(val['$[]'](0), val['$[]'](1), val['$[]'](2)); return self.builder.$dedent_string(string, self.lexer.$dedent_level()); }); $def(self, '$_reduce_572', function $$_reduce_572(val, _values, result) { var self = this, opts = nil; opts = self.builder.$regexp_options(val['$[]'](3)); return self.builder.$regexp_compose(val['$[]'](0), val['$[]'](1), val['$[]'](2), opts); }); $def(self, '$_reduce_573', function $$_reduce_573(val, _values, result) { var self = this; return self.builder.$words_compose(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_574', function $$_reduce_574(val, _values, result) { return [] }); $def(self, '$_reduce_575', function $$_reduce_575(val, _values, result) { var self = this; return val['$[]'](0)['$<<'](self.builder.$word(val['$[]'](1))) }); $def(self, '$_reduce_576', function $$_reduce_576(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_577', function $$_reduce_577(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](1)) }); $def(self, '$_reduce_578', function $$_reduce_578(val, _values, result) { var self = this; return self.builder.$symbols_compose(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_579', function $$_reduce_579(val, _values, result) { return [] }); $def(self, '$_reduce_580', function $$_reduce_580(val, _values, result) { var self = this; return val['$[]'](0)['$<<'](self.builder.$word(val['$[]'](1))) }); $def(self, '$_reduce_581', function $$_reduce_581(val, _values, result) { var self = this; return self.builder.$words_compose(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_582', function $$_reduce_582(val, _values, result) { var self = this; return self.builder.$symbols_compose(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_583', function $$_reduce_583(val, _values, result) { return [] }); $def(self, '$_reduce_584', function $$_reduce_584(val, _values, result) { var self = this; return val['$[]'](0)['$<<'](self.builder.$string_internal(val['$[]'](1))) }); $def(self, '$_reduce_585', function $$_reduce_585(val, _values, result) { return [] }); $def(self, '$_reduce_586', function $$_reduce_586(val, _values, result) { var self = this; return val['$[]'](0)['$<<'](self.builder.$symbol_internal(val['$[]'](1))) }); $def(self, '$_reduce_587', function $$_reduce_587(val, _values, result) { return [] }); $def(self, '$_reduce_588', function $$_reduce_588(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](1)) }); $def(self, '$_reduce_589', function $$_reduce_589(val, _values, result) { return [] }); $def(self, '$_reduce_590', function $$_reduce_590(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](1)) }); $def(self, '$_reduce_591', function $$_reduce_591(val, _values, result) { return [] }); $def(self, '$_reduce_592', function $$_reduce_592(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](1)) }); $def(self, '$_reduce_593', function $$_reduce_593(val, _values, result) { var self = this; return self.builder.$string_internal(val['$[]'](0)) }); $def(self, '$_reduce_594', function $$_reduce_594(val, _values, result) { return val['$[]'](1) }); $def(self, '$_reduce_595', function $$_reduce_595(val, _values, result) { var self = this; self.lexer.$cmdarg().$push(false); self.lexer.$cond().$push(false); return result; }); $def(self, '$_reduce_596', function $$_reduce_596(val, _values, result) { var self = this; self.lexer.$cmdarg().$pop(); self.lexer.$cond().$pop(); return self.builder.$begin(val['$[]'](0), val['$[]'](2), val['$[]'](3)); }); $def(self, '$_reduce_597', function $$_reduce_597(val, _values, result) { var self = this; return self.builder.$gvar(val['$[]'](0)) }); $def(self, '$_reduce_598', function $$_reduce_598(val, _values, result) { var self = this; return self.builder.$ivar(val['$[]'](0)) }); $def(self, '$_reduce_599', function $$_reduce_599(val, _values, result) { var self = this; return self.builder.$cvar(val['$[]'](0)) }); $def(self, '$_reduce_603', function $$_reduce_603(val, _values, result) { var self = this; self.lexer['$state=']("expr_end"); return self.builder.$symbol(val['$[]'](0)); }); $def(self, '$_reduce_604', function $$_reduce_604(val, _values, result) { var self = this; self.lexer['$state=']("expr_end"); return self.builder.$symbol_compose(val['$[]'](0), val['$[]'](1), val['$[]'](2)); }); $def(self, '$_reduce_605', function $$_reduce_605(val, _values, result) { return val['$[]'](0) }); $def(self, '$_reduce_606', function $$_reduce_606(val, _values, result) { var self = this; if ($truthy(self.builder['$respond_to?']("negate"))) { result = self.builder.$negate(val['$[]'](0), val['$[]'](1)) } else { result = self.builder.$unary_num(val['$[]'](0), val['$[]'](1)) }; return result; }); $def(self, '$_reduce_607', function $$_reduce_607(val, _values, result) { var self = this; self.lexer['$state=']("expr_end"); return self.builder.$integer(val['$[]'](0)); }); $def(self, '$_reduce_608', function $$_reduce_608(val, _values, result) { var self = this; self.lexer['$state=']("expr_end"); return self.builder.$float(val['$[]'](0)); }); $def(self, '$_reduce_609', function $$_reduce_609(val, _values, result) { var self = this; self.lexer['$state=']("expr_end"); return self.builder.$rational(val['$[]'](0)); }); $def(self, '$_reduce_610', function $$_reduce_610(val, _values, result) { var self = this; self.lexer['$state=']("expr_end"); return self.builder.$complex(val['$[]'](0)); }); $def(self, '$_reduce_611', function $$_reduce_611(val, _values, result) { var self = this; return self.builder.$ivar(val['$[]'](0)) }); $def(self, '$_reduce_612', function $$_reduce_612(val, _values, result) { var self = this; return self.builder.$gvar(val['$[]'](0)) }); $def(self, '$_reduce_613', function $$_reduce_613(val, _values, result) { var self = this; return self.builder.$cvar(val['$[]'](0)) }); $def(self, '$_reduce_614', function $$_reduce_614(val, _values, result) { var self = this; return self.builder.$ident(val['$[]'](0)) }); $def(self, '$_reduce_615', function $$_reduce_615(val, _values, result) { var self = this; return self.builder.$const(val['$[]'](0)) }); $def(self, '$_reduce_617', function $$_reduce_617(val, _values, result) { var self = this; return self.builder.$nil(val['$[]'](0)) }); $def(self, '$_reduce_618', function $$_reduce_618(val, _values, result) { var self = this; return self.builder.$self(val['$[]'](0)) }); $def(self, '$_reduce_619', function $$_reduce_619(val, _values, result) { var self = this; return self.builder.$true(val['$[]'](0)) }); $def(self, '$_reduce_620', function $$_reduce_620(val, _values, result) { var self = this; return self.builder.$false(val['$[]'](0)) }); $def(self, '$_reduce_621', function $$_reduce_621(val, _values, result) { var self = this; return self.builder.$__FILE__(val['$[]'](0)) }); $def(self, '$_reduce_622', function $$_reduce_622(val, _values, result) { var self = this; return self.builder.$__LINE__(val['$[]'](0)) }); $def(self, '$_reduce_623', function $$_reduce_623(val, _values, result) { var self = this; return self.builder.$__ENCODING__(val['$[]'](0)) }); $def(self, '$_reduce_624', function $$_reduce_624(val, _values, result) { var self = this; return self.builder.$accessible(val['$[]'](0)) }); $def(self, '$_reduce_625', function $$_reduce_625(val, _values, result) { var self = this; return self.builder.$accessible(val['$[]'](0)) }); $def(self, '$_reduce_626', function $$_reduce_626(val, _values, result) { var self = this; return self.builder.$assignable(val['$[]'](0)) }); $def(self, '$_reduce_627', function $$_reduce_627(val, _values, result) { var self = this; return self.builder.$assignable(val['$[]'](0)) }); $def(self, '$_reduce_628', function $$_reduce_628(val, _values, result) { var self = this; return self.builder.$nth_ref(val['$[]'](0)) }); $def(self, '$_reduce_629', function $$_reduce_629(val, _values, result) { var self = this; return self.builder.$back_ref(val['$[]'](0)) }); $def(self, '$_reduce_630', function $$_reduce_630(val, _values, result) { var self = this; self.lexer['$state=']("expr_value"); return result; }); $def(self, '$_reduce_631', function $$_reduce_631(val, _values, result) { return [val['$[]'](0), val['$[]'](2)] }); $def(self, '$_reduce_632', $return_val(nil)); $def(self, '$_reduce_634', function $$_reduce_634(val, _values, result) { var self = this; self.context['$in_argdef='](false); return self.builder.$args(nil, [], nil); }); $def(self, '$_reduce_635', function $$_reduce_635(val, _values, result) { var self = this; result = self.builder.$args(val['$[]'](0), val['$[]'](1), val['$[]'](2)); self.lexer['$state=']("expr_value"); self.context['$in_argdef='](false); return result; }); $def(self, '$_reduce_637', function $$_reduce_637(val, _values, result) { var self = this; result = self.context.$dup(); self.context['$in_kwarg='](true); self.context['$in_argdef='](true); return result; }); $def(self, '$_reduce_638', function $$_reduce_638(val, _values, result) { var self = this; self.context['$in_kwarg='](val['$[]'](0).$in_kwarg()); self.context['$in_argdef='](false); return self.builder.$args(nil, val['$[]'](1), nil); }); $def(self, '$_reduce_639', function $$_reduce_639(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_640', function $$_reduce_640(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](1)) }); $def(self, '$_reduce_641', function $$_reduce_641(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](1)) }); $def(self, '$_reduce_642', function $$_reduce_642(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_643', function $$_reduce_643(val, _values, result) { var self = this; self.static_env.$declare_forward_args(); return [self.builder.$forward_arg(val['$[]'](0))]; }); $def(self, '$_reduce_644', function $$_reduce_644(val, _values, result) { return val['$[]'](1) }); $def(self, '$_reduce_645', function $$_reduce_645(val, _values, result) { return [] }); $def(self, '$_reduce_646', function $$_reduce_646(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](4)).$concat(val['$[]'](5)) }); $def(self, '$_reduce_647', function $$_reduce_647(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](4)).$concat(val['$[]'](6)).$concat(val['$[]'](7)) }); $def(self, '$_reduce_648', function $$_reduce_648(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_649', function $$_reduce_649(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](4)).$concat(val['$[]'](5)) }); $def(self, '$_reduce_650', function $$_reduce_650(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_651', function $$_reduce_651(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](4)).$concat(val['$[]'](5)) }); $def(self, '$_reduce_652', function $$_reduce_652(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](1)) }); $def(self, '$_reduce_653', function $$_reduce_653(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_654', function $$_reduce_654(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](4)).$concat(val['$[]'](5)) }); $def(self, '$_reduce_655', function $$_reduce_655(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](1)) }); $def(self, '$_reduce_656', function $$_reduce_656(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_657', function $$_reduce_657(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](1)) }); $def(self, '$_reduce_658', function $$_reduce_658(val, _values, result) { return val['$[]'](0).$concat(val['$[]'](2)).$concat(val['$[]'](3)) }); $def(self, '$_reduce_659', function $$_reduce_659(val, _values, result) { return val['$[]'](0) }); $def(self, '$_reduce_660', function $$_reduce_660(val, _values, result) { return [] }); $def(self, '$_reduce_661', function $$_reduce_661(val, _values, result) { return val['$[]'](0) }); $def(self, '$_reduce_662', function $$_reduce_662(val, _values, result) { var self = this; self.$diagnostic("error", "argument_const", nil, val['$[]'](0)); return result; }); $def(self, '$_reduce_663', function $$_reduce_663(val, _values, result) { var self = this; self.$diagnostic("error", "argument_ivar", nil, val['$[]'](0)); return result; }); $def(self, '$_reduce_664', function $$_reduce_664(val, _values, result) { var self = this; self.$diagnostic("error", "argument_gvar", nil, val['$[]'](0)); return result; }); $def(self, '$_reduce_665', function $$_reduce_665(val, _values, result) { var self = this; self.$diagnostic("error", "argument_cvar", nil, val['$[]'](0)); return result; }); $def(self, '$_reduce_667', function $$_reduce_667(val, _values, result) { var self = this; self.static_env.$declare(val['$[]'](0)['$[]'](0)); self.max_numparam_stack['$has_ordinary_params!'](); return val['$[]'](0); }); $def(self, '$_reduce_668', function $$_reduce_668(val, _values, result) { var self = this; self.current_arg_stack.$set(val['$[]'](0)['$[]'](0)); return val['$[]'](0); }); $def(self, '$_reduce_669', function $$_reduce_669(val, _values, result) { var self = this; self.current_arg_stack.$set(0); return self.builder.$arg(val['$[]'](0)); }); $def(self, '$_reduce_670', function $$_reduce_670(val, _values, result) { var self = this; return self.builder.$multi_lhs(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_671', function $$_reduce_671(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_672', function $$_reduce_672(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_673', function $$_reduce_673(val, _values, result) { var self = this; self.$check_kwarg_name(val['$[]'](0)); self.static_env.$declare(val['$[]'](0)['$[]'](0)); self.max_numparam_stack['$has_ordinary_params!'](); self.current_arg_stack.$set(val['$[]'](0)['$[]'](0)); self.context['$in_argdef='](false); return val['$[]'](0); }); $def(self, '$_reduce_674', function $$_reduce_674(val, _values, result) { var self = this; self.current_arg_stack.$set(nil); self.context['$in_argdef='](true); return self.builder.$kwoptarg(val['$[]'](0), val['$[]'](1)); }); $def(self, '$_reduce_675', function $$_reduce_675(val, _values, result) { var self = this; self.current_arg_stack.$set(nil); self.context['$in_argdef='](true); return self.builder.$kwarg(val['$[]'](0)); }); $def(self, '$_reduce_676', function $$_reduce_676(val, _values, result) { var self = this; self.context['$in_argdef='](true); return self.builder.$kwoptarg(val['$[]'](0), val['$[]'](1)); }); $def(self, '$_reduce_677', function $$_reduce_677(val, _values, result) { var self = this; self.context['$in_argdef='](true); return self.builder.$kwarg(val['$[]'](0)); }); $def(self, '$_reduce_678', function $$_reduce_678(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_679', function $$_reduce_679(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_680', function $$_reduce_680(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_681', function $$_reduce_681(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_684', function $$_reduce_684(val, _values, result) { var self = this; return [self.builder.$kwnilarg(val['$[]'](0)['$[]'](0), val['$[]'](0)['$[]'](1))] }); $def(self, '$_reduce_685', function $$_reduce_685(val, _values, result) { var self = this; self.static_env.$declare(val['$[]'](1)['$[]'](0)); return [self.builder.$kwrestarg(val['$[]'](0), val['$[]'](1))]; }); $def(self, '$_reduce_686', function $$_reduce_686(val, _values, result) { var self = this; self.static_env.$declare_anonymous_kwrestarg(); return [self.builder.$kwrestarg(val['$[]'](0))]; }); $def(self, '$_reduce_687', function $$_reduce_687(val, _values, result) { var self = this; self.current_arg_stack.$set(0); self.context['$in_argdef='](true); return self.builder.$optarg(val['$[]'](0), val['$[]'](1), val['$[]'](2)); }); $def(self, '$_reduce_688', function $$_reduce_688(val, _values, result) { var self = this; self.current_arg_stack.$set(0); self.context['$in_argdef='](true); return self.builder.$optarg(val['$[]'](0), val['$[]'](1), val['$[]'](2)); }); $def(self, '$_reduce_689', function $$_reduce_689(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_690', function $$_reduce_690(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_691', function $$_reduce_691(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_692', function $$_reduce_692(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_695', function $$_reduce_695(val, _values, result) { var self = this; self.static_env.$declare(val['$[]'](1)['$[]'](0)); return [self.builder.$restarg(val['$[]'](0), val['$[]'](1))]; }); $def(self, '$_reduce_696', function $$_reduce_696(val, _values, result) { var self = this; self.static_env.$declare_anonymous_restarg(); return [self.builder.$restarg(val['$[]'](0))]; }); $def(self, '$_reduce_699', function $$_reduce_699(val, _values, result) { var self = this; self.static_env.$declare(val['$[]'](1)['$[]'](0)); return self.builder.$blockarg(val['$[]'](0), val['$[]'](1)); }); $def(self, '$_reduce_700', function $$_reduce_700(val, _values, result) { var self = this; self.static_env.$declare_anonymous_blockarg(); return self.builder.$blockarg(val['$[]'](0), nil); }); $def(self, '$_reduce_701', function $$_reduce_701(val, _values, result) { return [val['$[]'](1)] }); $def(self, '$_reduce_702', function $$_reduce_702(val, _values, result) { return [] }); $def(self, '$_reduce_704', function $$_reduce_704(val, _values, result) { return val['$[]'](1) }); $def(self, '$_reduce_705', function $$_reduce_705(val, _values, result) { return [] }); $def(self, '$_reduce_707', function $$_reduce_707(val, _values, result) { return [val['$[]'](0)] }); $def(self, '$_reduce_708', function $$_reduce_708(val, _values, result) { return val['$[]'](0)['$<<'](val['$[]'](2)) }); $def(self, '$_reduce_709', function $$_reduce_709(val, _values, result) { var self = this; return self.builder.$pair(val['$[]'](0), val['$[]'](1), val['$[]'](2)) }); $def(self, '$_reduce_710', function $$_reduce_710(val, _values, result) { var self = this; return self.builder.$pair_keyword(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_711', function $$_reduce_711(val, _values, result) { var self = this; return self.builder.$pair_label(val['$[]'](0)) }); $def(self, '$_reduce_712', function $$_reduce_712(val, _values, result) { var self = this; return self.builder.$pair_quoted(val['$[]'](0), val['$[]'](1), val['$[]'](2), val['$[]'](3)) }); $def(self, '$_reduce_713', function $$_reduce_713(val, _values, result) { var self = this; return self.builder.$kwsplat(val['$[]'](0), val['$[]'](1)) }); $def(self, '$_reduce_714', function $$_reduce_714(val, _values, result) { var self = this; if ($not(self.static_env['$declared_anonymous_kwrestarg?']())) { self.$diagnostic("error", "no_anonymous_kwrestarg", nil, val['$[]'](0)) }; return self.builder.$forwarded_kwrestarg(val['$[]'](0)); }); $def(self, '$_reduce_725', function $$_reduce_725(val, _values, result) { return ["dot", val['$[]'](0)['$[]'](1)] }); $def(self, '$_reduce_726', function $$_reduce_726(val, _values, result) { return ["anddot", val['$[]'](0)['$[]'](1)] }); $def(self, '$_reduce_731', function $$_reduce_731(val, _values, result) { return val['$[]'](1) }); $def(self, '$_reduce_732', function $$_reduce_732(val, _values, result) { return val['$[]'](1) }); $def(self, '$_reduce_733', function $$_reduce_733(val, _values, result) { return val['$[]'](1) }); $def(self, '$_reduce_736', function $$_reduce_736(val, _values, result) { var self = this; self.$yyerrok(); return result; }); $def(self, '$_reduce_740', $return_val(nil)); return $def(self, '$_reduce_none', function $$_reduce_none(val, _values, result) { return val['$[]'](0) }); })($nesting[0], $$$($$('Parser'), 'Base'), $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/ast/builder"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $Opal = Opal.Opal, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,emit_lambda=,new'); self.$require("opal/ast/node"); self.$require("parser/ruby32"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'AST'); var $nesting = [self].concat($parent_nesting); return (function($base, $super) { var self = $klass($base, $super, 'Builder'); self['$emit_lambda='](true); return $def(self, '$n', function $$n(type, children, location) { return $$$($$$($Opal, 'AST'), 'Node').$new(type, children, (new Map([["location", location]]))) }); })($nesting[0], $$$($$$($$$('Parser'), 'Builders'), 'Default')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/base"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $slice = Opal.slice, $def = Opal.def, $return_self = Opal.return_self, $return_val = Opal.return_val, $const_set = Opal.const_set, $truthy = Opal.truthy, $Opal = Opal.Opal, $defs = Opal.defs, $alias = Opal.alias, $rb_plus = Opal.rb_plus, $send = Opal.send, $to_a = Opal.to_a, $send2 = Opal.send2, $find_super = Opal.find_super, $assign_ivar_val = Opal.assign_ivar_val, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,new,current_node,loc,process_regular_node,on_send,+,stmts_of,begin_with_stmts,nil?,include?,type,children,length,[],s,attr_accessor,current_node=,location=,raise,[]=,meta'); self.$require("parser"); self.$require("opal/ast/node"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Base'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.dynamic_cache_result = nil; (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'DummyLocation'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$node=', function $DummyLocation_node$eq$1($a) { var $post_args, $fwd_rest; $post_args = $slice(arguments); $fwd_rest = $post_args; return nil; }, -1); $def(self, '$expression', $return_self); $def(self, '$begin_pos', $return_val(0)); $def(self, '$end_pos', $return_val(0)); $def(self, '$source', $return_val("")); $def(self, '$line', $return_val(0)); $def(self, '$column', $return_val(0)); return $def(self, '$last_line', function $$last_line() { return $$$($$('Float'), 'INFINITY') }); })($nesting[0], null, $nesting); $const_set($nesting[0], 'DUMMY_LOCATION', $$('DummyLocation').$new()); $def(self, '$s', function $$s(type, $a) { var $post_args, children, self = this, loc = nil; $post_args = $slice(arguments, 1); children = $post_args; loc = ($truthy(self.$current_node()) ? (self.$current_node().$loc()) : ($$('DUMMY_LOCATION'))); return $$$($$$($Opal, 'AST'), 'Node').$new(type, children, (new Map([["location", loc]]))); }, -2); $defs(self, '$s', function $$s(type, $a) { var $post_args, children; $post_args = $slice(arguments, 1); children = $post_args; return $$$($$$($Opal, 'AST'), 'Node').$new(type, children, (new Map([["location", $$('DUMMY_LOCATION')]]))); }, -2); $alias(self, "on_iter", "process_regular_node"); $alias(self, "on_zsuper", "process_regular_node"); $alias(self, "on_jscall", "on_send"); $alias(self, "on_jsattr", "process_regular_node"); $alias(self, "on_jsattrasgn", "process_regular_node"); $alias(self, "on_kwsplat", "process_regular_node"); $def(self, '$prepend_to_body', function $$prepend_to_body(body, node) { var self = this, stmts = nil; stmts = $rb_plus(self.$stmts_of(node), self.$stmts_of(body)); return self.$begin_with_stmts(stmts); }); $def(self, '$append_to_body', function $$append_to_body(body, node) { var self = this, stmts = nil; stmts = $rb_plus(self.$stmts_of(body), self.$stmts_of(node)); return self.$begin_with_stmts(stmts); }); $def(self, '$stmts_of', function $$stmts_of(node) { if ($truthy(node['$nil?']())) { return [] } else if ($truthy(["begin", "kwbegin"]['$include?'](node.$type()))) { return node.$children() } else { return [node] } }); $def(self, '$begin_with_stmts', function $$begin_with_stmts(stmts) { var self = this; switch (stmts.$length().valueOf()) { case 0: return nil case 1: return stmts['$[]'](0) default: return $send(self, 's', ["begin"].concat($to_a(stmts))) } }); self.$attr_accessor("current_node"); $def(self, '$process', function $$process(node) { var $a, $yield = $$process.$$p || nil, self = this; $$process.$$p = null; return (function() { try { self['$current_node='](node); return $send2(self, $find_super(self, 'process', $$process, false, true), 'process', [node], $yield); } finally { ($a = [nil], $send(self, 'current_node=', $a), $a[$a.length - 1]) }; })() }); $def(self, '$error', function $$error(msg) { var self = this, error = nil; error = $$$($Opal, 'RewritingError').$new(msg); if ($truthy(self.$current_node())) { error['$location='](self.$current_node().$loc()) }; return self.$raise(error); }); $def(self, '$on_top', function $$on_top(node) { var self = this; node = self.$process_regular_node(node); if ($truthy(self.dynamic_cache_result)) { node.$meta()['$[]=']("dynamic_cache_result", true) }; return node; }); return $def(self, '$dynamic!', $assign_ivar_val("dynamic_cache_result", true)); })($nesting[0], $$$($$$($$$('Parser'), 'AST'), 'Processor'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/opal_engine_check"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $to_a = Opal.to_a, $truthy = Opal.truthy, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $const_set = Opal.const_set, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,children,skip_check_present?,process,s,skip_check_present_not?,=='); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'OpalEngineCheck'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$on_if', function $$on_if(node) { var $a, $yield = $$on_if.$$p || nil, self = this, test = nil, true_body = nil, false_body = nil, $ret_or_1 = nil; $$on_if.$$p = null; $a = [].concat($to_a(node.$children())), (test = ($a[0] == null ? nil : $a[0])), (true_body = ($a[1] == null ? nil : $a[1])), (false_body = ($a[2] == null ? nil : $a[2])), $a; if ($truthy(self['$skip_check_present?'](test))) { return self.$process(($truthy(($ret_or_1 = true_body)) ? ($ret_or_1) : (self.$s("nil")))) } else if ($truthy(self['$skip_check_present_not?'](test))) { return self.$process(($truthy(($ret_or_1 = false_body)) ? ($ret_or_1) : (self.$s("nil")))) } else { return $send2(self, $find_super(self, 'on_if', $$on_if, false, true), 'on_if', [node], $yield) }; }); $def(self, '$skip_check_present?', function $OpalEngineCheck_skip_check_present$ques$1(test) { var $ret_or_1 = nil; if ($truthy(($ret_or_1 = test['$==']($$('RUBY_ENGINE_CHECK'))))) { return $ret_or_1 } else { return test['$==']($$('RUBY_PLATFORM_CHECK')) } }); $def(self, '$skip_check_present_not?', function $OpalEngineCheck_skip_check_present_not$ques$2(test) { var $ret_or_1 = nil; if ($truthy(($ret_or_1 = test['$==']($$('RUBY_ENGINE_CHECK_NOT'))))) { return $ret_or_1 } else { return test['$==']($$('RUBY_PLATFORM_CHECK_NOT')) } }); $const_set($nesting[0], 'RUBY_ENGINE_CHECK', self.$s("send", self.$s("const", nil, "RUBY_ENGINE"), "==", self.$s("str", "opal"))); $const_set($nesting[0], 'RUBY_ENGINE_CHECK_NOT', self.$s("send", self.$s("const", nil, "RUBY_ENGINE"), "!=", self.$s("str", "opal"))); $const_set($nesting[0], 'RUBY_PLATFORM_CHECK', self.$s("send", self.$s("const", nil, "RUBY_PLATFORM"), "==", self.$s("str", "opal"))); return $const_set($nesting[0], 'RUBY_PLATFORM_CHECK_NOT', self.$s("send", self.$s("const", nil, "RUBY_PLATFORM"), "!=", self.$s("str", "opal"))); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/targeted_patches"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $to_a = Opal.to_a, $truthy = Opal.truthy, $rb_ge = Opal.rb_ge, $eqeq = Opal.eqeq, $to_ary = Opal.to_ary, $range = Opal.range, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $rb_gt = Opal.rb_gt, $send = Opal.send, $not = Opal.not, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,>=,length,children,==,type,last,first,updated,[],<<,>,all?,include?,=~,to_s,!,cover?,join,map,s'); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'TargetedPatches'); $def(self, '$on_def', function $$on_def(node) { var $a, $b, $yield = $$on_def.$$p || nil, self = this, name = nil, args = nil, body = nil, calls = nil, assignment = nil, ret = nil; $$on_def.$$p = null; $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), $a; if ((($truthy(body) && ($eqeq(body.$type(), "begin"))) && ($truthy($rb_ge(body.$children().$length(), 2))))) { calls = body.$children(); $b = calls.$last(2), $a = $to_ary($b), (assignment = ($a[0] == null ? nil : $a[0])), (ret = ($a[1] == null ? nil : $a[1])), $b; if ((($eqeq(assignment.$type(), "lvasgn") && ($eqeq(ret.$type(), "lvar"))) && ($eqeq(assignment.$children().$first(), ret.$children().$first())))) { if ($eqeq(calls.$length(), 2)) { return node.$updated(nil, [name, args, assignment.$children()['$[]'](1)]) } else { calls = calls['$[]']($range(0, -3, false))['$<<'](assignment.$children()['$[]'](1)); return node.$updated(nil, [name, args, body.$updated(nil, calls)]); } } else { return $send2(self, $find_super(self, 'on_def', $$on_def, false, true), 'on_def', [node], $yield) }; } else { return $send2(self, $find_super(self, 'on_def', $$on_def, false, true), 'on_def', [node], $yield) }; }); return $def(self, '$on_array', function $$on_array(node) { var $yield = $$on_array.$$p || nil, self = this, children = nil, ssin_array = nil, str = nil; $$on_array.$$p = null; children = node.$children(); if ($truthy($rb_gt(children.$length(), 32))) { ssin_array = $send(children, 'all?', [], function $$1(child){ if (child == null) child = nil; if (!$truthy(["str", "sym", "int", "nil"]['$include?'](child.$type()))) { return false }; if (($truthy(["str", "sym"]['$include?'](child.$type())) && ($truthy(child.$children().$first().$to_s()['$=~'](/^[0-9-]|^$|,/))))) { return false }; if (($eqeq(child.$type(), "int") && ($not($range(-1000000, 1000000, false)['$cover?'](child.$children().$first()))))) { return false }; return true;}); if ($truthy(ssin_array)) { str = $send(children, 'map', [], function $$2(i){ if (i == null) i = nil; return i.$children().$first().$to_s();}).$join(","); return node.$updated("jscall", [self.$s("js_tmp", "Opal"), "large_array_unpack", self.$s("sym", str)]); } else { return $send2(self, $find_super(self, 'on_array', $$on_array, false, true), 'on_array', [node], $yield) }; } else { return $send2(self, $find_super(self, 'on_array', $$on_array, false, true), 'on_array', [node], $yield) }; }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/for_rewriter"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $assign_ivar_val = Opal.assign_ivar_val, $defs = Opal.defs, $truthy = Opal.truthy, $rb_plus = Opal.rb_plus, $to_a = Opal.to_a, $def = Opal.def, $send = Opal.send, $send2 = Opal.send2, $find_super = Opal.find_super, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,+,generate_outer_assignments,next_tmp,class,s,prepend_to_body,assign_loop_variable,transform_for_to_each_loop,updated,private,find,map,type,<<,process,attr_reader,new,to_a,result'); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'ForRewriter'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs(self, '$reset_tmp_counter!', $assign_ivar_val("counter", 0)); $defs(self, '$next_tmp', function $$next_tmp() { var self = this, $ret_or_1 = nil; if (self.counter == null) self.counter = nil; self.counter = ($truthy(($ret_or_1 = self.counter)) ? ($ret_or_1) : (0)); self.counter = $rb_plus(self.counter, 1); return "$for_tmp" + (self.counter); }); $def(self, '$on_for', function $$on_for(node) { var $a, self = this, loop_variable = nil, loop_range = nil, loop_body = nil, outer_assignments = nil, tmp_loop_variable = nil, get_tmp_loop_variable = nil; $a = [].concat($to_a(node)), (loop_variable = ($a[0] == null ? nil : $a[0])), (loop_range = ($a[1] == null ? nil : $a[1])), (loop_body = ($a[2] == null ? nil : $a[2])), $a; outer_assignments = self.$generate_outer_assignments(loop_variable, loop_body); tmp_loop_variable = self.$class().$next_tmp(); get_tmp_loop_variable = self.$s("js_tmp", tmp_loop_variable); loop_body = self.$prepend_to_body(loop_body, self.$assign_loop_variable(loop_variable, get_tmp_loop_variable)); node = self.$transform_for_to_each_loop(node, loop_range, tmp_loop_variable, loop_body); return node.$updated("begin", [].concat($to_a(outer_assignments)).concat([node])); }); self.$private(); $def(self, '$generate_outer_assignments', function $$generate_outer_assignments(loop_variable, loop_body) { var self = this, loop_local_vars = nil, body_local_vars = nil; loop_local_vars = $$('LocalVariableAssigns').$find(loop_variable); body_local_vars = $$('LocalVariableAssigns').$find(loop_body); return $send($rb_plus(loop_local_vars, body_local_vars), 'map', [], function $$1(lvar_name){var self = $$1.$$s == null ? this : $$1.$$s; if (lvar_name == null) lvar_name = nil; return self.$s("lvdeclare", lvar_name);}, {$$s: self}); }); $def(self, '$assign_loop_variable', function $$assign_loop_variable(loop_variable, tmp_loop_variable) { switch (loop_variable.$type().valueOf()) { case "mlhs": return loop_variable.$updated("masgn", [loop_variable, tmp_loop_variable]) default: return loop_variable['$<<'](tmp_loop_variable) } }); $def(self, '$transform_for_to_each_loop', function $$transform_for_to_each_loop(node, loop_range, tmp_loop_variable, loop_body) { var self = this; return node.$updated("send", [loop_range, "each", node.$updated("iter", [self.$s("args", self.$s("arg", tmp_loop_variable)), self.$process(loop_body)])]) }); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'LocalVariableAssigns'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$attr_reader("result"); $defs(self, '$find', function $$find(node) { var self = this, processor = nil; processor = self.$new(); processor.$process(node); return processor.$result().$to_a(); }); $def(self, '$initialize', function $$initialize() { var self = this; return (self.result = $$('Set').$new()) }); return $def(self, '$on_lvasgn', function $$on_lvasgn(node) { var $a, $yield = $$on_lvasgn.$$p || nil, self = this, name = nil, _ = nil; $$on_lvasgn.$$p = null; $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), (_ = ($a[1] == null ? nil : $a[1])), $a; self.$result()['$<<'](name); return $send2(self, $find_super(self, 'on_lvasgn', $$on_lvasgn, false, true), 'on_lvasgn', [node], $yield); }); })($nesting[0], $$('Base'), $nesting); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/js_reserved_words"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $regexp = Opal.regexp, $truthy = Opal.truthy, $defs = Opal.defs, $def = Opal.def, $range = Opal.range, $to_a = Opal.to_a, $send2 = Opal.send2, $find_super = Opal.find_super, $alias = Opal.alias, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,freeze,=~,!,valid_name?,class,to_sym,valid_ivar_name?,[],to_s,updated,fix_var_name,fix_ivar_name,on_restarg'); self.$require("opal/rewriters/base"); self.$require("opal/regexp_anchors"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'JsReservedWords'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $const_set($nesting[0], 'ES51_RESERVED_WORD', $regexp([$$('REGEXP_START'), "(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)", $$('REGEXP_END')]).$freeze()); $const_set($nesting[0], 'ES3_RESERVED_WORD_EXCLUSIVE', $regexp([$$('REGEXP_START'), "(?:int|byte|char|goto|long|final|float|short|double|native|throws|boolean|abstract|volatile|transient|synchronized)", $$('REGEXP_END')]).$freeze()); $const_set($nesting[0], 'PROTO_SPECIAL_PROPS', $regexp([$$('REGEXP_START'), "(?:constructor|displayName|__proto__|__parent__|__noSuchMethod__|__count__)", $$('REGEXP_END')]).$freeze()); $const_set($nesting[0], 'PROTO_SPECIAL_METHODS', $regexp([$$('REGEXP_START'), "(?:hasOwnProperty|valueOf)", $$('REGEXP_END')]).$freeze()); $const_set($nesting[0], 'IMMUTABLE_PROPS', $regexp([$$('REGEXP_START'), "(?:NaN|Infinity|undefined)", $$('REGEXP_END')]).$freeze()); $const_set($nesting[0], 'BASIC_IDENTIFIER_RULES', $regexp([$$('REGEXP_START'), "[$_a-z][$_a-z\\d]*", $$('REGEXP_END')], 'i').$freeze()); $const_set($nesting[0], 'RESERVED_FUNCTION_NAMES', $regexp([$$('REGEXP_START'), "(?:Array)", $$('REGEXP_END')]).$freeze()); $defs(self, '$valid_name?', function $JsReservedWords_valid_name$ques$1(name) { var $ret_or_1 = nil, $ret_or_2 = nil, $ret_or_3 = nil; if ($truthy(($ret_or_1 = $$('BASIC_IDENTIFIER_RULES')['$=~'](name)))) { return ($truthy(($ret_or_2 = ($truthy(($ret_or_3 = $$('ES51_RESERVED_WORD')['$=~'](name))) ? ($ret_or_3) : ($$('ES3_RESERVED_WORD_EXCLUSIVE')['$=~'](name))))) ? ($ret_or_2) : ($$('IMMUTABLE_PROPS')['$=~'](name)))['$!']() } else { return $ret_or_1 } }); $defs(self, '$valid_ivar_name?', function $JsReservedWords_valid_ivar_name$ques$2(name) { var $ret_or_1 = nil; return ($truthy(($ret_or_1 = $$('PROTO_SPECIAL_PROPS')['$=~'](name))) ? ($ret_or_1) : ($$('PROTO_SPECIAL_METHODS')['$=~'](name)))['$!']() }); $def(self, '$fix_var_name', function $$fix_var_name(name) { var self = this; if ($truthy(self.$class()['$valid_name?'](name))) { return name } else { return (("" + (name)) + "$").$to_sym() } }); $def(self, '$fix_ivar_name', function $$fix_ivar_name(name) { var self = this; if ($truthy(self.$class()['$valid_ivar_name?'](name.$to_s()['$[]']($range(1, -1, false))))) { return name } else { return (("" + (name)) + "$").$to_sym() } }); $def(self, '$on_lvar', function $$on_lvar(node) { var $a, $yield = $$on_lvar.$$p || nil, self = this, name = nil, _ = nil; $$on_lvar.$$p = null; $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), (_ = ($a[1] == null ? nil : $a[1])), $a; node = node.$updated(nil, [self.$fix_var_name(name)]); return $send2(self, $find_super(self, 'on_lvar', $$on_lvar, false, true), 'on_lvar', [node], null); }); $def(self, '$on_lvasgn', function $$on_lvasgn(node) { var $a, $yield = $$on_lvasgn.$$p || nil, self = this, name = nil, value = nil; $$on_lvasgn.$$p = null; $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), (value = ($a[1] == null ? nil : $a[1])), $a; node = ($truthy(value) ? (node.$updated(nil, [self.$fix_var_name(name), value])) : (node.$updated(nil, [self.$fix_var_name(name)]))); return $send2(self, $find_super(self, 'on_lvasgn', $$on_lvasgn, false, true), 'on_lvasgn', [node], null); }); $def(self, '$on_ivar', function $$on_ivar(node) { var $a, $yield = $$on_ivar.$$p || nil, self = this, name = nil, _ = nil; $$on_ivar.$$p = null; $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), (_ = ($a[1] == null ? nil : $a[1])), $a; node = node.$updated(nil, [self.$fix_ivar_name(name)]); return $send2(self, $find_super(self, 'on_ivar', $$on_ivar, false, true), 'on_ivar', [node], null); }); $def(self, '$on_ivasgn', function $$on_ivasgn(node) { var $a, $yield = $$on_ivasgn.$$p || nil, self = this, name = nil, value = nil; $$on_ivasgn.$$p = null; $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), (value = ($a[1] == null ? nil : $a[1])), $a; node = ($truthy(value) ? (node.$updated(nil, [self.$fix_ivar_name(name), value])) : (node.$updated(nil, [self.$fix_ivar_name(name)]))); return $send2(self, $find_super(self, 'on_ivasgn', $$on_ivasgn, false, true), 'on_ivasgn', [node], null); }); $def(self, '$on_restarg', function $$on_restarg(node) { var $a, self = this, name = nil, _ = nil; $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), (_ = ($a[1] == null ? nil : $a[1])), $a; if ($truthy(name)) { node = node.$updated(nil, [self.$fix_var_name(name)], (new Map([["meta", (new Map([["arg_name", name]]))]]))) }; return node; }); $alias(self, "on_kwrestarg", "on_restarg"); return $def(self, '$on_argument', function $$on_argument(node) { var $a, $yield = $$on_argument.$$p || nil, self = this, name = nil, value = nil, fixed_name = nil, new_children = nil; $$on_argument.$$p = null; node = $send2(self, $find_super(self, 'on_argument', $$on_argument, false, true), 'on_argument', [node], null); $a = [].concat($to_a(node)), (name = ($a[0] == null ? nil : $a[0])), (value = ($a[1] == null ? nil : $a[1])), $a; fixed_name = self.$fix_var_name(name); new_children = ($truthy(value) ? ([fixed_name, value]) : ([fixed_name])); return node.$updated(nil, new_children, (new Map([["meta", (new Map([["arg_name", name]]))]]))); }); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/block_to_iter"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $to_a = Opal.to_a, $rb_plus = Opal.rb_plus, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,s,process,updated,+,children'); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'BlockToIter'); return $def(self, '$on_block', function $$on_block(node) { var $a, self = this, recvr = nil, args = nil, body = nil, iter_node = nil; $a = [].concat($to_a(node)), (recvr = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), $a; iter_node = self.$s("iter", args, body); return self.$process(recvr.$updated(nil, $rb_plus(recvr.$children(), [iter_node]))); }) })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/dot_js_syntax"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $to_a = Opal.to_a, $slice = Opal.slice, $eqeq = Opal.eqeq, $truthy = Opal.truthy, $neqeq = Opal.neqeq, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $send = Opal.send, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,==,type,!=,size,error,first,to_js_attr_call,to_js_attr_assign_call,to_native_js_call,s'); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'DotJsSyntax'); $def(self, '$on_send', function $$on_send(node) { var $a, $yield = $$on_send.$$p || nil, self = this, recv = nil, meth = nil, args = nil, recv_of_recv = nil, meth_of_recv = nil, _ = nil, property = nil, value = nil; $$on_send.$$p = null; $a = [].concat($to_a(node)), (recv = ($a[0] == null ? nil : $a[0])), (meth = ($a[1] == null ? nil : $a[1])), (args = $slice($a, 2)), $a; if (($truthy(recv) && ($eqeq(recv.$type(), "send")))) { $a = [].concat($to_a(recv)), (recv_of_recv = ($a[0] == null ? nil : $a[0])), (meth_of_recv = ($a[1] == null ? nil : $a[1])), (_ = ($a[2] == null ? nil : $a[2])), $a; if ($eqeq(meth_of_recv, "JS")) { switch (meth.valueOf()) { case "[]": if ($neqeq(args.$size(), 1)) { self.$error(".JS[:property] syntax supports only one argument") }; property = args.$first(); node = self.$to_js_attr_call(recv_of_recv, property); break; case "[]=": if ($neqeq(args.$size(), 2)) { self.$error(".JS[:property]= syntax supports only two arguments") }; $a = [].concat($to_a(args)), (property = ($a[0] == null ? nil : $a[0])), (value = ($a[1] == null ? nil : $a[1])), $a; node = self.$to_js_attr_assign_call(recv_of_recv, property, value); break; default: node = self.$to_native_js_call(recv_of_recv, meth, args) }; return $send2(self, $find_super(self, 'on_send', $$on_send, false, true), 'on_send', [node], null); } else { return $send2(self, $find_super(self, 'on_send', $$on_send, false, true), 'on_send', [node], $yield) }; } else { return $send2(self, $find_super(self, 'on_send', $$on_send, false, true), 'on_send', [node], $yield) }; }); $def(self, '$to_native_js_call', function $$to_native_js_call(recv, meth, args) { var self = this; return $send(self, 's', ["jscall", recv, meth].concat($to_a(args))) }); $def(self, '$to_js_attr_call', function $$to_js_attr_call(recv, property) { var self = this; return self.$s("jsattr", recv, property) }); return $def(self, '$to_js_attr_assign_call', function $$to_js_attr_assign_call(recv, property, value) { var self = this; return self.$s("jsattrasgn", recv, property, value) }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/pattern_matching"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $to_a = Opal.to_a, $rb_plus = Opal.rb_plus, $slice = Opal.slice, $truthy = Opal.truthy, $send = Opal.send, $not = Opal.not, $neqeq = Opal.neqeq, $eqeq = Opal.eqeq, $return_ivar = Opal.return_ivar, $alias = Opal.alias, $eqeqeq = Opal.eqeqeq, $Opal = Opal.Opal, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,s,convert_full_pattern,raise_no_matching_pattern_error,+,process,single_case_match,private,shift,type,!,empty?,!=,==,class,new,run!,variables,pattern,map,<<,array,on_literal,first,children,to_proc,method,each,to_ast,on_array_pattern,compact,[],==='); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'PatternMatching'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.depth = nil; $def(self, '$initialize', function $$initialize() { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.depth = 0; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [], $yield); }); $def(self, '$on_match_pattern', function $$on_match_pattern(node) { var $a, self = this, from = nil, pat = nil; $a = [].concat($to_a(node)), (from = ($a[0] == null ? nil : $a[0])), (pat = ($a[1] == null ? nil : $a[1])), $a; return self.$s("begin", self.$s("lvasgn", "$pmvar", from), self.$s("if", self.$convert_full_pattern(from, pat), nil, self.$raise_no_matching_pattern_error("$pmvar"))); }); $def(self, '$on_match_pattern_p', function $$on_match_pattern_p(node) { var $a, self = this, from = nil, pat = nil; $a = [].concat($to_a(node)), (from = ($a[0] == null ? nil : $a[0])), (pat = ($a[1] == null ? nil : $a[1])), $a; return self.$s("if", self.$convert_full_pattern(from, pat), self.$s("true"), self.$s("false")); }); $def(self, '$on_case_match', function $$on_case_match(node) { var $a, $b, self = this, cmvar = nil, from = nil, cases = nil, els = nil; self.depth = $rb_plus(self.depth, 1); cmvar = "$cmvar" + (self.depth); $a = [].concat($to_a(node)), (from = ($a[0] == null ? nil : $a[0])), $b = $a.length - 1, $b = ($b < 1) ? 1 : $b, (cases = $slice($a, 1, $b)), (els = ($a[$b] == null ? nil : $a[$b])), $a; if ($truthy(els)) { self.$process(els) } else { els = self.$raise_no_matching_pattern_error(cmvar) }; return self.$s("begin", self.$s("lvasgn", cmvar, from), $send(self, 'single_case_match', [cmvar].concat($to_a(cases)).concat([els]))); }); self.$private(); $def(self, '$raise_no_matching_pattern_error', function $$raise_no_matching_pattern_error(from) { var self = this; return self.$s("send", nil, "raise", self.$s("const", self.$s("cbase"), "NoMatchingPatternError"), self.$s("lvar", from)) }); $def(self, '$single_case_match', function $$single_case_match(from, $a, $b) { var $post_args, cases, els, $c, self = this, cas = nil, pat = nil, if_guard = nil, body = nil, guard = nil; $post_args = $slice(arguments, 1); cases = $post_args.splice(0, $post_args.length - 1); els = $post_args.shift();if (els == null) els = nil; cas = cases.$shift(); $c = [].concat($to_a(cas)), (pat = ($c[0] == null ? nil : $c[0])), (if_guard = ($c[1] == null ? nil : $c[1])), (body = ($c[2] == null ? nil : $c[2])), $c; pat = self.$convert_full_pattern(from, pat); if ($truthy(if_guard)) { $c = [].concat($to_a(if_guard)), (guard = ($c[0] == null ? nil : $c[0])), $c; switch (if_guard.$type().valueOf()) { case "if_guard": pat = self.$s("and", pat, guard) break; case "unless_guard": pat = self.$s("and", pat, self.$s("send", guard, "!")) break; default: nil }; }; return self.$s("if", pat, self.$process(body), ($not(cases['$empty?']()) ? ($send(self, 'single_case_match', [from].concat($to_a(cases)).concat([els]))) : ($neqeq(els, self.$s("empty_else")) ? (els) : nil))); }, -3); $def(self, '$convert_full_pattern', function $$convert_full_pattern(from, pat) { var self = this, converter = nil; if ($eqeq(from.$class(), $$('Symbol'))) { from = self.$s("lvar", from) }; converter = $$('PatternConverter').$new(pat); converter['$run!'](); return self.$s("masgn", $send(self, 's', ["mlhs"].concat($to_a(converter.$variables()))), self.$s("send", self.$s("const", self.$s("cbase"), "PatternMatching"), "call", from, converter.$pattern())); }); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'PatternConverter'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.pat = $proto.variables = nil; $def(self, '$initialize', function $$initialize(pat) { var self = this; self.pat = pat; return (self.variables = []); }); $def(self, '$run!', function $PatternConverter_run$excl$1() { var self = this; return (self.outpat = self.$process(self.pat)) }); $def(self, '$pattern', $return_ivar("outpat")); $def(self, '$variables', function $$variables() { var self = this; return $send(self.variables, 'map', [], function $$2(i){var self = $$2.$$s == null ? this : $$2.$$s; if (i == null) i = nil; return self.$s("lvasgn", i);}, {$$s: self}) }); $def(self, '$on_match_var', function $$on_match_var(node) { var $a, self = this, var$ = nil; $a = [].concat($to_a(node)), (var$ = ($a[0] == null ? nil : $a[0])), $a; self.variables['$<<'](var$); return self.$s("sym", "var"); }); $def(self, '$on_match_as', function $$on_match_as(node) { var $a, self = this, pat = nil, save = nil; $a = [].concat($to_a(node)), (pat = ($a[0] == null ? nil : $a[0])), (save = ($a[1] == null ? nil : $a[1])), $a; self.$process(save); return self.$array(self.$s("sym", "save"), self.$process(pat)); }); $def(self, '$on_literal', function $$on_literal(node) { var self = this; return self.$array(self.$s("sym", "lit"), node) }); $alias(self, "on_int", "on_literal"); $alias(self, "on_float", "on_literal"); $alias(self, "on_complex", "on_literal"); $alias(self, "on_rational", "on_literal"); $alias(self, "on_array", "on_literal"); $alias(self, "on_str", "on_literal"); $alias(self, "on_dstr", "on_literal"); $alias(self, "on_xstr", "on_literal"); $alias(self, "on_sym", "on_literal"); $alias(self, "on_irange", "on_literal"); $alias(self, "on_erange", "on_literal"); $alias(self, "on_const", "on_literal"); $alias(self, "on_regexp", "on_literal"); $alias(self, "on_lambda", "on_literal"); $alias(self, "on_begin", "on_literal"); $def(self, '$on_pin', function $$on_pin(node) { var self = this; return self.$on_literal(node.$children().$first()) }); $def(self, '$on_match_rest', function $$on_match_rest(node) { var self = this; if ($truthy(node.$children()['$empty?']())) { return self.$array(self.$s("sym", "rest")) } else { return self.$array(self.$s("sym", "rest"), self.$process(node.$children().$first())) } }); $def(self, '$on_match_alt', function $$on_match_alt(node) { var self = this; return $send(self, 'array', [self.$s("sym", "any")].concat($to_a($send(node.$children(), 'map', [], self.$method("process").$to_proc())))) }); $def(self, '$on_const_pattern', function $$on_const_pattern(node) { var self = this; return $send(self, 'array', [self.$s("sym", "all")].concat($to_a($send(node.$children(), 'map', [], self.$method("process").$to_proc())))) }); $def(self, '$on_array_pattern', function $$on_array_pattern(node, tail) { var self = this, children = nil, fixed_size = nil, array_size = nil; if (tail == null) tail = false; children = [].concat($to_a(node)); if ($truthy(tail)) { children['$<<'](self.$s("match_rest")) }; fixed_size = true; array_size = 0; children = $send(children, 'each', [], function $$3(i){ if (i == null) i = nil; switch (i.$type().valueOf()) { case "match_rest": return (fixed_size = false) default: return (array_size = $rb_plus(array_size, 1)) };}); return self.$array(self.$s("sym", "array"), self.$to_ast(fixed_size), self.$to_ast(array_size), self.$to_ast($send(children, 'map', [], self.$method("process").$to_proc()))); }, -2); $def(self, '$on_array_pattern_with_tail', function $$on_array_pattern_with_tail(node) { var self = this; return self.$on_array_pattern(node, true) }); $def(self, '$on_hash_pattern', function $$on_hash_pattern(node) { var self = this, children = nil, any_size = nil; children = [].concat($to_a(node)); any_size = ($truthy(children['$empty?']()) ? (self.$to_ast(false)) : (self.$to_ast(true))); children = $send(children, 'map', [], function $$4(i){var self = $$4.$$s == null ? this : $$4.$$s; if (i == null) i = nil; switch (i.$type().valueOf()) { case "pair": return self.$array(i.$children()['$[]'](0), self.$process(i.$children()['$[]'](1))) case "match_var": return self.$array(self.$s("sym", i.$children()['$[]'](0)), self.$process(i)) case "match_nil_pattern": any_size = self.$to_ast(false); return nil; case "match_rest": if ($truthy(i.$children().$first())) { any_size = self.$process(i.$children().$first()) } else { any_size = self.$to_ast(true) }; return nil; default: return nil };}, {$$s: self}).$compact(); return self.$array(self.$s("sym", "hash"), any_size, $send(self, 'array', $to_a(children))); }); $def(self, '$on_find_pattern', function $$on_find_pattern(node) { var self = this, children = nil; children = [].concat($to_a(node)); children = $send(children, 'map', [], self.$method("process").$to_proc()); return self.$array(self.$s("sym", "find"), $send(self, 'array', $to_a(children))); }); self.$private(); $def(self, '$array', function $$array($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return self.$to_ast(args); }, -1); return $def(self, '$to_ast', function $$to_ast(val) { var self = this, $ret_or_1 = nil; if ($eqeqeq($$('Array'), ($ret_or_1 = val))) { return $send(self, 's', ["array"].concat($to_a(val))) } else if ($eqeqeq($$('Integer'), $ret_or_1)) { return self.$s("int", val) } else if ($eqeqeq(true, $ret_or_1)) { return self.$s("true") } else if ($eqeqeq(false, $ret_or_1)) { return self.$s("false") } else if ($eqeqeq(nil, $ret_or_1)) { return self.$s("nil") } else { return nil } }); })($nesting[0], $$$($$$($Opal, 'Rewriters'), 'Base'), $nesting); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/logical_operator_assignment"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $class_variable_set = Opal.class_variable_set, $defs = Opal.defs, $truthy = Opal.truthy, $class_variable_get = Opal.class_variable_get, $rb_plus = Opal.rb_plus, $const_set = Opal.const_set, $lambda = Opal.lambda, $eqeq = Opal.eqeq, $to_a = Opal.to_a, $slice = Opal.slice, $send = Opal.send, $def = Opal.def, $send2 = Opal.send2, $find_super = Opal.find_super, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,+,updated,s,==,include?,[],type,new_temp,freeze,call,fetch,error,process'); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'LogicalOperatorAssignment'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs(self, '$reset_tmp_counter!', function $LogicalOperatorAssignment_reset_tmp_counter$excl$1() { return $class_variable_set($nesting[0], '@@counter', 0) }); $defs(self, '$new_temp', function $$new_temp() { var $a, $ret_or_1 = nil; $class_variable_set($nesting[0], '@@counter', ($truthy((($a = $nesting[0].$$cvars['@@counter'], $a != null) ? 'class variable' : nil)) ? (($truthy(($ret_or_1 = $class_variable_get($nesting[0], '@@counter', false))) ? ($ret_or_1) : (0))) : (0))); $class_variable_set($nesting[0], '@@counter', $rb_plus($class_variable_get($nesting[0], '@@counter', false), 1)); return "$logical_op_recvr_tmp_" + ($class_variable_get($nesting[0], '@@counter', false)); }); $const_set($nesting[0], 'GET_SET', $lambda(function $LogicalOperatorAssignment$2(get_type, set_type){var self = $LogicalOperatorAssignment$2.$$s == null ? this : $LogicalOperatorAssignment$2.$$s; if (get_type == null) get_type = nil; if (set_type == null) set_type = nil; return $lambda(function $$3(lhs, rhs, root_type){var self = $$3.$$s == null ? this : $$3.$$s, get_node = nil, condition_node = nil, defined_node = nil; if (lhs == null) lhs = nil; if (rhs == null) rhs = nil; if (root_type == null) root_type = nil; get_node = lhs.$updated(get_type); condition_node = self.$s(root_type, get_node, rhs); if (($truthy(["const", "cvar"]['$include?'](get_type)) && ($eqeq(root_type, "or")))) { defined_node = self.$s("defined?", get_node); condition_node = self.$s("if", defined_node, self.$s("begin", condition_node), rhs); }; return lhs.$updated(set_type, [].concat($to_a(lhs)).concat([condition_node]));}, {$$s: self});}, {$$s: self})); $const_set($nesting[0], 'LocalVariableHandler', $$('GET_SET')['$[]']("lvar", "lvasgn")); $const_set($nesting[0], 'InstanceVariableHandler', $$('GET_SET')['$[]']("ivar", "ivasgn")); $const_set($nesting[0], 'ConstantHandler', $$('GET_SET')['$[]']("const", "casgn")); $const_set($nesting[0], 'GlobalVariableHandler', $$('GET_SET')['$[]']("gvar", "gvasgn")); $const_set($nesting[0], 'ClassVariableHandler', $$('GET_SET')['$[]']("cvar", "cvasgn")); (function($base, $super) { var self = $klass($base, $super, 'SendHandler'); return $defs(self, '$call', function $$call(lhs, rhs, root_type) { var $a, self = this, recvr = nil, reader_method = nil, args = nil, recvr_tmp = nil, cache_recvr = nil, writer_method = nil, call_reader = nil, call_writer = nil, get_or_set = nil; $a = [].concat($to_a(lhs)), (recvr = ($a[0] == null ? nil : $a[0])), (reader_method = ($a[1] == null ? nil : $a[1])), (args = $slice($a, 2)), $a; if (($truthy(recvr) && ($eqeq(recvr.$type(), "send")))) { recvr_tmp = self.$new_temp(); cache_recvr = self.$s("lvasgn", recvr_tmp, recvr); recvr = self.$s("js_tmp", recvr_tmp); }; writer_method = "" + (reader_method) + "="; call_reader = lhs.$updated("send", [recvr, reader_method].concat($to_a(args))); call_writer = lhs.$updated("send", [recvr, writer_method].concat($to_a(args)).concat([rhs])); get_or_set = self.$s(root_type, call_reader, call_writer); if ($truthy(cache_recvr)) { return self.$s("begin", cache_recvr, get_or_set) } else { return get_or_set }; }) })($nesting[0], self); (function($base, $super) { var self = $klass($base, $super, 'ConditionalSendHandler'); return $defs(self, '$call', function $$call(lhs, rhs, root_type) { var $a, self = this, recvr = nil, meth = nil, args = nil, recvr_tmp = nil, cache_recvr = nil, recvr_is_nil = nil, plain_send = nil, plain_or_asgn = nil; root_type = "" + (root_type) + "_asgn"; $a = [].concat($to_a(lhs)), (recvr = ($a[0] == null ? nil : $a[0])), (meth = ($a[1] == null ? nil : $a[1])), (args = $slice($a, 2)), $a; recvr_tmp = self.$new_temp(); cache_recvr = self.$s("lvasgn", recvr_tmp, recvr); recvr = self.$s("js_tmp", recvr_tmp); recvr_is_nil = self.$s("send", recvr, "nil?"); plain_send = lhs.$updated("send", [recvr, meth].concat($to_a(args))); plain_or_asgn = self.$s(root_type, plain_send, rhs); return self.$s("begin", cache_recvr, self.$s("if", recvr_is_nil, self.$s("nil"), plain_or_asgn)); }) })($nesting[0], self); $const_set($nesting[0], 'HANDLERS', (new Map([["lvasgn", $$('LocalVariableHandler')], ["ivasgn", $$('InstanceVariableHandler')], ["casgn", $$('ConstantHandler')], ["gvasgn", $$('GlobalVariableHandler')], ["cvasgn", $$('ClassVariableHandler')], ["send", $$('SendHandler')], ["csend", $$('ConditionalSendHandler')]])).$freeze()); $def(self, '$on_or_asgn', function $$on_or_asgn(node) { var $a, self = this, lhs = nil, rhs = nil, result = nil; $a = [].concat($to_a(node)), (lhs = ($a[0] == null ? nil : $a[0])), (rhs = ($a[1] == null ? nil : $a[1])), $a; result = $send($$('HANDLERS'), 'fetch', [lhs.$type()], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; return self.$error("cannot handle LHS type: " + (lhs.$type()))}, {$$s: self}).$call(lhs, rhs, "or"); return self.$process(result); }); $def(self, '$on_and_asgn', function $$on_and_asgn(node) { var $a, self = this, lhs = nil, rhs = nil, result = nil; $a = [].concat($to_a(node)), (lhs = ($a[0] == null ? nil : $a[0])), (rhs = ($a[1] == null ? nil : $a[1])), $a; result = $send($$('HANDLERS'), 'fetch', [lhs.$type()], function $$5(){var self = $$5.$$s == null ? this : $$5.$$s; return self.$error("cannot handle LHS type: " + (lhs.$type()))}, {$$s: self}).$call(lhs, rhs, "and"); return self.$process(result); }); $const_set($nesting[0], 'ASSIGNMENT_STRING_NODE', self.$s("str", "assignment")); return $def(self, '$on_defined?', function $LogicalOperatorAssignment_on_defined$ques$6(node) { var $a, $yield = $LogicalOperatorAssignment_on_defined$ques$6.$$p || nil, self = this, inner = nil, _ = nil; $LogicalOperatorAssignment_on_defined$ques$6.$$p = null; $a = [].concat($to_a(node)), (inner = ($a[0] == null ? nil : $a[0])), (_ = ($a[1] == null ? nil : $a[1])), $a; if ($truthy(["or_asgn", "and_asgn"]['$include?'](inner.$type()))) { return $$('ASSIGNMENT_STRING_NODE') } else { return $send2(self, $find_super(self, 'on_defined?', $LogicalOperatorAssignment_on_defined$ques$6, false, true), 'on_defined?', [node], null) }; }); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/binary_operator_assignment"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $class_variable_set = Opal.class_variable_set, $defs = Opal.defs, $truthy = Opal.truthy, $class_variable_get = Opal.class_variable_get, $rb_plus = Opal.rb_plus, $const_set = Opal.const_set, $lambda = Opal.lambda, $to_a = Opal.to_a, $slice = Opal.slice, $eqeq = Opal.eqeq, $send = Opal.send, $def = Opal.def, $send2 = Opal.send2, $find_super = Opal.find_super, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,+,updated,[],==,type,new_temp,s,freeze,call,fetch,error,process'); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'BinaryOperatorAssignment'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs(self, '$reset_tmp_counter!', function $BinaryOperatorAssignment_reset_tmp_counter$excl$1() { return $class_variable_set($nesting[0], '@@counter', 0) }); $defs(self, '$new_temp', function $$new_temp() { var $a, $ret_or_1 = nil; $class_variable_set($nesting[0], '@@counter', ($truthy((($a = $nesting[0].$$cvars['@@counter'], $a != null) ? 'class variable' : nil)) ? (($truthy(($ret_or_1 = $class_variable_get($nesting[0], '@@counter', false))) ? ($ret_or_1) : (0))) : (0))); $class_variable_set($nesting[0], '@@counter', $rb_plus($class_variable_get($nesting[0], '@@counter', false), 1)); return "$binary_op_recvr_tmp_" + ($class_variable_get($nesting[0], '@@counter', false)); }); $const_set($nesting[0], 'GET_SET', $lambda(function $BinaryOperatorAssignment$2(get_type, set_type){ if (get_type == null) get_type = nil; if (set_type == null) set_type = nil; return $lambda(function $$3(node, lhs, operation, rhs){var get_node = nil, set_node = nil; if (node == null) node = nil; if (lhs == null) lhs = nil; if (operation == null) operation = nil; if (rhs == null) rhs = nil; get_node = lhs.$updated(get_type); set_node = node.$updated("send", [get_node, operation, rhs]); return lhs.$updated(set_type, [].concat($to_a(lhs)).concat([set_node]));});})); $const_set($nesting[0], 'LocalVariableHandler', $$('GET_SET')['$[]']("lvar", "lvasgn")); $const_set($nesting[0], 'InstanceVariableHandler', $$('GET_SET')['$[]']("ivar", "ivasgn")); $const_set($nesting[0], 'ConstantHandler', $$('GET_SET')['$[]']("const", "casgn")); $const_set($nesting[0], 'GlobalVariableHandler', $$('GET_SET')['$[]']("gvar", "gvasgn")); $const_set($nesting[0], 'ClassVariableHandler', $$('GET_SET')['$[]']("cvar", "cvasgn")); (function($base, $super) { var self = $klass($base, $super, 'SendHandler'); return $defs(self, '$call', function $$call(node, lhs, operation, rhs) { var $a, self = this, recvr = nil, reader_method = nil, args = nil, recvr_tmp = nil, cache_recvr = nil, writer_method = nil, call_reader = nil, call_op = nil, call_writer = nil; $a = [].concat($to_a(lhs)), (recvr = ($a[0] == null ? nil : $a[0])), (reader_method = ($a[1] == null ? nil : $a[1])), (args = $slice($a, 2)), $a; if (($truthy(recvr) && ($eqeq(recvr.$type(), "send")))) { recvr_tmp = self.$new_temp(); cache_recvr = self.$s("lvasgn", recvr_tmp, recvr); recvr = self.$s("js_tmp", recvr_tmp); }; writer_method = "" + (reader_method) + "="; call_reader = lhs.$updated("send", [recvr, reader_method].concat($to_a(args))); call_op = node.$updated("send", [call_reader, operation, rhs]); call_writer = lhs.$updated("send", [recvr, writer_method].concat($to_a(args)).concat([call_op])); if ($truthy(cache_recvr)) { return node.$updated("begin", [cache_recvr, call_writer]) } else { return call_writer }; }) })($nesting[0], self); (function($base, $super) { var self = $klass($base, $super, 'ConditionalSendHandler'); return $defs(self, '$call', function $$call(node, lhs, operation, rhs) { var $a, self = this, recvr = nil, meth = nil, args = nil, recvr_tmp = nil, cache_recvr = nil, recvr_is_nil = nil, plain_send = nil, plain_op_asgn = nil; $a = [].concat($to_a(lhs)), (recvr = ($a[0] == null ? nil : $a[0])), (meth = ($a[1] == null ? nil : $a[1])), (args = $slice($a, 2)), $a; recvr_tmp = self.$new_temp(); cache_recvr = self.$s("lvasgn", recvr_tmp, recvr); recvr = self.$s("js_tmp", recvr_tmp); recvr_is_nil = self.$s("send", recvr, "nil?"); plain_send = lhs.$updated("send", [recvr, meth].concat($to_a(args))); plain_op_asgn = node.$updated("op_asgn", [plain_send, operation, rhs]); return self.$s("begin", cache_recvr, self.$s("if", recvr_is_nil, self.$s("nil"), plain_op_asgn)); }) })($nesting[0], self); $const_set($nesting[0], 'HANDLERS', (new Map([["lvasgn", $$('LocalVariableHandler')], ["ivasgn", $$('InstanceVariableHandler')], ["casgn", $$('ConstantHandler')], ["gvasgn", $$('GlobalVariableHandler')], ["cvasgn", $$('ClassVariableHandler')], ["send", $$('SendHandler')], ["csend", $$('ConditionalSendHandler')]])).$freeze()); $def(self, '$on_op_asgn', function $$on_op_asgn(node) { var $a, self = this, lhs = nil, op = nil, rhs = nil, result = nil; $a = [].concat($to_a(node)), (lhs = ($a[0] == null ? nil : $a[0])), (op = ($a[1] == null ? nil : $a[1])), (rhs = ($a[2] == null ? nil : $a[2])), $a; result = $send($$('HANDLERS'), 'fetch', [lhs.$type()], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; return self.$error("cannot handle LHS type: " + (lhs.$type()))}, {$$s: self}).$call(node, lhs, op, rhs); return self.$process(result); }); $const_set($nesting[0], 'ASSIGNMENT_STRING_NODE', self.$s("str", "assignment")); return $def(self, '$on_defined?', function $BinaryOperatorAssignment_on_defined$ques$5(node) { var $a, $yield = $BinaryOperatorAssignment_on_defined$ques$5.$$p || nil, self = this, inner = nil, _ = nil; $BinaryOperatorAssignment_on_defined$ques$5.$$p = null; $a = [].concat($to_a(node)), (inner = ($a[0] == null ? nil : $a[0])), (_ = ($a[1] == null ? nil : $a[1])), $a; if ($eqeq(inner.$type(), "op_asgn")) { return $$('ASSIGNMENT_STRING_NODE') } else { return $send2(self, $find_super(self, 'on_defined?', $BinaryOperatorAssignment_on_defined$ques$5, false, true), 'on_defined?', [node], null) }; }); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/hashes/key_duplicates_rewriter"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $Opal = Opal.Opal, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,new,include?,type,<<,==,process_regular_node,updated,inspect,warn'); self.$require("opal/rewriters/base"); self.$require("set"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Hashes'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'KeyDuplicatesRewriter'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.keys = nil; $def(self, '$initialize', function $$initialize() { var self = this; return (self.keys = $$('UniqKeysSet').$new()) }); $def(self, '$on_hash', function $$on_hash(node) { var $a, $yield = $$on_hash.$$p || nil, self = this, previous_keys = nil; $$on_hash.$$p = null; return (function() { try { $a = [self.keys, $$('UniqKeysSet').$new()], (previous_keys = $a[0]), (self.keys = $a[1]), $a; return $send2(self, $find_super(self, 'on_hash', $$on_hash, false, true), 'on_hash', [node], null); } finally { (self.keys = previous_keys) }; })() }); $def(self, '$on_pair', function $$on_pair(node) { var $a, $yield = $$on_pair.$$p || nil, self = this, key = nil, _value = nil; $$on_pair.$$p = null; $a = [].concat($to_a(node)), (key = ($a[0] == null ? nil : $a[0])), (_value = ($a[1] == null ? nil : $a[1])), $a; if ($truthy(["str", "sym"]['$include?'](key.$type()))) { self.keys['$<<'](key) }; return $send2(self, $find_super(self, 'on_pair', $$on_pair, false, true), 'on_pair', [node], null); }); $def(self, '$on_kwsplat', function $$on_kwsplat(node) { var $a, self = this, hash = nil, _ = nil; $a = [].concat($to_a(node)), (hash = ($a[0] == null ? nil : $a[0])), (_ = ($a[1] == null ? nil : $a[1])), $a; if ($eqeq(hash.$type(), "hash")) { hash = self.$process_regular_node(hash) }; return node.$updated(nil, [hash]); }); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'UniqKeysSet'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.set = nil; $def(self, '$initialize', function $$initialize() { var self = this; return (self.set = $$('Set').$new()) }); return $def(self, '$<<', function $UniqKeysSet_$lt$lt$1(element) { var $a, self = this, key = nil, _ = nil; if ($truthy(self.set['$include?'](element))) { $a = [].concat($to_a(element)), (key = ($a[0] == null ? nil : $a[0])), (_ = ($a[1] == null ? nil : $a[1])), $a; key = ($eqeq(element.$type(), "str") ? (key.$inspect()) : (":" + (key))); return $$('Kernel').$warn("warning: key " + (key) + " is duplicated and overwritten"); } else { return self.set['$<<'](element) } }); })($nesting[0], null, $nesting); })($nesting[0], $$$($$$($Opal, 'Rewriters'), 'Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/dump_args"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,updated'); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'DumpArgs'); $def(self, '$on_def', function $$on_def(node) { var $a, $yield = $$on_def.$$p || nil, self = this, _mid = nil, args = nil, _body = nil; $$on_def.$$p = null; node = $send2(self, $find_super(self, 'on_def', $$on_def, false, true), 'on_def', [node], null); $a = [].concat($to_a(node)), (_mid = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (_body = ($a[2] == null ? nil : $a[2])), $a; return node.$updated(nil, nil, (new Map([["meta", (new Map([["original_args", args]]))]]))); }); $def(self, '$on_defs', function $$on_defs(node) { var $a, $yield = $$on_defs.$$p || nil, self = this, _recv = nil, _mid = nil, args = nil, _body = nil; $$on_defs.$$p = null; node = $send2(self, $find_super(self, 'on_defs', $$on_defs, false, true), 'on_defs', [node], null); $a = [].concat($to_a(node)), (_recv = ($a[0] == null ? nil : $a[0])), (_mid = ($a[1] == null ? nil : $a[1])), (args = ($a[2] == null ? nil : $a[2])), (_body = ($a[3] == null ? nil : $a[3])), $a; return node.$updated(nil, nil, (new Map([["meta", (new Map([["original_args", args]]))]]))); }); return $def(self, '$on_iter', function $$on_iter(node) { var $a, $yield = $$on_iter.$$p || nil, self = this, args = nil, _body = nil; $$on_iter.$$p = null; node = $send2(self, $find_super(self, 'on_iter', $$on_iter, false, true), 'on_iter', [node], null); $a = [].concat($to_a(node)), (args = ($a[0] == null ? nil : $a[0])), (_body = ($a[1] == null ? nil : $a[1])), $a; return node.$updated(nil, nil, (new Map([["meta", (new Map([["original_args", args]]))]]))); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/deduplicate_arg_name"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send = Opal.send, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $truthy = Opal.truthy, $to_ary = Opal.to_ary, $rb_plus = Opal.rb_plus, $rb_gt = Opal.rb_gt, $nesting = [], nil = Opal.nil; Opal.add_stubs('new,map,children,rename_arg,updated,type,[],unique_name,[]=,+,>'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'DeduplicateArgName'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.arg_name_count = nil; $def(self, '$on_args', function $$on_args(node) { var $yield = $$on_args.$$p || nil, self = this, children = nil; $$on_args.$$p = null; self.arg_name_count = $$('Hash').$new(0); children = $send(node.$children(), 'map', [], function $$1(arg){var self = $$1.$$s == null ? this : $$1.$$s; if (arg == null) arg = nil; return self.$rename_arg(arg);}, {$$s: self}); return $send2(self, $find_super(self, 'on_args', $$on_args, false, true), 'on_args', [node.$updated(nil, children)], null); }); $def(self, '$rename_arg', function $$rename_arg(arg) { var $a, $b, self = this, name = nil, value = nil, new_children = nil; switch (arg.$type().valueOf()) { case "arg": case "restarg": case "kwarg": case "kwrestarg": case "blockarg": name = arg.$children()['$[]'](0); if ($truthy(name)) { return arg.$updated(nil, [self.$unique_name(name)]) } else { return arg }; break; case "optarg": case "kwoptarg": $b = arg.$children(), $a = $to_ary($b), (name = ($a[0] == null ? nil : $a[0])), (value = ($a[1] == null ? nil : $a[1])), $b; return arg.$updated(nil, [self.$unique_name(name), value]); case "mlhs": new_children = $send(arg.$children(), 'map', [], function $$2(child){var self = $$2.$$s == null ? this : $$2.$$s; if (child == null) child = nil; return self.$rename_arg(child);}, {$$s: self}); return arg.$updated(nil, new_children); default: return arg } }); return $def(self, '$unique_name', function $$unique_name(name) { var $a, self = this, count = nil; count = ($a = [name, $rb_plus(self.arg_name_count['$[]'](name), 1)], $send(self.arg_name_count, '[]=', $a), $a[$a.length - 1]); if ($truthy($rb_gt(count, 1))) { return "" + (name) + "_$" + (count) } else { return name }; }); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/rewriters/mlhs_args"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $truthy = Opal.truthy, $def = Opal.def, $assign_ivar_val = Opal.assign_ivar_val, $rb_plus = Opal.rb_plus, $send = Opal.send, $eqeq = Opal.eqeq, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,new,updated,rewritten,initialization,s,prepend_to_body,attr_reader,split!,+,each,children,==,type,new_mlhs_tmp,process,<<,length,[],empty?'); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'MlhsArgs'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$on_def', function $$on_def(node) { var $a, $yield = $$on_def.$$p || nil, self = this, mid = nil, args = nil, body = nil, arguments$ = nil, $ret_or_1 = nil; $$on_def.$$p = null; node = $send2(self, $find_super(self, 'on_def', $$on_def, false, true), 'on_def', [node], null); $a = [].concat($to_a(node)), (mid = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), $a; arguments$ = $$('Arguments').$new(args); args = args.$updated(nil, arguments$.$rewritten()); if ($truthy(arguments$.$initialization())) { body = ($truthy(($ret_or_1 = body)) ? ($ret_or_1) : (self.$s("nil"))); body = self.$prepend_to_body(body, arguments$.$initialization()); }; return node.$updated(nil, [mid, args, body]); }); $def(self, '$on_defs', function $$on_defs(node) { var $a, $yield = $$on_defs.$$p || nil, self = this, recv = nil, mid = nil, args = nil, body = nil, arguments$ = nil, $ret_or_1 = nil; $$on_defs.$$p = null; node = $send2(self, $find_super(self, 'on_defs', $$on_defs, false, true), 'on_defs', [node], null); $a = [].concat($to_a(node)), (recv = ($a[0] == null ? nil : $a[0])), (mid = ($a[1] == null ? nil : $a[1])), (args = ($a[2] == null ? nil : $a[2])), (body = ($a[3] == null ? nil : $a[3])), $a; arguments$ = $$('Arguments').$new(args); args = args.$updated(nil, arguments$.$rewritten()); if ($truthy(arguments$.$initialization())) { body = ($truthy(($ret_or_1 = body)) ? ($ret_or_1) : (self.$s("nil"))); body = self.$prepend_to_body(body, arguments$.$initialization()); }; return node.$updated(nil, [recv, mid, args, body]); }); $def(self, '$on_iter', function $$on_iter(node) { var $a, $yield = $$on_iter.$$p || nil, self = this, args = nil, body = nil, arguments$ = nil, $ret_or_1 = nil; $$on_iter.$$p = null; node = $send2(self, $find_super(self, 'on_iter', $$on_iter, false, true), 'on_iter', [node], null); $a = [].concat($to_a(node)), (args = ($a[0] == null ? nil : $a[0])), (body = ($a[1] == null ? nil : $a[1])), $a; arguments$ = $$('Arguments').$new(args); args = args.$updated(nil, arguments$.$rewritten()); if ($truthy(arguments$.$initialization())) { body = ($truthy(($ret_or_1 = body)) ? ($ret_or_1) : (self.$s("nil"))); body = self.$prepend_to_body(body, arguments$.$initialization()); }; return node.$updated(nil, [args, body]); }); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Arguments'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.counter = $proto.args = $proto.initialization = nil; self.$attr_reader("rewritten", "initialization"); $def(self, '$initialize', function $$initialize(args) { var self = this; self.args = args; self.rewritten = []; self.initialization = []; self.rewriter = $$('MlhsRewriter').$new(); return self['$split!'](); }); $def(self, '$reset_tmp_counter!', $assign_ivar_val("counter", 0)); $def(self, '$new_mlhs_tmp', function $$new_mlhs_tmp() { var self = this, $ret_or_1 = nil; self.counter = ($truthy(($ret_or_1 = self.counter)) ? ($ret_or_1) : (0)); self.counter = $rb_plus(self.counter, 1); return "$mlhs_tmp" + (self.counter); }); return $def(self, '$split!', function $Arguments_split$excl$1() { var self = this; $send(self.args.$children(), 'each', [], function $$2(arg){var self = $$2.$$s == null ? this : $$2.$$s, var_name = nil, rhs = nil, mlhs = nil; if (self.rewriter == null) self.rewriter = nil; if (self.initialization == null) self.initialization = nil; if (self.rewritten == null) self.rewritten = nil; if (arg == null) arg = nil; if ($eqeq(arg.$type(), "mlhs")) { var_name = self.$new_mlhs_tmp(); rhs = self.$s("lvar", var_name); mlhs = self.rewriter.$process(arg); self.initialization['$<<'](self.$s("masgn", mlhs, rhs)); return self.rewritten['$<<'](self.$s("arg", var_name).$updated(nil, nil, (new Map([["meta", (new Map([["arg_name", var_name]]))]])))); } else { return self.rewritten['$<<'](arg) };}, {$$s: self}); if ($eqeq(self.initialization.$length(), 1)) { return (self.initialization = self.initialization['$[]'](0)) } else if ($truthy(self.initialization['$empty?']())) { return (self.initialization = nil) } else { return (self.initialization = $send(self, 's', ["begin"].concat($to_a(self.initialization)))) }; }); })($nesting[0], $$('Base'), $nesting); return (function($base, $super) { var self = $klass($base, $super, 'MlhsRewriter'); $def(self, '$on_arg', function $$on_arg(node) { return node.$updated("lvasgn") }); return $def(self, '$on_restarg', function $$on_restarg(node) { var self = this, name = nil; name = node.$children()['$[]'](0); if ($truthy(name)) { return self.$s("splat", node.$updated("lvasgn")) } else { return self.$s("splat") }; }); })($nesting[0], $$('Base')); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/arguments"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send = Opal.send, $truthy = Opal.truthy, $def = Opal.def, $nesting = [], nil = Opal.nil; Opal.add_stubs('attr_reader,each,type,<<,any?,raise,!,nil?,has_any_kwargs?,can_inline_kwargs?,empty?'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting); return (function($base, $super) { var self = $klass($base, $super, 'Arguments'); var $proto = self.$$prototype; $proto.restarg = $proto.postargs = $proto.kwargs = $proto.kwoptargs = $proto.kwrestarg = $proto.optargs = nil; self.$attr_reader("args", "optargs", "restarg", "postargs", "kwargs", "kwoptargs", "kwrestarg", "kwnilarg", "shadowargs", "blockarg"); $def(self, '$initialize', function $$initialize(args) { var self = this; self.args = []; self.optargs = []; self.restarg = nil; self.postargs = []; self.kwargs = []; self.kwoptargs = []; self.kwrestarg = nil; self.kwnilarg = false; self.shadowargs = []; self.blockarg = nil; return $send(args, 'each', [], function $$1(arg){var self = $$1.$$s == null ? this : $$1.$$s; if (self.optargs == null) self.optargs = nil; if (self.restarg == null) self.restarg = nil; if (self.postargs == null) self.postargs = nil; if (self.args == null) self.args = nil; if (self.kwargs == null) self.kwargs = nil; if (self.kwoptargs == null) self.kwoptargs = nil; if (self.shadowargs == null) self.shadowargs = nil; if (arg == null) arg = nil; switch (arg.$type().valueOf()) { case "arg": case "mlhs": return (($truthy(self.restarg) || ($truthy(self.optargs['$any?']()))) ? (self.postargs) : (self.args))['$<<'](arg) case "optarg": return self.optargs['$<<'](arg) case "restarg": return (self.restarg = arg) case "kwarg": return self.kwargs['$<<'](arg) case "kwoptarg": return self.kwoptargs['$<<'](arg) case "kwnilarg": return (self.kwnilarg = true) case "kwrestarg": return (self.kwrestarg = arg) case "shadowarg": return self.shadowargs['$<<'](arg) case "blockarg": return (self.blockarg = arg) default: return self.$raise("Unsupported arg type " + (arg.$type())) };}, {$$s: self}); }); $def(self, '$has_post_args?', function $Arguments_has_post_args$ques$2() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.restarg['$nil?']()['$!']())) ? ($ret_or_2) : (self.postargs['$any?']()))))) { return $ret_or_1 } else { if ($truthy(($ret_or_2 = self['$has_any_kwargs?']()))) { return self['$can_inline_kwargs?']()['$!']() } else { return $ret_or_2 }; } }); $def(self, '$has_any_kwargs?', function $Arguments_has_any_kwargs$ques$3() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.kwargs['$any?']())) ? ($ret_or_2) : (self.kwoptargs['$any?']()))))) { return $ret_or_1 } else { return self.kwrestarg['$nil?']()['$!']() } }); return $def(self, '$can_inline_kwargs?', function $Arguments_can_inline_kwargs$ques$4() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.optargs['$empty?']())) ? (self.restarg['$nil?']()) : ($ret_or_2))))) { return self.postargs['$empty?']() } else { return $ret_or_1 } }); })($nesting[0], null) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/rewriters/inline_args"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $truthy = Opal.truthy, $def = Opal.def, $const_set = Opal.const_set, $ensure_kwargs = Opal.ensure_kwargs, $get_kwarg = Opal.get_kwarg, $send = Opal.send, $eqeq = Opal.eqeq, $Opal = Opal.Opal, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,s,new,updated,inline,prepend_to_body,initialization,attr_reader,freeze,children,each,send,any?,blockarg,<<,shadowargs,args,==,has_post_args?,length,has_any_kwargs?,can_inline_kwargs?,kwargs,kwoptargs,kwrestarg,postargs,optargs,args_to_keep,restarg,[]'); self.$require("opal/rewriters/base"); self.$require("opal/rewriters/arguments"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'InlineArgs'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$on_def', function $$on_def(node) { var $a, $yield = $$on_def.$$p || nil, self = this, mid = nil, args = nil, body = nil, $ret_or_1 = nil, initializer = nil, inline_args = nil; $$on_def.$$p = null; node = $send2(self, $find_super(self, 'on_def', $$on_def, false, true), 'on_def', [node], null); $a = [].concat($to_a(node)), (mid = ($a[0] == null ? nil : $a[0])), (args = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), $a; body = ($truthy(($ret_or_1 = body)) ? ($ret_or_1) : (self.$s("nil"))); initializer = $$('Initializer').$new(args, (new Map([["type", "def"]]))); inline_args = args.$updated(nil, initializer.$inline()); body = self.$prepend_to_body(body, initializer.$initialization()); return node.$updated(nil, [mid, inline_args, body]); }); $def(self, '$on_defs', function $$on_defs(node) { var $a, $yield = $$on_defs.$$p || nil, self = this, recv = nil, mid = nil, args = nil, body = nil, $ret_or_1 = nil, initializer = nil, inline_args = nil; $$on_defs.$$p = null; node = $send2(self, $find_super(self, 'on_defs', $$on_defs, false, true), 'on_defs', [node], null); $a = [].concat($to_a(node)), (recv = ($a[0] == null ? nil : $a[0])), (mid = ($a[1] == null ? nil : $a[1])), (args = ($a[2] == null ? nil : $a[2])), (body = ($a[3] == null ? nil : $a[3])), $a; body = ($truthy(($ret_or_1 = body)) ? ($ret_or_1) : (self.$s("nil"))); initializer = $$('Initializer').$new(args, (new Map([["type", "defs"]]))); inline_args = args.$updated(nil, initializer.$inline()); body = self.$prepend_to_body(body, initializer.$initialization()); return node.$updated(nil, [recv, mid, inline_args, body]); }); $def(self, '$on_iter', function $$on_iter(node) { var $a, $yield = $$on_iter.$$p || nil, self = this, args = nil, body = nil, $ret_or_1 = nil, initializer = nil, inline_args = nil; $$on_iter.$$p = null; node = $send2(self, $find_super(self, 'on_iter', $$on_iter, false, true), 'on_iter', [node], null); $a = [].concat($to_a(node)), (args = ($a[0] == null ? nil : $a[0])), (body = ($a[1] == null ? nil : $a[1])), $a; body = ($truthy(($ret_or_1 = body)) ? ($ret_or_1) : (self.$s("nil"))); initializer = $$('Initializer').$new(args, (new Map([["type", "iter"]]))); inline_args = args.$updated(nil, initializer.$inline()); body = self.$prepend_to_body(body, initializer.$initialization()); return node.$updated(nil, [inline_args, body]); }); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Initializer'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.initialization = $proto.args = $proto.inline = nil; self.$attr_reader("inline", "initialization"); $const_set($nesting[0], 'STEPS', ["extract_blockarg", "initialize_shadowargs", "extract_args", "prepare_post_args", "prepare_kwargs", "extract_optargs", "extract_restarg", "extract_post_args", "extract_kwargs", "extract_kwoptargs", "extract_kwrestarg"].$freeze()); $def(self, '$initialize', function $$initialize(args, $kwargs) { var type, self = this; $kwargs = $ensure_kwargs($kwargs); type = $get_kwarg($kwargs, "type"); self.args = $$('Arguments').$new(args.$children()); self.inline = []; self.initialization = []; self.type = type; $send($$('STEPS'), 'each', [], function $$1(step){var self = $$1.$$s == null ? this : $$1.$$s; if (step == null) step = nil; return self.$send(step);}, {$$s: self}); if ($truthy(self.initialization['$any?']())) { return (self.initialization = $send(self, 's', ["begin"].concat($to_a(self.initialization)))) } else { return (self.initialization = nil) }; }); $def(self, '$extract_blockarg', function $$extract_blockarg() { var self = this, arg = nil; if ($truthy((arg = self.args.$blockarg()))) { return self.initialization['$<<'](arg.$updated("extract_blockarg")) } else { return nil } }); $def(self, '$initialize_shadowargs', function $$initialize_shadowargs() { var self = this; return $send(self.args.$shadowargs(), 'each', [], function $$2(arg){var self = $$2.$$s == null ? this : $$2.$$s; if (self.initialization == null) self.initialization = nil; if (arg == null) arg = nil; return self.initialization['$<<'](arg.$updated("initialize_shadowarg"));}, {$$s: self}) }); $def(self, '$extract_args', function $$extract_args() { var self = this; return $send(self.args.$args(), 'each', [], function $$3(arg){var self = $$3.$$s == null ? this : $$3.$$s; if (self.type == null) self.type = nil; if (self.initialization == null) self.initialization = nil; if (self.inline == null) self.inline = nil; if (arg == null) arg = nil; if ($eqeq(self.type, "iter")) { self.initialization['$<<'](arg.$updated("initialize_iter_arg")) }; return self.inline['$<<'](arg);}, {$$s: self}) }); $def(self, '$prepare_post_args', function $$prepare_post_args() { var self = this; if ($truthy(self.args['$has_post_args?']())) { return self.initialization['$<<'](self.$s("prepare_post_args", self.args.$args().$length())) } else { return nil } }); $def(self, '$prepare_kwargs', function $$prepare_kwargs() { var self = this; if (!$truthy(self.args['$has_any_kwargs?']())) { return nil }; if ($truthy(self.args['$can_inline_kwargs?']())) { self.inline['$<<'](self.$s("arg", "$kwargs")) } else { self.initialization['$<<'](self.$s("extract_kwargs")); self.inline['$<<'](self.$s("fake_arg")); }; return self.initialization['$<<'](self.$s("ensure_kwargs_are_kwargs")); }); $def(self, '$extract_kwargs', function $$extract_kwargs() { var self = this; return $send(self.args.$kwargs(), 'each', [], function $$4(arg){var self = $$4.$$s == null ? this : $$4.$$s; if (self.initialization == null) self.initialization = nil; if (arg == null) arg = nil; return self.initialization['$<<'](arg.$updated("extract_kwarg"));}, {$$s: self}) }); $def(self, '$extract_kwoptargs', function $$extract_kwoptargs() { var self = this; return $send(self.args.$kwoptargs(), 'each', [], function $$5(arg){var self = $$5.$$s == null ? this : $$5.$$s; if (self.initialization == null) self.initialization = nil; if (arg == null) arg = nil; return self.initialization['$<<'](arg.$updated("extract_kwoptarg"));}, {$$s: self}) }); $def(self, '$extract_kwrestarg', function $$extract_kwrestarg() { var self = this, arg = nil; if ($truthy((arg = self.args.$kwrestarg()))) { return self.initialization['$<<'](arg.$updated("extract_kwrestarg")) } else { return nil } }); $def(self, '$extract_post_args', function $$extract_post_args() { var self = this; return $send(self.args.$postargs(), 'each', [], function $$6(arg){var self = $$6.$$s == null ? this : $$6.$$s; if (self.initialization == null) self.initialization = nil; if (self.inline == null) self.inline = nil; if (arg == null) arg = nil; self.initialization['$<<'](arg.$updated("extract_post_arg")); return self.inline['$<<'](self.$s("fake_arg"));}, {$$s: self}) }); $def(self, '$extract_optargs', function $$extract_optargs() { var self = this, has_post_args = nil; has_post_args = self.args['$has_post_args?'](); return $send(self.args.$optargs(), 'each', [], function $$7(arg){var $a, self = $$7.$$s == null ? this : $$7.$$s, arg_name = nil, default_value = nil; if (self.initialization == null) self.initialization = nil; if (self.inline == null) self.inline = nil; if (arg == null) arg = nil; if ($truthy(has_post_args)) { $a = [].concat($to_a(arg)), (arg_name = ($a[0] == null ? nil : $a[0])), (default_value = ($a[1] == null ? nil : $a[1])), $a; self.initialization['$<<'](arg.$updated("extract_post_optarg", [arg_name, default_value, self.$args_to_keep()])); return self.inline['$<<'](self.$s("fake_arg")); } else { self.inline['$<<'](arg.$updated("arg")); return self.initialization['$<<'](arg.$updated("extract_optarg")); };}, {$$s: self}); }); $def(self, '$extract_restarg', function $$extract_restarg() { var self = this, arg = nil, arg_name = nil; if ($truthy((arg = self.args.$restarg()))) { arg_name = arg.$children()['$[]'](0); self.initialization['$<<'](arg.$updated("extract_restarg", [arg_name, self.$args_to_keep()])); return self.inline['$<<'](self.$s("fake_arg")); } else { return nil } }); return $def(self, '$args_to_keep', function $$args_to_keep() { var self = this; return self.args.$postargs().$length() }); })($nesting[0], $$$($$$($Opal, 'Rewriters'), 'Base'), $nesting); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/numblocks"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $to_ary = Opal.to_ary, $send = Opal.send, $to_a = Opal.to_a, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,children,s,gen_args,map'); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'Numblocks'); $def(self, '$on_numblock', function $$on_numblock(node) { var $a, $b, self = this, left = nil, arg_count = nil, right = nil; $b = node.$children(), $a = $to_ary($b), (left = ($a[0] == null ? nil : $a[0])), (arg_count = ($a[1] == null ? nil : $a[1])), (right = ($a[2] == null ? nil : $a[2])), $b; return self.$s("block", left, $send(self, 's', ["args"].concat($to_a(self.$gen_args(arg_count)))), right); }); return $def(self, '$gen_args', function $$gen_args(arg_count) { var self = this; return $send(Opal.Range.$new(1, arg_count, false), 'map', [], function $$1(i){var self = $$1.$$s == null ? this : $$1.$$s; if (i == null) i = nil; return self.$s("arg", "_" + (i));}, {$$s: self}) }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/returnable_logic"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $rb_plus = Opal.rb_plus, $def = Opal.def, $rb_minus = Opal.rb_minus, $assign_ivar_val = Opal.assign_ivar_val, $to_a = Opal.to_a, $send2 = Opal.send2, $find_super = Opal.find_super, $slice = Opal.slice, $send = Opal.send, $eqeq = Opal.eqeq, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,+,-,children,check_control_flow!,[]=,meta,s,next_tmp,build_if_from_when,free_tmp,[],process,updated,==,count,first,delete,private,type,error,build_rule_from_parts,empty?'); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ReturnableLogic'); var $proto = self.$$prototype; $proto.counter = nil; $def(self, '$next_tmp', function $$next_tmp() { var self = this, $ret_or_1 = nil; self.counter = ($truthy(($ret_or_1 = self.counter)) ? ($ret_or_1) : (0)); self.counter = $rb_plus(self.counter, 1); return "$ret_or_" + (self.counter); }); $def(self, '$free_tmp', function $$free_tmp() { var self = this; return (self.counter = $rb_minus(self.counter, 1)) }); $def(self, '$reset_tmp_counter!', $assign_ivar_val("counter", nil)); $def(self, '$on_if', function $$on_if(node) { var $a, $yield = $$on_if.$$p || nil, self = this, test = nil; $$on_if.$$p = null; $a = [].concat($to_a(node.$children())), (test = ($a[0] == null ? nil : $a[0])), $a; self['$check_control_flow!'](test); if ($truthy(test)) { test.$meta()['$[]=']("if_test", true) }; return $send2(self, $find_super(self, 'on_if', $$on_if, false, true), 'on_if', [node], $yield); }); $def(self, '$on_case', function $$on_case(node) { var $a, $b, self = this, lhs = nil, whens = nil, els = nil, $ret_or_1 = nil, lhs_tmp = nil, out = nil; $a = [].concat($to_a(node.$children())), (lhs = ($a[0] == null ? nil : $a[0])), $b = $a.length - 1, $b = ($b < 1) ? 1 : $b, (whens = $slice($a, 1, $b)), (els = ($a[$b] == null ? nil : $a[$b])), $a; els = ($truthy(($ret_or_1 = els)) ? ($ret_or_1) : (self.$s("nil"))); if ($truthy(lhs)) { lhs_tmp = self.$next_tmp() }; out = self.$build_if_from_when(node, lhs, lhs_tmp, whens, els); if ($truthy(lhs)) { self.$free_tmp() }; return out; }); $def(self, '$on_or', function $$on_or(node) { var $a, self = this, lhs = nil, rhs = nil, out = nil, lhs_tmp = nil; $a = [].concat($to_a(node.$children())), (lhs = ($a[0] == null ? nil : $a[0])), (rhs = ($a[1] == null ? nil : $a[1])), $a; self['$check_control_flow!'](lhs); if ($truthy(node.$meta()['$[]']("if_test"))) { lhs.$meta()['$[]=']("if_test", ($a = ["if_test", true], $send(rhs.$meta(), '[]=', $a), $a[$a.length - 1])); out = self.$process(node.$updated("if", [lhs, self.$s("true"), rhs])); } else { lhs_tmp = self.$next_tmp(); out = self.$process(node.$updated("if", [self.$s("lvasgn", lhs_tmp, lhs), self.$s("js_tmp", lhs_tmp), rhs])); self.$free_tmp(); }; return out; }); $def(self, '$on_and', function $$on_and(node) { var $a, self = this, lhs = nil, rhs = nil, out = nil, lhs_tmp = nil; $a = [].concat($to_a(node.$children())), (lhs = ($a[0] == null ? nil : $a[0])), (rhs = ($a[1] == null ? nil : $a[1])), $a; self['$check_control_flow!'](lhs); if ($truthy(node.$meta()['$[]']("if_test"))) { lhs.$meta()['$[]=']("if_test", ($a = ["if_test", true], $send(rhs.$meta(), '[]=', $a), $a[$a.length - 1])); out = self.$process(node.$updated("if", [lhs, rhs, self.$s("false")])); } else { lhs_tmp = self.$next_tmp(); out = self.$process(node.$updated("if", [self.$s("lvasgn", lhs_tmp, lhs), rhs, self.$s("js_tmp", lhs_tmp)])); self.$free_tmp(); }; return out; }); $def(self, '$on_begin', function $$on_begin(node) { var $yield = $$on_begin.$$p || nil, self = this; $$on_begin.$$p = null; if (($truthy(node.$meta()['$[]']("if_test")) && ($eqeq(node.$children().$count(), 1)))) { node.$children().$first().$meta()['$[]=']("if_test", true) }; node.$meta().$delete("if_test"); return $send2(self, $find_super(self, 'on_begin', $$on_begin, false, true), 'on_begin', [node], $yield); }); self.$private(); $def(self, '$check_control_flow!', function $ReturnableLogic_check_control_flow$excl$1(node) { var self = this; switch (node.$type().valueOf()) { case "break": case "next": case "redo": case "retry": case "return": return self.$error("void value expression") default: return nil } }); $def(self, '$build_if_from_when', function $$build_if_from_when(node, lhs, lhs_tmp, whens, els) { var $a, $b, self = this, first_when = nil, next_whens = nil, parts = nil, expr = nil, rule = nil; $a = [].concat($to_a(whens)), (first_when = ($a[0] == null ? nil : $a[0])), (next_whens = $slice($a, 1)), $a; $a = [].concat($to_a(first_when.$children())), $b = $a.length - 1, $b = ($b < 0) ? 0 : $b, (parts = $slice($a, 0, $b)), (expr = ($a[$b] == null ? nil : $a[$b])), $a; rule = self.$build_rule_from_parts(node, lhs, lhs_tmp, parts); return first_when.$updated("if", [rule, self.$process(expr), ($truthy(next_whens['$empty?']()) ? (self.$process(els)) : (self.$build_if_from_when(nil, nil, lhs_tmp, next_whens, els)))]); }); return $def(self, '$build_rule_from_parts', function $$build_rule_from_parts(node, lhs, lhs_tmp, parts) { var $a, self = this, first_part = nil, next_parts = nil, subrule = nil, splat_on = nil, iter_val = nil, block = nil; lhs = (($truthy(node) && ($truthy(lhs_tmp))) ? (node.$updated("lvasgn", [lhs_tmp, self.$process(lhs)])) : (self.$s("js_tmp", lhs_tmp))); $a = [].concat($to_a(parts)), (first_part = ($a[0] == null ? nil : $a[0])), (next_parts = $slice($a, 1)), $a; subrule = ($eqeq(first_part.$type(), "splat") ? (((splat_on = first_part.$children().$first()), (iter_val = self.$next_tmp()), (block = self.$s("send", self.$process(splat_on), "any?", self.$s("iter", self.$s("args", self.$s("arg", iter_val)), self.$build_rule_from_parts(nil, nil, lhs_tmp, [self.$s("lvar", iter_val)])))), (($truthy(node) && ($truthy(lhs_tmp))) ? (self.$s("begin", lhs, block)) : (block)))) : ($truthy(lhs_tmp) ? (self.$s("send", self.$process(first_part), "===", lhs)) : (self.$process(first_part)))); if ($truthy(next_parts['$empty?']())) { return subrule } else { return self.$s("if", subrule, self.$s("true"), self.$build_rule_from_parts(nil, nil, lhs_tmp, next_parts)) }; }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/forward_args"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $not = Opal.not, $send2 = Opal.send2, $find_super = Opal.find_super, $eqeq = Opal.eqeq, $truthy = Opal.truthy, $range = Opal.range, $to_a = Opal.to_a, $neqeq = Opal.neqeq, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,process,s,!,first,children,updated,==,type,last,[],!=,class'); self.$require("opal/rewriters/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'ForwardArgs'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$on_forward_args', function $$on_forward_args(_node) { var self = this; return self.$process(self.$s("args", self.$s("forward_arg", "$"))) }); $def(self, '$on_forwarded_restarg', function $$on_forwarded_restarg(_node) { var self = this; return self.$process(self.$s("splat", self.$s("lvar", "$fwd_rest"))) }); $def(self, '$on_forwarded_kwrestarg', function $$on_forwarded_kwrestarg(_node) { var self = this; return self.$process(self.$s("kwsplat", self.$s("lvar", "$fwd_kwrest"))) }); $def(self, '$on_block_pass', function $$on_block_pass(node) { var $yield = $$on_block_pass.$$p || nil, self = this; $$on_block_pass.$$p = null; if ($not(node.$children().$first())) { return self.$process(node.$updated(nil, [self.$s("lvar", "$fwd_block")])) } else { return $send2(self, $find_super(self, 'on_block_pass', $$on_block_pass, false, true), 'on_block_pass', [node], $yield) } }); $def(self, '$on_args', function $$on_args(node) { var $yield = $$on_args.$$p || nil, self = this, prev_children = nil; $$on_args.$$p = null; if (($truthy(node.$children().$last()) && ($eqeq(node.$children().$last().$type(), "forward_arg")))) { prev_children = node.$children()['$[]']($range(0, -2, false)); return $send2(self, $find_super(self, 'on_args', $$on_args, false, true), 'on_args', [node.$updated(nil, [].concat($to_a(prev_children)).concat([self.$s("restarg", "$fwd_rest"), self.$s("blockarg", "$fwd_block")]))], null); } else { return $send2(self, $find_super(self, 'on_args', $$on_args, false, true), 'on_args', [node], $yield) } }); $def(self, '$on_restarg', function $$on_restarg(node) { var $yield = $$on_restarg.$$p || nil, self = this; $$on_restarg.$$p = null; if ($not(node.$children().$first())) { return node.$updated(nil, ["$fwd_rest"]) } else { return $send2(self, $find_super(self, 'on_restarg', $$on_restarg, false, true), 'on_restarg', [node], $yield) } }); $def(self, '$on_kwrestarg', function $$on_kwrestarg(node) { var $yield = $$on_kwrestarg.$$p || nil, self = this; $$on_kwrestarg.$$p = null; if ($not(node.$children().$first())) { return node.$updated(nil, ["$fwd_kwrest"]) } else { return $send2(self, $find_super(self, 'on_kwrestarg', $$on_kwrestarg, false, true), 'on_kwrestarg', [node], $yield) } }); $def(self, '$on_blockarg', function $$on_blockarg(node) { var $yield = $$on_blockarg.$$p || nil, self = this; $$on_blockarg.$$p = null; if ($not(node.$children().$first())) { return node.$updated(nil, ["$fwd_block"]) } else { return $send2(self, $find_super(self, 'on_blockarg', $$on_blockarg, false, true), 'on_blockarg', [node], $yield) } }); return $def(self, '$on_send', function $$on_send(node) { var $yield = $$on_send.$$p || nil, self = this, prev_children = nil; $$on_send.$$p = null; if ((($truthy(node.$children().$last()) && ($neqeq(node.$children().$last().$class(), $$('Symbol')))) && ($eqeq(node.$children().$last().$type(), "forwarded_args")))) { prev_children = node.$children()['$[]']($range(0, -2, false)); return $send2(self, $find_super(self, 'on_send', $$on_send, false, true), 'on_send', [node.$updated(nil, [].concat($to_a(prev_children)).concat([self.$s("splat", self.$s("lvar", "$fwd_rest")), self.$s("block_pass", self.$s("lvar", "$fwd_block"))]))], null); } else { return $send2(self, $find_super(self, 'on_send', $$on_send, false, true), 'on_send', [node], $yield) } }); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/rewriters/thrower_finder"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $send2 = Opal.send2, $find_super = Opal.find_super, $send = Opal.send, $find_block_super = Opal.find_block_super, $truthy = Opal.truthy, $range = Opal.range, $slice = Opal.slice, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('tracking,pushing,to_proc,on_loop,detect,[],children,!=,type,private,each,push,map,last,[]=,meta'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Rewriters'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ThrowerFinder'); var $proto = self.$$prototype; $proto.break_stack = $proto.redo_stack = $proto.retry_stack = $proto.rescue_else_stack = nil; $def(self, '$initialize', function $$initialize() { var self = this; self.break_stack = []; self.redo_stack = []; self.retry_stack = []; return (self.rescue_else_stack = []); }); $def(self, '$on_break', function $$on_break(node) { var $yield = $$on_break.$$p || nil, self = this; $$on_break.$$p = null; self.$tracking("break", self.break_stack); return $send2(self, $find_super(self, 'on_break', $$on_break, false, true), 'on_break', [node], $yield); }); $def(self, '$on_redo', function $$on_redo(node) { var $yield = $$on_redo.$$p || nil, self = this; $$on_redo.$$p = null; self.$tracking("redo", self.redo_stack); return $send2(self, $find_super(self, 'on_redo', $$on_redo, false, true), 'on_redo', [node], $yield); }); $def(self, '$on_retry', function $$on_retry(node) { var $yield = $$on_retry.$$p || nil, self = this; $$on_retry.$$p = null; self.$tracking("retry", self.retry_stack); return $send2(self, $find_super(self, 'on_retry', $$on_retry, false, true), 'on_retry', [node], $yield); }); $def(self, '$on_iter', function $$on_iter(node) { var $yield = $$on_iter.$$p || nil, self = this; $$on_iter.$$p = null; return $send(self, 'pushing', [[self.break_stack, node]], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s; return $send2(self, $find_block_super(self, 'on_iter', ($$1.$$def || $$on_iter), false, true), 'on_iter', [node], $yield)}, {$$s: self}) }); $def(self, '$on_loop', function $$on_loop(node) { var block = $$on_loop.$$p || nil, self = this; $$on_loop.$$p = null; ; return $send(self, 'pushing', [[self.redo_stack, node], [self.break_stack, nil]], block.$to_proc()); }); $def(self, '$on_for', function $$on_for(node) { var $yield = $$on_for.$$p || nil, self = this; $$on_for.$$p = null; return $send(self, 'on_loop', [node], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; return $send2(self, $find_block_super(self, 'on_for', ($$2.$$def || $$on_for), false, true), 'on_for', [node], $yield)}, {$$s: self}) }); $def(self, '$on_while', function $$on_while(node) { var $yield = $$on_while.$$p || nil, self = this; $$on_while.$$p = null; return $send(self, 'on_loop', [node], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s; return $send2(self, $find_block_super(self, 'on_while', ($$3.$$def || $$on_while), false, true), 'on_while', [node], $yield)}, {$$s: self}) }); $def(self, '$on_while_post', function $$on_while_post(node) { var $yield = $$on_while_post.$$p || nil, self = this; $$on_while_post.$$p = null; return $send(self, 'on_loop', [node], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; return $send2(self, $find_block_super(self, 'on_while_post', ($$4.$$def || $$on_while_post), false, true), 'on_while_post', [node], $yield)}, {$$s: self}) }); $def(self, '$on_until', function $$on_until(node) { var $yield = $$on_until.$$p || nil, self = this; $$on_until.$$p = null; return $send(self, 'on_loop', [node], function $$5(){var self = $$5.$$s == null ? this : $$5.$$s; return $send2(self, $find_block_super(self, 'on_until', ($$5.$$def || $$on_until), false, true), 'on_until', [node], $yield)}, {$$s: self}) }); $def(self, '$on_until_post', function $$on_until_post(node) { var $yield = $$on_until_post.$$p || nil, self = this; $$on_until_post.$$p = null; return $send(self, 'on_loop', [node], function $$6(){var self = $$6.$$s == null ? this : $$6.$$s; return $send2(self, $find_block_super(self, 'on_until_post', ($$6.$$def || $$on_until_post), false, true), 'on_until_post', [node], $yield)}, {$$s: self}) }); $def(self, '$on_defined', function $$on_defined(node) { var $yield = $$on_defined.$$p || nil, self = this; $$on_defined.$$p = null; return $send(self, 'pushing', [[self.redo_stack, nil], [self.break_stack, nil], [self.retry_stack, nil]], function $$7(){var self = $$7.$$s == null ? this : $$7.$$s; return $send2(self, $find_block_super(self, 'on_defined', ($$7.$$def || $$on_defined), false, true), 'on_defined', [node], $yield)}, {$$s: self}) }); $def(self, '$on_ensure', function $$on_ensure(node) { var $yield = $$on_ensure.$$p || nil, self = this; $$on_ensure.$$p = null; return $send(self, 'pushing', [[self.rescue_else_stack, node]], function $$8(){var self = $$8.$$s == null ? this : $$8.$$s; return $send2(self, $find_block_super(self, 'on_ensure', ($$8.$$def || $$on_ensure), false, true), 'on_ensure', [node], $yield)}, {$$s: self}) }); $def(self, '$on_rescue', function $$on_rescue(node) { var $yield = $$on_rescue.$$p || nil, self = this; $$on_rescue.$$p = null; if ($truthy($send(node.$children()['$[]']($range(1, -1, false)), 'detect', [], function $$9(sexp){var $ret_or_1 = nil; if (sexp == null) sexp = nil; if ($truthy(($ret_or_1 = sexp))) { return sexp.$type()['$!=']("resbody") } else { return $ret_or_1 };}))) { self.$tracking("rescue_else", self.rescue_else_stack) }; return $send(self, 'pushing', [[self.rescue_else_stack, nil], [self.retry_stack, node]], function $$10(){var self = $$10.$$s == null ? this : $$10.$$s; return $send2(self, $find_block_super(self, 'on_rescue', ($$10.$$def || $$on_rescue), false, true), 'on_rescue', [node], $yield)}, {$$s: self}); }); self.$private(); $def(self, '$pushing', function $$pushing($a) { var $post_args, stacks, $yield = $$pushing.$$p || nil, result = nil; $$pushing.$$p = null; $post_args = $slice(arguments); stacks = $post_args; $send(stacks, 'each', [], function $$11(stack, node){ if (stack == null) stack = nil; if (node == null) node = nil; return stack.$push(node);}); result = Opal.yieldX($yield, []); $send($send(stacks, 'map', [], "first".$to_proc()), 'each', [], "pop".$to_proc()); return result; }, -1); return $def(self, '$tracking', function $$tracking(breaker, stack) { var $a; if ($truthy(stack.$last())) { return ($a = ["has_" + (breaker), true], $send(stack.$last().$meta(), '[]=', $a), $a[$a.length - 1]) } else { return nil } }); })($nesting[0], $$$($$$($$('Opal'), 'Rewriters'), 'Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/rewriter"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $def = Opal.def, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $eqeq = Opal.eqeq, $assign_ivar = Opal.assign_ivar, $send = Opal.send, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,<<,list,delete,==,!=,use,disabled?,class,each,rewritter_disabled?,new,process'); self.$require("opal/rewriters/opal_engine_check"); self.$require("opal/rewriters/targeted_patches"); self.$require("opal/rewriters/for_rewriter"); self.$require("opal/rewriters/js_reserved_words"); self.$require("opal/rewriters/block_to_iter"); self.$require("opal/rewriters/dot_js_syntax"); self.$require("opal/rewriters/pattern_matching"); self.$require("opal/rewriters/logical_operator_assignment"); self.$require("opal/rewriters/binary_operator_assignment"); self.$require("opal/rewriters/hashes/key_duplicates_rewriter"); self.$require("opal/rewriters/dump_args"); self.$require("opal/rewriters/deduplicate_arg_name"); self.$require("opal/rewriters/mlhs_args"); self.$require("opal/rewriters/inline_args"); self.$require("opal/rewriters/numblocks"); self.$require("opal/rewriters/returnable_logic"); self.$require("opal/rewriters/forward_args"); self.$require("opal/rewriters/thrower_finder"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Rewriter'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.sexp = nil; self.disabled = false; (function(self, $parent_nesting) { $def(self, '$list', function $$list() { var self = this, $ret_or_1 = nil; if (self.list == null) self.list = nil; return (self.list = ($truthy(($ret_or_1 = self.list)) ? ($ret_or_1) : ([]))) }); $def(self, '$use', function $$use(rewriter) { var self = this; return self.$list()['$<<'](rewriter) }); $def(self, '$delete', function $delete$1(rewriter) { var self = this; return self.$list().$delete(rewriter) }); $def(self, '$disable', function $$disable($kwargs) { var except, $yield = $$disable.$$p || nil, self = this, old_disabled = nil, $ret_or_1 = nil; if (self.disabled == null) self.disabled = nil; $$disable.$$p = null; $kwargs = $ensure_kwargs($kwargs); except = $hash_get($kwargs, "except");if (except == null) except = nil; return (function() { try { old_disabled = self.disabled; self.disabled = ($truthy(($ret_or_1 = except)) ? ($ret_or_1) : (true)); return Opal.yieldX($yield, []);; } finally { (self.disabled = old_disabled) }; })(); }, -1); $def(self, '$disabled?', function $disabled$ques$2() { var self = this; if (self.disabled == null) self.disabled = nil; return self.disabled['$=='](true) }); return $def(self, '$rewritter_disabled?', function $rewritter_disabled$ques$3(rewriter) { var self = this; if (self.disabled == null) self.disabled = nil; if ($eqeq(self.disabled, false)) { return false }; return self.disabled['$!='](rewriter); }); })(Opal.get_singleton_class(self), $nesting); self.$use($$$($$('Rewriters'), 'OpalEngineCheck')); self.$use($$$($$('Rewriters'), 'ForRewriter')); self.$use($$$($$('Rewriters'), 'Numblocks')); self.$use($$$($$('Rewriters'), 'ForwardArgs')); self.$use($$$($$('Rewriters'), 'BlockToIter')); self.$use($$$($$('Rewriters'), 'TargetedPatches')); self.$use($$$($$('Rewriters'), 'DotJsSyntax')); self.$use($$$($$('Rewriters'), 'PatternMatching')); self.$use($$$($$('Rewriters'), 'JsReservedWords')); self.$use($$$($$('Rewriters'), 'LogicalOperatorAssignment')); self.$use($$$($$('Rewriters'), 'BinaryOperatorAssignment')); self.$use($$$($$$($$('Rewriters'), 'Hashes'), 'KeyDuplicatesRewriter')); self.$use($$$($$('Rewriters'), 'ReturnableLogic')); self.$use($$$($$('Rewriters'), 'DeduplicateArgName')); self.$use($$$($$('Rewriters'), 'DumpArgs')); self.$use($$$($$('Rewriters'), 'MlhsArgs')); self.$use($$$($$('Rewriters'), 'InlineArgs')); self.$use($$$($$('Rewriters'), 'ThrowerFinder')); $def(self, '$initialize', $assign_ivar("sexp")); return $def(self, '$process', function $$process() { var self = this; if ($truthy(self.$class()['$disabled?']())) { return self.sexp }; $send(self.$class().$list(), 'each', [], function $$4(rewriter_class){var self = $$4.$$s == null ? this : $$4.$$s, rewriter = nil; if (self.sexp == null) self.sexp = nil; if (rewriter_class == null) rewriter_class = nil; if ($truthy(self.$class()['$rewritter_disabled?'](rewriter_class))) { return nil }; rewriter = rewriter_class.$new(); return (self.sexp = rewriter.$process(self.sexp));}, {$$s: self}); return self.sexp; }); })($nesting[0], null, $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/parser/source_buffer"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $send2 = Opal.send2, $find_super = Opal.find_super, $defs = Opal.defs, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'SourceBuffer'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $defs(self, '$recognize_encoding', function $$recognize_encoding(string) { var $yield = $$recognize_encoding.$$p || nil, self = this, $ret_or_1 = nil; $$recognize_encoding.$$p = null; if ($truthy(($ret_or_1 = $send2(self, $find_super(self, 'recognize_encoding', $$recognize_encoding, false, true), 'recognize_encoding', [string], $yield)))) { return $ret_or_1 } else { return $$$($$('Encoding'), 'UTF_8') } }) })($nesting[0], $$$($$$($$$('Parser'), 'Source'), 'Buffer'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/parser/default_config"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $lambda = Opal.lambda, $send = Opal.send, $defs = Opal.defs, $slice = Opal.slice, $truthy = Opal.truthy, $Opal = Opal.Opal, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_accessor,all_errors_are_fatal=,diagnostics,ignore_warnings=,consumer=,diagnostics_consumer,extend,diagnostics_consumer=,new,rewrite,process,default_parser,default_parser_class'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Parser'); var $nesting = [self].concat($parent_nesting); (function($base, $parent_nesting) { var self = $module($base, 'DefaultConfig'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base) { var self = $module($base, 'ClassMethods'); self.$attr_accessor("diagnostics_consumer"); return $def(self, '$default_parser', function $$default_parser() { var $yield = $$default_parser.$$p || nil, self = this, parser = nil; $$default_parser.$$p = null; parser = $send2(self, $find_super(self, 'default_parser', $$default_parser, false, true), 'default_parser', [], $yield); parser.$diagnostics()['$all_errors_are_fatal='](true); parser.$diagnostics()['$ignore_warnings='](false); parser.$diagnostics()['$consumer='](self.$diagnostics_consumer()); return parser; }); })($nesting[0]); $defs(self, '$included', function $$included(klass) { var $a; klass.$extend($$('ClassMethods')); return ($a = [$lambda(function $$1(diagnostic){ if (diagnostic == null) diagnostic = nil; return nil;})], $send(klass, 'diagnostics_consumer=', $a), $a[$a.length - 1]); }); $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [$$$($$$($$('Opal'), 'AST'), 'Builder').$new()], null); }, -1); $def(self, '$parse', function $$parse(source_buffer) { var $yield = $$parse.$$p || nil, self = this, parsed = nil, $ret_or_1 = nil, wrapped = nil; $$parse.$$p = null; parsed = ($truthy(($ret_or_1 = $send2(self, $find_super(self, 'parse', $$parse, false, true), 'parse', [source_buffer], $yield))) ? ($ret_or_1) : ($$$($$$($Opal, 'AST'), 'Node').$new("nil"))); wrapped = $$$($$$($Opal, 'AST'), 'Node').$new("top", [parsed]); return self.$rewrite(wrapped); }); return $def(self, '$rewrite', function $$rewrite(node) { return $$$($$('Opal'), 'Rewriter').$new(node).$process() }); })($nesting[0], $nesting); return (function(self, $parent_nesting) { self.$attr_accessor("default_parser_class"); return $def(self, '$default_parser', function $$default_parser() { var self = this; return self.$default_parser_class().$default_parser() }); })(Opal.get_singleton_class(self), $nesting); })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/parser/with_ruby_lexer"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $send = Opal.send, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('include,default_parser_class='); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'WithRubyLexer'); var $a, $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$include($$$($$$($$('Opal'), 'Parser'), 'DefaultConfig')); return ($a = [self], $send($$$($$('Opal'), 'Parser'), 'default_parser_class=', $a), $a[$a.length - 1]); })($$$($$('Opal'), 'Parser'), $$$($$('Parser'), 'Ruby32'), $nesting) }; Opal.modules["opal/parser/patch"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $truthy = Opal.truthy, $send = Opal.send, $def = Opal.def, $rb_plus = Opal.rb_plus, $eqeq = Opal.eqeq, $not = Opal.not, $rb_le = Opal.rb_le, $eqeqeq = Opal.eqeqeq, $rb_minus = Opal.rb_minus, $rb_gt = Opal.rb_gt, $rb_times = Opal.rb_times, $rb_divide = Opal.rb_divide, $thrower = Opal.thrower, $module = Opal.module, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('source,unpack,source_buffer=,source_pts=,+,to_a,lines,end_with?,<<,map,chomp,=~,diagnostic,nil?,new,type,updated,dedent,first,children,==,empty?,interrupt,compact,encoding,split,force_encoding,length,map!,each_with_index,!,each_char,<=,===,-,>,*,/,[]=,[],join,respond_to?,send,value'); (function($base, $super) { var self = $klass($base, $super, 'Lexer'); var $proto = self.$$prototype; $proto.source_buffer = $proto.strings = $proto.source_pts = nil; return $def(self, '$source_buffer=', function $Lexer_source_buffer$eq$1(source_buffer) { var $a, self = this, source = nil; self.source_buffer = source_buffer; if ($truthy(self.source_buffer)) { source = self.source_buffer.$source(); self.source_pts = source.$unpack("U*"); } else { self.source_pts = nil }; if ($truthy(self.strings)) { self.strings['$source_buffer='](self.source_buffer); return ($a = [self.source_pts], $send(self.strings, 'source_pts=', $a), $a[$a.length - 1]); } else { return nil }; }) })($$('Parser'), null); (function($base, $super) { var self = $klass($base, $super, 'Literal'); var $proto = self.$$prototype; $proto.buffer_s = $proto.buffer = nil; Opal.udef(self, '$' + "extend_string");; return $def(self, '$extend_string', function $$extend_string(string, ts, te) { var self = this, $ret_or_1 = nil; self.buffer_s = ($truthy(($ret_or_1 = self.buffer_s)) ? ($ret_or_1) : (ts)); self.buffer_e = te; return (self.buffer = $rb_plus(self.buffer, string)); }); })($$$($$('Parser'), 'Lexer'), null); (function($base, $super) { var self = $klass($base, $super, 'Buffer'); var $proto = self.$$prototype; $proto.lines = $proto.source = nil; return $def(self, '$source_lines', function $$source_lines() { var self = this, $ret_or_1 = nil, lines = nil; return (self.lines = ($truthy(($ret_or_1 = self.lines)) ? ($ret_or_1) : (((lines = self.source.$lines().$to_a()), ($truthy(self.source['$end_with?']("\n")) ? (lines['$<<']("")) : nil), $send(lines, 'map', [], function $$2(line){ if (line == null) line = nil; return line.$chomp("\n");}))))) }) })($$$($$('Parser'), 'Source'), null); (function($base, $super) { var self = $klass($base, $super, 'Default'); $def(self, '$check_lvar_name', function $$check_lvar_name(name, loc) { var self = this; if ($truthy(name['$=~'](new RegExp('^[\\p{Ll}|_][\\p{L}\\p{Nl}\\p{Nd}_]*$', 'u')))) { return nil } else { return self.$diagnostic("error", "lvar_name", (new Map([["name", name]])), loc) } }); return $def(self, '$dedent_string', function $$dedent_string(node, dedent_level) { var dedenter = nil, children = nil; if (!$truthy(dedent_level['$nil?']())) { dedenter = $$$($$$($$$('Parser'), 'Lexer'), 'Dedenter').$new(dedent_level); switch (node.$type().valueOf()) { case "str": node = node.$updated(nil, [dedenter.$dedent(node.$children().$first())]) break; case "dstr": case "xstr": children = $send(node.$children(), 'map', [], function $$3(str_node){ if (str_node == null) str_node = nil; if ($eqeq(str_node.$type(), "str")) { str_node = str_node.$updated(nil, [dedenter.$dedent(str_node.$children().$first())]); if ($truthy(str_node.$children().$first()['$empty?']())) { return nil }; } else { dedenter.$interrupt() }; return str_node;}); node = node.$updated(nil, children.$compact()); break; default: nil }; }; return node; }); })($$$($$('Parser'), 'Builders'), null); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Dedenter'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $def(self, '$dedent', function $$dedent(string) { var self = this, original_encoding = nil, lines = nil; original_encoding = string.$encoding(); lines = string.$force_encoding($$$($$('Encoding'), 'BINARY')).$split("\\\n"); if ($eqeq(lines.$length(), 1)) { lines = [string.$force_encoding(original_encoding)] } else { $send(lines, 'map!', [], function $$4(s){ if (s == null) s = nil; return s.$force_encoding(original_encoding);}) }; $send(lines, 'each_with_index', [], function $$5(line, index){var $a, self = $$5.$$s == null ? this : $$5.$$s, left_to_remove = nil, remove = nil; if (self.at_line_begin == null) self.at_line_begin = nil; if (self.dedent_level == null) self.dedent_level = nil; if (line == null) line = nil; if (index == null) index = nil; if (($eqeq(index, 0) && ($not(self.at_line_begin)))) { return nil }; left_to_remove = self.dedent_level; remove = 0; (function(){try { var $t_break = $thrower('break'); return $send(line, 'each_char', [], function $$6(char$){var self = $$6.$$s == null ? this : $$6.$$s, $ret_or_1 = nil; if (self.dedent_level == null) self.dedent_level = nil; if (char$ == null) char$ = nil; if ($truthy($rb_le(left_to_remove, 0))) { $t_break.$throw(nil, $$6.$$is_lambda) }; if ($eqeqeq(" ", ($ret_or_1 = char$))) { remove = $rb_plus(remove, 1); return (left_to_remove = $rb_minus(left_to_remove, 1)); } else if ($eqeqeq("\t", $ret_or_1)) { if ($truthy($rb_gt($rb_times($$('TAB_WIDTH'), $rb_plus($rb_divide(remove, $$('TAB_WIDTH')), 1)), self.dedent_level))) { $t_break.$throw(nil, $$6.$$is_lambda) }; remove = $rb_plus(remove, 1); return (left_to_remove = $rb_minus(left_to_remove, $$('TAB_WIDTH'))); } else { $t_break.$throw(nil, $$6.$$is_lambda) };}, {$$s: self})} catch($e) { if ($e === $t_break) return $e.$v; throw $e; } finally {$t_break.is_orphan = true;}})(); return ($a = [index, line['$[]'](Opal.Range.$new(remove, -1, false))], $send(lines, '[]=', $a), $a[$a.length - 1]);}, {$$s: self}); string = lines.$join(); self.at_line_begin = string['$end_with?']("\n"); return string; }) })($$$($$('Parser'), 'Lexer'), null, $nesting);; (function($base) { var self = $module($base, 'Mixin'); Opal.udef(self, '$' + "process");; return $def(self, '$process', function $$process(node) { var $a, self = this, $ret_or_1 = nil, type = nil, on_handler = nil, handler = nil; if (self._on_handler_cache == null) self._on_handler_cache = nil; if ($truthy(node['$nil?']())) { return nil }; self._on_handler_cache = ($truthy(($ret_or_1 = self._on_handler_cache)) ? ($ret_or_1) : ((new Map()))); type = node.$type(); on_handler = ($truthy(($ret_or_1 = self._on_handler_cache['$[]'](type))) ? ($ret_or_1) : (($a = [type, ((handler = "on_" + (type)), ($truthy(self['$respond_to?'](handler)) ? (nil) : ((handler = "handler_missing"))), handler)], $send(self._on_handler_cache, '[]=', $a), $a[$a.length - 1]))); if ($truthy(($ret_or_1 = self.$send(on_handler, node)))) { return $ret_or_1 } else { return node }; }); })($$$($$('AST'), 'Processor')); return (function($base, $super) { var self = $klass($base, $super, 'Default'); Opal.udef(self, '$' + "string_value");; return $def(self, '$string_value', function $$string_value(token) { var self = this; return self.$value(token) }); })($$$($$('Parser'), 'Builders'), null); }; Opal.modules["opal/parser"] = function(Opal) {/* Generated by Opal 1.8.2 */ var self = Opal.top, nil = Opal.nil; Opal.add_stubs('require'); self.$require("opal/ast/builder"); self.$require("opal/rewriter"); self.$require("opal/parser/source_buffer"); self.$require("opal/parser/default_config"); self.$require("opal/parser/with_ruby_lexer"); return self.$require("opal/parser/patch"); }; Opal.modules["opal/fragment"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $rb_plus = Opal.rb_plus, $rb_gt = Opal.rb_gt, $to_a = Opal.to_a, $not = Opal.not, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_reader,to_s,inspect,type,[],meta,source_map_name_for,sexp,==,class,+,parent,>,!,first,children,loc,respond_to?,dot,selector,operator,begin,line,location,column'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Fragment'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.code = $proto.scope = $proto.sexp = nil; self.$attr_reader("code"); $def(self, '$initialize', function $$initialize(code, scope, sexp) { var self = this; if (sexp == null) sexp = nil; self.code = code.$to_s(); self.sexp = sexp; return (self.scope = scope); }, -3); $def(self, '$inspect', function $$inspect() { var self = this; return "f(" + (self.code.$inspect()) + ")" }); $def(self, '$source_map_name_for', function $$source_map_name_for(sexp) { var $a, self = this, scope = nil, iters = nil, level = nil, const$ = nil, name = nil; switch (sexp.$type().valueOf()) { case "top": switch (sexp.$meta()['$[]']("kind").valueOf()) { case "require": return "" case "eval": return "(eval)" case "main": return "
" default: return nil } break; case "begin": case "newline": case "js_return": if ($truthy(self.scope)) { return self.$source_map_name_for(self.scope.$sexp()) } else { return nil } break; case "iter": scope = self.scope; iters = 1; while ($truthy(scope)) { if ($eqeq(scope.$class(), $$$($$('Nodes'), 'IterNode'))) { iters = $rb_plus(iters, 1); scope = scope.$parent(); } else { break } }; if ($truthy($rb_gt(iters, 1))) { level = " (" + (iters) + " levels)" }; return "block" + (level) + " in " + (self.$source_map_name_for(scope.$sexp())); case "self": return "self" case "module": $a = [].concat($to_a(sexp)), (const$ = ($a[0] == null ? nil : $a[0])), $a; return ""; case "class": $a = [].concat($to_a(sexp)), (const$ = ($a[0] == null ? nil : $a[0])), $a; return ""; case "const": $a = [].concat($to_a(sexp)), (scope = ($a[0] == null ? nil : $a[0])), (name = ($a[1] == null ? nil : $a[1])), $a; if (($not(scope) || ($eqeq(scope.$type(), "cbase")))) { return name.$to_s() } else { return "" + (self.$source_map_name_for(scope)) + "::" + (name) }; break; case "int": return sexp.$children().$first() case "def": return sexp.$children().$first() case "defs": return sexp.$children()['$[]'](1) case "send": return sexp.$children()['$[]'](1) case "lvar": case "lvasgn": case "lvdeclare": case "ivar": case "ivasgn": case "gvar": case "cvar": case "cvasgn": case "gvars": case "gvasgn": case "arg": return sexp.$children().$first() case "str": case "xstr": return self.$source_map_name_for(self.scope.$sexp()) default: return nil } }); $def(self, '$source_map_name', function $$source_map_name() { var self = this; if (!$truthy(self.sexp)) { return nil }; return self.$source_map_name_for(self.sexp); }); $def(self, '$location', function $$location() { var self = this, loc = nil, $ret_or_1 = nil; if ($not(self.sexp)) { return nil } else if ($eqeq(self.sexp.$type(), "send")) { loc = self.sexp.$loc(); if ($truthy(loc['$respond_to?']("dot"))) { if ($truthy(($ret_or_1 = loc.$dot()))) { return $ret_or_1 } else { return loc.$selector() } } else if ($truthy(loc['$respond_to?']("operator"))) { return loc.$operator() } else { return self.sexp }; } else if ($eqeq(self.sexp.$type(), "iter")) { if ($truthy(loc['$respond_to?']("begin"))) { return self.sexp.$loc().$begin() } else { return self.sexp } } else { return self.sexp } }); $def(self, '$line', function $$line() { var $a, self = this; return ($a = self.$location(), ($a === nil || $a == null) ? nil : $a.$line()) }); $def(self, '$column', function $$column() { var $a, self = this; return ($a = self.$location(), ($a === nil || $a == null) ? nil : $a.$column()) }); return $def(self, '$skip_source_map?', function $Fragment_skip_source_map$ques$1() { var self = this; return self.sexp['$=='](false) }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/nodes/closure"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $send = Opal.send, $defs = Opal.defs, $def = Opal.def, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $slice = Opal.slice, $extract_kwargs = Opal.extract_kwargs, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $neqeq = Opal.neqeq, $thrower = Opal.thrower, $not = Opal.not, $to_a = Opal.to_a, $nesting = [], nil = Opal.nil; Opal.add_stubs('const_set,[]=,join,map,reject,==,&,to_proc,add_type,<<,include?,!=,type_inspect,type,class,attr_accessor,new,select_closure,closure_stack,compile_catcher,pop,last,node,push_closure,pop_closure,find,reverse,register_catcher,register_thrower,push,expr_or_nil,identify!,scope,helper,key?,throwers,[],unique_temp,compiler,parent,top_scope,add_scope_temp,|,!,generate_thrower_without_catcher,eval?,error,generate_thrower,is?,catchers,empty?,grep_v,indent,each,line,closure_is?,unshift,await_encountered,wrap'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Closure'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.catchers = $proto.throwers = $proto.type = $proto.node = nil; $const_set($nesting[0], 'NONE', 0); self.types = (new Map()); $defs(self, '$add_type', function $$add_type(name, value) { var $a, self = this; if (self.types == null) self.types = nil; self.$const_set(name, value); return ($a = [name, value], $send(self.types, '[]=', $a), $a[$a.length - 1]); }); $defs(self, '$type_inspect', function $$type_inspect(type) { var self = this; if (self.types == null) self.types = nil; return $send($send(self.types, 'reject', [], function $$1(_name, value){ if (_name == null) _name = nil; if (value == null) value = nil; return type['$&'](value)['$=='](0);}), 'map', [], "first".$to_proc()).$join("|") }); self.$add_type("JS_FUNCTION", (1)['$<<'](0)); self.$add_type("JS_LOOP", (1)['$<<'](1)); self.$add_type("JS_LOOP_INSIDE", (1)['$<<'](2)); self.$add_type("DEF", (1)['$<<'](3)); self.$add_type("LAMBDA", (1)['$<<'](4)); self.$add_type("ITER", (1)['$<<'](5)); self.$add_type("MODULE", (1)['$<<'](6)); self.$add_type("LOOP", (1)['$<<'](7)); self.$add_type("LOOP_INSIDE", (1)['$<<'](8)); self.$add_type("SEND", (1)['$<<'](9)); self.$add_type("TOP", (1)['$<<'](10)); self.$add_type("RESCUE_RETRIER", (1)['$<<'](11)); $const_set($nesting[0], 'ANY', 4294967295); $def(self, '$initialize', function $$initialize(node, type, parent) { var $a, self = this; $a = [node, type, parent], (self.node = $a[0]), (self.type = $a[1]), (self.parent = $a[2]), $a; self.catchers = []; return (self.throwers = (new Map())); }); $def(self, '$register_catcher', function $$register_catcher(type) { var self = this; if (type == null) type = "return"; if (!$truthy(self.catchers['$include?'](type))) { self.catchers['$<<'](type) }; return "$t_" + (type); }, -1); $def(self, '$register_thrower', function $$register_thrower(type, id) { var $a, self = this; return ($a = [type, id], $send(self.throwers, '[]=', $a), $a[$a.length - 1]) }); $def(self, '$is?', function $Closure_is$ques$2(type) { var self = this; return self.type['$&'](type)['$!='](0) }); $def(self, '$inspect', function $$inspect() { var self = this; return "#" }); self.$attr_accessor("node", "type", "parent", "catchers", "throwers"); (function($base, $parent_nesting) { var self = $module($base, 'NodeSupport'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$push_closure', function $$push_closure(type) { var self = this, closure = nil; if (self.compiler == null) self.compiler = nil; if (type == null) type = $$('JS_FUNCTION'); closure = $$('Closure').$new(self, type, self.$select_closure()); self.compiler.$closure_stack()['$<<'](closure); return (self.closure = closure); }, -1); self.$attr_accessor("closure"); $def(self, '$pop_closure', function $$pop_closure() { var $a, self = this, last = nil; if (self.compiler == null) self.compiler = nil; self.$compile_catcher(); self.compiler.$closure_stack().$pop(); last = self.compiler.$closure_stack().$last(); if ($eqeq(($a = last, ($a === nil || $a == null) ? nil : $a.$node()), self)) { return (self.closure = last) } else { return nil }; }); $def(self, '$in_closure', function $$in_closure(type) { var $yield = $$in_closure.$$p || nil, self = this, closure = nil, out = nil; $$in_closure.$$p = null; if (type == null) type = $$('JS_FUNCTION'); closure = self.$push_closure(type); out = Opal.yield1($yield, closure); self.$pop_closure(); return out; }, -1); $def(self, '$select_closure', function $$select_closure($a, $b) { var $post_args, $kwargs, type, break_after, self = this; if (self.compiler == null) self.compiler = nil; $post_args = $slice(arguments); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); if ($post_args.length > 0) type = $post_args.shift();if (type == null) type = $$('ANY'); break_after = $hash_get($kwargs, "break_after");if (break_after == null) break_after = $$('NONE'); return (function(){try { var $t_break = $thrower('break'); return $send(self.compiler.$closure_stack().$reverse(), 'find', [], function $$3(i){ if (i == null) i = nil; if ($neqeq(i.$type()['$&'](break_after), 0)) { $t_break.$throw(nil, $$3.$$is_lambda) }; return i.$type()['$&'](type)['$!='](0);})} catch($e) { if ($e === $t_break) return $e.$v; throw $e; } finally {$t_break.is_orphan = true;}})(); }, -1); $def(self, '$generate_thrower', function $$generate_thrower(type, closure, value) { var self = this, id = nil; id = closure.$register_catcher(type); closure.$register_thrower(type, id); self.$push(id, ".$throw(", self.$expr_or_nil(value), ", ", self.$scope()['$identify!'](), ".$$is_lambda)"); return id; }); $def(self, '$generate_thrower_without_catcher', function $$generate_thrower_without_catcher(type, closure, value) { var $a, self = this, id = nil, parent_scope = nil, $ret_or_1 = nil; self.$helper("thrower"); if ($truthy(closure.$throwers()['$key?'](type))) { id = closure.$throwers()['$[]'](type) } else { id = self.$compiler().$unique_temp("t_"); parent_scope = ($truthy(($ret_or_1 = ($a = closure.$node().$scope(), ($a === nil || $a == null) ? nil : $a.$parent()))) ? ($ret_or_1) : (self.$top_scope())); parent_scope.$add_scope_temp("" + (id) + " = $thrower('" + (type) + "')"); closure.$register_thrower(type, id); }; self.$push(id, ".$throw(", self.$expr_or_nil(value), ", ", self.$scope()['$identify!'](), ".$$is_lambda)"); return id; }); $def(self, '$thrower', function $$thrower(type, value) { var self = this, thrower_closure = nil, last_closure = nil, iter_closure = nil, id = nil; if (value == null) value = nil; switch (type.valueOf()) { case "return": thrower_closure = self.$select_closure($$('DEF'), (new Map([["break_after", $$('MODULE')['$|']($$('TOP'))]]))); last_closure = self.$select_closure($$('JS_FUNCTION')); if ($not(thrower_closure)) { iter_closure = self.$select_closure($$('ITER'), (new Map([["break_after", $$('DEF')['$|']($$('MODULE'))['$|']($$('TOP'))]]))); if ($truthy(iter_closure)) { return self.$generate_thrower_without_catcher("return", iter_closure, value) } else if ($truthy(self.$compiler()['$eval?']())) { return self.$push("Opal.t_eval_return.$throw(", self.$expr_or_nil(value), ", false)") } else { return self.$error("Invalid return") }; } else if ($eqeq(thrower_closure, last_closure)) { return self.$push("return ", self.$expr_or_nil(value)) } else { id = self.$generate_thrower("return", thrower_closure, value); iter_closure = self.$select_closure($$('ITER'), (new Map([["break_after", $$('DEF')['$|']($$('MODULE'))['$|']($$('TOP'))]]))); if ($truthy(iter_closure)) { return iter_closure.$register_thrower("return", id) } else { return nil }; }; break; case "eval_return": thrower_closure = self.$select_closure($$('DEF')['$|']($$('LAMBDA')), (new Map([["break_after", $$('MODULE')['$|']($$('TOP'))]]))); if ($truthy(thrower_closure)) { return thrower_closure.$register_catcher("eval_return") } else { return nil }; break; case "next": case "redo": thrower_closure = self.$select_closure($$('ITER')['$|']($$('LOOP_INSIDE')), (new Map([["break_after", $$('DEF')['$|']($$('MODULE'))['$|']($$('TOP'))]]))); last_closure = self.$select_closure($$('JS_FUNCTION')['$|']($$('JS_LOOP_INSIDE'))); if ($not(thrower_closure)) { return self.$error("Invalid next") } else if ($eqeq(thrower_closure, last_closure)) { if ($truthy(thrower_closure['$is?']($$('LOOP_INSIDE')))) { return self.$push("continue") } else if ($truthy(thrower_closure['$is?']($$('ITER')['$|']($$('LAMBDA'))))) { return self.$push("return ", self.$expr_or_nil(value)) } else { return nil } } else { return self.$generate_thrower("next", thrower_closure, value) }; break; case "break": thrower_closure = self.$select_closure($$('SEND')['$|']($$('LAMBDA'))['$|']($$('LOOP')), (new Map([["break_after", $$('DEF')['$|']($$('MODULE'))['$|']($$('TOP'))]]))); last_closure = self.$select_closure($$('JS_FUNCTION')['$|']($$('JS_LOOP'))); if ($not(thrower_closure)) { iter_closure = self.$select_closure($$('ITER'), (new Map([["break_after", $$('DEF')['$|']($$('MODULE'))['$|']($$('TOP'))]]))); if ($truthy(iter_closure)) { return self.$generate_thrower_without_catcher("break", iter_closure, value) } else { return self.$error("Invalid break") }; } else if ($eqeq(thrower_closure, last_closure)) { if ($truthy(thrower_closure['$is?']($$('JS_FUNCTION')['$|']($$('LAMBDA'))))) { return self.$push("return ", self.$expr_or_nil(value)) } else if ($truthy(thrower_closure['$is?']($$('LOOP')))) { return self.$push("break") } else { return nil } } else { return self.$generate_thrower("break", thrower_closure, value) }; break; case "retry": thrower_closure = self.$select_closure($$('RESCUE_RETRIER'), (new Map([["break_after", $$('DEF')['$|']($$('MODULE'))['$|']($$('TOP'))]]))); last_closure = self.$select_closure($$('JS_LOOP_INSIDE')); if ($not(thrower_closure)) { return self.$error("Invalid retry") } else if ($eqeq(thrower_closure, last_closure)) { return self.$push("continue") } else { return self.$generate_thrower("retry", thrower_closure, value) }; break; default: return nil }; }, -2); $def(self, '$closure_is?', function $NodeSupport_closure_is$ques$4(type) { var self = this; if (self.closure == null) self.closure = nil; return self.closure['$is?'](type) }); return $def(self, '$compile_catcher', function $$compile_catcher() { var self = this, catchers = nil, catchers_without_eval_return = nil; if (self.closure == null) self.closure = nil; catchers = self.closure.$catchers(); if ($truthy(catchers['$empty?']())) { return nil }; self.$helper("thrower"); catchers_without_eval_return = catchers.$grep_v("eval_return"); self.$push("} catch($e) {"); $send(self, 'indent', [], function $$5(){var self = $$5.$$s == null ? this : $$5.$$s; $send(catchers, 'each', [], function $$6(type){var self = $$6.$$s == null ? this : $$6.$$s; if (type == null) type = nil; switch (type.valueOf()) { case "eval_return": return self.$line("if ($e === Opal.t_eval_return) return $e.$v;") default: return self.$line("if ($e === $t_" + (type) + ") return $e.$v;") };}, {$$s: self}); return self.$line("throw $e;");}, {$$s: self}); self.$line("}"); if (!$truthy(catchers_without_eval_return['$empty?']())) { $send(self, 'push', [" finally {"].concat($to_a($send(catchers_without_eval_return, 'map', [], function $$7(type){ if (type == null) type = nil; return "$t_" + (type) + ".is_orphan = true;";}))).concat(["}"])) }; if ($truthy(self['$closure_is?']($$('SEND')))) { self.$unshift("return ") }; if (!$truthy(catchers_without_eval_return['$empty?']())) { self.$unshift("var ", $send(catchers_without_eval_return, 'map', [], function $$8(type){ if (type == null) type = nil; return "$t_" + (type) + " = $thrower('" + (type) + "')";}).$join(", "), "; ") }; self.$unshift("try { "); if ($truthy(self['$closure_is?']($$('JS_FUNCTION')))) { return nil } else if ($truthy(self.$scope().$await_encountered())) { return self.$wrap("(await (async function(){", "})())") } else { return self.$wrap("(function(){", "})()") }; }); })($nesting[0], $nesting); return (function($base) { var self = $module($base, 'CompilerSupport'); return $def(self, '$closure_stack', function $$closure_stack() { var self = this, $ret_or_1 = nil; if (self.closure_stack == null) self.closure_stack = nil; return (self.closure_stack = ($truthy(($ret_or_1 = self.closure_stack)) ? ($ret_or_1) : ([]))) }) })($nesting[0]); })($nesting[0], null, $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/nodes/helpers"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $truthy = Opal.truthy, $def = Opal.def, $rb_plus = Opal.rb_plus, $send = Opal.send, $slice = Opal.slice, $to_a = Opal.to_a, $eqeq = Opal.eqeq, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,valid_name?,inspect,=~,to_s,+,indent,compiler,to_proc,parser_indent,push,fragment,current_indent,js_truthy_optimize,helper,expr,type,[],handlers,include?,truthy_optimize?,==,count,record_method_call,first,children,s,[]=,meta'); self.$require("opal/regexp_anchors"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Helpers'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$property', function $$property(name) { var self = this; if ($truthy(self['$valid_name?'](name))) { return "." + (name) } else { return "[" + (name.$inspect()) + "]" } }); $def(self, '$valid_name?', function $Helpers_valid_name$ques$1(name) { return $$$($$$($$('Opal'), 'Rewriters'), 'JsReservedWords')['$valid_name?'](name) }); $def(self, '$mid_to_jsid', function $$mid_to_jsid(mid) { if ($truthy(/\=|\+|\-|\*|\/|\!|\?|<|\>|\&|\||\^|\%|\~|\[|`/['$=~'](mid.$to_s()))) { return "['$" + (mid) + "']" } else { return $rb_plus(".$", mid) } }); $def(self, '$indent', function $$indent() { var block = $$indent.$$p || nil, self = this; $$indent.$$p = null; ; return $send(self.$compiler(), 'indent', [], block.$to_proc()); }); $def(self, '$current_indent', function $$current_indent() { var self = this; return self.$compiler().$parser_indent() }); $def(self, '$line', function $$line($a) { var $post_args, strs, self = this; $post_args = $slice(arguments); strs = $post_args; self.$push(self.$fragment("\n" + (self.$current_indent()), (new Map([["loc", false]])))); return $send(self, 'push', $to_a(strs)); }, -1); $def(self, '$empty_line', function $$empty_line() { var self = this; return self.$push(self.$fragment("\n", (new Map([["loc", false]])))) }); $def(self, '$js_truthy', function $$js_truthy(sexp) { var self = this, optimize = nil; if ($truthy((optimize = self.$js_truthy_optimize(sexp)))) { return optimize }; self.$helper("truthy"); return [self.$fragment("$truthy("), self.$expr(sexp), self.$fragment(")")]; }); return $def(self, '$js_truthy_optimize', function $$js_truthy_optimize(sexp) { var $a, self = this, receiver = nil, mid = nil, args = nil, receiver_handler_class = nil, $ret_or_2 = nil, allow_optimization_on_type = nil, $ret_or_3 = nil, _test = nil, true_body = nil, false_body = nil; switch (sexp.$type().valueOf()) { case "send": $a = [].concat($to_a(sexp)), (receiver = ($a[0] == null ? nil : $a[0])), (mid = ($a[1] == null ? nil : $a[1])), (args = $slice($a, 2)), $a; receiver_handler_class = ($truthy(($ret_or_2 = receiver)) ? (self.$compiler().$handlers()['$[]'](receiver.$type())) : ($ret_or_2)); allow_optimization_on_type = ($truthy(($ret_or_2 = ($truthy(($ret_or_3 = $$$($$('Compiler'), 'COMPARE')['$include?'](mid.$to_s()))) ? (receiver_handler_class) : ($ret_or_3)))) ? (receiver_handler_class['$truthy_optimize?']()) : ($ret_or_2)); if (($truthy(allow_optimization_on_type) || ($eqeq(mid, "block_given?")))) { return self.$expr(sexp) } else if ($eqeq(args.$count(), 1)) { switch (mid.valueOf()) { case "==": self.$helper("eqeq"); self.$compiler().$record_method_call(mid); return [self.$fragment("$eqeq("), self.$expr(receiver), self.$fragment(", "), self.$expr(args.$first()), self.$fragment(")")]; case "===": self.$helper("eqeqeq"); self.$compiler().$record_method_call(mid); return [self.$fragment("$eqeqeq("), self.$expr(receiver), self.$fragment(", "), self.$expr(args.$first()), self.$fragment(")")]; case "!=": self.$helper("neqeq"); self.$compiler().$record_method_call(mid); return [self.$fragment("$neqeq("), self.$expr(receiver), self.$fragment(", "), self.$expr(args.$first()), self.$fragment(")")]; default: return nil } } else if ($eqeq(args.$count(), 0)) { switch (mid.valueOf()) { case "!": self.$helper("not"); self.$compiler().$record_method_call(mid); return [self.$fragment("$not("), self.$expr(receiver), self.$fragment(")")]; default: return nil } } else { return nil }; break; case "begin": if ($eqeq(sexp.$children().$count(), 1)) { return self.$js_truthy_optimize(sexp.$children().$first()) } else { return nil } break; case "if": $a = [].concat($to_a(sexp)), (_test = ($a[0] == null ? nil : $a[0])), (true_body = ($a[1] == null ? nil : $a[1])), (false_body = ($a[2] == null ? nil : $a[2])), $a; if ($eqeq(true_body, self.$s("true"))) { sexp.$meta()['$[]=']("do_js_truthy_on_false_body", true); return self.$expr(sexp); } else if ($eqeq(false_body, self.$s("false"))) { sexp.$meta()['$[]=']("do_js_truthy_on_true_body", true); return self.$expr(sexp); } else { return nil }; break; default: return nil } }); })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/base"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $defs = Opal.defs, $slice = Opal.slice, $send = Opal.send, $return_val = Opal.return_val, $def = Opal.def, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $Opal = Opal.Opal, $neqeq = Opal.neqeq, $rb_plus = Opal.rb_plus, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,each,[]=,handlers,each_with_index,define_method,[],children,attr_reader,type,top_scope,top_scope=,compile,raise,is_a?,fragment,<<,reverse_each,unshift,push,new,scope,error,loc,==,process,expr,!=,add_scope_local,to_sym,add_scope_ivar,add_scope_gvar,add_scope_temp,helper,with_temp,to_proc,in_while?,instance_variable_get,has_rescue_else?,in_ensure,in_ensure?,in_resbody,in_resbody?,in_rescue,!,class_scope?,sclass?,+,parent,nesting,class_variable_owner_nesting_level,comments,compiler,expression,respond_to?,name,source_buffer,start_with?,end_with?,line'); self.$require("opal/nodes/helpers"); self.$require("opal/nodes/closure"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Base'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.compiler = $proto.sexp = $proto.fragments = $proto.level = nil; self.$include($$('Helpers')); self.$include($$$($$('Closure'), 'NodeSupport')); $defs(self, '$handlers', function $$handlers() { var self = this, $ret_or_1 = nil; if (self.handlers == null) self.handlers = nil; return (self.handlers = ($truthy(($ret_or_1 = self.handlers)) ? ($ret_or_1) : ((new Map())))) }); $defs(self, '$handle', function $$handle($a) { var $post_args, types, self = this; $post_args = $slice(arguments); types = $post_args; return $send(types, 'each', [], function $$1(type){var $b, self = $$1.$$s == null ? this : $$1.$$s; if (type == null) type = nil; return ($b = [type, self], $send($$('Base').$handlers(), '[]=', $b), $b[$b.length - 1]);}, {$$s: self}); }, -1); $defs(self, '$children', function $$children($a) { var $post_args, names, self = this; $post_args = $slice(arguments); names = $post_args; return $send(names, 'each_with_index', [], function $$2(name, idx){var self = $$2.$$s == null ? this : $$2.$$s; if (name == null) name = nil; if (idx == null) idx = nil; return $send(self, 'define_method', [name], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s; if (self.sexp == null) self.sexp = nil; return self.sexp.$children()['$[]'](idx)}, {$$s: self});}, {$$s: self}); }, -1); $defs(self, '$truthy_optimize?', $return_val(false)); self.$attr_reader("compiler", "type", "sexp"); $def(self, '$initialize', function $$initialize(sexp, level, compiler) { var $a, self = this, $ret_or_1 = nil; self.sexp = sexp; self.type = sexp.$type(); self.level = level; self.compiler = compiler; if ($truthy(($ret_or_1 = self.compiler.$top_scope()))) { return $ret_or_1 } else { return ($a = [self], $send(self.compiler, 'top_scope=', $a), $a[$a.length - 1]) }; }); $def(self, '$children', function $$children() { var self = this; return self.sexp.$children() }); $def(self, '$compile_to_fragments', function $$compile_to_fragments() { var $a, self = this; if ($truthy((($a = self['fragments'], $a != null && $a !== nil) ? 'instance-variable' : nil))) { return self.fragments }; self.fragments = []; self.$compile(); return self.fragments; }); $def(self, '$compile', function $$compile() { var self = this; return self.$raise("Not Implemented") }); $def(self, '$push', function $$push($a) { var $post_args, strs, self = this; $post_args = $slice(arguments); strs = $post_args; return $send(strs, 'each', [], function $$4(str){var self = $$4.$$s == null ? this : $$4.$$s; if (self.fragments == null) self.fragments = nil; if (str == null) str = nil; if ($truthy(str['$is_a?']($$('String')))) { str = self.$fragment(str) }; return self.fragments['$<<'](str);}, {$$s: self}); }, -1); $def(self, '$unshift', function $$unshift($a) { var $post_args, strs, self = this; $post_args = $slice(arguments); strs = $post_args; return $send(strs, 'reverse_each', [], function $$5(str){var self = $$5.$$s == null ? this : $$5.$$s; if (self.fragments == null) self.fragments = nil; if (str == null) str = nil; if ($truthy(str['$is_a?']($$('String')))) { str = self.$fragment(str) }; return self.fragments.$unshift(str);}, {$$s: self}); }, -1); $def(self, '$wrap', function $$wrap(pre, post) { var self = this; self.$unshift(pre); return self.$push(post); }); $def(self, '$fragment', function $$fragment(str, $kwargs) { var loc, self = this, $ret_or_1 = nil; $kwargs = $ensure_kwargs($kwargs); loc = $hash_get($kwargs, "loc");if (loc == null) loc = true; return $$$($$('Opal'), 'Fragment').$new(str, self.$scope(), ($truthy(($ret_or_1 = loc)) ? (self.sexp) : ($ret_or_1))); }, -2); $def(self, '$error', function $$error(msg) { var self = this; return self.compiler.$error(msg) }); $def(self, '$scope', function $$scope() { var self = this; return self.compiler.$scope() }); $def(self, '$top_scope', function $$top_scope() { var self = this; return self.compiler.$top_scope() }); $def(self, '$s', function $$s(type, $a) { var $post_args, children, self = this; $post_args = $slice(arguments, 1); children = $post_args; return $$$($$$($Opal, 'AST'), 'Node').$new(type, children, (new Map([["location", self.sexp.$loc()]]))); }, -2); $def(self, '$expr?', function $Base_expr$ques$6() { var self = this; return self.level['$==']("expr") }); $def(self, '$recv?', function $Base_recv$ques$7() { var self = this; return self.level['$==']("recv") }); $def(self, '$stmt?', function $Base_stmt$ques$8() { var self = this; return self.level['$==']("stmt") }); $def(self, '$process', function $$process(sexp, level) { var self = this; if (level == null) level = "expr"; return self.compiler.$process(sexp, level); }, -2); $def(self, '$expr', function $$expr(sexp) { var self = this; return self.compiler.$process(sexp, "expr") }); $def(self, '$recv', function $$recv(sexp) { var self = this; return self.compiler.$process(sexp, "recv") }); $def(self, '$stmt', function $$stmt(sexp) { var self = this; return self.compiler.$process(sexp, "stmt") }); $def(self, '$expr_or_nil', function $$expr_or_nil(sexp) { var self = this; if ($truthy(sexp)) { return self.$expr(sexp) } else { return "nil" } }); $def(self, '$expr_or_empty', function $$expr_or_empty(sexp) { var self = this; if (($truthy(sexp) && ($neqeq(sexp.$type(), "nil")))) { return self.$expr(sexp) } else { return "" } }); $def(self, '$add_local', function $$add_local(name) { var self = this; return self.$scope().$add_scope_local(name.$to_sym()) }); $def(self, '$add_ivar', function $$add_ivar(name) { var self = this; return self.$scope().$add_scope_ivar(name) }); $def(self, '$add_gvar', function $$add_gvar(name) { var self = this; return self.$scope().$add_scope_gvar(name) }); $def(self, '$add_temp', function $$add_temp(temp) { var self = this; return self.$scope().$add_scope_temp(temp) }); $def(self, '$helper', function $$helper(name) { var self = this; return self.compiler.$helper(name) }); $def(self, '$with_temp', function $$with_temp() { var block = $$with_temp.$$p || nil, self = this; $$with_temp.$$p = null; ; return $send(self.compiler, 'with_temp', [], block.$to_proc()); }); $def(self, '$in_while?', function $Base_in_while$ques$9() { var self = this; return self.compiler['$in_while?']() }); $def(self, '$while_loop', function $$while_loop() { var self = this; return self.compiler.$instance_variable_get("@while_loop") }); $def(self, '$has_rescue_else?', function $Base_has_rescue_else$ques$10() { var self = this; return self.$scope()['$has_rescue_else?']() }); $def(self, '$in_ensure', function $$in_ensure() { var block = $$in_ensure.$$p || nil, self = this; $$in_ensure.$$p = null; ; return $send(self.$scope(), 'in_ensure', [], block.$to_proc()); }); $def(self, '$in_ensure?', function $Base_in_ensure$ques$11() { var self = this; return self.$scope()['$in_ensure?']() }); $def(self, '$in_resbody', function $$in_resbody() { var block = $$in_resbody.$$p || nil, self = this; $$in_resbody.$$p = null; ; return $send(self.$scope(), 'in_resbody', [], block.$to_proc()); }); $def(self, '$in_resbody?', function $Base_in_resbody$ques$12() { var self = this; return self.$scope()['$in_resbody?']() }); $def(self, '$in_rescue', function $$in_rescue(node) { var block = $$in_rescue.$$p || nil, self = this; $$in_rescue.$$p = null; ; return $send(self.$scope(), 'in_rescue', [node], block.$to_proc()); }); $def(self, '$class_variable_owner_nesting_level', function $$class_variable_owner_nesting_level() { var self = this, cvar_scope = nil, nesting_level = nil, $ret_or_1 = nil; cvar_scope = self.$scope(); nesting_level = 0; while ($truthy(($truthy(($ret_or_1 = cvar_scope)) ? (cvar_scope['$class_scope?']()['$!']()) : ($ret_or_1)))) { if ($truthy(cvar_scope['$sclass?']())) { nesting_level = $rb_plus(nesting_level, 1) }; cvar_scope = cvar_scope.$parent(); }; return nesting_level; }); $def(self, '$class_variable_owner', function $$class_variable_owner() { var self = this; if ($truthy(self.$scope())) { return "" + (self.$scope().$nesting()) + "[" + (self.$class_variable_owner_nesting_level()) + "]" } else { return "Opal.Object" } }); $def(self, '$comments', function $$comments() { var self = this; return self.$compiler().$comments()['$[]'](self.sexp.$loc()) }); return $def(self, '$source_location', function $$source_location() { var self = this, expr = nil, file = nil, line = nil; expr = self.sexp.$loc().$expression(); if ($truthy(expr['$respond_to?']("source_buffer"))) { file = expr.$source_buffer().$name(); if ($truthy(file['$start_with?']("corelib/"))) { file = "" }; if ($truthy(file['$end_with?'](".js"))) { file = "" }; } else { file = "(eval)" }; line = self.sexp.$loc().$line(); return "['" + (file) + "', " + (line) + "]"; }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/literal"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $return_val = Opal.return_val, $defs = Opal.defs, $truthy = Opal.truthy, $const_set = Opal.const_set, $regexp = Opal.regexp, $send = Opal.send, $rb_plus = Opal.rb_plus, $lambda = Opal.lambda, $rb_le = Opal.rb_le, $rb_minus = Opal.rb_minus, $slice = Opal.slice, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $eqeq = Opal.eqeq, $eqeqeq = Opal.eqeqeq, $Opal = Opal.Opal, $rb_gt = Opal.rb_gt, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,handle,push,to_s,type,self,scope,children,value,recv?,wrap,freeze,join,keys,gsub,even?,length,last_match,+,chop,[],inspect,to_i,to_utf16,translate_escape_chars,valid_encoding?,helper,upcase,<=,call,-,>>,&,attr_accessor,extract_flags_and_value,select!,flags,=~,warning,compiler,==,compile_static_regexp,compile_dynamic_regexp,each_with_index,zero?,expr,any?,===,static_as_dynamic,new,flags=,map,to_proc,value=,empty?,s,single_line?,include?,is_a?,updated,delete,source,expression,loc,private,>,!=,!,regexp,first,each,compile_inline?,compile_inline,compile_range_initialize,start,finish,raise,expr_or_nil,absolute_const,top_scope,numerator,denominator,real,imag'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super) { var self = $klass($base, $super, 'ValueNode'); self.$handle("true", "false", "nil"); $def(self, '$compile', function $$compile() { var self = this; return self.$push(self.$type().$to_s()) }); return $defs(self, '$truthy_optimize?', $return_val(true)); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'SelfNode'); self.$handle("self"); return $def(self, '$compile', function $$compile() { var self = this; return self.$push(self.$scope().$self()) }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'NumericNode'); self.$handle("int", "float"); self.$children("value"); $def(self, '$compile', function $$compile() { var self = this; self.$push(self.$value().$to_s()); if ($truthy(self['$recv?']())) { return self.$wrap("(", ")") } else { return nil }; }); return $defs(self, '$truthy_optimize?', $return_val(true)); })($nesting[0], $$('Base')); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'StringNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$handle("str"); self.$children("value"); $const_set($nesting[0], 'ESCAPE_CHARS', (new Map([["a", "\\u0007"], ["e", "\\u001b"]])).$freeze()); $const_set($nesting[0], 'ESCAPE_REGEX', $regexp(["(\\\\+)([", $$('ESCAPE_CHARS').$keys().$join(""), "])"]).$freeze()); $def(self, '$translate_escape_chars', function $$translate_escape_chars(inspect_string) { return $send(inspect_string, 'gsub', [$$('ESCAPE_REGEX')], function $$1(original){ if (original == null) original = nil; if ($truthy($$('Regexp').$last_match(1).$length()['$even?']())) { return original } else { return $rb_plus($$('Regexp').$last_match(1).$chop(), $$('ESCAPE_CHARS')['$[]']($$('Regexp').$last_match(2))) };}) }); $def(self, '$compile', function $$compile() { var self = this, string_value = nil, sanitized_value = nil; string_value = self.$value(); sanitized_value = $send(string_value.$inspect(), 'gsub', [/\\u\{([0-9a-f]+)\}/], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s, code_point = nil; code_point = $$('Regexp').$last_match(1).$to_i(16); return self.$to_utf16(code_point);}, {$$s: self}); self.$push(self.$translate_escape_chars(sanitized_value)); nil; if ($truthy(self.$value()['$valid_encoding?']())) { return nil } else { self.$helper("binary"); return self.$wrap("$binary(", ")"); }; }); return $def(self, '$to_utf16', function $$to_utf16(code_point) { var ten_bits = nil, u = nil, lead_surrogate = nil, tail_surrogate = nil; ten_bits = 1023; u = $lambda(function $$3(code_unit){ if (code_unit == null) code_unit = nil; return $rb_plus("\\u", code_unit.$to_s(16).$upcase());}); if ($truthy($rb_le(code_point, 65535))) { return u.$call(code_point) }; code_point = $rb_minus(code_point, 65536); lead_surrogate = $rb_plus(55296, code_point['$>>'](10)); tail_surrogate = $rb_plus(56320, code_point['$&'](ten_bits)); return $rb_plus(u.$call(lead_surrogate), u.$call(tail_surrogate)); }); })($nesting[0], $$('Base'), $nesting); (function($base, $super) { var self = $klass($base, $super, 'SymbolNode'); self.$handle("sym"); self.$children("value"); return $def(self, '$compile', function $$compile() { var self = this; return self.$push(self.$value().$to_s().$inspect()) }); })($nesting[0], $$('Base')); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'RegexpNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.sexp = nil; self.$handle("regexp"); self.$attr_accessor("value", "flags"); $const_set($nesting[0], 'SUPPORTED_FLAGS', /[gimuy]/.$freeze()); $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', $to_a($fwd_rest), $yield); return self.$extract_flags_and_value(); }, -1); $def(self, '$compile', function $$compile() { var self = this; $send(self.$flags(), 'select!', [], function $$4(flag){var self = $$4.$$s == null ? this : $$4.$$s; if (flag == null) flag = nil; if ($truthy($$('SUPPORTED_FLAGS')['$=~'](flag))) { return true } else { self.$compiler().$warning("Skipping the '" + (flag) + "' Regexp flag as it's not widely supported by JavaScript vendors."); return false; };}, {$$s: self}); if ($eqeq(self.$value().$type(), "str")) { return self.$compile_static_regexp() } else { return self.$compile_dynamic_regexp() }; }); $def(self, '$compile_dynamic_regexp', function $$compile_dynamic_regexp() { var self = this; self.$helper("regexp"); self.$push("$regexp(["); $send(self.$value().$children(), 'each_with_index', [], function $$5(v, index){var self = $$5.$$s == null ? this : $$5.$$s; if (v == null) v = nil; if (index == null) index = nil; if (!$truthy(index['$zero?']())) { self.$push(", ") }; return self.$push(self.$expr(v));}, {$$s: self}); self.$push("]"); if ($truthy(self.$flags()['$any?']())) { self.$push(", '" + (self.$flags().$join()) + "'") }; return self.$push(")"); }); $def(self, '$compile_static_regexp', function $$compile_static_regexp() { var self = this, value = nil, $ret_or_1 = nil; value = self.$value().$children()['$[]'](0); if ($eqeqeq("", ($ret_or_1 = value))) { return self.$push("/(?:)/") } else if ($eqeqeq($regexp(["\\(\\?[(<>#]|[*+?]\\+"]), $ret_or_1)) { return self.$static_as_dynamic(value) } else { return self.$push("" + ($$('Regexp').$new(value).$inspect()) + (self.$flags().$join())) }; }); $def(self, '$static_as_dynamic', function $$static_as_dynamic(value) { var self = this; self.$helper("regexp"); self.$push("$regexp([\""); self.$push(value.$gsub("\\", "\\\\\\\\")); self.$push("\"]"); if ($truthy(self.$flags()['$any?']())) { self.$push(", '" + (self.$flags().$join()) + "'") }; return self.$push(")"); }); $def(self, '$extract_flags_and_value', function $$extract_flags_and_value() { var $a, $b, self = this, values = nil, flags_sexp = nil, parts = nil; $a = [].concat($to_a(self.$children())), $b = $a.length - 1, $b = ($b < 0) ? 0 : $b, (values = $slice($a, 0, $b)), (flags_sexp = ($a[$b] == null ? nil : $a[$b])), $a; self['$flags=']($send(flags_sexp.$children(), 'map', [], "to_s".$to_proc())); self['$value='](($truthy(values['$empty?']()) ? (self.$s("str", "")) : ($truthy(self['$single_line?'](values)) ? (values['$[]'](0)) : ($send(self, 's', ["dstr"].concat($to_a(values))))))); if ($truthy(self.$flags()['$include?']("x"))) { parts = $send(self.$value().$children(), 'map', [], function $$6(part){var self = $$6.$$s == null ? this : $$6.$$s, trimmed_value = nil; if (part == null) part = nil; if (($truthy(part['$is_a?']($$$($$$($Opal, 'AST'), 'Node'))) && ($eqeq(part.$type(), "str")))) { trimmed_value = part.$children()['$[]'](0).$gsub(/^\s*\#.*/, "").$gsub(/\s/, ""); return self.$s("str", trimmed_value); } else { return part };}, {$$s: self}); self['$value='](self.$value().$updated(nil, parts)); self.$flags().$delete("x"); }; if ($eqeq(self.$value().$type(), "str")) { return ($a = [self.$s("str", self.$value().$children()['$[]'](0).$gsub("\\A", "^").$gsub("\\z", "$"))], $send(self, 'value=', $a), $a[$a.length - 1]) } else { return nil }; }); $def(self, '$raw_value', function $$raw_value() { var $a, self = this; return ($a = [self.sexp.$loc().$expression().$source()], $send(self, 'value=', $a), $a[$a.length - 1]) }); self.$private(); return $def(self, '$single_line?', function $RegexpNode_single_line$ques$7(values) { var value = nil, $ret_or_1 = nil; if ($truthy($rb_gt(values.$length(), 1))) { return false }; value = values['$[]'](0); if ($truthy(($ret_or_1 = value.$type()['$!=']("str")))) { return $ret_or_1 } else { return value.$children()['$[]'](0)['$include?']("\n")['$!']() }; }); })($nesting[0], $$('Base'), $nesting); (function($base, $super) { var self = $klass($base, $super, 'MatchCurrentLineNode'); self.$handle("match_current_line"); self.$children("regexp"); return $def(self, '$compile', function $$compile() { var self = this, gvar_sexp = nil, send_node = nil; gvar_sexp = self.$s("gvar", "$_"); send_node = self.$s("send", gvar_sexp, "=~", self.$regexp()); return self.$push(self.$expr(send_node)); }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'DynamicStringNode'); self.$handle("dstr"); return $def(self, '$compile', function $$compile() { var self = this, skip_empty = nil; if (($truthy($rb_gt(self.$children().$length(), 1)) && ($eqeq(self.$children().$first().$type(), "str")))) { skip_empty = true } else { self.$push("\"\"") }; return $send(self.$children(), 'each', [], function $$8(part){var self = $$8.$$s == null ? this : $$8.$$s; if (part == null) part = nil; if ($truthy(skip_empty)) { skip_empty = false } else { self.$push(" + ") }; if ($eqeq(part.$type(), "str")) { self.$push(self.$expr(part)) } else { self.$push("(", self.$expr(part), ")") }; if ($truthy(self['$recv?']())) { return self.$wrap("(", ")") } else { return nil };}, {$$s: self}); }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'DynamicSymbolNode'); return self.$handle("dsym") })($nesting[0], $$('DynamicStringNode')); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'RangeNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$children("start", "finish"); $const_set($nesting[0], 'SIMPLE_CHILDREN_TYPES', ["int", "float", "str", "sym"].$freeze()); $def(self, '$compile', function $$compile() { var self = this; if ($truthy(self['$compile_inline?']())) { self.$helper("range"); return self.$compile_inline(); } else { return self.$compile_range_initialize() } }); $def(self, '$compile_inline?', function $RangeNode_compile_inline$ques$9() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil, $ret_or_3 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.$start()['$!']())) ? ($ret_or_2) : (($truthy(($ret_or_3 = self.$start().$type())) ? ($$('SIMPLE_CHILDREN_TYPES')['$include?'](self.$start().$type())) : ($ret_or_3))))))) { if ($truthy(($ret_or_2 = self.$finish()['$!']()))) { return $ret_or_2 } else { if ($truthy(($ret_or_3 = self.$finish().$type()))) { return $$('SIMPLE_CHILDREN_TYPES')['$include?'](self.$finish().$type()) } else { return $ret_or_3 }; }; } else { return $ret_or_1 } }); $def(self, '$compile_inline', function $$compile_inline() { var self = this; return self.$raise($$('NotImplementedError')) }); return $def(self, '$compile_range_initialize', function $$compile_range_initialize() { var self = this; return self.$raise($$('NotImplementedError')) }); })($nesting[0], $$('Base'), $nesting); (function($base, $super) { var self = $klass($base, $super, 'InclusiveRangeNode'); self.$handle("irange"); $def(self, '$compile_inline', function $$compile_inline() { var self = this; return self.$push("$range(", self.$expr_or_nil(self.$start()), ", ", self.$expr_or_nil(self.$finish()), ", false)") }); return $def(self, '$compile_range_initialize', function $$compile_range_initialize() { var self = this; return self.$push("Opal.Range.$new(", self.$expr_or_nil(self.$start()), ", ", self.$expr_or_nil(self.$finish()), ", false)") }); })($nesting[0], $$('RangeNode')); (function($base, $super) { var self = $klass($base, $super, 'ExclusiveRangeNode'); self.$handle("erange"); $def(self, '$compile_inline', function $$compile_inline() { var self = this; return self.$push("$range(", self.$expr_or_nil(self.$start()), ", ", self.$expr_or_nil(self.$finish()), ", true)") }); return $def(self, '$compile_range_initialize', function $$compile_range_initialize() { var self = this; return self.$push("Opal.Range.$new(", self.$expr_or_nil(self.$start()), ",", self.$expr_or_nil(self.$finish()), ", true)") }); })($nesting[0], $$('RangeNode')); (function($base, $super) { var self = $klass($base, $super, 'RationalNode'); self.$handle("rational"); self.$children("value"); return $def(self, '$compile', function $$compile() { var self = this; return self.$push("" + (self.$top_scope().$absolute_const()) + "('Rational').$new(" + (self.$value().$numerator()) + ", " + (self.$value().$denominator()) + ")") }); })($nesting[0], $$('Base')); return (function($base, $super) { var self = $klass($base, $super, 'ComplexNode'); self.$handle("complex"); self.$children("value"); return $def(self, '$compile', function $$compile() { var self = this; return self.$push("" + (self.$top_scope().$absolute_const()) + "('Complex').$new(" + (self.$value().$real()) + ", " + (self.$value().$imag()) + ")") }); })($nesting[0], $$('Base')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/variables"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $def = Opal.def, $send = Opal.send, $range = Opal.range, $send2 = Opal.send2, $find_super = Opal.find_super, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,irb?,compiler,top?,scope,using_irb?,push,to_s,var_name,with_temp,property,wrap,add_local,expr,value,expr?,recv?,[],name,add_ivar,self,helper,add_gvar,handle_global_match,handle_post_match,handle_pre_match,raise,index,stmt?,class_variable_owner,inspect'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super) { var self = $klass($base, $super, 'LocalVariableNode'); self.$handle("lvar"); self.$children("var_name"); $def(self, '$using_irb?', function $LocalVariableNode_using_irb$ques$1() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$compiler()['$irb?']()))) { return self.$scope()['$top?']() } else { return $ret_or_1 } }); return $def(self, '$compile', function $$compile() { var self = this; if (!$truthy(self['$using_irb?']())) { return self.$push(self.$var_name().$to_s()) }; return $send(self, 'with_temp', [], function $$2(tmp){var self = $$2.$$s == null ? this : $$2.$$s; if (tmp == null) tmp = nil; self.$push(self.$property(self.$var_name().$to_s())); return self.$wrap("((" + (tmp) + " = Opal.irb_vars", ") == null ? nil : " + (tmp) + ")");}, {$$s: self}); }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'LocalAssignNode'); self.$handle("lvasgn"); self.$children("var_name", "value"); $def(self, '$using_irb?', function $LocalAssignNode_using_irb$ques$3() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$compiler()['$irb?']()))) { return self.$scope()['$top?']() } else { return $ret_or_1 } }); return $def(self, '$compile', function $$compile() { var self = this; if ($truthy(self['$using_irb?']())) { self.$push("Opal.irb_vars" + (self.$property(self.$var_name().$to_s())) + " = ") } else { self.$add_local(self.$var_name().$to_s()); self.$push("" + (self.$var_name()) + " = "); }; self.$push(self.$expr(self.$value())); if ((($truthy(self['$recv?']()) || ($truthy(self['$expr?']()))) && ($truthy(self.$value())))) { return self.$wrap("(", ")") } else { return nil }; }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'LocalDeclareNode'); self.$handle("lvdeclare"); self.$children("var_name"); return $def(self, '$compile', function $$compile() { var self = this; self.$add_local(self.$var_name().$to_s()); return nil; }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'InstanceVariableNode'); self.$handle("ivar"); self.$children("name"); $def(self, '$var_name', function $$var_name() { var self = this; return self.$name().$to_s()['$[]']($range(1, -1, false)) }); return $def(self, '$compile', function $$compile() { var self = this, name = nil; name = self.$property(self.$var_name()); self.$add_ivar(name); return self.$push("" + (self.$scope().$self()) + (name)); }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'InstanceAssignNode'); self.$handle("ivasgn"); self.$children("name", "value"); $def(self, '$var_name', function $$var_name() { var self = this; return self.$name().$to_s()['$[]']($range(1, -1, false)) }); return $def(self, '$compile', function $$compile() { var self = this, name = nil; name = self.$property(self.$var_name()); self.$push("" + (self.$scope().$self()) + (name) + " = "); self.$push(self.$expr(self.$value())); if ((($truthy(self['$recv?']()) || ($truthy(self['$expr?']()))) && ($truthy(self.$value())))) { return self.$wrap("(", ")") } else { return nil }; }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'GlobalVariableNode'); self.$handle("gvar"); self.$children("name"); $def(self, '$var_name', function $$var_name() { var self = this; return self.$name().$to_s()['$[]']($range(1, -1, false)) }); return $def(self, '$compile', function $$compile() { var self = this, name = nil; self.$helper("gvars"); name = self.$property(self.$var_name()); self.$add_gvar(name); return self.$push("$gvars" + (name)); }); })($nesting[0], $$('Base')); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'BackRefNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$handle("back_ref"); $def(self, '$compile', function $$compile() { var $yield = $$compile.$$p || nil, self = this; $$compile.$$p = null; self.$helper("gvars"); switch (self.$var_name().valueOf()) { case "&": return self.$handle_global_match() case "'": return self.$handle_post_match() case "`": return self.$handle_pre_match() case "+": return $send2(self, $find_super(self, 'compile', $$compile, false, true), 'compile', [], $yield) default: return self.$raise($$('NotImplementedError')) }; }); $def(self, '$handle_global_match', function $$handle_global_match() { var self = this; return $send(self, 'with_temp', [], function $$4(tmp){var self = $$4.$$s == null ? this : $$4.$$s; if (tmp == null) tmp = nil; return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + "['$[]'](0))");}, {$$s: self}) }); $def(self, '$handle_pre_match', function $$handle_pre_match() { var self = this; return $send(self, 'with_temp', [], function $$5(tmp){var self = $$5.$$s == null ? this : $$5.$$s; if (tmp == null) tmp = nil; return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + ".$pre_match())");}, {$$s: self}) }); return $def(self, '$handle_post_match', function $$handle_post_match() { var self = this; return $send(self, 'with_temp', [], function $$6(tmp){var self = $$6.$$s == null ? this : $$6.$$s; if (tmp == null) tmp = nil; return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + ".$post_match())");}, {$$s: self}) }); })($nesting[0], $$('GlobalVariableNode'), $nesting); (function($base, $super) { var self = $klass($base, $super, 'GlobalAssignNode'); self.$handle("gvasgn"); self.$children("name", "value"); $def(self, '$var_name', function $$var_name() { var self = this; return self.$name().$to_s()['$[]']($range(1, -1, false)) }); return $def(self, '$compile', function $$compile() { var self = this, name = nil; self.$helper("gvars"); name = self.$property(self.$var_name()); self.$push("$gvars" + (name) + " = "); self.$push(self.$expr(self.$value())); if ((($truthy(self['$recv?']()) || ($truthy(self['$expr?']()))) && ($truthy(self.$value())))) { return self.$wrap("(", ")") } else { return nil }; }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'NthrefNode'); self.$handle("nth_ref"); self.$children("index"); return $def(self, '$compile', function $$compile() { var self = this; self.$helper("gvars"); return $send(self, 'with_temp', [], function $$7(tmp){var self = $$7.$$s == null ? this : $$7.$$s; if (tmp == null) tmp = nil; return self.$push("((" + (tmp) + " = $gvars['~']) === nil ? nil : " + (tmp) + "['$[]'](" + (self.$index()) + "))");}, {$$s: self}); }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'ClassVariableNode'); self.$handle("cvar"); self.$children("name"); return $def(self, '$compile', function $$compile() { var self = this, tolerant = nil; self.$helper("class_variable_get"); tolerant = false; if ($truthy(self['$stmt?']())) { tolerant = true }; return self.$push("$class_variable_get(" + (self.$class_variable_owner()) + ", '" + (self.$name()) + "', " + (tolerant.$inspect()) + ")"); }); })($nesting[0], $$('Base')); return (function($base, $super) { var self = $klass($base, $super, 'ClassVarAssignNode'); self.$handle("cvasgn"); self.$children("name", "value"); return $def(self, '$compile', function $$compile() { var self = this; self.$helper("class_variable_set"); return self.$push("$class_variable_set(" + (self.$class_variable_owner()) + ", '" + (self.$name()) + "', ", self.$expr(self.$value()), ")"); }); })($nesting[0], $$('Base')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/constants"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $def = Opal.def, $const_set = Opal.const_set, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,magical_data_const?,push,optimized_access?,helper,name,==,const_scope,s,absolute_const,top_scope,recv,eval?,compiler,relative_access,scope,nil?,eof_content,freeze,include?,base,expr,value,nesting'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'ConstNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$handle("const"); self.$children("const_scope", "name"); $def(self, '$compile', function $$compile() { var self = this; if ($truthy(self['$magical_data_const?']())) { return self.$push("$__END__") } else if ($truthy(self['$optimized_access?']())) { self.$helper("" + (self.$name())); return self.$push("$" + (self.$name())); } else if ($eqeq(self.$const_scope(), self.$s("cbase"))) { return self.$push("" + (self.$top_scope().$absolute_const()) + "('" + (self.$name()) + "')") } else if ($truthy(self.$const_scope())) { return self.$push("" + (self.$top_scope().$absolute_const()) + "(", self.$recv(self.$const_scope()), ", '" + (self.$name()) + "')") } else if ($truthy(self.$compiler()['$eval?']())) { return self.$push("" + (self.$scope().$relative_access()) + "('" + (self.$name()) + "')") } else { return self.$push("" + (self.$scope().$relative_access()) + "('" + (self.$name()) + "')") } }); $def(self, '$magical_data_const?', function $ConstNode_magical_data_const$ques$1() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.$const_scope()['$nil?']())) ? (self.$name()['$==']("DATA")) : ($ret_or_2))))) { return self.$compiler().$eof_content() } else { return $ret_or_1 } }); $const_set($nesting[0], 'OPTIMIZED_ACCESS_CONSTS', ["BasicObject", "Object", "Module", "Class", "Opal", "Kernel", "NilClass"].$freeze()); return $def(self, '$optimized_access?', function $ConstNode_optimized_access$ques$2() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$const_scope()['$=='](self.$s("cbase"))))) { return $$('OPTIMIZED_ACCESS_CONSTS')['$include?'](self.$name()) } else { return $ret_or_1 } }); })($nesting[0], $$('Base'), $nesting); (function($base, $super) { var self = $klass($base, $super, 'CbaseNode'); self.$handle("cbase"); return $def(self, '$compile', function $$compile() { var self = this; return self.$push("'::'") }); })($nesting[0], $$('Base')); return (function($base, $super) { var self = $klass($base, $super, 'ConstAssignNode'); self.$handle("casgn"); self.$children("base", "name", "value"); return $def(self, '$compile', function $$compile() { var self = this; self.$helper("const_set"); if ($truthy(self.$base())) { return self.$push("$const_set(", self.$expr(self.$base()), ", '" + (self.$name()) + "', ", self.$expr(self.$value()), ")") } else { return self.$push("$const_set(" + (self.$scope().$nesting()) + "[0], '" + (self.$name()) + "', ", self.$expr(self.$value()), ")") }; }); })($nesting[0], $$('Base')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["pathname"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $const_set = Opal.const_set, $regexp = Opal.regexp, $eqeqeq = Opal.eqeqeq, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $def = Opal.def, $defs = Opal.defs, $to_ary = Opal.to_ary, $slice = Opal.slice, $send = Opal.send, $to_a = Opal.to_a, $return_ivar = Opal.return_ivar, $neqeq = Opal.neqeq, $rb_plus = Opal.rb_plus, $not = Opal.not, $thrower = Opal.thrower, $alias = Opal.alias, $module = Opal.module, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,quote,===,to_s,path,respond_to?,to_path,is_a?,nil?,raise,class,==,new,pwd,attr_reader,!,relative?,chop_basename,basename,=~,source,[],rindex,sub,absolute?,hash,expand_path,plus,unshift,length,!=,empty?,first,shift,+,join,dirname,pop,reverse_each,directory?,extname,<=>,nonzero?,proc,casecmp,cleanpath,inspect,include?,fill,map,entries'); self.$require("corelib/comparable"); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Pathname'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.path = nil; self.$include($$('Comparable')); $const_set($nesting[0], 'SEPARATOR_PAT', $regexp([$$('Regexp').$quote($$$($$('File'), 'SEPARATOR'))])); $def(self, '$initialize', function $$initialize(path) { var self = this; if ($eqeqeq($$('Pathname'), path)) { self.path = path.$path().$to_s() } else if ($truthy(path['$respond_to?']("to_path"))) { self.path = path.$to_path() } else if ($truthy(path['$is_a?']($$('String')))) { self.path = path } else if ($truthy(path['$nil?']())) { self.$raise($$('TypeError'), "no implicit conversion of nil into String") } else { self.$raise($$('TypeError'), "no implicit conversion of " + (path.$class()) + " into String") }; if ($eqeq(self.path, "\u0000")) { return self.$raise($$('ArgumentError')) } else { return nil }; }); $defs(self, '$pwd', function $$pwd() { var self = this; return self.$new($$('Dir').$pwd()) }); self.$attr_reader("path"); $def(self, '$==', function $Pathname_$eq_eq$1(other) { var self = this; return other.$path()['$=='](self.path) }); $def(self, '$absolute?', function $Pathname_absolute$ques$2() { var self = this; return self['$relative?']()['$!']() }); $def(self, '$relative?', function $Pathname_relative$ques$3() { var $a, $b, self = this, path = nil, r = nil; path = self.path; while ($truthy((r = self.$chop_basename(path)))) { $b = r, $a = $to_ary($b), (path = ($a[0] == null ? nil : $a[0])), $b }; return path['$=='](""); }); $def(self, '$chop_basename', function $$chop_basename(path) { var base = nil; base = $$('File').$basename(path); if ($truthy($$('Regexp').$new("^" + ($$$($$('Pathname'), 'SEPARATOR_PAT').$source()) + "?$")['$=~'](base))) { return nil } else { return [path['$[]'](0, path.$rindex(base)), base] }; }); $def(self, '$root?', function $Pathname_root$ques$4() { var self = this; return self.path['$==']("/") }); $def(self, '$parent', function $$parent() { var self = this, new_path = nil; new_path = self.path.$sub(/\/([^\/]+\/?$)/, ""); if ($eqeq(new_path, "")) { new_path = ($truthy(self['$absolute?']()) ? ("/") : (".")) }; return $$('Pathname').$new(new_path); }); $def(self, '$sub', function $$sub($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return $$('Pathname').$new($send(self.path, 'sub', $to_a(args))); }, -1); $def(self, '$cleanpath', function $$cleanpath() { var self = this; return Opal.normalize(self.path) }); $def(self, '$to_path', $return_ivar("path")); $def(self, '$hash', function $$hash() { var self = this; return self.path.$hash() }); $def(self, '$expand_path', function $$expand_path() { var self = this; return $$('Pathname').$new($$('File').$expand_path(self.path)) }); $def(self, '$+', function $Pathname_$plus$5(other) { var self = this; if (!$eqeqeq($$('Pathname'), other)) { other = $$('Pathname').$new(other) }; return $$('Pathname').$new(self.$plus(self.path, other.$to_s())); }); $def(self, '$plus', function $$plus(path1, path2) { var $a, $b, self = this, prefix2 = nil, index_list2 = nil, basename_list2 = nil, r2 = nil, basename2 = nil, prefix1 = nil, $ret_or_1 = nil, r1 = nil, basename1 = nil, suffix2 = nil; prefix2 = path2; index_list2 = []; basename_list2 = []; while ($truthy((r2 = self.$chop_basename(prefix2)))) { $b = r2, $a = $to_ary($b), (prefix2 = ($a[0] == null ? nil : $a[0])), (basename2 = ($a[1] == null ? nil : $a[1])), $b; index_list2.$unshift(prefix2.$length()); basename_list2.$unshift(basename2); }; if ($neqeq(prefix2, "")) { return path2 }; prefix1 = path1; while ($truthy(true)) { while ($truthy(($truthy(($ret_or_1 = basename_list2['$empty?']()['$!']())) ? (basename_list2.$first()['$=='](".")) : ($ret_or_1)))) { index_list2.$shift(); basename_list2.$shift(); }; if (!$truthy((r1 = self.$chop_basename(prefix1)))) { break }; $b = r1, $a = $to_ary($b), (prefix1 = ($a[0] == null ? nil : $a[0])), (basename1 = ($a[1] == null ? nil : $a[1])), $b; if ($eqeq(basename1, ".")) { continue }; if ((($eqeq(basename1, "..") || ($truthy(basename_list2['$empty?']()))) || ($neqeq(basename_list2.$first(), "..")))) { prefix1 = $rb_plus(prefix1, basename1); break; }; index_list2.$shift(); basename_list2.$shift(); }; r1 = self.$chop_basename(prefix1); if (($not(r1) && ($truthy($regexp([$$('SEPARATOR_PAT')])['$=~']($$('File').$basename(prefix1)))))) { while ($truthy(($truthy(($ret_or_1 = basename_list2['$empty?']()['$!']())) ? (basename_list2.$first()['$==']("..")) : ($ret_or_1)))) { index_list2.$shift(); basename_list2.$shift(); } }; if ($not(basename_list2['$empty?']())) { suffix2 = path2['$[]'](Opal.Range.$new(index_list2.$first(), -1, false)); if ($truthy(r1)) { return $$('File').$join(prefix1, suffix2) } else { return $rb_plus(prefix1, suffix2) }; } else if ($truthy(r1)) { return prefix1 } else { return $$('File').$dirname(prefix1) }; }); $def(self, '$join', function $$join($a) {try { var $t_return = $thrower('return'); var $post_args, args, self = this, result = nil; $post_args = $slice(arguments); args = $post_args; if ($truthy(args['$empty?']())) { return self }; result = args.$pop(); if (!$eqeqeq($$('Pathname'), result)) { result = $$('Pathname').$new(result) }; if ($truthy(result['$absolute?']())) { return result }; $send(args, 'reverse_each', [], function $$6(arg){ if (arg == null) arg = nil; if (!$eqeqeq($$('Pathname'), arg)) { arg = $$('Pathname').$new(arg) }; result = $rb_plus(arg, result); if ($truthy(result['$absolute?']())) { $t_return.$throw(result, $$6.$$is_lambda) } else { return nil };}, {$$ret: $t_return}); return $rb_plus(self, result);} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }, -1); $def(self, '$split', function $$split() { var self = this; return [self.$dirname(), self.$basename()] }); $def(self, '$dirname', function $$dirname() { var self = this; return $$('Pathname').$new($$('File').$dirname(self.path)) }); $def(self, '$basename', function $$basename() { var self = this; return $$('Pathname').$new($$('File').$basename(self.path)) }); $def(self, '$directory?', function $Pathname_directory$ques$7() { var self = this; return $$('File')['$directory?'](self.path) }); $def(self, '$extname', function $$extname() { var self = this; return $$('File').$extname(self.path) }); $def(self, '$<=>', function $Pathname_$lt_eq_gt$8(other) { var self = this; return self.$path()['$<=>'](other.$path()) }); $const_set($nesting[0], 'SAME_PATHS', ($truthy($$$($$('File'), 'FNM_SYSCASE')['$nonzero?']()) ? ($send(self, 'proc', [], function $Pathname$9(a, b){ if (a == null) a = nil; if (b == null) b = nil; return a.$casecmp(b)['$=='](0);})) : ($send(self, 'proc', [], function $Pathname$10(a, b){ if (a == null) a = nil; if (b == null) b = nil; return a['$=='](b);})))); $def(self, '$relative_path_from', function $$relative_path_from(base_directory) { var $a, $b, self = this, dest_directory = nil, dest_prefix = nil, dest_names = nil, r = nil, basename = nil, base_prefix = nil, base_names = nil, $ret_or_1 = nil, $ret_or_2 = nil, relpath_names = nil; dest_directory = self.$cleanpath().$to_s(); base_directory = base_directory.$cleanpath().$to_s(); dest_prefix = dest_directory; dest_names = []; while ($truthy((r = self.$chop_basename(dest_prefix)))) { $b = r, $a = $to_ary($b), (dest_prefix = ($a[0] == null ? nil : $a[0])), (basename = ($a[1] == null ? nil : $a[1])), $b; if ($neqeq(basename, ".")) { dest_names.$unshift(basename) }; }; base_prefix = base_directory; base_names = []; while ($truthy((r = self.$chop_basename(base_prefix)))) { $b = r, $a = $to_ary($b), (base_prefix = ($a[0] == null ? nil : $a[0])), (basename = ($a[1] == null ? nil : $a[1])), $b; if ($neqeq(basename, ".")) { base_names.$unshift(basename) }; }; if (!$truthy($$('SAME_PATHS')['$[]'](dest_prefix, base_prefix))) { self.$raise($$('ArgumentError'), "different prefix: " + (dest_prefix.$inspect()) + " and " + (base_directory.$inspect())) }; while ($truthy(($truthy(($ret_or_1 = ($truthy(($ret_or_2 = dest_names['$empty?']()['$!']())) ? (base_names['$empty?']()['$!']()) : ($ret_or_2)))) ? ($$('SAME_PATHS')['$[]'](dest_names.$first(), base_names.$first())) : ($ret_or_1)))) { dest_names.$shift(); base_names.$shift(); }; if ($truthy(base_names['$include?'](".."))) { self.$raise($$('ArgumentError'), "base_directory has ..: " + (base_directory.$inspect())) }; base_names.$fill(".."); relpath_names = $rb_plus(base_names, dest_names); if ($truthy(relpath_names['$empty?']())) { return $$('Pathname').$new(".") } else { return $$('Pathname').$new($send($$('File'), 'join', $to_a(relpath_names))) }; }); $def(self, '$entries', function $$entries() { var self = this; return $send($$('Dir').$entries(self.path), 'map', [], function $$11(f){var self = $$11.$$s == null ? this : $$11.$$s; if (f == null) f = nil; return self.$class().$new(f);}, {$$s: self}) }); $alias(self, "===", "=="); $alias(self, "eql?", "=="); $alias(self, "to_s", "to_path"); return $alias(self, "to_str", "to_path"); })($nesting[0], null, $nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Kernel'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $def(self, '$Pathname', function $$Pathname(path) { return $$('Pathname').$new(path) }) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/call"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $send = Opal.send, $defs = Opal.defs, $slice = Opal.slice, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $truthy = Opal.truthy, $def = Opal.def, $eqeq = Opal.eqeq, $rb_plus = Opal.rb_plus, $not = Opal.not, $neqeq = Opal.neqeq, $to_ary = Opal.to_ary, $Opal = Opal.Opal, $range = Opal.range, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,handle,attr_reader,freeze,[]=,define_method,to_proc,include?,type,s,handle_special,record_method_call,compiler,meth,with_wrapper,using_eval?,compile_eval_var,using_irb?,compile_irb_var,default_compile,private,iter,[],meta,splat?,call_is_writer_that_needs_handling?,!,empty?,collect_refinements_temps,scope,==,auto_await?,push,await_encountered=,iter_has_break?,push_closure,invoke_using_refinement?,compile_using_refined_send,invoke_using_send?,compile_using_send,compile_simple_call_chain,pop_closure,helper,compile_receiver,compile_method_name,compile_arguments,compile_block_pass,compile_refinements,recv,receiver_sexp,expr,arglist,children,map,method_jsid,any?,recvr,mid_to_jsid,to_s,with_temp,intern,irb?,top?,variable_like?,eval?,scope_variables,nil?,updated,async_await,!=,match?,method,arity,each,add_special,to_sym,call,inline_operators?,fragment,resolve,new,<<,requires,file,dirname,cleanpath,join,Pathname,self,inspect,process,length,warning,autoloads,required_trees,force_encoding,encoding,+,handle_block_given_call,def?,mid,module_name,count,accepts_using?,using_refinement,first,refinements_temp,arity_check?,defines_lambda,push_nesting?,nesting,thrower,new_temp,scope_locals,source_location,size,last,csend?,handle_conditional_send,handle_writer,expr?,recv?,=~,wrap,dynamic_require_severity,handle_part,is_a?,expand_path,split,error,line,each_with_object,pop'); self.$require("set"); self.$require("pathname"); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'CallNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.sexp = $proto.conditional_recvr = $proto.with_writer_temp = $proto.compiler = nil; self.$handle("send", "csend"); self.$attr_reader("recvr", "meth", "arglist", "iter"); $const_set($nesting[0], 'SPECIALS', (new Map())); $const_set($nesting[0], 'OPERATORS', (new Map([["+", "plus"], ["-", "minus"], ["*", "times"], ["/", "divide"], ["<", "lt"], ["<=", "le"], [">", "gt"], [">=", "ge"]])).$freeze()); $defs(self, '$add_special', function $$add_special(name, options) { var handler = $$add_special.$$p || nil, self = this; $$add_special.$$p = null; ; if (options == null) options = (new Map()); $$('SPECIALS')['$[]='](name, options); return $send(self, 'define_method', ["handle_" + (name)], handler.$to_proc()); }, -2); $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $b, $c, $yield = $$initialize.$$p || nil, self = this, args = nil, rest = nil, last_arg = nil; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', $to_a($fwd_rest), $yield); $b = [].concat($to_a(self.sexp)), (self.recvr = ($b[0] == null ? nil : $b[0])), (self.meth = ($b[1] == null ? nil : $b[1])), (args = $slice($b, 2)), $b; $b = [].concat($to_a(args)), $c = $b.length - 1, $c = ($c < 0) ? 0 : $c, (rest = $slice($b, 0, $c)), (last_arg = ($b[$c] == null ? nil : $b[$c])), $b; if (($truthy(last_arg) && ($truthy(["iter", "block_pass"]['$include?'](last_arg.$type()))))) { self.iter = last_arg; args = rest; } else { self.iter = nil }; return (self.arglist = $send(self, 's', ["arglist"].concat($to_a(args)))); }, -1); $def(self, '$compile', function $$compile() { var self = this; return $send(self, 'handle_special', [], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s; self.$compiler().$record_method_call(self.$meth()); return $send(self, 'with_wrapper', [], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; if ($truthy(self['$using_eval?']())) { return self.$compile_eval_var() } else if ($truthy(self['$using_irb?']())) { return self.$compile_irb_var() } else { return self.$default_compile() }}, {$$s: self});}, {$$s: self}) }); self.$private(); $def(self, '$iter_has_break?', function $CallNode_iter_has_break$ques$3() { var self = this; if (!$truthy(self.$iter())) { return false }; return self.$iter().$meta()['$[]']("has_break"); }); $def(self, '$invoke_using_send?', function $CallNode_invoke_using_send$ques$4() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.$iter())) ? ($ret_or_2) : (self['$splat?']()))))) { return $ret_or_1 } else { return self['$call_is_writer_that_needs_handling?']() } }); $def(self, '$invoke_using_refinement?', function $CallNode_invoke_using_refinement$ques$5() { var self = this; return self.$scope().$scope().$collect_refinements_temps()['$empty?']()['$!']() }); $def(self, '$csend?', function $CallNode_csend$ques$6() { var self = this; return self.sexp.$type()['$==']("csend") }); $def(self, '$default_compile', function $$default_compile() { var self = this; if ($truthy(self['$auto_await?']())) { self.$push("(await "); self.$scope()['$await_encountered='](true); }; if ($truthy(self['$iter_has_break?']())) { self.$push_closure($$$($$('Closure'), 'SEND')) }; if ($truthy(self['$invoke_using_refinement?']())) { self.$compile_using_refined_send() } else if ($truthy(self['$invoke_using_send?']())) { self.$compile_using_send() } else { self.$compile_simple_call_chain() }; if ($truthy(self['$iter_has_break?']())) { self.$pop_closure() }; if ($truthy(self['$auto_await?']())) { return self.$push(")") } else { return nil }; }); $def(self, '$compile_using_send', function $$compile_using_send() { var self = this; self.$helper("send"); self.$push("$send("); self.$compile_receiver(); self.$compile_method_name(); self.$compile_arguments(); self.$compile_block_pass(); return self.$push(")"); }); $def(self, '$compile_using_refined_send', function $$compile_using_refined_send() { var self = this; self.$helper("refined_send"); self.$push("$refined_send("); self.$compile_refinements(); self.$compile_receiver(); self.$compile_method_name(); self.$compile_arguments(); self.$compile_block_pass(); return self.$push(")"); }); $def(self, '$compile_receiver', function $$compile_receiver() { var self = this, $ret_or_1 = nil; return self.$push(($truthy(($ret_or_1 = self.conditional_recvr)) ? ($ret_or_1) : (self.$recv(self.$receiver_sexp())))) }); $def(self, '$compile_method_name', function $$compile_method_name() { var self = this; return self.$push(", '" + (self.$meth()) + "'") }); $def(self, '$compile_arguments', function $$compile_arguments(skip_comma) { var self = this; if (skip_comma == null) skip_comma = false; if (!$truthy(skip_comma)) { self.$push(", ") }; if ($truthy(self.with_writer_temp)) { return self.$push(self.with_writer_temp) } else if ($truthy(self['$splat?']())) { return self.$push(self.$expr(self.$arglist())) } else if ($truthy(self.$arglist().$children()['$empty?']())) { return self.$push("[]") } else { return self.$push("[", self.$expr(self.$arglist()), "]") }; }, -1); $def(self, '$compile_block_pass', function $$compile_block_pass() { var self = this; if ($truthy(self.$iter())) { return self.$push(", ", self.$expr(self.$iter())) } else { return nil } }); $def(self, '$compile_refinements', function $$compile_refinements() { var self = this, refinements = nil; refinements = $send(self.$scope().$collect_refinements_temps(), 'map', [], function $$7(i){var self = $$7.$$s == null ? this : $$7.$$s; if (i == null) i = nil; return self.$s("js_tmp", i);}, {$$s: self}); return self.$push(self.$expr($send(self, 's', ["array"].concat($to_a(refinements)))), ", "); }); $def(self, '$compile_simple_call_chain', function $$compile_simple_call_chain() { var self = this; self.$compile_receiver(); return self.$push(self.$method_jsid(), "(", self.$expr(self.$arglist()), ")"); }); $def(self, '$splat?', function $CallNode_splat$ques$8() { var self = this; return $send(self.$arglist().$children(), 'any?', [], function $$9(a){ if (a == null) a = nil; return a.$type()['$==']("splat");}) }); $def(self, '$receiver_sexp', function $$receiver_sexp() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$recvr()))) { return $ret_or_1 } else { return self.$s("self") } }); $def(self, '$method_jsid', function $$method_jsid() { var self = this; return self.$mid_to_jsid(self.$meth().$to_s()) }); $def(self, '$compile_irb_var', function $$compile_irb_var() { var self = this; return $send(self, 'with_temp', [], function $$10(tmp){var self = $$10.$$s == null ? this : $$10.$$s, lvar = nil, call = nil, ref = nil; if (tmp == null) tmp = nil; lvar = self.$meth(); call = self.$s("send", self.$s("self"), self.$meth().$intern(), self.$s("arglist")); ref = "(typeof " + (lvar) + " !== 'undefined') ? " + (lvar) + " : "; return self.$push("((" + (tmp) + " = Opal.irb_vars." + (lvar) + ") == null ? ", ref, self.$expr(call), " : " + (tmp) + ")");}, {$$s: self}) }); $def(self, '$compile_eval_var', function $$compile_eval_var() { var self = this; return self.$push(self.$meth().$to_s()) }); $def(self, '$using_irb?', function $CallNode_using_irb$ques$11() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.compiler['$irb?']())) ? (self.$scope()['$top?']()) : ($ret_or_2))))) { return self['$variable_like?']() } else { return $ret_or_1 } }); $def(self, '$using_eval?', function $CallNode_using_eval$ques$12() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.compiler['$eval?']())) ? (self.$scope()['$top?']()) : ($ret_or_2))))) { return self.compiler.$scope_variables()['$include?'](self.$meth()) } else { return $ret_or_1 } }); $def(self, '$variable_like?', function $CallNode_variable_like$ques$13() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self.$arglist()['$=='](self.$s("arglist")))) ? (self.$recvr()['$nil?']()) : ($ret_or_2))))) { return self.$iter()['$nil?']() } else { return $ret_or_1 } }); $def(self, '$sexp_with_arglist', function $$sexp_with_arglist() { var self = this; return self.sexp.$updated(nil, [self.$recvr(), self.$meth(), self.$arglist()]) }); $def(self, '$auto_await?', function $CallNode_auto_await$ques$14() { var self = this, awaited_set = nil, $ret_or_1 = nil, $ret_or_2 = nil; awaited_set = self.$compiler().$async_await(); if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = awaited_set)) ? (awaited_set['$!='](true)) : ($ret_or_2))))) { return awaited_set['$match?'](self.$meth().$to_s()) } else { return $ret_or_1 }; }); $def(self, '$handle_special', function $$handle_special() { var compile_default = $$handle_special.$$p || nil, self = this, method = nil; $$handle_special.$$p = null; ; if ($truthy($$('SPECIALS')['$include?'](self.$meth()))) { method = self.$method("handle_" + (self.$meth())); if ($eqeq(method.$arity(), 1)) { return method['$[]'](compile_default) } else { return method['$[]']() }; } else { return Opal.yieldX(compile_default, []); }; }); $send($$('OPERATORS'), 'each', [], function $CallNode$15(operator, name){var self = $CallNode$15.$$s == null ? this : $CallNode$15.$$s; if (operator == null) operator = nil; if (name == null) name = nil; return $send(self, 'add_special', [operator.$to_sym()], function $$16(compile_default){var $a, self = $$16.$$s == null ? this : $$16.$$s, lhs = nil, rhs = nil; if (compile_default == null) compile_default = nil; if ($truthy(self['$invoke_using_refinement?']())) { return compile_default.$call() } else if ($truthy(self.$compiler()['$inline_operators?']())) { self.$compiler().$record_method_call(operator); self.$helper("rb_" + (name)); $a = [self.$expr(self.$recvr()), self.$expr(self.$arglist())], (lhs = $a[0]), (rhs = $a[1]), $a; self.$push(self.$fragment("$rb_" + (name) + "(")); self.$push(lhs); self.$push(self.$fragment(", ")); self.$push(rhs); return self.$push(self.$fragment(")")); } else { return compile_default.$call() };}, {$$s: self});}, {$$s: self}); $send(self, 'add_special', ["require"], function $CallNode$17(compile_default){var self = $CallNode$17.$$s == null ? this : $CallNode$17.$$s, str = nil; if (compile_default == null) compile_default = nil; str = $$('DependencyResolver').$new(self.$compiler(), self.$arglist().$children()['$[]'](0)).$resolve(); if (!$truthy(str['$nil?']())) { self.$compiler().$requires()['$<<'](str) }; return compile_default.$call();}, {$$s: self}); $send(self, 'add_special', ["require_relative"], function $CallNode$18(){var self = $CallNode$18.$$s == null ? this : $CallNode$18.$$s, arg = nil, file = nil, dir = nil; arg = self.$arglist().$children()['$[]'](0); file = self.$compiler().$file(); if ($eqeq(arg.$type(), "str")) { dir = $$('File').$dirname(file); self.$compiler().$requires()['$<<'](self.$Pathname(dir).$join(arg.$children()['$[]'](0)).$cleanpath().$to_s()); }; self.$push(self.$fragment("" + (self.$scope().$self()) + ".$require(" + (file.$inspect()) + "+ '/../' + ")); self.$push(self.$process(self.$arglist())); return self.$push(self.$fragment(")"));}, {$$s: self}); $send(self, 'add_special', ["autoload"], function $CallNode$19(compile_default){var self = $CallNode$19.$$s == null ? this : $CallNode$19.$$s, args = nil, str = nil; if (compile_default == null) compile_default = nil; args = self.$arglist().$children(); if (($eqeq(args.$length(), 2) && ($eqeq(args['$[]'](0).$type(), "sym")))) { str = $$('DependencyResolver').$new(self.$compiler(), args['$[]'](1), "ignore").$resolve(); if ($truthy(str['$nil?']())) { self.$compiler().$warning("File for autoload of constant '" + (args['$[]'](0).$children()['$[]'](0)) + "' could not be bundled!") } else { self.$compiler().$requires()['$<<'](str); self.$compiler().$autoloads()['$<<'](str); }; }; return compile_default.$call();}, {$$s: self}); $send(self, 'add_special', ["require_tree"], function $CallNode$20(compile_default){var $a, self = $CallNode$20.$$s == null ? this : $CallNode$20.$$s, first_arg = nil, rest = nil, relative_path = nil, dir = nil, full_path = nil; if (compile_default == null) compile_default = nil; $a = [].concat($to_a(self.$arglist().$children())), (first_arg = ($a[0] == null ? nil : $a[0])), (rest = $slice($a, 1)), $a; if ($eqeq(first_arg.$type(), "str")) { relative_path = first_arg.$children()['$[]'](0); self.$compiler().$required_trees()['$<<'](relative_path); dir = $$('File').$dirname(self.$compiler().$file()); full_path = self.$Pathname(dir).$join(relative_path).$cleanpath().$to_s(); full_path.$force_encoding(relative_path.$encoding()); first_arg = first_arg.$updated(nil, [full_path]); }; self.arglist = self.$arglist().$updated(nil, $rb_plus([first_arg], rest)); return compile_default.$call();}, {$$s: self}); $send(self, 'add_special', ["block_given?"], function $CallNode$21(){var self = $CallNode$21.$$s == null ? this : $CallNode$21.$$s; if (self.sexp == null) self.sexp = nil; return self.$push(self.$compiler().$handle_block_given_call(self.sexp))}, {$$s: self}); $send(self, 'add_special', ["__callee__"], function $CallNode$22(){var self = $CallNode$22.$$s == null ? this : $CallNode$22.$$s; if ($truthy(self.$scope()['$def?']())) { return self.$push(self.$fragment(self.$scope().$mid().$to_s().$inspect())) } else { return self.$push(self.$fragment("nil")) }}, {$$s: self}); $send(self, 'add_special', ["__method__"], function $CallNode$23(){var self = $CallNode$23.$$s == null ? this : $CallNode$23.$$s; if ($truthy(self.$scope()['$def?']())) { return self.$push(self.$fragment(self.$scope().$mid().$to_s().$inspect())) } else { return self.$push(self.$fragment("nil")) }}, {$$s: self}); $send(self, 'add_special', ["__dir__"], function $CallNode$24(){var self = $CallNode$24.$$s == null ? this : $CallNode$24.$$s; return self.$push($$('File').$dirname($$$($$('Opal'), 'Compiler').$module_name(self.$compiler().$file())).$inspect())}, {$$s: self}); $send(self, 'add_special', ["using"], function $CallNode$25(compile_default){var self = $CallNode$25.$$s == null ? this : $CallNode$25.$$s; if (compile_default == null) compile_default = nil; if (($truthy(self.$scope()['$accepts_using?']()) && ($eqeq(self.$arglist().$children().$count(), 1)))) { return self.$using_refinement(self.$arglist().$children().$first()) } else { return compile_default.$call() };}, {$$s: self}); $def(self, '$using_refinement', function $$using_refinement(arg) { var $a, self = this, prev = nil, curr = nil; $a = [].concat($to_a(self.$scope().$refinements_temp())), (prev = ($a[0] == null ? nil : $a[0])), (curr = ($a[1] == null ? nil : $a[1])), $a; if ($truthy(prev)) { return self.$push("(" + (curr) + " = " + (prev) + ".slice(), " + (curr) + ".push(", self.$expr(arg), "), " + (self.$scope().$self()) + ")") } else { return self.$push("(" + (curr) + " = [", self.$expr(arg), "], " + (self.$scope().$self()) + ")") }; }); $send(self, 'add_special', ["debugger"], function $CallNode$26(){var self = $CallNode$26.$$s == null ? this : $CallNode$26.$$s; return self.$push(self.$fragment("debugger"))}, {$$s: self}); $send(self, 'add_special', ["__OPAL_COMPILER_CONFIG__"], function $CallNode$27(){var self = $CallNode$27.$$s == null ? this : $CallNode$27.$$s; return self.$push(self.$fragment("(new Map([['arity_check', " + (self.$compiler()['$arity_check?']()) + "]]))"))}, {$$s: self}); $send(self, 'add_special', ["lambda"], function $CallNode$28(compile_default){var self = $CallNode$28.$$s == null ? this : $CallNode$28.$$s; if (compile_default == null) compile_default = nil; return $send(self.$scope(), 'defines_lambda', [], function $$29(){ return compile_default.$call()});}, {$$s: self}); $send(self, 'add_special', ["nesting"], function $CallNode$30(compile_default){var self = $CallNode$30.$$s == null ? this : $CallNode$30.$$s, push_nesting = nil; if (compile_default == null) compile_default = nil; push_nesting = self['$push_nesting?'](); if ($truthy(push_nesting)) { self.$push("(Opal.Module.$$nesting = " + (self.$scope().$nesting()) + ", ") }; compile_default.$call(); if ($truthy(push_nesting)) { return self.$push(")") } else { return nil };}, {$$s: self}); $send(self, 'add_special', ["constants"], function $CallNode$31(compile_default){var self = $CallNode$31.$$s == null ? this : $CallNode$31.$$s, push_nesting = nil; if (compile_default == null) compile_default = nil; push_nesting = self['$push_nesting?'](); if ($truthy(push_nesting)) { self.$push("(Opal.Module.$$nesting = " + (self.$scope().$nesting()) + ", ") }; compile_default.$call(); if ($truthy(push_nesting)) { return self.$push(")") } else { return nil };}, {$$s: self}); $send(self, 'add_special', ["eval"], function $CallNode$32(compile_default){var self = $CallNode$32.$$s == null ? this : $CallNode$32.$$s, temp = nil, scope_variables = nil; if (compile_default == null) compile_default = nil; self.$thrower("eval_return"); if (($neqeq(self.$arglist().$children().$length(), 1) || ($not([self.$s("self"), nil]['$include?'](self.$recvr()))))) { return compile_default.$call() }; self.$scope().$nesting(); temp = self.$scope().$new_temp(); scope_variables = $send(self.$scope().$scope_locals(), 'map', [], "to_s".$to_proc()).$inspect(); self.$push("(" + (temp) + " = ", self.$expr(self.$arglist())); self.$push(", typeof Opal.compile === 'function' ? eval(Opal.compile(" + (temp)); self.$push(", {scope_variables: ", scope_variables); self.$push(", arity_check: " + (self.$compiler()['$arity_check?']()) + ", file: '(eval)', eval: true})) : "); return self.$push("" + (self.$scope().$self()) + ".$eval(" + (temp) + "))");}, {$$s: self}); $send(self, 'add_special', ["local_variables"], function $CallNode$33(compile_default){var self = $CallNode$33.$$s == null ? this : $CallNode$33.$$s, scope_variables = nil; if (compile_default == null) compile_default = nil; if (!$truthy([self.$s("self"), nil]['$include?'](self.$recvr()))) { return compile_default.$call() }; scope_variables = $send(self.$scope().$scope_locals(), 'map', [], "to_s".$to_proc()).$inspect(); return self.$push(scope_variables);}, {$$s: self}); $send(self, 'add_special', ["binding"], function $CallNode$34(compile_default){var self = $CallNode$34.$$s == null ? this : $CallNode$34.$$s; if (compile_default == null) compile_default = nil; if (!$truthy(self.$recvr()['$nil?']())) { return compile_default.$call() }; self.$scope().$nesting(); self.$push("Opal.Binding.$new("); self.$push(" function($code) {"); self.$push(" return eval($code);"); self.$push(" },"); self.$push(" ", $send(self.$scope().$scope_locals(), 'map', [], "to_s".$to_proc()).$inspect(), ","); self.$push(" ", self.$scope().$self(), ","); self.$push(" ", self.$source_location()); return self.$push(")");}, {$$s: self}); $send(self, 'add_special', ["__await__"], function $CallNode$35(compile_default){var $a, self = $CallNode$35.$$s == null ? this : $CallNode$35.$$s; if (compile_default == null) compile_default = nil; if ($truthy(self.$compiler().$async_await())) { self.$push(self.$fragment("(await (")); self.$push(self.$process(self.$recvr())); self.$push(self.$fragment("))")); return ($a = [true], $send(self.$scope(), 'await_encountered=', $a), $a[$a.length - 1]); } else { return compile_default.$call() };}, {$$s: self}); $def(self, '$push_nesting?', function $CallNode_push_nesting$ques$36() { var self = this, recv = nil, $ret_or_1 = nil, $ret_or_2 = nil, $ret_or_3 = nil; recv = self.$children().$first(); if ($truthy(($ret_or_1 = self.$children().$size()['$=='](2)))) { if ($truthy(($ret_or_2 = recv['$nil?']()))) { return $ret_or_2 } else { if ($truthy(($ret_or_3 = recv.$type()['$==']("const")))) { return recv.$children().$last()['$==']("Module") } else { return $ret_or_3 }; }; } else { return $ret_or_1 }; }); $def(self, '$with_wrapper', function $$with_wrapper() { var block = $$with_wrapper.$$p || nil, self = this; $$with_wrapper.$$p = null; ; if (($truthy(self['$csend?']()) && ($not(self.conditional_recvr)))) { return $send(self, 'handle_conditional_send', [], function $$37(){var self = $$37.$$s == null ? this : $$37.$$s; return $send(self, 'with_wrapper', [], block.$to_proc())}, {$$s: self}) } else if ($truthy(self['$call_is_writer_that_needs_handling?']())) { return $send(self, 'handle_writer', [], block.$to_proc()) } else { return Opal.yieldX(block, []); }; }); $def(self, '$call_is_writer_that_needs_handling?', function $CallNode_call_is_writer_that_needs_handling$ques$38() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self['$expr?']())) ? ($ret_or_2) : (self['$recv?']()))))) { if ($truthy(($ret_or_2 = self.$meth().$to_s()['$=~'](/^\w+=$/)))) { return $ret_or_2 } else { return self.$meth()['$==']("[]=") }; } else { return $ret_or_1 } }); $def(self, '$handle_conditional_send', function $$handle_conditional_send() { var $yield = $$handle_conditional_send.$$p || nil, self = this, receiver_temp = nil; $$handle_conditional_send.$$p = null; receiver_temp = self.$scope().$new_temp(); self.$push("" + (receiver_temp) + " = ", self.$expr(self.$receiver_sexp())); self.$push(", (" + (receiver_temp) + " === nil || " + (receiver_temp) + " == null) ? nil : "); self.conditional_recvr = receiver_temp; Opal.yieldX($yield, []); return self.$wrap("(", ")"); }); $def(self, '$handle_writer', function $$handle_writer() { var $yield = $$handle_writer.$$p || nil, self = this; $$handle_writer.$$p = null; return $send(self, 'with_temp', [], function $$39(temp){var self = $$39.$$s == null ? this : $$39.$$s; if (temp == null) temp = nil; self.$push("(" + (temp) + " = "); self.$compile_arguments(true); self.$push(", "); self.with_writer_temp = temp; Opal.yieldX($yield, []); self.with_writer_temp = false; self.$push(", "); return self.$push("" + (temp) + "[" + (temp) + ".length - 1])");}, {$$s: self}) }); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'DependencyResolver'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.compiler = $proto.sexp = $proto.missing_dynamic_require = nil; $def(self, '$initialize', function $$initialize(compiler, sexp, missing_dynamic_require) { var self = this, $ret_or_1 = nil; if (missing_dynamic_require == null) missing_dynamic_require = nil; self.compiler = compiler; self.sexp = sexp; return (self.missing_dynamic_require = ($truthy(($ret_or_1 = missing_dynamic_require)) ? ($ret_or_1) : (self.compiler.$dynamic_require_severity()))); }, -3); $def(self, '$resolve', function $$resolve() { var self = this; return self.$handle_part(self.sexp) }); $def(self, '$handle_part', function $$handle_part(sexp, missing_dynamic_require) { var $a, $b, self = this, recv = nil, meth = nil, args = nil, parts = nil; if (missing_dynamic_require == null) missing_dynamic_require = self.missing_dynamic_require; if ($truthy(sexp)) { switch (sexp.$type().valueOf()) { case "str": return sexp.$children()['$[]'](0) case "dstr": return $send(sexp.$children(), 'map', [], function $$40(i){var self = $$40.$$s == null ? this : $$40.$$s; if (i == null) i = nil; return self.$handle_part(i);}, {$$s: self}).$join() case "begin": if ($eqeq(sexp.$children().$length(), 1)) { return self.$handle_part(sexp.$children()['$[]'](0)) } break; case "send": $b = sexp.$children(), $a = $to_ary($b), (recv = ($a[0] == null ? nil : $a[0])), (meth = ($a[1] == null ? nil : $a[1])), (args = $slice($a, 2)), $b; parts = $send(args, 'map', [], function $$41(s){var self = $$41.$$s == null ? this : $$41.$$s; if (s == null) s = nil; return self.$handle_part(s, "ignore");}, {$$s: self}); if ($truthy(parts['$include?'](nil))) { return nil }; if ((($truthy(recv['$is_a?']($$$($$$($Opal, 'AST'), 'Node'))) && ($eqeq(recv.$type(), "const"))) && ($eqeq(recv.$children().$last(), "File")))) { if ($eqeq(meth, "expand_path")) { return $send(self, 'expand_path', $to_a(parts)) } else if ($eqeq(meth, "join")) { return self.$expand_path(parts.$join("/")) } else if ($eqeq(meth, "dirname")) { return self.$expand_path(parts['$[]'](0).$split("/")['$[]']($range(0, -1, true)).$join("/")) } } else if ($eqeq(meth, "__dir__")) { return $$('File').$dirname($$$($$('Opal'), 'Compiler').$module_name(self.compiler.$file())) }; break; default: nil } }; switch (missing_dynamic_require.valueOf()) { case "error": return self.compiler.$error("Cannot handle dynamic require", self.sexp.$line()) case "warning": return self.compiler.$warning("Cannot handle dynamic require", self.sexp.$line()) default: return nil }; }, -2); return $def(self, '$expand_path', function $$expand_path(path, base) { if (base == null) base = ""; return $send(((("" + (base)) + "/") + (path)).$split("/"), 'each_with_object', [[]], function $$42(part, p){ if (part == null) part = nil; if (p == null) p = nil; if ($eqeq(part, "")) { return nil } else if ($eqeq(part, "..")) { return p.$pop() } else { return p['$<<'](part) };}).$join("/"); }, -2); })($nesting[0], null, $nesting); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/call_special"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $slice = Opal.slice, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $send = Opal.send, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,push,recv,recvr,expr,property,value,<<,default_compile,meth,receiver_sexp,method_jsid,compile_arguments,iter,s,lhs,rhs,==,type,first,extract_names,empty?,generate_names_definition,generate_names_assignments,stmt?,handle_statement,handle_non_statement,process,private,map,flatten,scan,to_proc'); self.$require("opal/nodes/base"); self.$require("opal/nodes/call"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super) { var self = $klass($base, $super, 'JsAttrNode'); self.$handle("jsattr"); self.$children("recvr", "property"); return $def(self, '$compile', function $$compile() { var self = this; return self.$push(self.$recv(self.$recvr()), "[", self.$expr(self.$property()), "]") }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'JsAttrAsgnNode'); self.$handle("jsattrasgn"); self.$children("recvr", "property", "value"); return $def(self, '$compile', function $$compile() { var self = this; return self.$push(self.$recv(self.$recvr()), "[", self.$expr(self.$property()), "] = ", self.$expr(self.$value())) }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'JsCallNode'); var $proto = self.$$prototype; $proto.iter = $proto.arglist = nil; self.$handle("jscall"); $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', $to_a($fwd_rest), $yield); if ($truthy(self.iter)) { self.arglist = self.arglist['$<<'](self.iter) }; return (self.iter = nil); }, -1); $def(self, '$compile', function $$compile() { var self = this; return self.$default_compile() }); $def(self, '$method_jsid', function $$method_jsid() { var self = this; return "." + (self.$meth()) }); return $def(self, '$compile_using_send', function $$compile_using_send() { var self = this; self.$push(self.$recv(self.$receiver_sexp()), self.$method_jsid(), ".apply(null"); self.$compile_arguments(); if ($truthy(self.$iter())) { self.$push(".concat(", self.$expr(self.$iter()), ")") }; return self.$push(")"); }); })($nesting[0], $$('CallNode')); return (function($base, $super) { var self = $klass($base, $super, 'Match3Node'); var $proto = self.$$prototype; $proto.level = nil; self.$handle("match_with_lvasgn"); self.$children("lhs", "rhs"); $def(self, '$compile', function $$compile() { var self = this, sexp = nil, names = nil, names_def = nil, names_assignments = nil; sexp = self.$s("send", self.$lhs(), "=~", self.$rhs()); if (($eqeq(self.$lhs().$type(), "regexp") && ($eqeq(self.$lhs().$children().$first().$type(), "str")))) { names = self.$extract_names(self.$lhs()); if (!$truthy(names['$empty?']())) { names_def = self.$generate_names_definition(); names_assignments = self.$generate_names_assignments(names); sexp = ($truthy(self['$stmt?']()) ? (self.$handle_statement(sexp, names_def, names_assignments)) : (self.$handle_non_statement(sexp, names_def, names_assignments))); }; }; return self.$push(self.$process(sexp, self.level)); }); self.$private(); $def(self, '$extract_names', function $$extract_names(regexp_node) { var re = nil; re = regexp_node.$children().$first().$children().$first(); return $send(re.$scan(/\(\?<([^>]*)>/).$flatten(), 'map', [], "to_sym".$to_proc()); }); $def(self, '$generate_names_definition', function $$generate_names_definition() { var self = this; return self.$s("lvasgn", "$m3names", self.$s("if", self.$s("gvar", "$~"), self.$s("send", self.$s("gvar", "$~"), "named_captures"), self.$s("hash"))) }); $def(self, '$generate_names_assignments', function $$generate_names_assignments(names) { var self = this; return $send(names, 'map', [], function $$1(name){var self = $$1.$$s == null ? this : $$1.$$s; if (name == null) name = nil; return self.$s("lvasgn", name, self.$s("send", self.$s("lvar", "$m3names"), "[]", self.$s("sym", name)));}, {$$s: self}) }); $def(self, '$handle_statement', function $$handle_statement(sexp, names_def, names_assignments) { var self = this; return $send(self, 's', ["begin", sexp, names_def].concat($to_a(names_assignments))) }); return $def(self, '$handle_non_statement', function $$handle_non_statement(sexp, names_def, names_assignments) { var self = this; return $send(self, 's', ["begin", self.$s("lvasgn", "$m3tmp", sexp), names_def].concat($to_a(names_assignments)).concat([self.$s("lvar", "$m3tmp")])) }); })($nesting[0], $$('Base')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/scope"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $slice = Opal.slice, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $def = Opal.def, $send = Opal.send, $truthy = Opal.truthy, $assign_ivar_val = Opal.assign_ivar_val, $return_ivar = Opal.return_ivar, $not = Opal.not, $rb_plus = Opal.rb_plus, $eqeq = Opal.eqeq, $thrower = Opal.thrower, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,attr_accessor,attr_reader,indent,scope,compiler,scope=,==,iter?,!,class?,dup,push,map,ivars,gvars,empty?,<<,parser_indent,join,+,fragment,def_in_class?,add_proto_ivar,include?,has_local?,|,scope_locals,reject,start_with?,to_s,has_temp?,unshift,pop,next_temp,loop,succ,uses_block!,identify!,valid_name?,mid,compact,parent,name,scope_name,unique_temp,lambda?,def?,type,nil?,rescue_else_sexp,last,class,collect_refinements_temps,add_scope_local,new_refinements_temp,identity,block_name=,add_temp,block_name,line'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'ScopeNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.type = $proto.is_lambda = $proto.defs = $proto.parent = $proto.temps = $proto.locals = $proto.proto_ivars = $proto.compiler = $proto.ivars = $proto.gvars = $proto.args = $proto.queue = $proto.while_stack = $proto.identity = $proto.rescues = $proto.next_retry_id = $proto.refinements_temp = $proto.block_prepared = nil; self.$attr_accessor("parent"); self.$attr_accessor("name"); self.$attr_accessor("block_name"); self.$attr_reader("scope_name"); self.$attr_reader("locals"); self.$attr_reader("ivars"); self.$attr_reader("gvars"); self.$attr_accessor("mid"); self.$attr_accessor("defs"); self.$attr_reader("methods"); self.$attr_accessor("catch_return", "has_break", "has_retry"); self.$attr_accessor("rescue_else_sexp"); $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', $to_a($fwd_rest), $yield); self.locals = []; self.temps = []; self.args = []; self.ivars = []; self.gvars = []; self.parent = nil; self.queue = []; self.unique = "a"; self.while_stack = []; self.identity = nil; self.defs = nil; self.methods = []; self.uses_block = false; self.in_ensure = false; return (self.proto_ivars = []); }, -1); $def(self, '$in_scope', function $$in_scope() { var $yield = $$in_scope.$$p || nil, self = this; $$in_scope.$$p = null; return $send(self, 'indent', [], function $$1(){var $a, self = $$1.$$s == null ? this : $$1.$$s; if (self.parent == null) self.parent = nil; self.parent = self.$compiler().$scope(); self.$compiler()['$scope='](self); Opal.yield1($yield, self); return ($a = [self.parent], $send(self.$compiler(), 'scope=', $a), $a[$a.length - 1]);}, {$$s: self}) }); $def(self, '$class_scope?', function $ScopeNode_class_scope$ques$2() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.type['$==']("class")))) { return $ret_or_1 } else { return self.type['$==']("module") } }); $def(self, '$class?', function $ScopeNode_class$ques$3() { var self = this; return self.type['$==']("class") }); $def(self, '$module?', function $ScopeNode_module$ques$4() { var self = this; return self.type['$==']("module") }); $def(self, '$sclass?', function $ScopeNode_sclass$ques$5() { var self = this; return self.type['$==']("sclass") }); $def(self, '$top?', function $ScopeNode_top$ques$6() { var self = this; return self.type['$==']("top") }); $def(self, '$iter?', function $ScopeNode_iter$ques$7() { var self = this; return self.type['$==']("iter") }); $def(self, '$def?', function $ScopeNode_def$ques$8() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.type['$==']("def")))) { return $ret_or_1 } else { return self.type['$==']("defs") } }); $def(self, '$lambda?', function $ScopeNode_lambda$ques$9() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$iter?']()))) { return self.is_lambda } else { return $ret_or_1 } }); $def(self, '$is_lambda!', $assign_ivar_val("is_lambda", true)); $def(self, '$defines_lambda', function $$defines_lambda() { var $yield = $$defines_lambda.$$p || nil, self = this; $$defines_lambda.$$p = null; self.lambda_definition = true; Opal.yieldX($yield, []); return (self.lambda_definition = false); }); $def(self, '$lambda_definition?', $return_ivar("lambda_definition")); $def(self, '$def_in_class?', function $ScopeNode_def_in_class$ques$10() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil, $ret_or_3 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = ($truthy(($ret_or_3 = self.defs['$!']())) ? (self.type['$==']("def")) : ($ret_or_3)))) ? (self.parent) : ($ret_or_2))))) { return self.parent['$class?']() } else { return $ret_or_1 } }); $def(self, '$to_vars', function $$to_vars() { var self = this, vars = nil, iv = nil, gv = nil, indent = nil, str = nil, pvars = nil; vars = self.temps.$dup(); $send(vars, 'push', $to_a($send(self.locals, 'map', [], function $$11(l){ if (l == null) l = nil; return "" + (l) + " = nil";}))); iv = $send(self.$ivars(), 'map', [], function $$12(ivar){ if (ivar == null) ivar = nil; return "if (self" + (ivar) + " == null) self" + (ivar) + " = nil;\n";}); gv = $send(self.$gvars(), 'map', [], function $$13(gvar){ if (gvar == null) gvar = nil; return "if ($gvars" + (gvar) + " == null) $gvars" + (gvar) + " = nil;\n";}); if (($truthy(self['$class?']()) && ($not(self.proto_ivars['$empty?']())))) { vars['$<<']("$proto = self.$$prototype") }; indent = self.compiler.$parser_indent(); str = ($truthy(vars['$empty?']()) ? ("") : ("var " + (vars.$join(", ")) + ";\n")); if (!$truthy(self.$ivars()['$empty?']())) { str = $rb_plus(str, "" + (indent) + (iv.$join(indent))) }; if (!$truthy(self.$gvars()['$empty?']())) { str = $rb_plus(str, "" + (indent) + (gv.$join(indent))) }; if (($truthy(self['$class?']()) && ($not(self.proto_ivars['$empty?']())))) { pvars = $send(self.proto_ivars, 'map', [], function $$14(i){ if (i == null) i = nil; return "$proto" + (i);}).$join(" = "); str = "" + (str) + "\n" + (indent) + (pvars) + " = nil;"; }; return self.$fragment(str); }); $def(self, '$add_scope_ivar', function $$add_scope_ivar(ivar) { var self = this; if ($truthy(self['$def_in_class?']())) { return self.parent.$add_proto_ivar(ivar) } else if ($truthy(self.ivars['$include?'](ivar))) { return nil } else { return self.ivars['$<<'](ivar) } }); $def(self, '$add_scope_gvar', function $$add_scope_gvar(gvar) { var self = this; if ($truthy(self.gvars['$include?'](gvar))) { return nil } else { return self.gvars['$<<'](gvar) } }); $def(self, '$add_proto_ivar', function $$add_proto_ivar(ivar) { var self = this; if ($truthy(self.proto_ivars['$include?'](ivar))) { return nil } else { return self.proto_ivars['$<<'](ivar) } }); $def(self, '$add_arg', function $$add_arg(arg) { var self = this; if (!$truthy(self.args['$include?'](arg))) { self.args['$<<'](arg) }; return arg; }); $def(self, '$add_scope_local', function $$add_scope_local(local) { var self = this; if ($truthy(self['$has_local?'](local))) { return nil }; return self.locals['$<<'](local); }); $def(self, '$has_local?', function $ScopeNode_has_local$ques$15(local) { var self = this; if ((($truthy(self.locals['$include?'](local)) || ($truthy(self.args['$include?'](local)))) || ($truthy(self.temps['$include?'](local))))) { return true }; if (($truthy(self.parent) && ($eqeq(self.type, "iter")))) { return self.parent['$has_local?'](local) }; return false; }); $def(self, '$scope_locals', function $$scope_locals() { var self = this, locals = nil; locals = self.locals['$|'](self.args)['$|']((($truthy(self.parent) && ($eqeq(self.type, "iter"))) ? (self.parent.$scope_locals()) : ([]))); return $send(locals, 'reject', [], function $$16(i){ if (i == null) i = nil; return i.$to_s()['$start_with?']("$");}); }); $def(self, '$add_scope_temp', function $$add_scope_temp(tmp) { var self = this; if ($truthy(self['$has_temp?'](tmp))) { return nil }; return self.temps.$push(tmp); }); $def(self, '$prepend_scope_temp', function $$prepend_scope_temp(tmp) { var self = this; if ($truthy(self['$has_temp?'](tmp))) { return nil }; return self.temps.$unshift(tmp); }); $def(self, '$has_temp?', function $ScopeNode_has_temp$ques$17(tmp) { var self = this; return self.temps['$include?'](tmp) }); $def(self, '$new_temp', function $$new_temp() { var self = this, tmp = nil; if (!$truthy(self.queue['$empty?']())) { return self.queue.$pop() }; tmp = self.$next_temp(); self.temps['$<<'](tmp); return tmp; }); $def(self, '$next_temp', function $$next_temp() { var self = this, tmp = nil; tmp = nil; (function(){try { var $t_break = $thrower('break'); return $send(self, 'loop', [], function $$18(){var self = $$18.$$s == null ? this : $$18.$$s; if (self.unique == null) self.unique = nil; tmp = "$" + (self.unique); self.unique = self.unique.$succ(); if ($truthy(self['$has_local?'](tmp))) { return nil } else { $t_break.$throw(nil, $$18.$$is_lambda) };}, {$$s: self})} catch($e) { if ($e === $t_break) return $e.$v; throw $e; } finally {$t_break.is_orphan = true;}})(); return tmp; }); $def(self, '$queue_temp', function $$queue_temp(name) { var self = this; return self.queue['$<<'](name) }); $def(self, '$push_while', function $$push_while() { var self = this, info = nil; info = (new Map()); self.while_stack.$push(info); return info; }); $def(self, '$pop_while', function $$pop_while() { var self = this; return self.while_stack.$pop() }); $def(self, '$in_while?', function $ScopeNode_in_while$ques$19() { var self = this; return self.while_stack['$empty?']()['$!']() }); $def(self, '$uses_block!', function $ScopeNode_uses_block$excl$20() { var self = this; if (($eqeq(self.type, "iter") && ($truthy(self.parent)))) { return self.parent['$uses_block!']() } else { self.uses_block = true; return self['$identify!'](); } }); $def(self, '$identify!', function $ScopeNode_identify$excl$21(name) { var self = this, $ret_or_1 = nil, $ret_or_2 = nil, $ret_or_3 = nil; if (name == null) name = nil; if ($truthy(self.identity)) { return self.identity }; if ($truthy(self['$valid_name?'](self.$mid()))) { self.identity = "$$" + (self.$mid()) } else { name = ($truthy(($ret_or_1 = name)) ? ($ret_or_1) : ([($truthy(($ret_or_2 = self.$parent())) ? (($truthy(($ret_or_3 = self.$parent().$name())) ? ($ret_or_3) : (self.$parent().$scope_name()))) : ($ret_or_2)), self.$mid()].$compact().$join("_"))); self.identity = self.compiler.$unique_temp(name); }; return self.identity; }, -1); self.$attr_reader("identity"); $def(self, '$find_parent_def', function $$find_parent_def() { var self = this, scope = nil; scope = self; while ($truthy((scope = scope.$parent()))) { if (($truthy(scope['$def?']()) || ($truthy(scope['$lambda?']())))) { return scope } }; return nil; }); $def(self, '$super_chain', function $$super_chain() { var $a, self = this, chain = nil, scope = nil, defn = nil, mid = nil; $a = [[], self, "null", "null"], (chain = $a[0]), (scope = $a[1]), (defn = $a[2]), (mid = $a[3]), $a; while ($truthy(scope)) { if ($eqeq(scope.$type(), "iter")) { chain['$<<'](scope['$identify!']()); if ($truthy(scope.$parent())) { scope = scope.$parent() }; } else if ($truthy(["def", "defs"]['$include?'](scope.$type()))) { defn = scope['$identify!'](); mid = "'" + (scope.$mid()) + "'"; break; } else { break } }; return [chain, defn, mid]; }); $def(self, '$uses_block?', $return_ivar("uses_block")); $def(self, '$has_rescue_else?', function $ScopeNode_has_rescue_else$ques$22() { var self = this; return self.$rescue_else_sexp()['$nil?']()['$!']() }); $def(self, '$in_rescue', function $$in_rescue(node) { var $yield = $$in_rescue.$$p || nil, self = this, $ret_or_1 = nil, result = nil; $$in_rescue.$$p = null; self.rescues = ($truthy(($ret_or_1 = self.rescues)) ? ($ret_or_1) : ([])); self.rescues.$push(node); result = Opal.yieldX($yield, []); self.rescues.$pop(); return result; }); $def(self, '$current_rescue', function $$current_rescue() { var self = this; return self.rescues.$last() }); $def(self, '$in_resbody', function $$in_resbody() { var $yield = $$in_resbody.$$p || nil, self = this, result = nil; $$in_resbody.$$p = null; if (!($yield !== nil)) { return nil }; self.in_resbody = true; result = Opal.yieldX($yield, []); self.in_resbody = false; return result; }); $def(self, '$in_resbody?', $return_ivar("in_resbody")); $def(self, '$in_ensure', function $$in_ensure() { var $yield = $$in_ensure.$$p || nil, self = this, result = nil; $$in_ensure.$$p = null; if (!($yield !== nil)) { return nil }; self.in_ensure = true; result = Opal.yieldX($yield, []); self.in_ensure = false; return result; }); $def(self, '$in_ensure?', $return_ivar("in_ensure")); $def(self, '$gen_retry_id', function $$gen_retry_id() { var self = this, $ret_or_1 = nil; self.next_retry_id = ($truthy(($ret_or_1 = self.next_retry_id)) ? ($ret_or_1) : ("retry_0")); return (self.next_retry_id = self.next_retry_id.$succ()); }); $def(self, '$accepts_using?', function $ScopeNode_accepts_using$ques$23() { var self = this; return [$$('TopNode'), $$('ModuleNode'), $$('ClassNode'), $$('IterNode')]['$include?'](self.$class()) }); $def(self, '$collect_refinements_temps', function $$collect_refinements_temps(temps) { var self = this; if (temps == null) temps = []; if ($truthy(self.refinements_temp)) { temps['$<<'](self.refinements_temp) }; if ($truthy(self.$parent())) { return self.$parent().$collect_refinements_temps(temps) }; return temps; }, -1); $def(self, '$new_refinements_temp', function $$new_refinements_temp() { var self = this, var$ = nil; var$ = self.$compiler().$unique_temp("$refn"); self.$add_scope_local(var$); return var$; }); $def(self, '$refinements_temp', function $$refinements_temp() { var $a, self = this, prev = nil, curr = nil; $a = [self.refinements_temp, self.$new_refinements_temp()], (prev = $a[0]), (curr = $a[1]), $a; self.refinements_temp = curr; return [prev, curr]; }); $def(self, '$self', function $$self() { var self = this; self.define_self = true; return "self"; }); $def(self, '$nesting', function $$nesting() { var self = this; self.define_nesting = true; return "$nesting"; }); $def(self, '$relative_access', function $$relative_access() { var self = this; self.define_relative_access = (self.define_nesting = true); return "$$"; }); $def(self, '$prepare_block', function $$prepare_block(block_name) { var self = this, scope_name = nil; if (block_name == null) block_name = nil; scope_name = self.$scope().$identity(); if ($truthy(block_name)) { self['$block_name='](block_name) }; self.$add_temp("" + (self.$block_name()) + " = " + (scope_name) + ".$$p || nil"); if ($truthy(self.block_prepared)) { return nil } else { self.$line("" + (scope_name) + ".$$p = null;"); return (self.block_prepared = true); }; }, -1); return self.$attr_accessor("await_encountered"); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/module"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $to_ary = Opal.to_ary, $truthy = Opal.truthy, $send = Opal.send, $rb_plus = Opal.rb_plus, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,handle,children,name_and_base,helper,nil?,body,stmt?,unshift,line,in_scope,name=,scope,in_closure,|,compile_body,await_encountered,await_encountered=,parent,+,nesting,private,cid,expr,stmt,returns,compiler,empty_line,add_temp,to_vars'); self.$require("opal/nodes/scope"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'ModuleNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.define_nesting = $proto.define_relative_access = nil; self.$handle("module"); self.$children("cid", "body"); $def(self, '$compile', function $$compile() { var $a, $b, self = this, name = nil, base = nil, await_begin = nil, await_end = nil, async = nil; $b = self.$name_and_base(), $a = $to_ary($b), (name = ($a[0] == null ? nil : $a[0])), (base = ($a[1] == null ? nil : $a[1])), $b; self.$helper("module"); if ($truthy(self.$body()['$nil?']())) { if ($truthy(self['$stmt?']())) { return self.$unshift("$module(", base, ", '" + (name) + "')") } else { return self.$unshift("($module(", base, ", '" + (name) + "'), nil)") } } else { self.$line(" var self = $module($base, '" + (name) + "');"); $send(self, 'in_scope', [], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s; self.$scope()['$name='](name); return $send(self, 'in_closure', [$$$($$('Closure'), 'MODULE')['$|']($$$($$('Closure'), 'JS_FUNCTION'))], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; return self.$compile_body()}, {$$s: self});}, {$$s: self}); if ($truthy(self.$await_encountered())) { await_begin = "(await "; await_end = ")"; async = "async "; self.$parent()['$await_encountered='](true); } else { $a = ["", "", ""], (await_begin = $a[0]), (await_end = $a[1]), (async = $a[2]), $a }; self.$unshift("" + (await_begin) + "(" + (async) + "function($base" + (($truthy(self.define_nesting) ? (", $parent_nesting") : nil)) + ") {"); return self.$line("})(", base, "" + (($truthy(self.define_nesting) ? ($rb_plus(", ", self.$scope().$nesting())) : nil)) + ")" + (await_end)); }; }); self.$private(); $def(self, '$name_and_base', function $$name_and_base() { var $a, $b, self = this, base = nil, name = nil; $b = self.$cid().$children(), $a = $to_ary($b), (base = ($a[0] == null ? nil : $a[0])), (name = ($a[1] == null ? nil : $a[1])), $b; if ($truthy(base['$nil?']())) { return [name, "" + (self.$scope().$nesting()) + "[0]"] } else { return [name, self.$expr(base)] }; }); return $def(self, '$compile_body', function $$compile_body() { var self = this, body_code = nil; body_code = self.$stmt(self.$compiler().$returns(self.$body())); self.$empty_line(); if ($truthy(self.define_nesting)) { self.$add_temp("$nesting = [self].concat($parent_nesting)") }; if ($truthy(self.define_relative_access)) { self.$add_temp("$$ = Opal.$r($nesting)") }; self.$line(self.$scope().$to_vars()); return self.$line(body_code); }); })($nesting[0], $$('ScopeNode'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/class"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $to_ary = Opal.to_ary, $truthy = Opal.truthy, $send = Opal.send, $rb_plus = Opal.rb_plus, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,handle,children,name_and_base,helper,nil?,body,stmt?,unshift,super_code,line,in_scope,name=,scope,in_closure,|,compile_body,await_encountered,await_encountered=,parent,+,nesting,sup,expr'); self.$require("opal/nodes/module"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'ClassNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.define_nesting = nil; self.$handle("class"); self.$children("cid", "sup", "body"); $def(self, '$compile', function $$compile() { var $a, $b, self = this, name = nil, base = nil, await_begin = nil, await_end = nil, async = nil; $b = self.$name_and_base(), $a = $to_ary($b), (name = ($a[0] == null ? nil : $a[0])), (base = ($a[1] == null ? nil : $a[1])), $b; self.$helper("klass"); if ($truthy(self.$body()['$nil?']())) { if ($truthy(self['$stmt?']())) { return self.$unshift("$klass(", base, ", ", self.$super_code(), ", '" + (name) + "')") } else { return self.$unshift("($klass(", base, ", ", self.$super_code(), ", '" + (name) + "'), nil)") } } else { self.$line(" var self = $klass($base, $super, '" + (name) + "');"); $send(self, 'in_scope', [], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s; self.$scope()['$name='](name); return $send(self, 'in_closure', [$$$($$('Closure'), 'MODULE')['$|']($$$($$('Closure'), 'JS_FUNCTION'))], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; return self.$compile_body()}, {$$s: self});}, {$$s: self}); if ($truthy(self.$await_encountered())) { await_begin = "(await "; await_end = ")"; async = "async "; self.$parent()['$await_encountered='](true); } else { $a = ["", "", ""], (await_begin = $a[0]), (await_end = $a[1]), (async = $a[2]), $a }; self.$unshift("" + (await_begin) + "(" + (async) + "function($base, $super" + (($truthy(self.define_nesting) ? (", $parent_nesting") : nil)) + ") {"); return self.$line("})(", base, ", ", self.$super_code(), "" + (($truthy(self.define_nesting) ? ($rb_plus(", ", self.$scope().$nesting())) : nil)) + ")" + (await_end)); }; }); return $def(self, '$super_code', function $$super_code() { var self = this; if ($truthy(self.$sup())) { return self.$expr(self.$sup()) } else { return "null" } }); })($nesting[0], $$('ModuleNode'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/singleton_class"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send = Opal.send, $truthy = Opal.truthy, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,push,in_scope,stmt,returns,compiler,body,add_temp,line,to_vars,scope,recv,object,nesting'); self.$require("opal/nodes/scope"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'SingletonClassNode'); self.$handle("sclass"); self.$children("object", "body"); return $def(self, '$compile', function $$compile() { var self = this; self.$push("(function(self, $parent_nesting) {"); $send(self, 'in_scope', [], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s, body_stmt = nil; if (self.define_nesting == null) self.define_nesting = nil; if (self.define_relative_access == null) self.define_relative_access = nil; body_stmt = self.$stmt(self.$compiler().$returns(self.$body())); if ($truthy(self.define_nesting)) { self.$add_temp("$nesting = [self].concat($parent_nesting)") }; if ($truthy(self.define_relative_access)) { self.$add_temp("$$ = Opal.$r($nesting)") }; self.$line(self.$scope().$to_vars()); return self.$line(body_stmt);}, {$$s: self}); return self.$line("})(Opal.get_singleton_class(", self.$recv(self.$object()), "), " + (self.$scope().$nesting()) + ")"); }); })($nesting[0], $$('ScopeNode')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/arg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,add_arg,scope,name,push,to_s'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ArgNode'); self.$handle("arg"); self.$children("name"); return $def(self, '$compile', function $$compile() { var self = this; self.$scope().$add_arg(self.$name()); return self.$push(self.$name().$to_s()); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/arity_check"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $slice = Opal.slice, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $def = Opal.def, $truthy = Opal.truthy, $rb_minus = Opal.rb_minus, $not = Opal.not, $rb_lt = Opal.rb_lt, $rb_plus = Opal.rb_plus, $rb_gt = Opal.rb_gt, $send = Opal.send, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,handle,children,new,args_node,args,optargs,restarg,postargs,kwargs,kwoptargs,kwrestarg,kwnilarg,arity=,scope,arity,arity_check?,compiler,empty?,arity_checks,helper,inspect,to_s,mid,line,push,join,compact,size,all_args,-,!,-@,<,+,>,<<,has_only_optional_kwargs?,any?,negative_arity,positive_arity,select,include?,type,has_required_kwargs?,all?,==,def?,class_scope?,top?,parent,class?,name,module?,identity'); self.$require("opal/nodes/base"); self.$require("opal/rewriters/arguments"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'ArityCheckNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.kwargs = $proto.kwoptargs = $proto.kwrestarg = $proto.all_args = $proto.args = $proto.optargs = $proto.restarg = $proto.postargs = $proto.arity_checks = nil; self.$handle("arity_check"); self.$children("args_node"); $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $yield = $$initialize.$$p || nil, self = this, arguments$ = nil; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', $to_a($fwd_rest), $yield); arguments$ = $$$($$('Rewriters'), 'Arguments').$new(self.$args_node().$children()); self.args = arguments$.$args(); self.optargs = arguments$.$optargs(); self.restarg = arguments$.$restarg(); self.postargs = arguments$.$postargs(); self.kwargs = arguments$.$kwargs(); self.kwoptargs = arguments$.$kwoptargs(); self.kwrestarg = arguments$.$kwrestarg(); return (self.kwnilarg = arguments$.$kwnilarg()); }, -1); $def(self, '$compile', function $$compile() { var self = this, meth = nil; self.$scope()['$arity='](self.$arity()); if (!$truthy(self.$compiler()['$arity_check?']())) { return nil }; if ($truthy(self.$arity_checks()['$empty?']())) { return nil } else { self.$helper("ac"); meth = self.$scope().$mid().$to_s().$inspect(); self.$line("var $arity = arguments.length;"); return self.$push(" if (" + (self.$arity_checks().$join(" || ")) + ") { $ac($arity, " + (self.$arity()) + ", this, " + (meth) + "); }"); }; }); $def(self, '$kwargs', function $$kwargs() { var self = this; return [].concat($to_a(self.kwargs)).concat($to_a(self.kwoptargs)).concat([self.kwrestarg]).$compact() }); $def(self, '$all_args', function $$all_args() { var self = this, $ret_or_1 = nil; return (self.all_args = ($truthy(($ret_or_1 = self.all_args)) ? ($ret_or_1) : ([].concat($to_a(self.args)).concat($to_a(self.optargs)).concat([self.restarg]).concat($to_a(self.postargs)).concat($to_a(self.$kwargs())).$compact()))) }); $def(self, '$arity_checks', function $$arity_checks() { var $a, self = this, arity = nil, min_arity = nil, max_arity = nil; if ($truthy((($a = self['arity_checks'], $a != null && $a !== nil) ? 'instance-variable' : nil))) { return self.arity_checks }; arity = self.$all_args().$size(); arity = $rb_minus(arity, self.optargs.$size()); if ($truthy(self.restarg)) { arity = $rb_minus(arity, 1) }; arity = $rb_minus(arity, self.$kwargs().$size()); if ((($not(self.optargs['$empty?']()) || ($not(self.$kwargs()['$empty?']()))) || ($truthy(self.restarg)))) { arity = $rb_minus(arity['$-@'](), 1) }; self.arity_checks = []; if ($truthy($rb_lt(arity, 0))) { min_arity = $rb_plus(arity, 1)['$-@'](); max_arity = self.$all_args().$size(); if ($truthy($rb_gt(min_arity, 0))) { self.arity_checks['$<<']("$arity < " + (min_arity)) }; if (!$truthy(self.restarg)) { self.arity_checks['$<<']("$arity > " + (max_arity)) }; } else { self.arity_checks['$<<']("$arity !== " + (arity)) }; return self.arity_checks; }); $def(self, '$arity', function $$arity() { var self = this; if ((($truthy(self.restarg) || ($truthy(self.optargs['$any?']()))) || ($truthy(self['$has_only_optional_kwargs?']())))) { return self.$negative_arity() } else { return self.$positive_arity() } }); $def(self, '$negative_arity', function $$negative_arity() { var self = this, required_plain_args = nil, result = nil; required_plain_args = $send(self.$all_args(), 'select', [], function $$1(arg){ if (arg == null) arg = nil; return ["arg", "mlhs"]['$include?'](arg.$type());}); result = required_plain_args.$size(); if ($truthy(self['$has_required_kwargs?']())) { result = $rb_plus(result, 1) }; return $rb_minus(result['$-@'](), 1); }); $def(self, '$positive_arity', function $$positive_arity() { var self = this, result = nil; result = self.$all_args().$size(); result = $rb_minus(result, self.$kwargs().$size()); if ($truthy(self.$kwargs()['$any?']())) { result = $rb_plus(result, 1) }; return result; }); $def(self, '$has_only_optional_kwargs?', function $ArityCheckNode_has_only_optional_kwargs$ques$2() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$kwargs()['$any?']()))) { return $send(self.$kwargs(), 'all?', [], function $$3(arg){ if (arg == null) arg = nil; return ["kwoptarg", "kwrestarg"]['$include?'](arg.$type());}) } else { return $ret_or_1 } }); return $def(self, '$has_required_kwargs?', function $ArityCheckNode_has_required_kwargs$ques$4() { var self = this; return $send(self.$kwargs(), 'any?', [], function $$5(arg){ if (arg == null) arg = nil; return arg.$type()['$==']("kwarg");}) }); })($nesting[0], $$('Base'), $nesting); return (function($base, $super) { var self = $klass($base, $super, 'IterArityCheckNode'); self.$handle("iter_arity_check"); return $def(self, '$compile', function $$compile() { var self = this, parent_scope = nil, $ret_or_1 = nil, $ret_or_2 = nil, context = nil, identity = nil; self.$scope()['$arity='](self.$arity()); if (!$truthy(self.$compiler()['$arity_check?']())) { return nil }; if ($truthy(self.$arity_checks()['$empty?']())) { return nil } else { parent_scope = self.$scope(); while (!($truthy(($truthy(($ret_or_1 = ($truthy(($ret_or_2 = parent_scope['$def?']())) ? ($ret_or_2) : (parent_scope['$class_scope?']())))) ? ($ret_or_1) : (parent_scope['$top?']()))))) { parent_scope = parent_scope.$parent() }; context = ($truthy(parent_scope['$top?']()) ? ("'
'") : ($truthy(parent_scope['$def?']()) ? ("'" + (parent_scope.$mid()) + "'") : ($truthy(parent_scope['$class?']()) ? ("''") : ($truthy(parent_scope['$module?']()) ? ("''") : nil)))); identity = self.$scope().$identity(); self.$line("if (" + (identity) + ".$$is_lambda || " + (identity) + ".$$define_meth) {"); self.$line(" var $arity = arguments.length;"); self.$line(" if (" + (self.$arity_checks().$join(" || ")) + ") { Opal.block_ac($arity, " + (self.$arity()) + ", " + (context) + "); }"); return self.$line("}"); }; }); })($nesting[0], $$('ArityCheckNode')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/ensure_kwargs_are_kwargs"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,helper,push'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'EnsureKwargsAreKwargs'); self.$handle("ensure_kwargs_are_kwargs"); return $def(self, '$compile', function $$compile() { var self = this; self.$helper("ensure_kwargs"); return self.$push("$kwargs = $ensure_kwargs($kwargs)"); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/extract_block_arg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,uses_block!,scope,add_arg,name,prepare_block'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ExtractBlockarg'); self.$handle("extract_blockarg"); self.$children("name"); return $def(self, '$compile', function $$compile() { var self = this; self.$scope()['$uses_block!'](); self.$scope().$add_arg(self.$name()); return self.$scope().$prepare_block(self.$name()); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/extract_kwarg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,[],meta,<<,used_kwargs,scope,add_temp,lvar_name,helper,push,inspect,to_s'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ExtractKwarg'); var $proto = self.$$prototype; $proto.sexp = nil; self.$handle("extract_kwarg"); self.$children("lvar_name"); return $def(self, '$compile', function $$compile() { var self = this, key_name = nil; key_name = self.sexp.$meta()['$[]']("arg_name"); self.$scope().$used_kwargs()['$<<'](key_name); self.$add_temp(self.$lvar_name()); self.$helper("get_kwarg"); return self.$push("" + (self.$lvar_name()) + " = $get_kwarg($kwargs, " + (key_name.$to_s().$inspect()) + ")"); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/extract_kwargs"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,add_temp,helper,push'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ExtractKwargs'); self.$handle("extract_kwargs"); return $def(self, '$compile', function $$compile() { var self = this; self.$add_temp("$kwargs"); self.$helper("extract_kwargs"); return self.$push("$kwargs = $extract_kwargs($post_args)"); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/extract_kwoptarg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $eqeq = Opal.eqeq, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,helper,[],meta,<<,used_kwargs,scope,add_temp,lvar_name,line,inspect,to_s,==,default_value,push,expr'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ExtractKwoptarg'); var $proto = self.$$prototype; $proto.sexp = nil; self.$handle("extract_kwoptarg"); self.$children("lvar_name", "default_value"); return $def(self, '$compile', function $$compile() { var self = this, key_name = nil; self.$helper("hash_get"); key_name = self.sexp.$meta()['$[]']("arg_name"); self.$scope().$used_kwargs()['$<<'](key_name); self.$add_temp(self.$lvar_name()); self.$line("" + (self.$lvar_name()) + " = $hash_get($kwargs, " + (key_name.$to_s().$inspect()) + ");"); if ($eqeq(self.$default_value().$children()['$[]'](1), "undefined")) { return nil }; return self.$push("if (" + (self.$lvar_name()) + " == null) " + (self.$lvar_name()) + " = ", self.$expr(self.$default_value())); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/extract_kwrestarg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $def = Opal.def, $send = Opal.send, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,name,add_temp,helper,push,used_kwargs,map,scope,join'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ExtractKwrestarg'); self.$handle("extract_kwrestarg"); self.$children("name"); $def(self, '$compile', function $$compile() { var self = this, name = nil, $ret_or_1 = nil; name = ($truthy(($ret_or_1 = self.$name())) ? ($ret_or_1) : ("$kw_rest_arg")); self.$add_temp(name); self.$helper("kwrestargs"); return self.$push("" + (name) + " = $kwrestargs($kwargs, " + (self.$used_kwargs()) + ")"); }); return $def(self, '$used_kwargs', function $$used_kwargs() { var self = this, args = nil; args = $send(self.$scope().$used_kwargs(), 'map', [], function $$1(arg_name){ if (arg_name == null) arg_name = nil; return "'" + (arg_name) + "': true";}); return "{" + (args.$join(",")) + "}"; }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/extract_optarg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $eqeq = Opal.eqeq, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,==,[],default_value,push,name,expr'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ExtractOptargNode'); self.$handle("extract_optarg"); self.$children("name", "default_value"); return $def(self, '$compile', function $$compile() { var self = this; if ($eqeq(self.$default_value().$children()['$[]'](1), "undefined")) { return nil }; return self.$push("if (" + (self.$name()) + " == null) " + (self.$name()) + " = ", self.$expr(self.$default_value())); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/extract_post_arg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,add_temp,name,line,push'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ExtractPostArg'); self.$handle("extract_post_arg"); self.$children("name"); return $def(self, '$compile', function $$compile() { var self = this; self.$add_temp(self.$name()); self.$line("" + (self.$name()) + " = $post_args.shift();"); return self.$push("if (" + (self.$name()) + " == null) " + (self.$name()) + " = nil"); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/extract_post_optarg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $eqeq = Opal.eqeq, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,add_temp,name,line,args_to_keep,==,[],default_value,push,expr'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ExtractPostOptarg'); self.$handle("extract_post_optarg"); self.$children("name", "default_value", "args_to_keep"); return $def(self, '$compile', function $$compile() { var self = this; self.$add_temp(self.$name()); self.$line("if ($post_args.length > " + (self.$args_to_keep()) + ") " + (self.$name()) + " = $post_args.shift();"); if ($eqeq(self.$default_value().$children()['$[]'](1), "undefined")) { return nil }; return self.$push("if (" + (self.$name()) + " == null) " + (self.$name()) + " = ", self.$expr(self.$default_value())); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/extract_restarg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,name,add_temp,==,args_to_keep,push'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ExtractRestarg'); self.$handle("extract_restarg"); self.$children("name", "args_to_keep"); return $def(self, '$compile', function $$compile() { var self = this, name = nil, $ret_or_1 = nil; name = ($truthy(($ret_or_1 = self.$name())) ? ($ret_or_1) : ("$rest_arg")); self.$add_temp(name); if ($eqeq(self.$args_to_keep(), 0)) { return self.$push("" + (name) + " = $post_args") } else { return self.$push("" + (name) + " = $post_args.splice(0, $post_args.length - " + (self.$args_to_keep()) + ")") }; }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/fake_arg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,next_temp,scope,add_arg,push'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'FakeArgNode'); self.$handle("fake_arg"); return $def(self, '$compile', function $$compile() { var self = this, name = nil; name = self.$scope().$next_temp(); self.$scope().$add_arg(name); return self.$push(name); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/initialize_iterarg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,push,name'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'InitializeIterarg'); self.$handle("initialize_iter_arg"); self.$children("name"); return $def(self, '$compile', function $$compile() { var self = this; return self.$push("if (" + (self.$name()) + " == null) " + (self.$name()) + " = nil") }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/initialize_shadowarg"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,<<,locals,scope,name,add_arg,push'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'InitializeShadowarg'); self.$handle("initialize_shadowarg"); self.$children("name"); return $def(self, '$compile', function $$compile() { var self = this; self.$scope().$locals()['$<<'](self.$name()); self.$scope().$add_arg(self.$name()); return self.$push("" + (self.$name()) + " = nil"); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args/parameters"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $send = Opal.send, $return_val = Opal.return_val, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $nesting = [], nil = Opal.nil; Opal.add_stubs('children,map,public_send,type,join,compact,[],meta,=='); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting); return (function($base, $super) { var self = $klass($base, $super, 'Parameters'); var $proto = self.$$prototype; $proto.args = nil; $def(self, '$initialize', function $$initialize(args) { var self = this; return (self.args = args.$children()) }); $def(self, '$to_code', function $$to_code() { var self = this, stringified_parameters = nil; stringified_parameters = $send(self.args, 'map', [], function $$1(arg){var self = $$1.$$s == null ? this : $$1.$$s; if (arg == null) arg = nil; return self.$public_send("on_" + (arg.$type()), arg);}, {$$s: self}); return "[" + (stringified_parameters.$compact().$join(", ")) + "]"; }); $def(self, '$on_arg', function $$on_arg(arg) { var arg_name = nil; arg_name = arg.$meta()['$[]']("arg_name"); return "['req', '" + (arg_name) + "']"; }); $def(self, '$on_mlhs', $return_val("['req']")); $def(self, '$on_optarg', function $$on_optarg(arg) { var arg_name = nil; arg_name = arg.$meta()['$[]']("arg_name"); return "['opt', '" + (arg_name) + "']"; }); $def(self, '$on_restarg', function $$on_restarg(arg) { var arg_name = nil; arg_name = arg.$meta()['$[]']("arg_name"); if ($truthy(arg_name)) { if ($eqeq(arg_name, "fwd_rest_arg")) { arg_name = "*" }; return "['rest', '" + (arg_name) + "']"; } else { return "['rest']" }; }); $def(self, '$on_kwarg', function $$on_kwarg(arg) { var arg_name = nil; arg_name = arg.$meta()['$[]']("arg_name"); return "['keyreq', '" + (arg_name) + "']"; }); $def(self, '$on_kwoptarg', function $$on_kwoptarg(arg) { var arg_name = nil; arg_name = arg.$meta()['$[]']("arg_name"); return "['key', '" + (arg_name) + "']"; }); $def(self, '$on_kwrestarg', function $$on_kwrestarg(arg) { var arg_name = nil; arg_name = arg.$meta()['$[]']("arg_name"); if ($truthy(arg_name)) { return "['keyrest', '" + (arg_name) + "']" } else { return "['keyrest']" }; }); $def(self, '$on_blockarg', function $$on_blockarg(arg) { var arg_name = nil; arg_name = arg.$meta()['$[]']("arg_name"); if ($eqeq(arg_name, "fwd_block_arg")) { arg_name = "&" }; return "['block', '" + (arg_name) + "']"; }); $def(self, '$on_kwnilarg', $return_val("['nokey']")); return $def(self, '$on_shadowarg', $return_val(nil)); })($nesting[0], null) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/nodes/args/prepare_post_args"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $eqeq = Opal.eqeq, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,add_temp,helper,==,offset,push'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Args'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'PreparePostArgs'); self.$handle("prepare_post_args"); self.$children("offset"); return $def(self, '$compile', function $$compile() { var self = this; self.$add_temp("$post_args"); self.$helper("slice"); if ($eqeq(self.$offset(), 0)) { return self.$push("$post_args = $slice(arguments)") } else { return self.$push("$post_args = $slice(arguments, " + (self.$offset()) + ")") }; }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/args"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send = Opal.send, $neqeq = Opal.neqeq, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,each_with_index,children,!=,push,process'); self.$require("opal/nodes/base"); self.$require("opal/nodes/args/arg"); self.$require("opal/nodes/args/arity_check"); self.$require("opal/nodes/args/ensure_kwargs_are_kwargs"); self.$require("opal/nodes/args/extract_block_arg"); self.$require("opal/nodes/args/extract_kwarg"); self.$require("opal/nodes/args/extract_kwargs"); self.$require("opal/nodes/args/extract_kwoptarg"); self.$require("opal/nodes/args/extract_kwrestarg"); self.$require("opal/nodes/args/extract_optarg"); self.$require("opal/nodes/args/extract_post_arg"); self.$require("opal/nodes/args/extract_post_optarg"); self.$require("opal/nodes/args/extract_restarg"); self.$require("opal/nodes/args/fake_arg"); self.$require("opal/nodes/args/initialize_iterarg"); self.$require("opal/nodes/args/initialize_shadowarg"); self.$require("opal/nodes/args/parameters"); self.$require("opal/nodes/args/prepare_post_args"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ArgsNode'); self.$handle("args"); return $def(self, '$compile', function $$compile() { var self = this; return $send(self.$children(), 'each_with_index', [], function $$1(arg, idx){var self = $$1.$$s == null ? this : $$1.$$s; if (arg == null) arg = nil; if (idx == null) idx = nil; if ($neqeq(idx, 0)) { self.$push(", ") }; return self.$push(self.$process(arg));}, {$$s: self}) }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/node_with_args/shortcuts"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $send = Opal.send, $def = Opal.def, $ensure_kwargs = Opal.ensure_kwargs, $kwrestargs = Opal.kwrestargs, $truthy = Opal.truthy, $defs = Opal.defs, $eqeq = Opal.eqeq, $thrower = Opal.thrower, $lambda = Opal.lambda, $range = Opal.range, $nesting = [], nil = Opal.nil; Opal.add_stubs('new,instance_exec,to_proc,when,helper,name,transform,[],[]=,<<,select,include?,for,arity_check?,compiler,compile_body,is_a?,each,shortcuts_for,match?,==,mid,warn,compile,define_shortcut,type,stmts,push,simple_value?,expr,to_sym,to_s,first,children,updated,length,inline_args,last'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'NodeWithArgs'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $const_set($nesting[0], 'Shortcut', $send($$('Struct'), 'new', ["name", "for", "when", "transform"], function $NodeWithArgs$1(){var self = $NodeWithArgs$1.$$s == null ? this : $NodeWithArgs$1.$$s; $def(self, '$match?', function $match$ques$2(node) { var self = this; return $send(node, 'instance_exec', [], self.$when().$to_proc()) }); return $def(self, '$compile', function $$compile(node) { var self = this; node.$helper(self.$name()); return $send(node, 'instance_exec', [], self.$transform().$to_proc()); });}, {$$s: self})); self.shortcuts = []; self.shortcuts_for = (new Map()); $defs(self, '$define_shortcut', function $$define_shortcut(name, $kwargs) { var block = $$define_shortcut.$$p || nil, kwargs, self = this, $ret_or_1 = nil; if (self.shortcuts == null) self.shortcuts = nil; $$define_shortcut.$$p = null; ; $kwargs = $ensure_kwargs($kwargs); kwargs = $kwrestargs($kwargs, {}); if ($truthy(($ret_or_1 = kwargs['$[]']("for")))) { $ret_or_1 } else { kwargs['$[]=']("for", "def") }; return self.shortcuts['$<<']($$('Shortcut').$new(name, kwargs['$[]']("for"), kwargs['$[]']("when"), block)); }, -2); $defs(self, '$shortcuts_for', function $$shortcuts_for(node_type) { var $a, self = this, $ret_or_1 = nil; if (self.shortcuts_for == null) self.shortcuts_for = nil; if (self.shortcuts == null) self.shortcuts = nil; if ($truthy(($ret_or_1 = self.shortcuts_for['$[]'](node_type)))) { return $ret_or_1 } else { return ($a = [node_type, $send(self.shortcuts, 'select', [], function $$3(shortcut){ if (shortcut == null) shortcut = nil; return [node_type, "*"]['$include?'](shortcut.$for());})], $send(self.shortcuts_for, '[]=', $a), $a[$a.length - 1]) } }); $def(self, '$compile_body_or_shortcut', function $$compile_body_or_shortcut() {try { var $t_return = $thrower('return'); var self = this, node_type = nil; if ($truthy(self.$compiler()['$arity_check?']())) { return self.$compile_body() }; node_type = ($truthy(self['$is_a?']($$('DefNode'))) ? ("def") : ("iter")); $send($$('NodeWithArgs').$shortcuts_for(node_type), 'each', [], function $$4(shortcut){var self = $$4.$$s == null ? this : $$4.$$s, node_desc = nil; if (shortcut == null) shortcut = nil; if ($truthy(shortcut['$match?'](self))) { if ($truthy($$('ENV')['$[]']("OPAL_DEBUG_SHORTCUTS"))) { node_desc = ($eqeq(node_type, "def") ? ("def " + (self.$mid())) : ("iter")); self.$warn("* shortcut " + (shortcut.$name()) + " used for " + (node_desc)); }; $t_return.$throw(shortcut.$compile(self), $$4.$$is_lambda); } else { return nil };}, {$$s: self, $$ret: $t_return}); return self.$compile_body();} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }); $send(self, 'define_shortcut', ["return_self", (new Map([["when", $lambda(function $NodeWithArgs$5(){var self = $NodeWithArgs$5.$$s == null ? this : $NodeWithArgs$5.$$s; return self.$stmts().$type()['$==']("self")}, {$$s: self})]]))], function $NodeWithArgs$6(){var self = $NodeWithArgs$6.$$s == null ? this : $NodeWithArgs$6.$$s; return self.$push("$return_self")}, {$$s: self}); $def(self, '$simple_value?', function $NodeWithArgs_simple_value$ques$7(node) { var self = this; if (node == null) node = self.$stmts(); return ["true", "false", "nil", "int", "float", "str", "sym"]['$include?'](node.$type()); }, -1); $send(self, 'define_shortcut', ["return_val", (new Map([["for", "*"], ["when", $lambda(function $NodeWithArgs$8(){var self = $NodeWithArgs$8.$$s == null ? this : $NodeWithArgs$8.$$s; return self['$simple_value?']()}, {$$s: self})]]))], function $NodeWithArgs$9(){var self = $NodeWithArgs$9.$$s == null ? this : $NodeWithArgs$9.$$s; return self.$push("$return_val(", self.$expr(self.$stmts()), ")")}, {$$s: self}); $send(self, 'define_shortcut', ["return_ivar", (new Map([["when", $lambda(function $NodeWithArgs$10(){var self = $NodeWithArgs$10.$$s == null ? this : $NodeWithArgs$10.$$s; return self.$stmts().$type()['$==']("ivar")}, {$$s: self})]]))], function $NodeWithArgs$11(){var self = $NodeWithArgs$11.$$s == null ? this : $NodeWithArgs$11.$$s, name = nil; name = self.$stmts().$children().$first().$to_s()['$[]']($range(1, -1, false)).$to_sym(); return self.$push("$return_ivar(", self.$expr(self.$stmts().$updated("sym", [name])), ")");}, {$$s: self}); $send(self, 'define_shortcut', ["assign_ivar", (new Map([["when", $lambda(function $NodeWithArgs$12(){var self = $NodeWithArgs$12.$$s == null ? this : $NodeWithArgs$12.$$s, $ret_or_1 = nil, $ret_or_2 = nil, $ret_or_3 = nil, $ret_or_4 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = ($truthy(($ret_or_3 = ($truthy(($ret_or_4 = self.$stmts().$type()['$==']("ivasgn"))) ? (self.$inline_args().$children().$length()['$=='](1)) : ($ret_or_4)))) ? (self.$inline_args().$children().$last().$type()['$==']("arg")) : ($ret_or_3)))) ? (self.$stmts().$children().$last().$type()['$==']("lvar")) : ($ret_or_2))))) { return self.$stmts().$children().$last().$children().$last()['$=='](self.$inline_args().$children().$last().$children().$last()) } else { return $ret_or_1 }}, {$$s: self})]]))], function $NodeWithArgs$13(){var self = $NodeWithArgs$13.$$s == null ? this : $NodeWithArgs$13.$$s, name = nil; name = self.$stmts().$children().$first().$to_s()['$[]']($range(1, -1, false)).$to_sym(); name = self.$expr(self.$stmts().$updated("sym", [name])); return self.$push("$assign_ivar(", name, ")");}, {$$s: self}); return $send(self, 'define_shortcut', ["assign_ivar_val", (new Map([["when", $lambda(function $NodeWithArgs$14(){var self = $NodeWithArgs$14.$$s == null ? this : $NodeWithArgs$14.$$s, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$stmts().$type()['$==']("ivasgn")))) { return self['$simple_value?'](self.$stmts().$children().$last()) } else { return $ret_or_1 }}, {$$s: self})]]))], function $NodeWithArgs$15(){var self = $NodeWithArgs$15.$$s == null ? this : $NodeWithArgs$15.$$s, name = nil; name = self.$stmts().$children().$first().$to_s()['$[]']($range(1, -1, false)).$to_sym(); name = self.$expr(self.$stmts().$updated("sym", [name])); return self.$push("$assign_ivar_val(", name, ", ", self.$expr(self.$stmts().$children().$last()), ")");}, {$$s: self}); })($nesting[0], $$('ScopeNode'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/nodes/node_with_args"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $slice = Opal.slice, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $def = Opal.def, $truthy = Opal.truthy, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,attr_reader,attr_accessor,[],meta,s,original_args,push,process,arity_check_node,uses_block?,scope,prepare_block,to_code,new'); self.$require("opal/nodes/scope"); self.$require("opal/nodes/args/parameters"); self.$require("opal/nodes/node_with_args/shortcuts"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'NodeWithArgs'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.sexp = nil; self.$attr_reader("used_kwargs"); self.$attr_accessor("arity"); self.$attr_reader("original_args"); $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', $to_a($fwd_rest), $yield); self.original_args = self.sexp.$meta()['$[]']("original_args"); self.used_kwargs = []; return (self.arity = 0); }, -1); $def(self, '$arity_check_node', function $$arity_check_node() { var self = this; return self.$s("arity_check", self.$original_args()) }); $def(self, '$compile_arity_check', function $$compile_arity_check() { var self = this; return self.$push(self.$process(self.$arity_check_node())) }); $def(self, '$compile_block_arg', function $$compile_block_arg() { var self = this; if ($truthy(self.$scope()['$uses_block?']())) { return self.$scope().$prepare_block() } else { return nil } }); return $def(self, '$parameters_code', function $$parameters_code() { var self = this; return $$$($$('Args'), 'Parameters').$new(self.$original_args()).$to_code() }); })($nesting[0], $$('ScopeNode'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/iter"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $rb_lt = Opal.rb_lt, $eqeq = Opal.eqeq, $not = Opal.not, $send = Opal.send, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,handle,children,lambda_definition?,scope,is_lambda!,compile_body_or_shortcut,<,arity,[]=,self,key?,throwers,[],arity_check?,compiler,parameters_code,enable_source_location?,source_location,has_top_level_mlhs_arg?,has_trailing_comma_in_args?,==,keys,push,!,empty?,join,map,nesting,relative_access,in_scope,identify!,process,inline_args,compile_arity_check,in_closure,|,stmt,returned_body,add_temp,to_vars,line,unshift,await_encountered,block_arg,prepare_block,each,args,first,<<,updated,stmts,returns,s,any?,original_args,type,expression,loc,source,match'); self.$require("opal/nodes/node_with_args"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'IterNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.define_self = $proto.closure = $proto.define_nesting = $proto.define_relative_access = $proto.sexp = nil; self.$handle("iter"); self.$children("inline_args", "stmts"); $def(self, '$compile', function $$compile() { var $a, $b, $c, $d, self = this, blockopts = nil; if ($truthy(self.$scope()['$lambda_definition?']())) { self['$is_lambda!']() }; self.$compile_body_or_shortcut(); blockopts = (new Map()); if ($truthy($rb_lt(self.$arity(), 0))) { blockopts['$[]=']("$$arity", self.$arity()) }; if ($truthy(self.define_self)) { blockopts['$[]=']("$$s", self.$scope().$self()) }; if ($truthy(($a = ($b = self.closure, ($b === nil || $b == null) ? nil : $b.$throwers()), ($a === nil || $a == null) ? nil : $a['$key?']("break")))) { blockopts['$[]=']("$$brk", self.closure.$throwers()['$[]']("break")) }; if ($truthy(($c = ($d = self.closure, ($d === nil || $d == null) ? nil : $d.$throwers()), ($c === nil || $c == null) ? nil : $c['$key?']("return")))) { blockopts['$[]=']("$$ret", self.closure.$throwers()['$[]']("return")) }; if ($truthy(self.$compiler()['$arity_check?']())) { blockopts['$[]=']("$$parameters", self.$parameters_code()) }; if ($truthy(self.$compiler()['$enable_source_location?']())) { blockopts['$[]=']("$$source_location", self.$source_location()) }; if ($truthy(self['$has_top_level_mlhs_arg?']())) { blockopts['$[]=']("$$has_top_level_mlhs_arg", "true") }; if ($truthy(self['$has_trailing_comma_in_args?']())) { blockopts['$[]=']("$$has_trailing_comma_in_args", "true") }; if ($eqeq(blockopts.$keys(), ["$$arity"])) { self.$push(", " + (self.$arity())) } else if ($not(blockopts['$empty?']())) { self.$push(", {", $send(blockopts, 'map', [], function $$1(k, v){ if (k == null) k = nil; if (v == null) v = nil; return "" + (k) + ": " + (v);}).$join(", "), "}") }; if ($truthy(self.define_nesting)) { self.$scope().$nesting() }; if ($truthy(self.define_relative_access)) { return self.$scope().$relative_access() } else { return nil }; }); $def(self, '$compile_body', function $$compile_body() { var self = this, inline_params = nil, to_vars = nil, identity = nil, body_code = nil; inline_params = nil; to_vars = (identity = (body_code = nil)); $send(self, 'in_scope', [], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; if (self.is_lambda == null) self.is_lambda = nil; identity = self.$scope()['$identify!'](); inline_params = self.$process(self.$inline_args()); self.$compile_arity_check(); return $send(self, 'in_closure', [$$$($$('Closure'), 'JS_FUNCTION')['$|']($$$($$('Closure'), 'ITER'))['$|'](($truthy(self.is_lambda) ? ($$$($$('Closure'), 'LAMBDA')) : (0)))], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s; if (self.define_self == null) self.define_self = nil; body_code = self.$stmt(self.$returned_body()); if ($truthy(self.define_self)) { self.$add_temp("self = " + (identity) + ".$$s == null ? this : " + (identity) + ".$$s") }; to_vars = self.$scope().$to_vars(); return self.$line(body_code);}, {$$s: self});}, {$$s: self}); self.$unshift(to_vars); if ($truthy(self.$await_encountered())) { self.$unshift("async function " + (identity) + "(", inline_params, "){") } else { self.$unshift("function " + (identity) + "(", inline_params, "){") }; return self.$push("}"); }); $def(self, '$compile_block_arg', function $$compile_block_arg() { var self = this; if ($truthy(self.$block_arg())) { return self.$scope().$prepare_block() } else { return nil } }); $def(self, '$extract_underscore_args', function $$extract_underscore_args() { var self = this, valid_args = nil, caught_blank_argument = nil; valid_args = []; caught_blank_argument = false; $send(self.$args().$children(), 'each', [], function $$4(arg){var arg_name = nil; if (arg == null) arg = nil; arg_name = arg.$children().$first(); if ($eqeq(arg_name, "_")) { if ($truthy(caught_blank_argument)) { return nil } else { caught_blank_argument = true; return valid_args['$<<'](arg); } } else { return valid_args['$<<'](arg) };}); return (self.sexp = self.sexp.$updated(nil, [self.$args().$updated(nil, valid_args), self.$stmts()])); }); $def(self, '$returned_body', function $$returned_body() { var self = this, $ret_or_1 = nil; return self.$compiler().$returns(($truthy(($ret_or_1 = self.$stmts())) ? ($ret_or_1) : (self.$s("nil")))) }); $def(self, '$has_top_level_mlhs_arg?', function $IterNode_has_top_level_mlhs_arg$ques$5() { var self = this; return $send(self.$original_args().$children(), 'any?', [], function $$6(arg){ if (arg == null) arg = nil; return arg.$type()['$==']("mlhs");}) }); $def(self, '$has_trailing_comma_in_args?', function $IterNode_has_trailing_comma_in_args$ques$7() { var self = this, args_source = nil; if (($truthy(self.$original_args().$loc()) && ($truthy(self.$original_args().$loc().$expression())))) { args_source = self.$original_args().$loc().$expression().$source(); return args_source.$match(/,\s*\|/); } else { return nil } }); return $def(self, '$arity_check_node', function $$arity_check_node() { var self = this; return self.$s("iter_arity_check", self.$original_args()) }); })($nesting[0], $$('NodeWithArgs'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/def"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $rb_lt = Opal.rb_lt, $eqeq = Opal.eqeq, $not = Opal.not, $send = Opal.send, $def = Opal.def, $rb_plus = Opal.rb_plus, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,handle,children,compile_body_or_shortcut,<,arity,[]=,arity_check?,compiler,parameters_code,parse_comments?,comments_code,enable_source_location?,source_location,==,keys,push,!,empty?,join,map,wrap_with_definition,nesting,scope,relative_access,in_scope,mid=,mid,type,defs=,identify!,identity,block_name=,process,inline_args,in_closure,|,stmt,returns,stmts,compile_block_arg,add_temp,compile_arity_check,unshift,current_indent,to_vars,line,await_encountered,helper,wrap,self,expr?,+,comments,inspect,text'); self.$require("opal/nodes/node_with_args"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'DefNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.define_nesting = $proto.define_relative_access = nil; self.$handle("def"); self.$children("mid", "inline_args", "stmts"); $def(self, '$compile', function $$compile() { var self = this, blockopts = nil; self.$compile_body_or_shortcut(); blockopts = (new Map()); if ($truthy($rb_lt(self.$arity(), 0))) { blockopts['$[]=']("$$arity", self.$arity()) }; if ($truthy(self.$compiler()['$arity_check?']())) { blockopts['$[]=']("$$parameters", self.$parameters_code()) }; if ($truthy(self.$compiler()['$parse_comments?']())) { blockopts['$[]=']("$$comments", self.$comments_code()) }; if ($truthy(self.$compiler()['$enable_source_location?']())) { blockopts['$[]=']("$$source_location", self.$source_location()) }; if ($eqeq(blockopts.$keys(), ["$$arity"])) { self.$push(", " + (self.$arity())) } else if ($not(blockopts['$empty?']())) { self.$push(", {", $send(blockopts, 'map', [], function $$1(k, v){ if (k == null) k = nil; if (v == null) v = nil; return "" + (k) + ": " + (v);}).$join(", "), "}") }; self.$wrap_with_definition(); if ($truthy(self.define_nesting)) { self.$scope().$nesting() }; if ($truthy(self.define_relative_access)) { return self.$scope().$relative_access() } else { return nil }; }); $def(self, '$compile_body', function $$compile_body() { var self = this, inline_params = nil, scope_name = nil; inline_params = nil; scope_name = nil; $send(self, 'in_scope', [], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; if (self.sexp == null) self.sexp = nil; self.$scope()['$mid='](self.$mid()); if ($eqeq(self.sexp.$type(), "defs")) { self.$scope()['$defs='](true) }; self.$scope()['$identify!'](); scope_name = self.$scope().$identity(); self.$scope()['$block_name=']("$yield"); inline_params = self.$process(self.$inline_args()); return $send(self, 'in_closure', [$$$($$('Closure'), 'DEF')['$|']($$$($$('Closure'), 'JS_FUNCTION'))], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s, stmt_code = nil; if (self.define_self == null) self.define_self = nil; stmt_code = self.$stmt(self.$compiler().$returns(self.$stmts())); self.$compile_block_arg(); if ($truthy(self.define_self)) { self.$add_temp("self = this") }; self.$compile_arity_check(); self.$unshift("\n" + (self.$current_indent()), self.$scope().$to_vars()); return self.$line(stmt_code);}, {$$s: self});}, {$$s: self}); self.$unshift(") {"); self.$unshift(inline_params); self.$unshift("function " + (scope_name) + "("); if ($truthy(self.$await_encountered())) { self.$unshift("async ") }; return self.$line("}"); }); $def(self, '$wrap_with_definition', function $$wrap_with_definition() { var self = this; self.$helper("def"); self.$wrap("$def(" + (self.$scope().$self()) + ", '$" + (self.$mid()) + "', ", ")"); if ($truthy(self['$expr?']())) { return nil } else { return self.$unshift("\n" + (self.$current_indent())) }; }); return $def(self, '$comments_code', function $$comments_code() { var self = this; return $rb_plus($rb_plus("[", $send(self.$comments(), 'map', [], function $$4(comment){ if (comment == null) comment = nil; return comment.$text().$inspect();}).$join(", ")), "]") }); })($nesting[0], $$('NodeWithArgs'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/defs"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,helper,unshift,expr,recvr,mid,push'); self.$require("opal/nodes/def"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'DefsNode'); self.$handle("defs"); self.$children("recvr", "mid", "inline_args", "stmts"); return $def(self, '$wrap_with_definition', function $$wrap_with_definition() { var self = this; self.$helper("defs"); self.$unshift("$defs(", self.$expr(self.$recvr()), ", '$" + (self.$mid()) + "', "); return self.$push(")"); }); })($nesting[0], $$('DefNode')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/ast/matcher"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send = Opal.send, $def = Opal.def, $slice = Opal.slice, $truthy = Opal.truthy, $const_set = Opal.const_set, $rb_plus = Opal.rb_plus, $neqeq = Opal.neqeq, $eqeq = Opal.eqeq, $eqeqeq = Opal.eqeqeq, $range = Opal.range, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,instance_exec,to_proc,new,match,inspect,attr_accessor,nil?,+,type,children,!=,length,all?,times,[],==,is_a?,first,===,include?,<<,captures'); self.$require("ast"); self.$require("parser/ast/node"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'AST'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Matcher'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.root = $proto.captures = nil; $def(self, '$initialize', function $$initialize() { var block = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; ; return (self.root = $send(self, 'instance_exec', [], block.$to_proc())); }); $def(self, '$s', function $$s(type, $a) { var $post_args, children; $post_args = $slice(arguments, 1); children = $post_args; return $$('Node').$new(type, children); }, -2); $def(self, '$cap', function $$cap(capture) { return $$('Node').$new("capture", [capture]) }); $def(self, '$match', function $$match(ast) { var self = this, $ret_or_1 = nil; self.captures = []; if ($truthy(($ret_or_1 = self.root.$match(ast, self)))) { $ret_or_1 } else { return false; }; return self.captures; }); $def(self, '$inspect', function $$inspect() { var self = this; return "#" }); self.$attr_accessor("captures"); return $const_set($nesting[0], 'Node', $send($$('Struct'), 'new', ["type", "children"], function $Matcher$1(){var self = $Matcher$1.$$s == null ? this : $Matcher$1.$$s; $def(self, '$match', function $$match(ast, matcher) { var self = this, ast_parts = nil, self_parts = nil; if ($truthy(ast['$nil?']())) { return false }; ast_parts = $rb_plus([ast.$type()], ast.$children()); self_parts = $rb_plus([self.$type()], self.$children()); if ($neqeq(ast_parts.$length(), self_parts.$length())) { return false }; return $send(ast_parts.$length().$times(), 'all?', [], function $$2(i){var ast_elem = nil, self_elem = nil, capture = nil, res = nil, $ret_or_1 = nil; if (i == null) i = nil; ast_elem = ast_parts['$[]'](i); self_elem = self_parts['$[]'](i); if (($truthy(self_elem['$is_a?']($$('Node'))) && ($eqeq(self_elem.$type(), "capture")))) { capture = true; self_elem = self_elem.$children().$first(); }; res = ($eqeqeq($$('Node'), ($ret_or_1 = self_elem)) ? (self_elem.$match(ast_elem, matcher)) : ($eqeqeq($$('Array'), $ret_or_1) ? (self_elem['$include?'](ast_elem)) : ($eqeqeq("*", $ret_or_1) || (self_elem['$=='](ast_elem))))); if ($truthy(capture)) { matcher.$captures()['$<<'](ast_elem) }; return res;}); }); return $def(self, '$inspect', function $$inspect() { var self = this; if ($eqeq(self.$type(), "capture")) { return "{" + (self.$children().$first().$inspect()) + "}" } else { return "s(" + (self.$type().$inspect()) + ", " + (self.$children().$inspect()['$[]']($range(1, -2, false))) + ")" } });}, {$$s: self})); })($nesting[0], null, $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/if"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $def = Opal.def, $not = Opal.not, $send = Opal.send, $eqeqeq = Opal.eqeqeq, $const_set = Opal.const_set, $to_a = Opal.to_a, $neqeq = Opal.neqeq, $return_val = Opal.return_val, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,handle,children,should_compile_as_simple_expression?,==,true_body,s,compile_with_binary_or,false_body,compile_with_binary_and,compile_with_ternary,could_become_switch?,compile_with_switch,compile_with_if,expects_expression?,push_closure,truthy,falsy,!,push,js_truthy,test,indent,line,stmt,type,pop_closure,returning_if?,await_encountered,scope,wrap,[],meta,returnify,returns,compiler,expr?,recv?,simple?,expr,sexp,===,single_line?,strip_empty_children,all?,new,cap,match,handle_additional_switch_rules,valid_switch_body?,could_become_switch_branch?,<<,!=,[]=,merge!,compile_switch_case,include?,last,each,returning?,compile_switch_default,helper,new_temp,top_scope,excl,start_condition,end_condition'); self.$require("opal/nodes/base"); self.$require("opal/ast/matcher"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'IfNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.sexp = $proto.switch_variable = $proto.switch_first_test = $proto.switch_additional_rules = nil; self.$handle("if"); self.$children("test", "true_body", "false_body"); $def(self, '$compile', function $$compile() { var self = this; if ($truthy(self['$should_compile_as_simple_expression?']())) { if ($eqeq(self.$true_body(), self.$s("true"))) { return self.$compile_with_binary_or() } else if ($eqeq(self.$false_body(), self.$s("false"))) { return self.$compile_with_binary_and() } else { return self.$compile_with_ternary() } } else if ($truthy(self['$could_become_switch?']())) { return self.$compile_with_switch() } else { return self.$compile_with_if() } }); $def(self, '$compile_with_if', function $$compile_with_if() { var $a, self = this, truthy = nil, falsy = nil, return_kw = nil; if ($truthy(self['$expects_expression?']())) { self.$push_closure() }; truthy = self.$truthy(); falsy = self.$falsy(); if (($truthy(falsy) && ($not(truthy)))) { self.$push("if (!", self.$js_truthy(self.$test()), ") {"); $a = [truthy, falsy], (falsy = $a[0]), (truthy = $a[1]), $a; } else { self.$push("if (", self.$js_truthy(self.$test()), ") {") }; if ($truthy(truthy)) { $send(self, 'indent', [], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s; return self.$line(self.$stmt(truthy))}, {$$s: self}) }; if ($truthy(falsy)) { if ($eqeq(falsy.$type(), "if")) { self.$line("} else ", self.$stmt(falsy)) } else { self.$line("} else {"); $send(self, 'indent', [], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; return self.$line(self.$stmt(falsy))}, {$$s: self}); self.$line("}"); } } else { self.$line("}"); if ($truthy(self['$expects_expression?']())) { self.$line("return nil;") }; }; if ($truthy(self['$expects_expression?']())) { self.$pop_closure() }; if ($truthy(self['$expects_expression?']())) { if ($truthy(self['$returning_if?']())) { return_kw = "return " }; if ($truthy(self.$scope().$await_encountered())) { return self.$wrap("" + (return_kw) + "(await (async function() {", "})())") } else { return self.$wrap("" + (return_kw) + "(function() {", "})()") }; } else { return nil }; }); $def(self, '$returning_if?', function $IfNode_returning_if$ques$3() { var self = this; return self.sexp.$meta()['$[]']("returning") }); $def(self, '$truthy', function $$truthy() { var self = this; return self.$returnify(self.$true_body()) }); $def(self, '$falsy', function $$falsy() { var self = this; return self.$returnify(self.$false_body()) }); $def(self, '$returnify', function $$returnify(body) { var self = this; if (($truthy(self['$expects_expression?']()) && ($truthy(body)))) { return self.$compiler().$returns(body) } else { return body } }); $def(self, '$expects_expression?', function $IfNode_expects_expression$ques$4() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$expr?']()))) { return $ret_or_1 } else { return self['$recv?']() } }); $def(self, '$should_compile_as_simple_expression?', function $IfNode_should_compile_as_simple_expression$ques$5() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self['$expects_expression?']())) ? (self['$simple?'](self.$true_body())) : ($ret_or_2))))) { return self['$simple?'](self.$false_body()) } else { return $ret_or_1 } }); $def(self, '$compile_with_ternary', function $$compile_with_ternary() { var self = this, truthy = nil, falsy = nil, $ret_or_1 = nil; truthy = self.$true_body(); falsy = self.$false_body(); self.$push("("); self.$push(self.$js_truthy(self.$test()), " ? "); self.$push("(", self.$expr(($truthy(($ret_or_1 = truthy)) ? ($ret_or_1) : (self.$s("nil")))), ") : "); if (($not(falsy) || ($eqeq(falsy.$type(), "if")))) { self.$push(self.$expr(($truthy(($ret_or_1 = falsy)) ? ($ret_or_1) : (self.$s("nil"))))) } else { self.$push("(", self.$expr(($truthy(($ret_or_1 = falsy)) ? ($ret_or_1) : (self.$s("nil")))), ")") }; return self.$push(")"); }); $def(self, '$compile_with_binary_and', function $$compile_with_binary_and() { var self = this, truthy = nil, $ret_or_1 = nil; if ($truthy(self.$sexp().$meta()['$[]']("do_js_truthy_on_true_body"))) { truthy = self.$js_truthy(($truthy(($ret_or_1 = self.$true_body())) ? ($ret_or_1) : (self.$s("nil")))) } else { truthy = self.$expr(($truthy(($ret_or_1 = self.$true_body())) ? ($ret_or_1) : (self.$s("nil")))) }; self.$push("("); self.$push(self.$js_truthy(self.$test()), " && "); self.$push("(", truthy, ")"); return self.$push(")"); }); $def(self, '$compile_with_binary_or', function $$compile_with_binary_or() { var self = this, falsy = nil, $ret_or_1 = nil; if ($truthy(self.$sexp().$meta()['$[]']("do_js_truthy_on_false_body"))) { falsy = self.$js_truthy(($truthy(($ret_or_1 = self.$false_body())) ? ($ret_or_1) : (self.$s("nil")))) } else { falsy = self.$expr(($truthy(($ret_or_1 = self.$false_body())) ? ($ret_or_1) : (self.$s("nil")))) }; self.$push("("); self.$push(self.$js_truthy(self.$test()), " || "); self.$push("(", falsy, ")"); return self.$push(")"); }); $def(self, '$simple?', function $IfNode_simple$ques$6(body) { var self = this, $ret_or_1 = nil; if ($eqeqeq($$$($$('AST'), 'Node'), ($ret_or_1 = body))) { switch (body.$type().valueOf()) { case "return": case "js_return": case "break": case "next": case "redo": case "retry": return false case "xstr": return $$('XStringNode')['$single_line?']($$('XStringNode').$strip_empty_children(body.$children())) default: return $send(body.$children(), 'all?', [], function $$7(i){var self = $$7.$$s == null ? this : $$7.$$s; if (i == null) i = nil; return self['$simple?'](i);}, {$$s: self}) } } else { return true } }); $const_set($nesting[0], 'SWITCH_TEST_MATCH', $send($$$($$('AST'), 'Matcher'), 'new', [], function $IfNode$8(){var self = $IfNode$8.$$s == null ? this : $IfNode$8.$$s; return self.$s("send", self.$cap(self.$s(["float", "int", "sym", "str", "true", "false", "nil"], "*")), "===", self.$s("lvasgn", self.$cap("*"), self.$cap("*")))}, {$$s: self})); $const_set($nesting[0], 'SWITCH_TEST_MATCH_CONTINUED', $send($$$($$('AST'), 'Matcher'), 'new', [], function $IfNode$9(){var self = $IfNode$9.$$s == null ? this : $IfNode$9.$$s; return self.$s("if", self.$s("send", self.$cap(self.$s(["float", "int", "sym", "str", "true", "false", "nil"], "*")), "===", self.$s("lvasgn", self.$cap("*"), self.$cap("*"))), self.$s("true"), self.$cap("*"))}, {$$s: self})); $const_set($nesting[0], 'SWITCH_BRANCH_TEST_MATCH', $send($$$($$('AST'), 'Matcher'), 'new', [], function $IfNode$10(){var self = $IfNode$10.$$s == null ? this : $IfNode$10.$$s; return self.$s("send", self.$cap(self.$s(["float", "int", "sym", "str", "true", "false", "nil"], "*")), "===", self.$s("js_tmp", self.$cap("*")))}, {$$s: self})); $const_set($nesting[0], 'SWITCH_BRANCH_TEST_MATCH_CONTINUED', $send($$$($$('AST'), 'Matcher'), 'new', [], function $IfNode$11(){var self = $IfNode$11.$$s == null ? this : $IfNode$11.$$s; return self.$s("if", self.$s("send", self.$cap(self.$s(["float", "int", "sym", "str", "true", "false", "nil"], "*")), "===", self.$s("js_tmp", self.$cap("*"))), self.$s("true"), self.$cap("*"))}, {$$s: self})); $def(self, '$could_become_switch?', function $IfNode_could_become_switch$ques$12() { var $a, self = this, test_match = nil, $ret_or_1 = nil, additional_rules = nil; if ($truthy(self['$expects_expression?']())) { return false }; if ($truthy(self.$sexp().$meta()['$[]']("switch_child"))) { return true }; test_match = ($truthy(($ret_or_1 = $$('SWITCH_TEST_MATCH').$match(self.$test()))) ? ($ret_or_1) : ($$('SWITCH_TEST_MATCH_CONTINUED').$match(self.$test()))); if (!$truthy(test_match)) { return false }; $a = [].concat($to_a(test_match)), (self.switch_test = ($a[0] == null ? nil : $a[0])), (self.switch_variable = ($a[1] == null ? nil : $a[1])), (self.switch_first_test = ($a[2] == null ? nil : $a[2])), (additional_rules = ($a[3] == null ? nil : $a[3])), $a; additional_rules = self.$handle_additional_switch_rules(additional_rules); if (!$truthy(additional_rules)) { return false }; self.switch_additional_rules = additional_rules; if (!$truthy(self['$valid_switch_body?'](self.$true_body()))) { return false }; return self['$could_become_switch_branch?'](self.$false_body()); }); $def(self, '$handle_additional_switch_rules', function $$handle_additional_switch_rules(additional_rules) { var $a, self = this, switch_additional_rules = nil, match = nil, $ret_or_1 = nil, switch_test = nil, switch_variable = nil; switch_additional_rules = []; while ($truthy(additional_rules)) { match = ($truthy(($ret_or_1 = $$('SWITCH_BRANCH_TEST_MATCH').$match(additional_rules))) ? ($ret_or_1) : ($$('SWITCH_BRANCH_TEST_MATCH_CONTINUED').$match(additional_rules))); if (!$truthy(match)) { return false }; $a = [].concat($to_a(match)), (switch_test = ($a[0] == null ? nil : $a[0])), (switch_variable = ($a[1] == null ? nil : $a[1])), (additional_rules = ($a[2] == null ? nil : $a[2])), $a; if (!$eqeq(switch_variable, self.switch_variable)) { return false }; switch_additional_rules['$<<'](switch_test); }; return switch_additional_rules; }); $def(self, '$could_become_switch_branch?', function $IfNode_could_become_switch_branch$ques$13(body) { var $a, self = this, test = nil, true_body = nil, false_body = nil, test_match = nil, $ret_or_1 = nil, switch_test = nil, switch_variable = nil, additional_rules = nil, switch_additional_rules = nil; if ($not(body)) { return true } else if ($neqeq(body.$type(), "if")) { if ($truthy(self['$valid_switch_body?'](body))) { body.$meta()['$[]=']("switch_default", true); return true; }; return false; }; $a = [].concat($to_a(body)), (test = ($a[0] == null ? nil : $a[0])), (true_body = ($a[1] == null ? nil : $a[1])), (false_body = ($a[2] == null ? nil : $a[2])), $a; test_match = ($truthy(($ret_or_1 = $$('SWITCH_BRANCH_TEST_MATCH').$match(test))) ? ($ret_or_1) : ($$('SWITCH_BRANCH_TEST_MATCH_CONTINUED').$match(test))); if (!$truthy(test_match)) { if ($truthy(self['$valid_switch_body?'](body, true))) { body.$meta()['$[]=']("switch_default", true); return true; } }; $a = [].concat($to_a(test_match)), (switch_test = ($a[0] == null ? nil : $a[0])), (switch_variable = ($a[1] == null ? nil : $a[1])), (additional_rules = ($a[2] == null ? nil : $a[2])), $a; switch_additional_rules = self.$handle_additional_switch_rules(additional_rules); if (!$truthy(switch_additional_rules)) { return false }; if (!$eqeq(switch_variable, self.switch_variable)) { return false }; if (!$truthy(self['$valid_switch_body?'](true_body))) { return false }; if (!$truthy(self['$could_become_switch_branch?'](false_body))) { return false }; body.$meta()['$merge!']((new Map([["switch_child", true], ["switch_test", switch_test], ["switch_variable", self.switch_variable], ["switch_additional_rules", switch_additional_rules]]))); return true; }); $def(self, '$valid_switch_body?', function $IfNode_valid_switch_body$ques$14(body, check_variable) { var self = this, $ret_or_1 = nil; if (check_variable == null) check_variable = false; if ($eqeqeq($$$($$('AST'), 'Node'), ($ret_or_1 = body))) { switch (body.$type().valueOf()) { case "break": case "redo": case "retry": return false case "iter": case "while": return true default: return $send(body.$children(), 'all?', [], function $$15(i){var self = $$15.$$s == null ? this : $$15.$$s; if (i == null) i = nil; return self['$valid_switch_body?'](i, check_variable);}, {$$s: self}) } } else if ($eqeqeq(self.switch_variable, $ret_or_1)) { return check_variable['$!']() } else { return true }; }, -2); $def(self, '$compile_with_switch', function $$compile_with_switch() { var self = this; if ($truthy(self.$sexp().$meta()['$[]']("switch_child"))) { self.switch_variable = self.$sexp().$meta()['$[]']("switch_variable"); self.switch_additional_rules = self.$sexp().$meta()['$[]']("switch_additional_rules"); return self.$compile_switch_case(self.$sexp().$meta()['$[]']("switch_test")); } else { self.$line("switch (", self.$expr(self.switch_first_test), ".valueOf()) {"); $send(self, 'indent', [], function $$16(){var self = $$16.$$s == null ? this : $$16.$$s; if (self.switch_test == null) self.switch_test = nil; return self.$compile_switch_case(self.switch_test)}, {$$s: self}); return self.$line("}"); } }); $def(self, '$returning?', function $IfNode_returning$ques$17(body) { var $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ["return", "js_return", "next"]['$include?'](body.$type())))) { return $ret_or_1 } else { if ($truthy(($ret_or_2 = body.$type()['$==']("begin")))) { return ["return", "js_return", "next"]['$include?'](body.$children().$last().$type()) } else { return $ret_or_2 }; } }); $def(self, '$compile_switch_case', function $$compile_switch_case(test) { var self = this; self.$line("case ", self.$expr(test), ":"); if ($truthy(self.switch_additional_rules)) { $send(self.switch_additional_rules, 'each', [], function $$18(rule){var self = $$18.$$s == null ? this : $$18.$$s; if (rule == null) rule = nil; return self.$line("case ", self.$expr(rule), ":");}, {$$s: self}) }; $send(self, 'indent', [], function $$19(){var self = $$19.$$s == null ? this : $$19.$$s; self.$line(self.$stmt(self.$true_body())); if (($not(self.$true_body()) || ($not(self['$returning?'](self.$true_body()))))) { return self.$line("break;") } else { return nil };}, {$$s: self}); if ($truthy(self.$false_body())) { if ($truthy(self.$false_body().$meta()['$[]']("switch_default"))) { return self.$compile_switch_default() } else if ($truthy(self.$false_body().$meta()['$[]']("switch_child"))) { return self.$push(self.$stmt(self.$false_body())) } else { return nil } } else { return self.$push(self.$stmt(self.$s("nil"))) }; }); return $def(self, '$compile_switch_default', function $$compile_switch_default() { var self = this; self.$line("default:"); return $send(self, 'indent', [], function $$20(){var self = $$20.$$s == null ? this : $$20.$$s; return self.$line(self.$stmt(self.$false_body()))}, {$$s: self}); }); })($nesting[0], $$('Base'), $nesting); (function($base, $super) { var self = $klass($base, $super, 'BaseFlipFlop'); self.$children("start_condition", "end_condition"); return $def(self, '$compile', function $$compile() { var self = this, func_name = nil, flip_flop_state = nil; self.$helper("truthy"); func_name = self.$top_scope().$new_temp(); flip_flop_state = "" + (func_name) + ".$$ff"; self.$push("(" + (func_name) + " = " + (func_name) + " || function(_start_func, _end_func){"); self.$push(" var flip_flop = " + (flip_flop_state) + " || false;"); self.$push(" if (!flip_flop) " + (flip_flop_state) + " = flip_flop = $truthy(_start_func());"); self.$push(" " + (self.$excl()) + "if (flip_flop && $truthy(_end_func())) " + (flip_flop_state) + " = false;"); self.$push(" return flip_flop;"); self.$push("})("); self.$push(" function() { ", self.$stmt(self.$compiler().$returns(self.$start_condition())), " },"); self.$push(" function() { ", self.$stmt(self.$compiler().$returns(self.$end_condition())), " }"); return self.$push(")"); }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'IFlipFlop'); self.$handle("iflipflop"); return $def(self, '$excl', $return_val("")); })($nesting[0], $$('BaseFlipFlop')); return (function($base, $super) { var self = $klass($base, $super, 'EFlipFlop'); self.$handle("eflipflop"); return $def(self, '$excl', $return_val("else ")); })($nesting[0], $$('BaseFlipFlop')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/logic"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $def = Opal.def, $send = Opal.send, $to_a = Opal.to_a, $truthy = Opal.truthy, $rb_gt = Opal.rb_gt, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,thrower,value,size,children,s,first,in_while?,compile_while,iter?,scope,compile_iter,push,[],while_loop,helper,identity,==,empty_splat?,recv,nil?,>,return_val,expr,to_s'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super) { var self = $klass($base, $super, 'NextNode'); self.$handle("next"); $def(self, '$compile', function $$compile() { var self = this; return self.$thrower("next", self.$value()) }); return $def(self, '$value', function $$value() { var self = this; switch (self.$children().$size().valueOf()) { case 0: return self.$s("nil") case 1: return self.$children().$first() default: return $send(self, 's', ["array"].concat($to_a(self.$children()))) } }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'BreakNode'); self.$handle("break"); self.$children("value"); return $def(self, '$compile', function $$compile() { var self = this; return self.$thrower("break", self.$value()) }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'RedoNode'); self.$handle("redo"); $def(self, '$compile', function $$compile() { var self = this; if ($truthy(self['$in_while?']())) { return self.$compile_while() } else if ($truthy(self.$scope()['$iter?']())) { return self.$compile_iter() } else { return self.$push("REDO()") } }); $def(self, '$compile_while', function $$compile_while() { var self = this; self.$push("" + (self.$while_loop()['$[]']("redo_var")) + " = true;"); return self.$thrower("redo"); }); return $def(self, '$compile_iter', function $$compile_iter() { var self = this; self.$helper("slice"); return self.$push("return " + (self.$scope().$identity()) + ".apply(null, $slice(arguments))"); }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'SplatNode'); self.$handle("splat"); self.$children("value"); $def(self, '$empty_splat?', function $SplatNode_empty_splat$ques$1() { var self = this; return self.$value()['$=='](self.$s("array")) }); return $def(self, '$compile', function $$compile() { var self = this; if ($truthy(self['$empty_splat?']())) { return self.$push("[]") } else { self.$helper("to_a"); return self.$push("$to_a(", self.$recv(self.$value()), ")"); } }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'RetryNode'); self.$handle("retry"); return $def(self, '$compile', function $$compile() { var self = this; return self.$thrower("retry") }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'ReturnNode'); self.$handle("return"); self.$children("value"); $def(self, '$return_val', function $$return_val() { var self = this; if ($truthy(self.$value()['$nil?']())) { return self.$s("nil") } else if ($truthy($rb_gt(self.$children().$size(), 1))) { return $send(self, 's', ["array"].concat($to_a(self.$children()))) } else { return self.$value() } }); return $def(self, '$compile', function $$compile() { var self = this; return self.$thrower("return", self.$return_val()) }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'JSReturnNode'); self.$handle("js_return"); self.$children("value"); return $def(self, '$compile', function $$compile() { var self = this; self.$push("return "); return self.$push(self.$expr(self.$value())); }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'JSTempNode'); self.$handle("js_tmp"); self.$children("value"); return $def(self, '$compile', function $$compile() { var self = this; return self.$push(self.$value().$to_s()) }); })($nesting[0], $$('Base')); return (function($base, $super) { var self = $klass($base, $super, 'BlockPassNode'); self.$handle("block_pass"); self.$children("value"); return $def(self, '$compile', function $$compile() { var self = this; return self.$push(self.$expr(self.$s("send", self.$value(), "to_proc", self.$s("arglist")))) }); })($nesting[0], $$('Base')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/definitions"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send = Opal.send, $def = Opal.def, $range = Opal.range, $eqeq = Opal.eqeq, $truthy = Opal.truthy, $rb_gt = Opal.rb_gt, $to_a = Opal.to_a, $slice = Opal.slice, $rb_plus = Opal.rb_plus, $const_set = Opal.const_set, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,each,line,self,scope,expr,type,new_name,helper,inspect,[],to_s,first,old_name,push,==,record_method_call,compiler,last,error,empty?,stmt?,compile_children,simple_children?,compile_inline_children,>,size,wrap,returned_children,in_closure,await_encountered,parent,+,returns,s,process,fragment,freeze,none?,include?,map,each_with_index,reject,to_proc'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super) { var self = $klass($base, $super, 'UndefNode'); self.$handle("undef"); self.$children("value"); return $def(self, '$compile', function $$compile() { var self = this; return $send(self.$children(), 'each', [], function $$1(child){var self = $$1.$$s == null ? this : $$1.$$s; if (child == null) child = nil; return self.$line("Opal.udef(" + (self.$scope().$self()) + ", '$' + ", self.$expr(child), ");");}, {$$s: self}) }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'AliasNode'); self.$handle("alias"); self.$children("new_name", "old_name"); return $def(self, '$compile', function $$compile() { var self = this, new_name_str = nil, old_name_str = nil; switch (self.$new_name().$type().valueOf()) { case "gvar": self.$helper("alias_gvar"); new_name_str = self.$new_name().$children().$first().$to_s()['$[]']($range(1, -1, false)).$inspect(); old_name_str = self.$old_name().$children().$first().$to_s()['$[]']($range(1, -1, false)).$inspect(); return self.$push("$alias_gvar(", new_name_str, ", ", old_name_str, ")"); case "dsym": case "sym": self.$helper("alias"); if ($eqeq(self.$old_name().$type(), "sym")) { self.$compiler().$record_method_call(self.$old_name().$children().$last()) }; return self.$push("$alias(" + (self.$scope().$self()) + ", ", self.$expr(self.$new_name()), ", ", self.$expr(self.$old_name()), ")"); default: return self.$error("Opal doesn't know yet how to alias with " + (self.$new_name().$type())) } }); })($nesting[0], $$('Base')); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'BeginNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.level = $proto.returned_children = nil; self.$handle("begin"); $def(self, '$compile', function $$compile() { var $a, self = this; if ($truthy(self.$children()['$empty?']())) { return self.$push("nil") }; if ($truthy(self['$stmt?']())) { return self.$compile_children(self.$children(), self.level) } else if ($truthy(self['$simple_children?']())) { self.$compile_inline_children(self.$children(), self.level); if ($truthy($rb_gt(self.$children().$size(), 1))) { return self.$wrap("(", ")") } else { return nil }; } else if ($eqeq(self.$children().$size(), 1)) { return self.$compile_inline_children(self.$returned_children(), self.level) } else { $send(self, 'in_closure', [], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; if (self.level == null) self.level = nil; return self.$compile_children(self.$returned_children(), self.level)}, {$$s: self}); if ($truthy(($a = self.$scope().$parent(), ($a === nil || $a == null) ? nil : $a.$await_encountered()))) { return self.$wrap("(await (async function() {", "})())") } else { return self.$wrap("(function() {", "})()") }; }; }); $def(self, '$returned_children', function $$returned_children() { var $a, $b, self = this, $ret_or_1 = nil, rest = nil, last_child = nil; return (self.returned_children = ($truthy(($ret_or_1 = self.returned_children)) ? ($ret_or_1) : (($a = [].concat($to_a(self.$children())), $b = $a.length - 1, $b = ($b < 0) ? 0 : $b, (rest = $slice($a, 0, $b)), (last_child = ($a[$b] == null ? nil : $a[$b])), $a, ($truthy(last_child) ? ($rb_plus(rest, [self.$compiler().$returns(last_child)])) : ([self.$s("nil")])))))) }); $def(self, '$compile_children', function $$compile_children(children, level) { var self = this; return $send(children, 'each', [], function $$3(child){var self = $$3.$$s == null ? this : $$3.$$s; if (child == null) child = nil; return self.$line(self.$process(child, level), self.$fragment(";", (new Map([["loc", false]]))));}, {$$s: self}) }); $const_set($nesting[0], 'COMPLEX_CHILDREN', ["while", "while_post", "until", "until_post", "js_return"].$freeze()); $def(self, '$simple_children?', function $BeginNode_simple_children$ques$4() { var self = this; return $send(self.$children(), 'none?', [], function $$5(child){ if (child == null) child = nil; return $$('COMPLEX_CHILDREN')['$include?'](child.$type());}) }); return $def(self, '$compile_inline_children', function $$compile_inline_children(children, level) { var self = this, processed_children = nil; processed_children = $send(children, 'map', [], function $$6(child){var self = $$6.$$s == null ? this : $$6.$$s; if (child == null) child = nil; return self.$process(child, level);}, {$$s: self}); return $send($send(processed_children, 'reject', [], "empty?".$to_proc()), 'each_with_index', [], function $$7(child, idx){var self = $$7.$$s == null ? this : $$7.$$s; if (child == null) child = nil; if (idx == null) idx = nil; if (!$eqeq(idx, 0)) { self.$push(self.$fragment(", ", (new Map([["loc", false]])))) }; return self.$push(child);}, {$$s: self}); }); })($nesting[0], $$('ScopeNode'), $nesting); return (function($base, $super) { var self = $klass($base, $super, 'KwBeginNode'); return self.$handle("kwbegin") })($nesting[0], $$('BeginNode')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/yield"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $send = Opal.send, $to_a = Opal.to_a, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,find_yielding_scope,uses_block!,block_name,block_name=,yields_single_arg?,children,push,expr,first,wrap,s,uses_splat?,scope,def?,parent,!,==,size,any?,type,handle,compile_call'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super) { var self = $klass($base, $super, 'BaseYieldNode'); $def(self, '$compile_call', function $$compile_call() { var self = this, yielding_scope = nil, $ret_or_1 = nil, block_name = nil; yielding_scope = self.$find_yielding_scope(); yielding_scope['$uses_block!'](); if ($truthy(($ret_or_1 = yielding_scope.$block_name()))) { $ret_or_1 } else { yielding_scope['$block_name=']("$yield") }; block_name = yielding_scope.$block_name(); if ($truthy(self['$yields_single_arg?'](self.$children()))) { self.$push(self.$expr(self.$children().$first())); return self.$wrap("Opal.yield1(" + (block_name) + ", ", ")"); } else { self.$push(self.$expr($send(self, 's', ["arglist"].concat($to_a(self.$children()))))); if ($truthy(self['$uses_splat?'](self.$children()))) { return self.$wrap("Opal.yieldX(" + (block_name) + ", ", ")") } else { return self.$wrap("Opal.yieldX(" + (block_name) + ", [", "])") }; }; }); $def(self, '$find_yielding_scope', function $$find_yielding_scope() { var self = this, working = nil; working = self.$scope(); while ($truthy(working)) { if (($truthy(working.$block_name()) || ($truthy(working['$def?']())))) { break }; working = working.$parent(); }; return working; }); $def(self, '$yields_single_arg?', function $BaseYieldNode_yields_single_arg$ques$1(children) { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$uses_splat?'](children)['$!']()))) { return children.$size()['$=='](1) } else { return $ret_or_1 } }); return $def(self, '$uses_splat?', function $BaseYieldNode_uses_splat$ques$2(children) { return $send(children, 'any?', [], function $$3(child){ if (child == null) child = nil; return child.$type()['$==']("splat");}) }); })($nesting[0], $$('Base')); (function($base, $super) { var self = $klass($base, $super, 'YieldNode'); self.$handle("yield"); return $def(self, '$compile', function $$compile() { var self = this; return self.$compile_call() }); })($nesting[0], $$('BaseYieldNode')); return (function($base, $super) { var self = $klass($base, $super, 'ReturnableYieldNode'); self.$handle("returnable_yield"); return $def(self, '$compile', function $$compile() { var self = this; self.$compile_call(); return self.$wrap("return ", ";"); }); })($nesting[0], $$('BaseYieldNode')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/rescue"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $send = Opal.send, $def = Opal.def, $range = Opal.range, $neqeq = Opal.neqeq, $eqeq = Opal.eqeq, $to_a = Opal.to_a, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,handle,children,wrap_in_closure?,push_closure,push,in_ensure,line,stmt,body_sexp,indent,has_rescue_else?,unshift,rescue_else_code,process,compiler,ensr_sexp,pop_closure,await_encountered,scope,wrap,returns,begn,ensr,s,recv?,expr?,rescue_else_sexp,stmt?,[],meta,rescue_else_sexp=,detect,!=,type,handle_rescue_else_manually?,|,has_retry?,in_rescue,body_code,each_with_index,==,body,nil?,!,in_ensure?,expr,klasses,lvar,updated,in_resbody,rescue_body,klasses_sexp'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super) { var self = $klass($base, $super, 'EnsureNode'); var $proto = self.$$prototype; $proto.sexp = nil; self.$handle("ensure"); self.$children("begn", "ensr"); $def(self, '$compile', function $$compile() { var self = this; if ($truthy(self['$wrap_in_closure?']())) { self.$push_closure() }; self.$push("try {"); $send(self, 'in_ensure', [], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s; return self.$line(self.$stmt(self.$body_sexp()))}, {$$s: self}); self.$line("} finally {"); $send(self, 'indent', [], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; if (self.level == null) self.level = nil; if ($truthy(self['$has_rescue_else?']())) { self.$unshift("var $no_errors = true; "); self.$line("var $rescue_else_result;"); self.$line("if ($no_errors) { "); $send(self, 'indent', [], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s; self.$line("$rescue_else_result = (function() {"); $send(self, 'indent', [], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; return self.$line(self.$stmt(self.$rescue_else_code()))}, {$$s: self}); return self.$line("})();");}, {$$s: self}); self.$line("}"); self.$line(self.$compiler().$process(self.$ensr_sexp(), self.level)); return self.$line("if ($no_errors) { return $rescue_else_result; }"); } else { return self.$line(self.$compiler().$process(self.$ensr_sexp(), self.level)) }}, {$$s: self}); self.$line("}"); if ($truthy(self['$wrap_in_closure?']())) { self.$pop_closure() }; if ($truthy(self['$wrap_in_closure?']())) { if ($truthy(self.$scope().$await_encountered())) { return self.$wrap("(await (async function() { ", "; })())") } else { return self.$wrap("(function() { ", "; })()") } } else { return nil }; }); $def(self, '$body_sexp', function $$body_sexp() { var self = this; if ($truthy(self['$wrap_in_closure?']())) { return self.$compiler().$returns(self.$begn()) } else { return self.$begn() } }); $def(self, '$ensr_sexp', function $$ensr_sexp() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$ensr()))) { return $ret_or_1 } else { return self.$s("nil") } }); $def(self, '$wrap_in_closure?', function $EnsureNode_wrap_in_closure$ques$5() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = self['$recv?']())) ? ($ret_or_2) : (self['$expr?']()))))) { return $ret_or_1 } else { return self['$has_rescue_else?']() } }); $def(self, '$rescue_else_code', function $$rescue_else_code() { var self = this, rescue_else_code = nil; rescue_else_code = self.$scope().$rescue_else_sexp(); if (!$truthy(self['$stmt?']())) { rescue_else_code = self.$compiler().$returns(rescue_else_code) }; return rescue_else_code; }); return $def(self, '$has_rescue_else?', function $EnsureNode_has_rescue_else$ques$6() { var self = this; return self.sexp.$meta()['$[]']("has_rescue_else") }); })($nesting[0], $$('Base')); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'RescueNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.sexp = nil; self.$handle("rescue"); self.$children("body"); $def(self, '$compile', function $$compile() { var self = this, _has_rescue_handlers = nil, closure_type = nil; self.$scope()['$rescue_else_sexp=']($send(self.$children()['$[]']($range(1, -1, false)), 'detect', [], function $$7(sexp){var $ret_or_1 = nil; if (sexp == null) sexp = nil; if ($truthy(($ret_or_1 = sexp))) { return sexp.$type()['$!=']("resbody") } else { return $ret_or_1 };})); _has_rescue_handlers = false; if ($truthy(self['$handle_rescue_else_manually?']())) { self.$line("var $no_errors = true;") }; closure_type = $$$($$('Closure'), 'NONE'); if (($truthy(self['$expr?']()) || ($truthy(self['$recv?']())))) { closure_type = closure_type['$|']($$$($$('Closure'), 'JS_FUNCTION')) }; if ($truthy(self['$has_retry?']())) { closure_type = closure_type['$|']($$$($$('Closure'), 'JS_LOOP')['$|']($$$($$('Closure'), 'JS_LOOP_INSIDE'))['$|']($$$($$('Closure'), 'RESCUE_RETRIER'))) }; if ($neqeq(closure_type, $$$($$('Closure'), 'NONE'))) { self.$push_closure(closure_type) }; $send(self, 'in_rescue', [self], function $$8(){var self = $$8.$$s == null ? this : $$8.$$s; self.$push("try {"); $send(self, 'indent', [], function $$9(){var self = $$9.$$s == null ? this : $$9.$$s; return self.$line(self.$stmt(self.$body_code()))}, {$$s: self}); self.$line("} catch ($err) {"); $send(self, 'indent', [], function $$10(){var self = $$10.$$s == null ? this : $$10.$$s; if ($truthy(self['$has_rescue_else?']())) { self.$line("$no_errors = false;") }; $send(self.$children()['$[]']($range(1, -1, false)), 'each_with_index', [], function $$11(child, idx){var self = $$11.$$s == null ? this : $$11.$$s; if (self.level == null) self.level = nil; if (child == null) child = nil; if (idx == null) idx = nil; if (!($truthy(child) && ($eqeq(child.$type(), "resbody")))) { return nil }; _has_rescue_handlers = true; if (!$eqeq(idx, 0)) { self.$push(" else ") }; return self.$line(self.$process(child, self.level));}, {$$s: self}); return self.$push(" else { throw $err; }");}, {$$s: self}); self.$line("}"); if ($truthy(self['$handle_rescue_else_manually?']())) { self.$push("finally {"); $send(self, 'indent', [], function $$12(){var self = $$12.$$s == null ? this : $$12.$$s; self.$line("if ($no_errors) { "); $send(self, 'indent', [], function $$13(){var self = $$13.$$s == null ? this : $$13.$$s; return self.$line(self.$stmt(self.$rescue_else_code()))}, {$$s: self}); return self.$line("}");}, {$$s: self}); return self.$push("}"); } else { return nil };}, {$$s: self}); if ($neqeq(closure_type, $$$($$('Closure'), 'NONE'))) { self.$pop_closure() }; if ($truthy(self['$has_retry?']())) { self.$wrap("do { ", " break; } while(1)") }; if (($truthy(self['$expr?']()) || ($truthy(self['$recv?']())))) { if ($truthy(self.$scope().$await_encountered())) { return self.$wrap("(await (async function() { ", "})())") } else { return self.$wrap("(function() { ", "})()") } } else { return nil }; }); $def(self, '$body_code', function $$body_code() { var self = this, body_code = nil; body_code = (($truthy(self.$body()['$nil?']()) || ($eqeq(self.$body().$type(), "resbody"))) ? (self.$s("nil")) : (self.$body())); if (!$truthy(self['$stmt?']())) { body_code = self.$compiler().$returns(body_code) }; return body_code; }); $def(self, '$rescue_else_code', function $$rescue_else_code() { var self = this, rescue_else_code = nil; rescue_else_code = self.$scope().$rescue_else_sexp(); if (!$truthy(self['$stmt?']())) { rescue_else_code = self.$compiler().$returns(rescue_else_code) }; return rescue_else_code; }); $def(self, '$handle_rescue_else_manually?', function $RescueNode_handle_rescue_else_manually$ques$14() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$in_ensure?']()['$!']()))) { return self['$has_rescue_else?']() } else { return $ret_or_1 } }); return $def(self, '$has_retry?', function $RescueNode_has_retry$ques$15() { var self = this; return self.sexp.$meta()['$[]']("has_retry") }); })($nesting[0], $$('Base'), $nesting); return (function($base, $super) { var self = $klass($base, $super, 'ResBodyNode'); self.$handle("resbody"); self.$children("klasses_sexp", "lvar", "body"); $def(self, '$compile', function $$compile() { var self = this; self.$push("if (Opal.rescue($err, ", self.$expr(self.$klasses()), ")) {"); $send(self, 'indent', [], function $$16(){var self = $$16.$$s == null ? this : $$16.$$s; if ($truthy(self.$lvar())) { self.$push(self.$expr(self.$lvar().$updated(nil, [].concat($to_a(self.$lvar().$children())).concat([self.$s("js_tmp", "$err")])))) }; self.$line("try {"); $send(self, 'indent', [], function $$17(){var self = $$17.$$s == null ? this : $$17.$$s; return $send(self, 'in_resbody', [], function $$18(){var self = $$18.$$s == null ? this : $$18.$$s; return self.$line(self.$stmt(self.$rescue_body()))}, {$$s: self})}, {$$s: self}); return self.$line("} finally { Opal.pop_exception($err); }");}, {$$s: self}); return self.$line("}"); }); $def(self, '$klasses', function $$klasses() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.$klasses_sexp()))) { return $ret_or_1 } else { return self.$s("array", self.$s("const", nil, "StandardError")) } }); return $def(self, '$rescue_body', function $$rescue_body() { var self = this, body_code = nil, $ret_or_1 = nil; body_code = ($truthy(($ret_or_1 = self.$body())) ? ($ret_or_1) : (self.$s("nil"))); if (!$truthy(self['$stmt?']())) { body_code = self.$compiler().$returns(body_code) }; return body_code; }); })($nesting[0], $$('Base')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/super"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $slice = Opal.slice, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $truthy = Opal.truthy, $send = Opal.send, $def = Opal.def, $return_val = Opal.return_val, $to_ary = Opal.to_ary, $eqeq = Opal.eqeq, $not = Opal.not, $eqeqeq = Opal.eqeqeq, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include?,type,s,helper,push,compile_receiver,compile_method_body,compile_method_name,compile_arguments,compile_block_pass,private,def?,scope,find_parent_def,to_s,mid,def_scope,identify!,self,method_id,def_scope_identity,defined_check_param,allow_stubs,super_chain,join,map,implicit_arguments_param,super_method_invocation,iter?,super_block_invocation,raise,handle,wrap,uses_block!,compile_using_send,==,iter,block_name,implicit_arglist,!,<<,each,children,original_args,[],meta,empty?,==='); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super) { var self = $klass($base, $super, 'BaseSuperNode'); var $proto = self.$$prototype; $proto.sexp = $proto.def_scope = nil; $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $b, $c, $yield = $$initialize.$$p || nil, self = this, args = nil, rest = nil, last_child = nil; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', $to_a($fwd_rest), $yield); args = [].concat($to_a(self.sexp)); $b = [].concat($to_a(args)), $c = $b.length - 1, $c = ($c < 0) ? 0 : $c, (rest = $slice($b, 0, $c)), (last_child = ($b[$c] == null ? nil : $b[$c])), $b; if (($truthy(last_child) && ($truthy(["iter", "block_pass"]['$include?'](last_child.$type()))))) { self.iter = last_child; args = rest; } else { self.iter = self.$s("js_tmp", "null") }; self.arglist = $send(self, 's', ["arglist"].concat($to_a(args))); return (self.recvr = self.$s("self")); }, -1); $def(self, '$compile_using_send', function $$compile_using_send() { var self = this; self.$helper("send2"); self.$push("$send2("); self.$compile_receiver(); self.$compile_method_body(); self.$compile_method_name(); self.$compile_arguments(); self.$compile_block_pass(); return self.$push(")"); }); self.$private(); $def(self, '$def_scope', function $$def_scope() { var self = this, $ret_or_1 = nil; return (self.def_scope = ($truthy(($ret_or_1 = self.def_scope)) ? ($ret_or_1) : ($truthy(self.$scope()['$def?']()) ? (self.$scope()) : (self.$scope().$find_parent_def())))) }); $def(self, '$defined_check_param', $return_val("false")); $def(self, '$implicit_arguments_param', $return_val("false")); $def(self, '$method_id', function $$method_id() { var self = this; return self.$def_scope().$mid().$to_s() }); $def(self, '$def_scope_identity', function $$def_scope_identity() { var self = this; return self.$def_scope()['$identify!'](self.$def_scope().$mid()) }); $def(self, '$allow_stubs', $return_val("true")); $def(self, '$super_method_invocation', function $$super_method_invocation() { var self = this; self.$helper("find_super"); return "$find_super(" + (self.$scope().$self()) + ", '" + (self.$method_id()) + "', " + (self.$def_scope_identity()) + ", " + (self.$defined_check_param()) + ", " + (self.$allow_stubs()) + ")"; }); $def(self, '$super_block_invocation', function $$super_block_invocation() { var $a, $b, self = this, chain = nil, cur_defn = nil, mid = nil, trys = nil; self.$helper("find_block_super"); $b = self.$scope().$super_chain(), $a = $to_ary($b), (chain = ($a[0] == null ? nil : $a[0])), (cur_defn = ($a[1] == null ? nil : $a[1])), (mid = ($a[2] == null ? nil : $a[2])), $b; trys = $send(chain, 'map', [], function $$1(c){ if (c == null) c = nil; return "" + (c) + ".$$def";}).$join(" || "); return "$find_block_super(" + (self.$scope().$self()) + ", " + (mid) + ", (" + (trys) + " || " + (cur_defn) + "), " + (self.$defined_check_param()) + ", " + (self.$implicit_arguments_param()) + ")"; }); $def(self, '$compile_method_body', function $$compile_method_body() { var self = this; self.$push(", "); if ($truthy(self.$scope()['$def?']())) { return self.$push(self.$super_method_invocation()) } else if ($truthy(self.$scope()['$iter?']())) { return self.$push(self.$super_block_invocation()) } else { return self.$raise("super must be called from method body or block") }; }); return $def(self, '$compile_method_name', function $$compile_method_name() { var $a, $b, self = this, _chain = nil, _cur_defn = nil, mid = nil; if ($truthy(self.$scope()['$def?']())) { return self.$push(", '" + (self.$method_id()) + "'") } else if ($truthy(self.$scope()['$iter?']())) { $b = self.$scope().$super_chain(), $a = $to_ary($b), (_chain = ($a[0] == null ? nil : $a[0])), (_cur_defn = ($a[1] == null ? nil : $a[1])), (mid = ($a[2] == null ? nil : $a[2])), $b; return self.$push(", " + (mid)); } else { return nil } }); })($nesting[0], $$('CallNode')); (function($base, $super) { var self = $klass($base, $super, 'DefinedSuperNode'); self.$handle("defined_super"); $def(self, '$allow_stubs', $return_val("false")); $def(self, '$defined_check_param', $return_val("true")); return $def(self, '$compile', function $$compile() { var self = this; self.$compile_receiver(); self.$compile_method_body(); return self.$wrap("((", ") != null ? \"super\" : nil)"); }); })($nesting[0], $$('BaseSuperNode')); (function($base, $super) { var self = $klass($base, $super, 'SuperNode'); self.$handle("super"); $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', $to_a($fwd_rest), $yield); if ($truthy(self.$scope()['$def?']())) { return self.$scope()['$uses_block!']() } else { return nil }; }, -1); return $def(self, '$compile', function $$compile() { var self = this; return self.$compile_using_send() }); })($nesting[0], $$('BaseSuperNode')); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'ZsuperNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$handle("zsuper"); $def(self, '$implicit_arguments_param', $return_val("true")); $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $yield = $$initialize.$$p || nil, self = this, $ret_or_1 = nil; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', $to_a($fwd_rest), $yield); if ($eqeq(self.$iter().$type(), "iter")) { return nil } else { self.$scope()['$uses_block!'](); return (self.iter = self.$s("js_tmp", ($truthy(($ret_or_1 = self.$scope().$block_name())) ? ($ret_or_1) : ("$yield")))); }; }, -1); $def(self, '$compile', function $$compile() { var self = this, implicit_args = nil, block_pass = nil; if ($truthy(self.$def_scope())) { implicit_args = self.$implicit_arglist(); if (($truthy(self.$block_name()) && ($not(self.$iter())))) { block_pass = self.$s("block_pass", self.$s("lvar", self.$block_name())); implicit_args['$<<'](block_pass); }; self.arglist = $send(self, 's', ["arglist"].concat($to_a(implicit_args))); }; return self.$compile_using_send(); }); $def(self, '$implicit_arglist', function $$implicit_arglist() { var self = this, args = nil, kwargs = nil; args = []; kwargs = []; $send(self.$def_scope().$original_args().$children(), 'each', [], function $$2(sexp){var self = $$2.$$s == null ? this : $$2.$$s, lvar_name = nil, arg_node = nil, key_name = nil; if (sexp == null) sexp = nil; lvar_name = sexp.$children()['$[]'](0); switch (sexp.$type().valueOf()) { case "arg": case "optarg": arg_node = self.$s("lvar", lvar_name); return args['$<<'](arg_node); case "restarg": arg_node = ($truthy(lvar_name) ? (self.$s("lvar", lvar_name)) : (self.$s("js_tmp", "$rest_arg"))); return args['$<<'](self.$s("splat", arg_node)); case "kwarg": case "kwoptarg": key_name = sexp.$meta()['$[]']("arg_name"); return kwargs['$<<'](self.$s("pair", self.$s("sym", key_name), self.$s("lvar", lvar_name))); case "kwrestarg": arg_node = ($truthy(lvar_name) ? (self.$s("lvar", lvar_name)) : (self.$s("js_tmp", "$kw_rest_arg"))); return kwargs['$<<'](self.$s("kwsplat", arg_node)); default: return nil };}, {$$s: self}); if (!$truthy(kwargs['$empty?']())) { args['$<<']($send(self, 's', ["hash"].concat($to_a(kwargs)))) }; return args; }); return $def(self, '$block_name', function $$block_name() { var self = this, $ret_or_1 = nil; if ($eqeqeq($$$($$$($$('Opal'), 'Nodes'), 'IterNode'), ($ret_or_1 = self.$def_scope()))) { return self.$def_scope().$block_name() } else if ($eqeqeq($$$($$$($$('Opal'), 'Nodes'), 'DefNode'), $ret_or_1)) { return self.$def_scope().$block_name() } else { return self.$raise("Don't know what to do with super in the scope " + (self.$def_scope())) } }); })($nesting[0], $$('SuperNode'), $nesting); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["json"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send = Opal.send, $Object = Opal.Object, $eqeqeq = Opal.eqeqeq, $defs = Opal.defs, $truthy = Opal.truthy, $def = Opal.def, $return_val = Opal.return_val, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('raise,new,push,[]=,[],create_id,json_create,const_get,attr_accessor,create_id=,===,parse,generate,from_object,merge,to_json,responds_to?,to_io,write,to_s,to_a,strftime'); (function($base, $parent_nesting) { var self = $module($base, 'JSON'); var $a, $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $klass($nesting[0], $$('StandardError'), 'JSONError'); $klass($nesting[0], $$('JSONError'), 'ParserError'); var $hasOwn = Opal.hasOwnProperty; function $parse(source) { try { return JSON.parse(source); } catch (e) { self.$raise($$$($$('JSON'), 'ParserError'), e.message); } }; function to_opal(value, options) { var klass, arr, hash, i, ii, k; switch (typeof value) { case 'string': return value; case 'number': return value; case 'boolean': return !!value; case 'undefined': return nil; case 'object': if (!value) return nil; if (value.$$is_array) { arr = (Opal.hash_get(options, 'array_class')).$new(); for (i = 0, ii = value.length; i < ii; i++) { (arr).$push(to_opal(value[i], options)); } return arr; } else { hash = (Opal.hash_get(options, 'object_class')).$new(); for (k in value) { if ($hasOwn.call(value, k)) { ($a = [k, to_opal(value[k], options)], $send((hash), '[]=', $a), $a[$a.length - 1]); } } if (!Opal.hash_get(options, 'parse') && (klass = (hash)['$[]']($$('JSON').$create_id())) != nil) { return $Object.$const_get(klass).$json_create(hash); } else { return hash; } } } }; ; (function(self, $parent_nesting) { return self.$attr_accessor("create_id") })(Opal.get_singleton_class(self), $nesting); self['$create_id=']("json_class"); $defs(self, '$[]', function $JSON_$$$1(value, options) { var self = this; if (options == null) options = (new Map()); if ($eqeqeq($$('String'), value)) { return self.$parse(value, options) } else { return self.$generate(value, options) }; }, -2); $defs(self, '$parse', function $$parse(source, options) { var self = this; if (options == null) options = (new Map()); return self.$from_object($parse(source), options.$merge((new Map([["parse", true]])))); }, -2); $defs(self, '$parse!', function $JSON_parse$excl$2(source, options) { var self = this; if (options == null) options = (new Map()); return self.$parse(source, options); }, -2); $defs(self, '$load', function $$load(source, options) { var self = this; if (options == null) options = (new Map()); return self.$from_object($parse(source), options); }, -2); $defs(self, '$from_object', function $$from_object(js_object, options) { var $ret_or_1 = nil; if (options == null) options = (new Map()); if ($truthy(($ret_or_1 = options['$[]']("object_class")))) { $ret_or_1 } else { options['$[]=']("object_class", $$('Hash')) }; if ($truthy(($ret_or_1 = options['$[]']("array_class")))) { $ret_or_1 } else { options['$[]=']("array_class", $$('Array')) }; return to_opal(js_object, options);; }, -2); $defs(self, '$generate', function $$generate(obj, options) { if (options == null) options = (new Map()); return obj.$to_json(options); }, -2); return $defs(self, '$dump', function $$dump(obj, io, limit) { var self = this, string = nil; if (io == null) io = nil; if (limit == null) limit = nil; string = self.$generate(obj); if ($truthy(io)) { if ($truthy(io['$responds_to?']("to_io"))) { io = io.$to_io() }; io.$write(string); return io; } else { return string }; }, -2); })($nesting[0], $nesting); (function($base, $super) { var self = $klass($base, $super, 'Object'); return $def(self, '$to_json', function $$to_json() { var self = this; return self.$to_s().$to_json() }) })($nesting[0], null); (function($base) { var self = $module($base, 'Enumerable'); return $def(self, '$to_json', function $$to_json() { var self = this; return self.$to_a().$to_json() }) })($nesting[0]); (function($base, $super) { var self = $klass($base, $super, 'Array'); return $def(self, '$to_json', function $$to_json() { var self = this; var result = []; for (var i = 0, length = self.length; i < length; i++) { result.push((self[i]).$to_json()); } return '[' + result.join(',') + ']'; }) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'Boolean'); return $def(self, '$to_json', function $$to_json() { var self = this; return (self == true) ? 'true' : 'false'; }) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'Hash'); return $def(self, '$to_json', function $$to_json() { var self = this; var result = []; Opal.hash_each(self, false, function(key, value) { result.push((key).$to_s().$to_json() + ':' + (value).$to_json()); return [false, false]; }); return '{' + result.join(',') + '}'; }) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'NilClass'); return $def(self, '$to_json', $return_val("null")) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'Numeric'); return $def(self, '$to_json', function $$to_json() { var self = this; return self.toString(); }) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'String'); return $def(self, '$to_json', function $$to_json() { var self = this; return JSON.stringify(self); }) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'Time'); return $def(self, '$to_json', function $$to_json() { var self = this; return self.$strftime("%FT%T%z").$to_json() }) })($nesting[0], null); return (function($base, $super) { var self = $klass($base, $super, 'Date'); $def(self, '$to_json', function $$to_json() { var self = this; return self.$to_s().$to_json() }); return $def(self, '$as_json', function $$as_json() { var self = this; return self.$to_s() }); })($nesting[0], null); }; Opal.modules["opal/version"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $const_set = Opal.const_set, $nesting = [], nil = Opal.nil; return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return $const_set($nesting[0], 'VERSION', "1.8.2") })($nesting[0], $nesting) }; Opal.modules["opal/nodes/top"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $send = Opal.send, $def = Opal.def, $not = Opal.not, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,handle,children,top_scope=,compiler,[],meta,sexp,dynamic_cache_result=,push,version_comment,eof_content,helper,==,body,s,eval?,esm?,requirable?,unshift,definition,in_scope,use_strict?,line,in_closure,|,stmt,stmts,is_a?,add_temp,add_used_helpers,to_vars,scope,compile_method_stubs,compile_irb_vars,compile_end_construct,opening,closing,enable_file_source_embed?,add_file_source_embed,inspect,module_name,file,!,no_export?,await_encountered,load?,returns,irb?,reverse_each,to_a,helpers,prepend_scope_temp,method_missing?,method_calls,join,map,to_proc,empty?,source,to_json'); self.$require("pathname"); self.$require("json"); self.$require("opal/version"); self.$require("opal/nodes/scope"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'TopNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$handle("top"); self.$children("body"); $def(self, '$compile', function $$compile() { var self = this; self.$compiler()['$top_scope='](self); if ($truthy(self.$sexp().$meta()['$[]']("dynamic_cache_result"))) { self.$compiler()['$dynamic_cache_result='](true) }; self.$push(self.$version_comment()); if ($truthy(self.$compiler().$eof_content())) { self.$helper("return_val") }; if ($eqeq(self.$body(), self.$s("nil"))) { if ((($truthy(self.$compiler()['$requirable?']()) || ($truthy(self.$compiler()['$esm?']()))) || ($truthy(self.$compiler()['$eval?']())))) { self.$unshift("Opal.return_val(Opal.nil); "); self.$definition(); } else { self.$unshift("Opal.nil; ") } } else { $send(self, 'in_scope', [], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s, body_code = nil; if (self.define_nesting == null) self.define_nesting = nil; if (self.define_self == null) self.define_self = nil; if (self.define_relative_access == null) self.define_relative_access = nil; if (self.define_absolute_const == null) self.define_absolute_const = nil; if ($truthy(self.$compiler()['$use_strict?']())) { self.$line("\"use strict\";") }; body_code = $send(self, 'in_closure', [$$$($$('Closure'), 'JS_FUNCTION')['$|']($$$($$('Closure'), 'TOP'))], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; return self.$stmt(self.$stmts())}, {$$s: self}); if (!$truthy(body_code['$is_a?']($$('Array')))) { body_code = [body_code] }; if ($truthy(self.$compiler()['$eval?']())) { if ($truthy(self.define_nesting)) { self.$add_temp("$nesting = self.$$is_a_module ? [self] : [self.$$class]") } } else { if ($truthy(self.define_self)) { self.$add_temp("self = Opal.top") }; if ($truthy(self.define_nesting)) { self.$add_temp("$nesting = []") }; }; if ($truthy(self.define_relative_access)) { self.$add_temp("$$ = Opal.$r($nesting)") }; self.$add_temp("nil = Opal.nil"); if ($truthy(self.define_absolute_const)) { self.$add_temp("$$$ = Opal.$$$") }; self.$add_used_helpers(); self.$line(self.$scope().$to_vars()); self.$compile_method_stubs(); self.$compile_irb_vars(); self.$compile_end_construct(); return self.$line(body_code);}, {$$s: self}); self.$opening(); self.$definition(); self.$closing(); }; if ($truthy(self.$compiler()['$enable_file_source_embed?']())) { return self.$add_file_source_embed() } else { return nil }; }); $def(self, '$module_name', function $$module_name() { var self = this; return $$$($$('Opal'), 'Compiler').$module_name(self.$compiler().$file()).$inspect() }); $def(self, '$definition', function $$definition() { var self = this; if ($truthy(self.$compiler()['$requirable?']())) { return self.$unshift("Opal.modules[" + (self.$module_name()) + "] = ") } else if (($truthy(self.$compiler()['$esm?']()) && ($not(self.$compiler()['$no_export?']())))) { return self.$unshift("export default ") } else { return nil } }); $def(self, '$opening', function $$opening() { var self = this, async_prefix = nil; if ($truthy(self.$await_encountered())) { async_prefix = "async " }; if ($truthy(self.$compiler()['$requirable?']())) { return self.$unshift("" + (async_prefix) + "function(Opal) {") } else if ($truthy(self.$compiler()['$eval?']())) { return self.$unshift("(" + (async_prefix) + "function(Opal, self) {") } else { return self.$unshift("Opal.queue(" + (async_prefix) + "function(Opal) {") }; }); $def(self, '$closing', function $$closing() { var self = this; if ($truthy(self.$compiler()['$requirable?']())) { self.$line("};\n"); if ($truthy(self.$compiler()['$load?']())) { return self.$line("Opal.load_normalized(" + (self.$module_name()) + ");") } else { return nil }; } else if ($truthy(self.$compiler()['$eval?']())) { return self.$line("})(Opal, self);") } else { return self.$line("});\n") } }); $def(self, '$stmts', function $$stmts() { var self = this; return self.$compiler().$returns(self.$body()) }); $def(self, '$absolute_const', function $$absolute_const() { var self = this; self.define_absolute_const = true; return "$$$"; }); $def(self, '$compile_irb_vars', function $$compile_irb_vars() { var self = this; if ($truthy(self.$compiler()['$irb?']())) { return self.$line("if (!Opal.irb_vars) { Opal.irb_vars = {}; }") } else { return nil } }); $def(self, '$add_used_helpers', function $$add_used_helpers() { var self = this; return $send(self.$compiler().$helpers().$to_a(), 'reverse_each', [], function $$3(h){var self = $$3.$$s == null ? this : $$3.$$s; if (h == null) h = nil; return self.$prepend_scope_temp("$" + (h) + " = Opal." + (h));}, {$$s: self}) }); $def(self, '$compile_method_stubs', function $$compile_method_stubs() { var self = this, calls = nil, stubs = nil; if ($truthy(self.$compiler()['$method_missing?']())) { calls = self.$compiler().$method_calls(); stubs = $send(calls.$to_a(), 'map', [], "to_s".$to_proc()).$join(","); if ($truthy(stubs['$empty?']())) { return nil } else { return self.$line("Opal.add_stubs('" + (stubs) + "');") }; } else { return nil } }); $def(self, '$compile_end_construct', function $$compile_end_construct() { var self = this, content = nil; if ($truthy((content = self.$compiler().$eof_content()))) { self.$line("var $__END__ = Opal.Object.$new();"); return self.$line("$__END__.$read = $return_val(" + (content.$inspect()) + ");"); } else { return nil } }); $def(self, '$version_comment', function $$version_comment() { return "/* Generated by Opal " + ($$$($$('Opal'), 'VERSION')) + " */" }); return $def(self, '$add_file_source_embed', function $$add_file_source_embed() { var self = this, filename = nil, source = nil; filename = self.$compiler().$file(); source = self.$compiler().$source(); return self.$unshift("Opal.file_sources[" + (filename.$to_json()) + "] = " + (source.$to_json()) + ";\n"); }); })($nesting[0], $$('ScopeNode'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/while"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $send = Opal.send, $def = Opal.def, $return_val = Opal.return_val, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,handle,children,js_truthy,test,uses_redo?,new_temp,scope,in_while,compiler,wrap_in_closure?,[]=,while_loop,in_closure,|,line,indent,stmt,body,compile_with_redo,compile_without_redo,queue_temp,await_encountered,wrap,private,compile_while,unshift,while_open,while_close,[],meta,expr?,recv?'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'WhileNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.redo_var = $proto.sexp = nil; self.$handle("while"); self.$children("test", "body"); $def(self, '$compile', function $$compile() { var self = this, test_code = nil; test_code = self.$js_truthy(self.$test()); if ($truthy(self['$uses_redo?']())) { self.redo_var = self.$scope().$new_temp() }; $send(self.$compiler(), 'in_while', [], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s; if (self.redo_var == null) self.redo_var = nil; if ($truthy(self['$wrap_in_closure?']())) { self.$while_loop()['$[]=']("closure", true) }; self.$while_loop()['$[]=']("redo_var", self.redo_var); return $send(self, 'in_closure', [$$$($$('Closure'), 'LOOP')['$|']($$$($$('Closure'), 'JS_LOOP'))['$|'](($truthy(self['$wrap_in_closure?']()) ? ($$$($$('Closure'), 'JS_FUNCTION')) : (0)))], function $$2(){var self = $$2.$$s == null ? this : $$2.$$s; $send(self, 'in_closure', [$$$($$('Closure'), 'LOOP_INSIDE')['$|']($$$($$('Closure'), 'JS_LOOP_INSIDE'))], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s; return self.$line($send(self, 'indent', [], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; return self.$stmt(self.$body())}, {$$s: self}))}, {$$s: self}); if ($truthy(self['$uses_redo?']())) { return self.$compile_with_redo(test_code) } else { return self.$compile_without_redo(test_code) };}, {$$s: self});}, {$$s: self}); if ($truthy(self['$uses_redo?']())) { self.$scope().$queue_temp(self.redo_var) }; if ($truthy(self['$wrap_in_closure?']())) { if ($truthy(self.$scope().$await_encountered())) { return self.$wrap("(await (async function() {", "; return nil; })())") } else { return self.$wrap("(function() {", "; return nil; })()") } } else { return nil }; }); self.$private(); $def(self, '$compile_with_redo', function $$compile_with_redo(test_code) { var self = this; return self.$compile_while(test_code, "" + (self.redo_var) + " = false;") }); $def(self, '$compile_without_redo', function $$compile_without_redo(test_code) { var self = this; return self.$compile_while(test_code) }); $def(self, '$compile_while', function $$compile_while(test_code, redo_code) { var self = this; if (redo_code == null) redo_code = nil; if ($truthy(redo_code)) { self.$unshift(redo_code) }; self.$unshift(self.$while_open(), test_code, self.$while_close()); if ($truthy(redo_code)) { self.$unshift(redo_code) }; return self.$line("}"); }, -2); $def(self, '$while_open', function $$while_open() { var self = this, redo_part = nil; if ($truthy(self['$uses_redo?']())) { redo_part = "" + (self.redo_var) + " || " }; return "while (" + (redo_part); }); $def(self, '$while_close', $return_val(") {")); $def(self, '$uses_redo?', function $WhileNode_uses_redo$ques$5() { var self = this; return self.sexp.$meta()['$[]']("has_redo") }); return $def(self, '$wrap_in_closure?', function $WhileNode_wrap_in_closure$ques$6() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self['$expr?']()))) { return $ret_or_1 } else { return self['$recv?']() } }); })($nesting[0], $$('Base'), $nesting); (function($base, $super) { var self = $klass($base, $super, 'UntilNode'); var $proto = self.$$prototype; $proto.redo_var = nil; self.$handle("until"); self.$private(); $def(self, '$while_open', function $$while_open() { var self = this, redo_part = nil; if ($truthy(self['$uses_redo?']())) { redo_part = "" + (self.redo_var) + " || " }; return "while (" + (redo_part) + "!("; }); return $def(self, '$while_close', $return_val(")) {")); })($nesting[0], $$('WhileNode')); (function($base, $super) { var self = $klass($base, $super, 'WhilePostNode'); self.$handle("while_post"); self.$private(); $def(self, '$compile_while', function $$compile_while(test_code, redo_code) { var self = this; if (redo_code == null) redo_code = nil; if ($truthy(redo_code)) { self.$unshift(redo_code) }; self.$unshift("do {"); return self.$line("} ", self.$while_open(), test_code, self.$while_close()); }, -2); return $def(self, '$while_close', $return_val(");")); })($nesting[0], $$('WhileNode')); return (function($base, $super) { var self = $klass($base, $super, 'UntilPostNode'); var $proto = self.$$prototype; $proto.redo_var = nil; self.$handle("until_post"); self.$private(); $def(self, '$while_open', function $$while_open() { var self = this, redo_part = nil; if ($truthy(self['$uses_redo?']())) { redo_part = "" + (self.redo_var) + " || " }; return "while (" + (redo_part) + "!("; }); return $def(self, '$while_close', $return_val("));")); })($nesting[0], $$('WhilePostNode')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/hash"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $slice = Opal.slice, $send2 = Opal.send2, $find_super = Opal.find_super, $to_a = Opal.to_a, $send = Opal.send, $def = Opal.def, $truthy = Opal.truthy, $eqeq = Opal.eqeq, $to_ary = Opal.to_ary, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,attr_accessor,each,children,type,<<,[],all?,keys,include?,has_kwsplat,compile_merge,compile_hash,==,empty?,expr,s,each_with_index,push,inspect,to_s,simple_keys?,wrap,helper,value'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); (function($base, $super) { var self = $klass($base, $super, 'HashNode'); self.$handle("hash"); self.$attr_accessor("has_kwsplat", "keys", "values"); $def(self, '$initialize', function $$initialize($a) { var $post_args, $fwd_rest, $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', $to_a($fwd_rest), $yield); self.has_kwsplat = false; self.keys = []; self.values = []; return $send(self.$children(), 'each', [], function $$1(child){var self = $$1.$$s == null ? this : $$1.$$s; if (self.keys == null) self.keys = nil; if (self.values == null) self.values = nil; if (child == null) child = nil; switch (child.$type().valueOf()) { case "kwsplat": return (self.has_kwsplat = true) case "pair": self.keys['$<<'](child.$children()['$[]'](0)); return self.values['$<<'](child.$children()['$[]'](1)); default: return nil };}, {$$s: self}); }, -1); $def(self, '$simple_keys?', function $HashNode_simple_keys$ques$2() { var self = this; return $send(self.$keys(), 'all?', [], function $$3(key){ if (key == null) key = nil; return ["sym", "str", "int"]['$include?'](key.$type());}) }); $def(self, '$compile', function $$compile() { var self = this; if ($truthy(self.$has_kwsplat())) { return self.$compile_merge() } else { return self.$compile_hash() } }); $def(self, '$compile_merge', function $$compile_merge() { var $a, self = this, result = nil, seq = nil; $a = [[], []], (result = $a[0]), (seq = $a[1]), $a; $send(self.$children(), 'each', [], function $$4(child){var self = $$4.$$s == null ? this : $$4.$$s; if (child == null) child = nil; if ($eqeq(child.$type(), "kwsplat")) { if (!$truthy(seq['$empty?']())) { result['$<<'](self.$expr($send(self, 's', ["hash"].concat($to_a(seq))))) }; result['$<<'](self.$expr(child)); return (seq = []); } else { return seq['$<<'](child) };}, {$$s: self}); if (!$truthy(seq['$empty?']())) { result['$<<'](self.$expr($send(self, 's', ["hash"].concat($to_a(seq))))) }; return $send(result, 'each_with_index', [], function $$5(fragment, idx){var self = $$5.$$s == null ? this : $$5.$$s; if (fragment == null) fragment = nil; if (idx == null) idx = nil; if ($eqeq(idx, 0)) { return self.$push(fragment) } else { return self.$push(".$merge(", fragment, ")") };}, {$$s: self}); }); return $def(self, '$compile_hash', function $$compile_hash() { var self = this; $send(self.$children(), 'each_with_index', [], function $$6(pair, idx){var $a, $b, self = $$6.$$s == null ? this : $$6.$$s, key = nil, value = nil; if (pair == null) pair = nil; if (idx == null) idx = nil; $b = pair.$children(), $a = $to_ary($b), (key = ($a[0] == null ? nil : $a[0])), (value = ($a[1] == null ? nil : $a[1])), $b; if (!$eqeq(idx, 0)) { self.$push(", ") }; if ($truthy(["sym", "str"]['$include?'](key.$type()))) { return self.$push("[" + (key.$children()['$[]'](0).$to_s().$inspect()), ", ", self.$expr(value), "]") } else { return self.$push("[", self.$expr(key), ", ", self.$expr(value), "]") };}, {$$s: self}); if ($truthy(self.$keys()['$empty?']())) { return self.$push("(new Map())") } else if ($truthy(self['$simple_keys?']())) { return self.$wrap("(new Map([", "]))") } else { self.$helper("hash_rehash"); return self.$wrap("$hash_rehash(new Map([", "]))"); }; }); })($nesting[0], $$('Base')); return (function($base, $super) { var self = $klass($base, $super, 'KwSplatNode'); self.$handle("kwsplat"); self.$children("value"); return $def(self, '$compile', function $$compile() { var self = this; return self.$push("Opal.to_hash(", self.$expr(self.$value()), ")") }); })($nesting[0], $$('Base')); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/array"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $send = Opal.send, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,empty?,children,push,each,==,type,expr,<<,fragment'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ArrayNode'); self.$handle("array"); return $def(self, '$compile', function $$compile() { var $a, self = this, code = nil, work = nil, join = nil; if ($truthy(self.$children()['$empty?']())) { return self.$push("[]") }; $a = [[], []], (code = $a[0]), (work = $a[1]), $a; $send(self.$children(), 'each', [], function $$1(child){var self = $$1.$$s == null ? this : $$1.$$s, splat = nil, part = nil; if (child == null) child = nil; splat = child.$type()['$==']("splat"); part = self.$expr(child); if ($truthy(splat)) { if ($truthy(work['$empty?']())) { if ($truthy(code['$empty?']())) { code['$<<'](self.$fragment("[].concat("))['$<<'](part)['$<<'](self.$fragment(")")) } else { code['$<<'](self.$fragment(".concat("))['$<<'](part)['$<<'](self.$fragment(")")) } } else { if ($truthy(code['$empty?']())) { code['$<<'](self.$fragment("["))['$<<'](work)['$<<'](self.$fragment("]")) } else { code['$<<'](self.$fragment(".concat(["))['$<<'](work)['$<<'](self.$fragment("])")) }; code['$<<'](self.$fragment(".concat("))['$<<'](part)['$<<'](self.$fragment(")")); }; return (work = []); } else { if (!$truthy(work['$empty?']())) { work['$<<'](self.$fragment(", ")) }; return work['$<<'](part); };}, {$$s: self}); if (!$truthy(work['$empty?']())) { join = [self.$fragment("["), work, self.$fragment("]")]; if ($truthy(code['$empty?']())) { code = join } else { code.$push([self.$fragment(".concat("), join, self.$fragment(")")]) }; }; return self.$push(code); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/defined"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $eqeq = Opal.eqeq, $def = Opal.def, $truthy = Opal.truthy, $to_a = Opal.to_a, $slice = Opal.slice, $send = Opal.send, $range = Opal.range, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,type,value,push,inspect,to_s,==,[],size,compile_defined_send,wrap,compile_defined_ivar,compile_defined_super,compile_defined_yield,compile_defined_xstr,compile_defined_const,compile_defined_cvar,compile_defined_gvar,compile_defined_back_ref,compile_defined_nth_ref,compile_defined_array,respond_to?,__send__,new_temp,scope,expr,wrap_with_try_catch,mid_to_jsid,compile_defined,compile_send_recv_doesnt_raise,self,each,s,uses_block!,block_name,find_parent_def,nil?,relative_access,absolute_const,top_scope,class_variable_owner,helper,include?,each_with_index'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'DefinedNode'); self.$handle("defined?"); self.$children("value"); $def(self, '$compile', function $$compile() { var self = this; switch (self.$value().$type().valueOf()) { case "self": case "nil": case "false": case "true": return self.$push(self.$value().$type().$to_s().$inspect()) case "lvasgn": case "ivasgn": case "gvasgn": case "cvasgn": case "casgn": case "op_asgn": case "or_asgn": case "and_asgn": return self.$push("'assignment'") case "lvar": return self.$push("'local-variable'") case "begin": if (($eqeq(self.$value().$children().$size(), 1) && ($eqeq(self.$value().$children()['$[]'](0).$type(), "masgn")))) { return self.$push("'assignment'") } else { return self.$push("'expression'") } break; case "send": self.$compile_defined_send(self.$value()); return self.$wrap("(", " ? 'method' : nil)"); case "ivar": self.$compile_defined_ivar(self.$value()); return self.$wrap("(", " ? 'instance-variable' : nil)"); case "zsuper": case "super": return self.$compile_defined_super() case "yield": self.$compile_defined_yield(); return self.$wrap("(", " ? 'yield' : nil)"); case "xstr": return self.$compile_defined_xstr(self.$value()) case "const": self.$compile_defined_const(self.$value()); return self.$wrap("(", " ? 'constant' : nil)"); case "cvar": self.$compile_defined_cvar(self.$value()); return self.$wrap("(", " ? 'class variable' : nil)"); case "gvar": self.$compile_defined_gvar(self.$value()); return self.$wrap("(", " ? 'global-variable' : nil)"); case "back_ref": self.$compile_defined_back_ref(); return self.$wrap("(", " ? 'global-variable' : nil)"); case "nth_ref": self.$compile_defined_nth_ref(); return self.$wrap("(", " ? 'global-variable' : nil)"); case "array": self.$compile_defined_array(self.$value()); return self.$wrap("(", " ? 'expression' : nil)"); default: return self.$push("'expression'") } }); $def(self, '$compile_defined', function $$compile_defined(node) { var self = this, type = nil, node_tmp = nil; type = node.$type(); if ($truthy(self['$respond_to?']("compile_defined_" + (type)))) { return self.$__send__("compile_defined_" + (type), node) } else { node_tmp = self.$scope().$new_temp(); self.$push("(" + (node_tmp) + " = ", self.$expr(node), ")"); return node_tmp; }; }); $def(self, '$wrap_with_try_catch', function $$wrap_with_try_catch(code) { var self = this, returning_tmp = nil; returning_tmp = self.$scope().$new_temp(); self.$push("(" + (returning_tmp) + " = (function() { try {"); self.$push(" return " + (code) + ";"); self.$push("} catch ($err) {"); self.$push(" if (Opal.rescue($err, [Opal.Exception])) {"); self.$push(" try {"); self.$push(" return false;"); self.$push(" } finally { Opal.pop_exception($err); }"); self.$push(" } else { throw $err; }"); self.$push("}})())"); return returning_tmp; }); $def(self, '$compile_send_recv_doesnt_raise', function $$compile_send_recv_doesnt_raise(recv_code) { var self = this; return self.$wrap_with_try_catch(recv_code) }); $def(self, '$compile_defined_send', function $$compile_defined_send(node) { var $a, self = this, recv = nil, method_name = nil, args = nil, mid = nil, recv_code = nil, recv_tmp = nil, recv_value_tmp = nil, meth_tmp = nil; $a = [].concat($to_a(node)), (recv = ($a[0] == null ? nil : $a[0])), (method_name = ($a[1] == null ? nil : $a[1])), (args = $slice($a, 2)), $a; mid = self.$mid_to_jsid(method_name.$to_s()); if ($truthy(recv)) { recv_code = self.$compile_defined(recv); self.$push(" && "); if ($eqeq(recv.$type(), "send")) { recv_code = self.$compile_send_recv_doesnt_raise(recv_code); self.$push(" && "); }; recv_tmp = self.$scope().$new_temp(); self.$push("(" + (recv_tmp) + " = ", recv_code, ", " + (recv_tmp) + ") && "); } else { recv_tmp = self.$scope().$self() }; recv_value_tmp = self.$scope().$new_temp(); self.$push("(" + (recv_value_tmp) + " = " + (recv_tmp) + ") && "); meth_tmp = self.$scope().$new_temp(); self.$push("(((" + (meth_tmp) + " = " + (recv_value_tmp) + (mid) + ") && !" + (meth_tmp) + ".$$stub)"); self.$push(" || " + (recv_value_tmp) + "['$respond_to_missing?']('" + (method_name) + "'))"); $send(args, 'each', [], function $$1(arg){var self = $$1.$$s == null ? this : $$1.$$s; if (arg == null) arg = nil; switch (arg.$type().valueOf()) { case "block_pass": return nil default: self.$push(" && "); return self.$compile_defined(arg); };}, {$$s: self}); self.$wrap("(", ")"); return "" + (meth_tmp) + "()"; }); $def(self, '$compile_defined_ivar', function $$compile_defined_ivar(node) { var self = this, name = nil, tmp = nil; name = node.$children()['$[]'](0).$to_s()['$[]']($range(1, -1, false)); tmp = self.$scope().$new_temp(); self.$push("(" + (tmp) + " = " + (self.$scope().$self()) + "['" + (name) + "'], " + (tmp) + " != null && " + (tmp) + " !== nil)"); return tmp; }); $def(self, '$compile_defined_super', function $$compile_defined_super() { var self = this; return self.$push(self.$expr(self.$s("defined_super"))) }); $def(self, '$compile_defined_yield', function $$compile_defined_yield() { var self = this, block_name = nil, $ret_or_1 = nil; self.$scope()['$uses_block!'](); block_name = ($truthy(($ret_or_1 = self.$scope().$block_name())) ? ($ret_or_1) : (self.$scope().$find_parent_def().$block_name())); self.$push("(" + (block_name) + " != null && " + (block_name) + " !== nil)"); return block_name; }); $def(self, '$compile_defined_xstr', function $$compile_defined_xstr(node) { var self = this; return self.$push("(typeof(", self.$expr(node), ") !== \"undefined\")") }); $def(self, '$compile_defined_const', function $$compile_defined_const(node) { var $a, self = this, const_scope = nil, const_name = nil, const_tmp = nil, const_scope_tmp = nil; $a = [].concat($to_a(node)), (const_scope = ($a[0] == null ? nil : $a[0])), (const_name = ($a[1] == null ? nil : $a[1])), $a; const_tmp = self.$scope().$new_temp(); if ($truthy(const_scope['$nil?']())) { self.$push("(" + (const_tmp) + " = " + (self.$scope().$relative_access()) + "('" + (const_name) + "', 'skip_raise'))") } else if ($eqeq(const_scope, self.$s("cbase"))) { self.$push("(" + (const_tmp) + " = " + (self.$top_scope().$absolute_const()) + "('::', '" + (const_name) + "', 'skip_raise'))") } else { const_scope_tmp = self.$compile_defined(const_scope); self.$push(" && (" + (const_tmp) + " = " + (self.$top_scope().$absolute_const()) + "(" + (const_scope_tmp) + ", '" + (const_name) + "', 'skip_raise'))"); }; return const_tmp; }); $def(self, '$compile_defined_cvar', function $$compile_defined_cvar(node) { var $a, self = this, cvar_name = nil, _ = nil, cvar_tmp = nil; $a = [].concat($to_a(node)), (cvar_name = ($a[0] == null ? nil : $a[0])), (_ = ($a[1] == null ? nil : $a[1])), $a; cvar_tmp = self.$scope().$new_temp(); self.$push("(" + (cvar_tmp) + " = " + (self.$class_variable_owner()) + ".$$cvars['" + (cvar_name) + "'], " + (cvar_tmp) + " != null)"); return cvar_tmp; }); $def(self, '$compile_defined_gvar', function $$compile_defined_gvar(node) { var self = this, name = nil, gvar_temp = nil; self.$helper("gvars"); name = node.$children()['$[]'](0).$to_s()['$[]']($range(1, -1, false)); gvar_temp = self.$scope().$new_temp(); if ($truthy(["~", "!"]['$include?'](name))) { self.$push("(" + (gvar_temp) + " = ", self.$expr(node), " || true)") } else { self.$push("(" + (gvar_temp) + " = $gvars[" + (name.$inspect()) + "], " + (gvar_temp) + " != null)") }; return gvar_temp; }); $def(self, '$compile_defined_back_ref', function $$compile_defined_back_ref() { var self = this, back_ref_temp = nil; self.$helper("gvars"); back_ref_temp = self.$scope().$new_temp(); self.$push("(" + (back_ref_temp) + " = $gvars['~'], " + (back_ref_temp) + " != null && " + (back_ref_temp) + " !== nil)"); return back_ref_temp; }); $def(self, '$compile_defined_nth_ref', function $$compile_defined_nth_ref() { var self = this, nth_ref_tmp = nil; self.$helper("gvars"); nth_ref_tmp = self.$scope().$new_temp(); self.$push("(" + (nth_ref_tmp) + " = $gvars['~'], " + (nth_ref_tmp) + " != null && " + (nth_ref_tmp) + " != nil)"); return nth_ref_tmp; }); return $def(self, '$compile_defined_array', function $$compile_defined_array(node) { var self = this; return $send(node.$children(), 'each_with_index', [], function $$2(child, idx){var self = $$2.$$s == null ? this : $$2.$$s; if (child == null) child = nil; if (idx == null) idx = nil; if (!$eqeq(idx, 0)) { self.$push(" && ") }; return self.$compile_defined(child);}, {$$s: self}) }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/masgn"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $send = Opal.send, $eqeq = Opal.eqeq, $truthy = Opal.truthy, $def = Opal.def, $rb_ge = Opal.rb_ge, $not = Opal.not, $rb_plus = Opal.rb_plus, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,freeze,handle,children,with_temp,==,type,rhs,push,expr,any?,size,compile_masgn,lhs,helper,take_while,!=,drop,each_with_index,compile_assignment,empty?,shift,[],<<,dup,s,new_temp,scope,queue_temp,>=,!,updated,include?,+,last,raise'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'MassAssignNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $const_set($nesting[0], 'SIMPLE_ASSIGNMENT', ["lvasgn", "ivasgn", "lvar", "gvasgn", "cdecl", "casgn"].$freeze()); self.$handle("masgn"); self.$children("lhs", "rhs"); $def(self, '$compile', function $$compile() { var self = this; return $send(self, 'with_temp', [], function $$1(array){var self = $$1.$$s == null ? this : $$1.$$s, rhs_len = nil; if (array == null) array = nil; if ($eqeq(self.$rhs().$type(), "array")) { self.$push("" + (array) + " = ", self.$expr(self.$rhs())); rhs_len = ($truthy($send(self.$rhs().$children(), 'any?', [], function $$2(c){ if (c == null) c = nil; return c.$type()['$==']("splat");})) ? (nil) : (self.$rhs().$children().$size())); self.$compile_masgn(self.$lhs().$children(), array, rhs_len); return self.$push(", " + (array)); } else { self.$helper("to_ary"); return $send(self, 'with_temp', [], function $$3(retval){var self = $$3.$$s == null ? this : $$3.$$s; if (retval == null) retval = nil; self.$push("" + (retval) + " = ", self.$expr(self.$rhs())); self.$push(", " + (array) + " = $to_ary(" + (retval) + ")"); self.$compile_masgn(self.$lhs().$children(), array); return self.$push(", " + (retval));}, {$$s: self}); };}, {$$s: self}) }); $def(self, '$compile_masgn', function $$compile_masgn(lhs_items, array, len) { var self = this, pre_splat = nil, post_splat = nil, splat = nil, part = nil, tmp = nil; if (len == null) len = nil; pre_splat = $send(lhs_items, 'take_while', [], function $$4(child){ if (child == null) child = nil; return child.$type()['$!=']("splat");}); post_splat = lhs_items.$drop(pre_splat.$size()); $send(pre_splat, 'each_with_index', [], function $$5(child, idx){var self = $$5.$$s == null ? this : $$5.$$s; if (child == null) child = nil; if (idx == null) idx = nil; return self.$compile_assignment(child, array, idx, len);}, {$$s: self}); if ($truthy(post_splat['$empty?']())) { return nil } else { splat = post_splat.$shift(); if ($truthy(post_splat['$empty?']())) { if ($truthy((part = splat.$children()['$[]'](0)))) { self.$helper("slice"); part = part.$dup()['$<<'](self.$s("js_tmp", "$slice(" + (array) + ", " + (pre_splat.$size()) + ")")); self.$push(", "); return self.$push(self.$expr(part)); } else { return nil } } else { tmp = self.$scope().$new_temp(); self.$push(", " + (tmp) + " = " + (array) + ".length - " + (post_splat.$size())); self.$push(", " + (tmp) + " = (" + (tmp) + " < " + (pre_splat.$size()) + ") ? " + (pre_splat.$size()) + " : " + (tmp)); if ($truthy((part = splat.$children()['$[]'](0)))) { self.$helper("slice"); part = part.$dup()['$<<'](self.$s("js_tmp", "$slice(" + (array) + ", " + (pre_splat.$size()) + ", " + (tmp) + ")")); self.$push(", "); self.$push(self.$expr(part)); }; $send(post_splat, 'each_with_index', [], function $$6(child, idx){var self = $$6.$$s == null ? this : $$6.$$s; if (child == null) child = nil; if (idx == null) idx = nil; if ($eqeq(idx, 0)) { return self.$compile_assignment(child, array, tmp) } else { return self.$compile_assignment(child, array, "" + (tmp) + " + " + (idx)) };}, {$$s: self}); return self.$scope().$queue_temp(tmp); }; }; }, -3); return $def(self, '$compile_assignment', function $$compile_assignment(child, array, idx, len) { var self = this, assign = nil, part = nil, tmp = nil; if (len == null) len = nil; assign = (($not(len) || ($truthy($rb_ge(idx, len)))) ? (self.$s("js_tmp", "(" + (array) + "[" + (idx) + "] == null ? nil : " + (array) + "[" + (idx) + "])")) : (self.$s("js_tmp", "" + (array) + "[" + (idx) + "]"))); part = child.$updated(); if ($truthy($$('SIMPLE_ASSIGNMENT')['$include?'](child.$type()))) { part = part.$updated(nil, $rb_plus(part.$children(), [assign])) } else if ($eqeq(child.$type(), "send")) { part = part.$updated(nil, $rb_plus(part.$children(), [assign])) } else if ($eqeq(child.$type(), "attrasgn")) { part.$last()['$<<'](assign) } else if ($eqeq(child.$type(), "mlhs")) { self.$helper("to_ary"); tmp = self.$scope().$new_temp(); self.$push(", (" + (tmp) + " = $to_ary(" + (assign.$children()['$[]'](0)) + ")"); self.$compile_masgn(child.$children(), tmp); self.$push(")"); self.$scope().$queue_temp(tmp); return nil; } else { self.$raise("Bad child node in masgn LHS: " + (child) + ". LHS: " + (self.$lhs())) }; self.$push(", "); return self.$push(self.$expr(part)); }, -4); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/arglist"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send = Opal.send, $truthy = Opal.truthy, $to_a = Opal.to_a, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,each,children,==,type,expr,empty?,<<,fragment,push'); self.$require("opal/nodes/base"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'ArglistNode'); self.$handle("arglist"); return $def(self, '$compile', function $$compile() { var $a, self = this, code = nil, work = nil, join = nil; $a = [[], []], (code = $a[0]), (work = $a[1]), $a; $send(self.$children(), 'each', [], function $$1(current){var self = $$1.$$s == null ? this : $$1.$$s, splat = nil, arg = nil; if (current == null) current = nil; splat = current.$type()['$==']("splat"); arg = self.$expr(current); if ($truthy(splat)) { if ($truthy(work['$empty?']())) { if ($truthy(code['$empty?']())) { code['$<<'](arg) } else { code['$<<'](self.$fragment(".concat("))['$<<'](arg)['$<<'](self.$fragment(")")) } } else { if ($truthy(code['$empty?']())) { code['$<<'](self.$fragment("["))['$<<'](work)['$<<'](self.$fragment("]")) } else { code['$<<'](self.$fragment(".concat(["))['$<<'](work)['$<<'](self.$fragment("])")) }; code['$<<'](self.$fragment(".concat("))['$<<'](arg)['$<<'](self.$fragment(")")); }; return (work = []); } else { if (!$truthy(work['$empty?']())) { work['$<<'](self.$fragment(", ")) }; return work['$<<'](arg); };}, {$$s: self}); if (!$truthy(work['$empty?']())) { join = work; if ($truthy(code['$empty?']())) { code = join } else { code['$<<'](self.$fragment(".concat(["))['$<<'](join)['$<<'](self.$fragment("])")) }; }; return $send(self, 'push', $to_a(code)); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes/x_string"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $truthy = Opal.truthy, $def = Opal.def, $send = Opal.send, $to_a = Opal.to_a, $defs = Opal.defs, $lambda = Opal.lambda, $eqeq = Opal.eqeq, $not = Opal.not, $range = Opal.range, $nesting = [], nil = Opal.nil; Opal.add_stubs('handle,backtick_javascript_or_warn?,compiler,compile_javascript,compile_send,s,children,push,process,unpack_return,strip_empty_children,single_line?,compile_single_line,each,compile_child,recv?,wrap,==,size,none?,type,end_with?,source,expression,loc,dup,nil?,empty?,rstrip,any?,[],first,shift,last,pop,private,include?,self,scope,new,expr,raise,strip,=~,!,extract_last_value,expr?,warning,line'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'XStringNode'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.level = $proto.should_add_semicolon = $proto.returning = nil; self.$handle("xstr"); $def(self, '$compile', function $$compile() { var self = this; if ($truthy(self.$compiler()['$backtick_javascript_or_warn?']())) { return self.$compile_javascript() } else { return self.$compile_send() } }); $def(self, '$compile_send', function $$compile_send() { var self = this, sexp = nil; sexp = self.$s("send", nil, "`", $send(self, 's', ["dstr"].concat($to_a(self.$children())))); return self.$push(self.$process(sexp, self.level)); }); $def(self, '$compile_javascript', function $$compile_javascript() { var self = this, unpacked_children = nil, stripped_children = nil; self.should_add_semicolon = false; unpacked_children = self.$unpack_return(self.$children()); stripped_children = $$('XStringNode').$strip_empty_children(unpacked_children); if ($truthy($$('XStringNode')['$single_line?'](stripped_children))) { self.$compile_single_line(stripped_children) } else { $send(unpacked_children, 'each', [], function $$1(c){var self = $$1.$$s == null ? this : $$1.$$s; if (c == null) c = nil; return self.$compile_child(c);}, {$$s: self}) }; if ($truthy(self['$recv?']())) { self.$wrap("(", ")") }; if ($truthy(self.should_add_semicolon)) { return self.$push(";") } else { return nil }; }); $defs(self, '$single_line?', function $XStringNode_single_line$ques$2(children) { var $ret_or_1 = nil; if ($truthy(($ret_or_1 = children.$size()['$=='](1)))) { return $ret_or_1 } else { return $send(children, 'none?', [], function $$3(c){var $ret_or_2 = nil; if (c == null) c = nil; if ($truthy(($ret_or_2 = c.$type()['$==']("str")))) { return c.$loc().$expression().$source()['$end_with?']("\n") } else { return $ret_or_2 };}) } }); $defs(self, '$strip_empty_children', function $$strip_empty_children(children) { var empty_line = nil, $ret_or_1 = nil; children = children.$dup(); empty_line = $lambda(function $$4(child){var $ret_or_1 = nil, $ret_or_2 = nil; if (child == null) child = nil; if ($truthy(($ret_or_1 = child['$nil?']()))) { return $ret_or_1 } else { if ($truthy(($ret_or_2 = child.$type()['$==']("str")))) { return child.$loc().$expression().$source().$rstrip()['$empty?']() } else { return $ret_or_2 }; };}); while ($truthy(($truthy(($ret_or_1 = children['$any?']())) ? (empty_line['$[]'](children.$first())) : ($ret_or_1)))) { children.$shift() }; while ($truthy(($truthy(($ret_or_1 = children['$any?']())) ? (empty_line['$[]'](children.$last())) : ($ret_or_1)))) { children.$pop() }; return children; }); self.$private(); $def(self, '$compile_child', function $$compile_child(child) { var self = this, value = nil; switch (child.$type().valueOf()) { case "str": value = child.$loc().$expression().$source(); if ($truthy(value['$include?']("self"))) { self.$scope().$self() }; return self.$push($$('Fragment').$new(value, self.$scope(), child)); case "begin": case "gvar": case "ivar": case "nil": return self.$push(self.$expr(child)) default: return self.$raise("Unsupported xstr part: " + (child.$type())) } }); $def(self, '$compile_single_line', function $$compile_single_line(children) { var self = this, has_embeded_return = nil, first_child = nil, single_child = nil, $ret_or_1 = nil, first_value = nil, last_child = nil, last_value = nil; has_embeded_return = false; first_child = children.$shift(); single_child = children['$empty?'](); first_child = ($truthy(($ret_or_1 = first_child)) ? ($ret_or_1) : (self.$s("nil"))); if ($eqeq(first_child.$type(), "str")) { first_value = first_child.$loc().$expression().$source().$strip(); has_embeded_return = first_value['$=~'](/^return\b/); }; if (($truthy(self.returning) && ($not(has_embeded_return)))) { self.$push("return ") }; last_child = ($truthy(($ret_or_1 = children.$pop())) ? ($ret_or_1) : (first_child)); if ($eqeq(last_child.$type(), "str")) { last_value = self.$extract_last_value(last_child) }; if (!$truthy(single_child)) { self.should_add_semicolon = false; self.$compile_child(first_child); $send(children, 'each', [], function $$5(c){var self = $$5.$$s == null ? this : $$5.$$s; if (c == null) c = nil; return self.$compile_child(c);}, {$$s: self}); }; if ($eqeq(last_child.$type(), "str")) { return self.$push($$('Fragment').$new(last_value, self.$scope(), last_child)) } else { return self.$compile_child(last_child) }; }); $def(self, '$extract_last_value', function $$extract_last_value(last_child) { var self = this, last_value = nil; last_value = last_child.$loc().$expression().$source().$rstrip(); if ($truthy(last_value['$include?']("self"))) { self.$scope().$self() }; if ((($truthy(self.returning) || ($truthy(self['$expr?']()))) && ($truthy(last_value['$end_with?'](";"))))) { self.$compiler().$warning("Removed semicolon ending x-string expression, interpreted as unintentional", last_child.$line()); last_value = last_value['$[]']($range(0, -2, false)); }; if ($truthy(self.returning)) { self.should_add_semicolon = true }; return last_value; }); return $def(self, '$unpack_return', function $$unpack_return(children) { var self = this, first_child = nil; first_child = children.$first(); self.returning = false; if ($eqeq(first_child.$type(), "js_return")) { self.returning = true; children = first_child.$children(); }; return children; }); })($nesting[0], $$('Base'), $nesting) })($nesting[0], $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/nodes/lambda"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send = Opal.send, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,handle,children,helper,defines_lambda,scope,push,expr,iter'); self.$require("opal/nodes/call"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'Nodes'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super) { var self = $klass($base, $super, 'LambdaNode'); self.$handle("lambda"); self.$children("iter"); return $def(self, '$compile', function $$compile() { var self = this; self.$helper("lambda"); return $send(self.$scope(), 'defines_lambda', [], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s; return self.$push("$lambda(", self.$expr(self.$iter()), ")")}, {$$s: self}); }); })($nesting[0], $$('Base')) })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal/nodes"] = function(Opal) {/* Generated by Opal 1.8.2 */ var self = Opal.top, nil = Opal.nil; Opal.add_stubs('require'); self.$require("opal/nodes/closure"); self.$require("opal/nodes/base"); self.$require("opal/nodes/literal"); self.$require("opal/nodes/variables"); self.$require("opal/nodes/constants"); self.$require("opal/nodes/call"); self.$require("opal/nodes/call_special"); self.$require("opal/nodes/module"); self.$require("opal/nodes/class"); self.$require("opal/nodes/singleton_class"); self.$require("opal/nodes/args"); self.$require("opal/nodes/args/arity_check"); self.$require("opal/nodes/iter"); self.$require("opal/nodes/def"); self.$require("opal/nodes/defs"); self.$require("opal/nodes/if"); self.$require("opal/nodes/logic"); self.$require("opal/nodes/definitions"); self.$require("opal/nodes/yield"); self.$require("opal/nodes/rescue"); self.$require("opal/nodes/super"); self.$require("opal/nodes/top"); self.$require("opal/nodes/while"); self.$require("opal/nodes/hash"); self.$require("opal/nodes/array"); self.$require("opal/nodes/defined"); self.$require("opal/nodes/masgn"); self.$require("opal/nodes/arglist"); self.$require("opal/nodes/x_string"); return self.$require("opal/nodes/lambda"); }; Opal.modules["opal/eof_content"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $const_set = Opal.const_set, $def = Opal.def, $truthy = Opal.truthy, $send = Opal.send, $range = Opal.range, $eqeq = Opal.eqeq, $to_ary = Opal.to_ary, $nesting = [], nil = Opal.nil; Opal.add_stubs('empty?,[],last_token_position,drop_while,lines,match?,!,start_with?,join,==,private,last,end_pos'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'EofContent'); var $nesting = [self].concat($parent_nesting), $proto = self.$$prototype; $proto.tokens = $proto.source = nil; $const_set($nesting[0], 'DATA_SEPARATOR', "__END__\n"); $def(self, '$initialize', function $$initialize(tokens, source) { var self = this; self.tokens = tokens; return (self.source = source); }); $def(self, '$eof', function $$eof() { var self = this, eof_content = nil, $ret_or_1 = nil; if ($truthy(self.tokens['$empty?']())) { return nil }; eof_content = self.source['$[]'](Opal.Range.$new(self.$last_token_position(), -1, false)); if (!$truthy(eof_content)) { return nil }; eof_content = $send(eof_content.$lines(), 'drop_while', [], function $$1(line){var $ret_or_1 = nil; if (line == null) line = nil; if ($truthy(($ret_or_1 = /^.*\r?\n?$/['$match?'](line)))) { return line['$start_with?']("__END__")['$!']() } else { return $ret_or_1 };}); if ($truthy(/^__END__\r?\n?$/['$match?'](eof_content['$[]'](0)))) { eof_content = ($truthy(($ret_or_1 = eof_content['$[]']($range(1, -1, false)))) ? ($ret_or_1) : ([])); return eof_content.$join(); } else if ($eqeq(eof_content, ["__END__"])) { return "" } else { return nil }; }); self.$private(); return $def(self, '$last_token_position', function $$last_token_position() { var $a, $b, self = this, _ = nil, last_token_info = nil, last_token_range = nil; $b = self.tokens.$last(), $a = $to_ary($b), (_ = ($a[0] == null ? nil : $a[0])), (last_token_info = ($a[1] == null ? nil : $a[1])), $b; $b = last_token_info, $a = $to_ary($b), (_ = ($a[0] == null ? nil : $a[0])), (last_token_range = ($a[1] == null ? nil : $a[1])), $b; return last_token_range.$end_pos(); }); })($nesting[0], null, $nesting) })($nesting[0], $nesting) }; Opal.modules["opal/errors"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $klass = Opal.klass, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $truthy = Opal.truthy, $defs = Opal.defs, $rb_plus = Opal.rb_plus, $alias = Opal.alias, $send = Opal.send, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('attr_reader,attr_accessor,new,respond_to?,location=,location,diagnostic=,diagnostic,to_a,backtrace,unshift,to_s,set_backtrace,path,lineno,+,label,lineno=,line,label=,source_line,expression'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $klass($nesting[0], $$('StandardError'), 'Error'); (function($base, $super) { var self = $klass($base, $super, 'GemNotFound'); self.$attr_reader("gem_name"); return $def(self, '$initialize', function $$initialize(gem_name) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.gem_name = gem_name; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', ["can't find gem " + (gem_name)], null); }); })($nesting[0], $$('Error')); (function($base, $super) { var self = $klass($base, $super, 'CompilationError'); return self.$attr_accessor("location") })($nesting[0], $$('Error')); $klass($nesting[0], $$('CompilationError'), 'ParsingError'); $klass($nesting[0], $$('ParsingError'), 'RewritingError'); (function($base, $super) { var self = $klass($base, $super, 'SyntaxError'); return self.$attr_accessor("location") })($nesting[0], $$$('SyntaxError')); $defs(self, '$opal_location_from_error', function $$opal_location_from_error(error) { var opal_location = nil; opal_location = $$('OpalBacktraceLocation').$new(); if ($truthy(error['$respond_to?']("location"))) { opal_location['$location='](error.$location()) }; if ($truthy(error['$respond_to?']("diagnostic"))) { opal_location['$diagnostic='](error.$diagnostic()) }; return opal_location; }); $defs(self, '$add_opal_location_to_error', function $$add_opal_location_to_error(opal_location, error) { var backtrace = nil; backtrace = error.$backtrace().$to_a(); backtrace.$unshift(opal_location.$to_s()); error.$set_backtrace(backtrace); return error; }); return (function($base, $super) { var self = $klass($base, $super, 'OpalBacktraceLocation'); self.$attr_accessor("path", "lineno", "label"); $def(self, '$initialize', function $$initialize(path, lineno, label) { var $a, self = this; if (path == null) path = nil; if (lineno == null) lineno = nil; if (label == null) label = nil; return $a = [path, lineno, label], (self.path = $a[0]), (self.lineno = $a[1]), (self.label = $a[2]), $a; }, -1); $def(self, '$to_s', function $$to_s() { var self = this, string = nil; string = self.$path(); if ($truthy(self.$lineno())) { string = $rb_plus(string, ":" + (self.$lineno())) }; string = $rb_plus(string, ":in "); if ($truthy(self.$label())) { string = $rb_plus(string, "`" + (self.$label()) + "'") } else { string = $rb_plus(string, "unknown") }; return string; }); $alias(self, "line", "lineno"); $def(self, '$diagnostic=', function $OpalBacktraceLocation_diagnostic$eq$1(diagnostic) { var $a, self = this; if (!$truthy(diagnostic)) { return nil }; return ($a = [diagnostic.$location()], $send(self, 'location=', $a), $a[$a.length - 1]); }); return $def(self, '$location=', function $OpalBacktraceLocation_location$eq$2(location) { var $a, self = this; if (!$truthy(location)) { return nil }; self['$lineno='](location.$line()); if ($truthy(location['$respond_to?']("source_line"))) { return ($a = [location.$source_line()], $send(self, 'label=', $a), $a[$a.length - 1]) } else if ($truthy(location['$respond_to?']("expression"))) { return ($a = [location.$expression().$source_line()], $send(self, 'label=', $a), $a[$a.length - 1]) } else { return nil }; }); })($nesting[0], null); })($nesting[0], $nesting) }; Opal.modules["opal/magic_comments"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $const_set = Opal.const_set, $truthy = Opal.truthy, $send = Opal.send, $rb_ge = Opal.rb_ge, $eqeqeq = Opal.eqeqeq, $defs = Opal.defs, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil; Opal.add_stubs('freeze,line,loc,take,each,>=,any?,scan,text,[]=,to_sym,==='); return (function($base, $parent_nesting) { var self = $module($base, 'MagicComments'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $const_set($nesting[0], 'MAGIC_COMMENT_RE', /^# *(\w+) *: *(\S+.*?) *$/.$freeze()); $const_set($nesting[0], 'EMACS_MAGIC_COMMENT_RE', /^# *-\*- *(\w+) *: *(\S+.*?) *-\*- *$/.$freeze()); return $defs(self, '$parse', function $$parse(sexp, comments) { var flags = nil, first_line = nil; flags = (new Map()); if ($truthy(sexp)) { first_line = sexp.$loc().$line(); comments = comments.$take(first_line); }; $send(comments, 'each', [], function $$1(comment){var parts = nil; if (comment == null) comment = nil; if (($truthy(first_line) && ($truthy($rb_ge(comment.$loc().$line(), first_line))))) { return nil }; if (($truthy((parts = comment.$text().$scan($$('MAGIC_COMMENT_RE')))['$any?']()) || ($truthy((parts = comment.$text().$scan($$('EMACS_MAGIC_COMMENT_RE')))['$any?']())))) { return $send(parts, 'each', [], function $$2(key, value){var $a, $ret_or_1 = nil; if (key == null) key = nil; if (value == null) value = nil; return ($a = [key.$to_sym(), ($eqeqeq("true", ($ret_or_1 = value)) || (($eqeqeq("false", $ret_or_1) ? (false) : (value))))], $send(flags, '[]=', $a), $a[$a.length - 1]);}) } else { return nil };}); return flags; }); })($$('Opal'), $nesting) }; Opal.modules["opal/source_map/map"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $truthy = Opal.truthy, $def = Opal.def, $send = Opal.send, $slice = Opal.slice, $to_ary = Opal.to_ary, self = Opal.top, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,map,to_h,to_json,each,[],delete,to_s,encode64,generated_code'); self.$require("base64"); self.$require("json"); return (function($base, $parent_nesting) { var self = $module($base, 'Map'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$to_h', function $$to_h() { var self = this, $ret_or_1 = nil; if (self.to_h == null) self.to_h = nil; if ($truthy(($ret_or_1 = self.to_h))) { return $ret_or_1 } else { return self.$map() } }); $def(self, '$to_json', function $$to_json() { var self = this, map = nil; try { map = self.$to_h(); return map.$to_json(); } catch ($err) { if (Opal.rescue($err, [$$$($$('Encoding'), 'UndefinedConversionError')])) { try { $send(map['$[]']("sections"), 'each', [], function $$1(i){ if (i == null) i = nil; try { return i.$to_json() } catch ($err) { if (Opal.rescue($err, [$$$($$('Encoding'), 'UndefinedConversionError')])) { try { return map['$[]']("sections").$delete(i) } finally { Opal.pop_exception($err); } } else { throw $err; } };}); return map.$to_json(); } finally { Opal.pop_exception($err); } } else { throw $err; } } }); $def(self, '$as_json', function $$as_json($a) { var $post_args, $fwd_rest, self = this; $post_args = $slice(arguments); $fwd_rest = $post_args; return self.$to_h(); }, -1); $def(self, '$to_s', function $$to_s() { var self = this; return self.$to_h().$to_s() }); $def(self, '$to_data_uri_comment', function $$to_data_uri_comment() { var self = this; return "//# sourceMappingURL=data:application/json;base64," + ($$('Base64').$encode64(self.$to_json()).$delete("\n")) }); $def(self, '$cache', function $$cache() { var self = this, $ret_or_1 = nil; if (self.to_h == null) self.to_h = nil; self.to_h = ($truthy(($ret_or_1 = self.to_h)) ? ($ret_or_1) : (self.$map())); return self; }); $def(self, '$marshal_dump', function $$marshal_dump() { var self = this; return [self.$to_h(), self.$generated_code()] }); return $def(self, '$marshal_load', function $$marshal_load(value) { var $a, $b, self = this; return $b = value, $a = $to_ary($b), (self.to_h = ($a[0] == null ? nil : $a[0])), (self.generated_code = ($a[1] == null ? nil : $a[1])), $b }); })($$$($$('Opal'), 'SourceMap'), $nesting); }; Opal.modules["opal/source_map/file"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $send = Opal.send, $def = Opal.def, $truthy = Opal.truthy, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $eqeq = Opal.eqeq, $rb_minus = Opal.rb_minus, $rb_lt = Opal.rb_lt, $to_ary = Opal.to_ary, $rb_plus = Opal.rb_plus, $not = Opal.not, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('include,attr_reader,new,[]=,size,join,map,to_proc,file,==,encoding,source,encode,names,encode_mappings,relative_mappings,absolute_mappings,sort_by,to_a,-,line,<,column,source_map_name,[],to_s,to_int,each,fragments_by_line,skip_source_map?,is_a?,<<,segment_from_fragment,+,private,flat_map,fragments,code,match?,split,with_index,!,zero?,last'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'File'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.generated_code = $proto.fragments = $proto.names = $proto.names_map = $proto.relative_mappings = $proto.absolute_mappings = nil; self.$include($$$($$$($$('Opal'), 'SourceMap'), 'Map')); self.$attr_reader("fragments"); self.$attr_reader("file"); self.$attr_reader("source"); $def(self, '$initialize', function $$initialize(fragments, file, source, generated_code) { var self = this; if (generated_code == null) generated_code = nil; self.fragments = fragments; self.file = file; self.source = source; self.names_map = $send($$('Hash'), 'new', [], function $$1(hash, name){var $a; if (hash == null) hash = nil; if (name == null) name = nil; return ($a = [name, hash.$size()], $send(hash, '[]=', $a), $a[$a.length - 1]);}); self.generated_code = generated_code; return (self.absolute_mappings = nil); }, -4); $def(self, '$generated_code', function $$generated_code() { var self = this, $ret_or_1 = nil; return (self.generated_code = ($truthy(($ret_or_1 = self.generated_code)) ? ($ret_or_1) : ($send(self.fragments, 'map', [], "code".$to_proc()).$join()))) }); $def(self, '$map', function $$map($kwargs) { var source_root, self = this; $kwargs = $ensure_kwargs($kwargs); source_root = $hash_get($kwargs, "source_root");if (source_root == null) source_root = ""; return (new Map([["version", 3], ["sourceRoot", source_root], ["sources", [self.$file()]], ["sourcesContent", [($eqeq(self.$source().$encoding(), $$$($$('Encoding'), 'UTF_8')) ? (self.$source()) : (self.$source().$encode("UTF-8", (new Map([["undef", "replace"]])))))]], ["names", self.$names()], ["mappings", $$$($$$($$('Opal'), 'SourceMap'), 'VLQ').$encode_mappings(self.$relative_mappings())]])); }, -1); $def(self, '$names', function $$names() { var self = this, $ret_or_1 = nil; return (self.names = ($truthy(($ret_or_1 = self.names)) ? ($ret_or_1) : ((self.$absolute_mappings(), $send($send(self.names_map.$to_a(), 'sort_by', [], function $$2(_, index){ if (_ == null) _ = nil; if (index == null) index = nil; return index;}), 'map', [], function $$3(name, _){ if (name == null) name = nil; if (_ == null) _ = nil; return name;}))))) }); $def(self, '$segment_from_fragment', function $$segment_from_fragment(fragment, generated_column) { var $a, self = this, source_index = nil, original_line = nil, $ret_or_1 = nil, original_column = nil, map_name_index = nil; source_index = 0; original_line = $rb_minus(($truthy(($ret_or_1 = fragment.$line())) ? ($ret_or_1) : (0)), 1); if ($truthy($rb_lt(original_line, 0))) { original_line = 0 }; original_column = ($truthy(($ret_or_1 = fragment.$column())) ? ($ret_or_1) : (0)); if ($truthy(fragment.$source_map_name())) { map_name_index = ($truthy(($ret_or_1 = self.names_map['$[]'](fragment.$source_map_name().$to_s()))) ? ($ret_or_1) : (($a = [fragment.$source_map_name().$to_s(), self.names_map.$size()], $send(self.names_map, '[]=', $a), $a[$a.length - 1]))); return [generated_column, source_index, original_line, original_column, map_name_index]; } else { return [generated_column, source_index, original_line, original_column] }; }); $def(self, '$relative_mappings', function $$relative_mappings() { var self = this, $ret_or_1 = nil, reference_segment = nil, reference_name_index = nil; return (self.relative_mappings = ($truthy(($ret_or_1 = self.relative_mappings)) ? ($ret_or_1) : (((reference_segment = [0, 0, 0, 0, 0]), (reference_name_index = 0), $send(self.$absolute_mappings(), 'map', [], function $$4(absolute_mapping){ if (absolute_mapping == null) absolute_mapping = nil; reference_segment['$[]='](0, 0); return $send(absolute_mapping, 'map', [], function $$5(absolute_segment){var segment = nil, $ret_or_2 = nil; if (absolute_segment == null) absolute_segment = nil; segment = []; segment['$[]='](0, $rb_minus(absolute_segment['$[]'](0), reference_segment['$[]'](0))); segment['$[]='](1, $rb_minus(absolute_segment['$[]'](1), ($truthy(($ret_or_2 = reference_segment['$[]'](1))) ? ($ret_or_2) : (0)))); segment['$[]='](2, $rb_minus(absolute_segment['$[]'](2), ($truthy(($ret_or_2 = reference_segment['$[]'](2))) ? ($ret_or_2) : (0)))); segment['$[]='](3, $rb_minus(absolute_segment['$[]'](3), ($truthy(($ret_or_2 = reference_segment['$[]'](3))) ? ($ret_or_2) : (0)))); if ($truthy(absolute_segment['$[]'](4))) { segment['$[]='](4, $rb_minus(absolute_segment['$[]'](4).$to_int(), ($truthy(($ret_or_2 = reference_segment['$[]'](4))) ? ($ret_or_2) : (reference_name_index)).$to_int())); reference_name_index = absolute_segment['$[]'](4); }; reference_segment = absolute_segment; return segment;});}))))) }); $def(self, '$absolute_mappings', function $$absolute_mappings() { var self = this, $ret_or_1 = nil, mappings = nil; return (self.absolute_mappings = ($truthy(($ret_or_1 = self.absolute_mappings)) ? ($ret_or_1) : (((mappings = []), $send(self.$fragments_by_line(), 'each', [], function $$6(raw_segments){var self = $$6.$$s == null ? this : $$6.$$s, generated_column = nil, segments = nil; if (raw_segments == null) raw_segments = nil; generated_column = 0; segments = []; $send(raw_segments, 'each', [], function $$7($mlhs_tmp1){var $a, $b, self = $$7.$$s == null ? this : $$7.$$s, generated_code = nil, fragment = nil; if ($mlhs_tmp1 == null) $mlhs_tmp1 = nil; $b = $mlhs_tmp1, $a = $to_ary($b), (generated_code = ($a[0] == null ? nil : $a[0])), (fragment = ($a[1] == null ? nil : $a[1])), $b; if (!($truthy(fragment['$is_a?']($$$($$('Opal'), 'Fragment'))) && ($truthy(fragment['$skip_source_map?']())))) { segments['$<<'](self.$segment_from_fragment(fragment, generated_column)) }; return (generated_column = $rb_plus(generated_column, generated_code.$size()));}, {$$s: self, $$has_top_level_mlhs_arg: true}); return mappings['$<<'](segments);}, {$$s: self}), mappings)))) }); self.$private(); return $def(self, '$fragments_by_line', function $$fragments_by_line() { var self = this, raw_mappings = nil; raw_mappings = [[]]; $send(self.$fragments(), 'flat_map', [], function $$8(fragment){var fragment_code = nil, splitter = nil, fragment_lines = nil; if (fragment == null) fragment = nil; fragment_code = fragment.$code(); splitter = ($truthy(/\r/['$match?'](fragment_code)) ? (/\r?\n/) : ("\n")); fragment_lines = fragment_code.$split(splitter, -1); return $send(fragment_lines.$each(), 'with_index', [], function $$9(fragment_line, index){var raw_segment = nil; if (fragment_line == null) fragment_line = nil; if (index == null) index = nil; raw_segment = [fragment_line, fragment]; if (($truthy(index['$zero?']()) && ($not(fragment_line.$size()['$zero?']())))) { return raw_mappings.$last()['$<<'](raw_segment) } else if (($truthy(index['$zero?']()) && ($truthy(fragment_line.$size()['$zero?']())))) { return nil } else if ($truthy(fragment_line.$size()['$zero?']())) { return raw_mappings['$<<']([]) } else { return raw_mappings['$<<']([raw_segment]) };});}); return raw_mappings; }); })($$$($$('Opal'), 'SourceMap'), null, $nesting) }; Opal.modules["opal/source_map/index"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $def = Opal.def, $send = Opal.send, $truthy = Opal.truthy, $rb_plus = Opal.rb_plus, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('include,attr_reader,map,to_h,generated_code,+,count,[],rindex,size'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Index'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.source_maps = nil; self.$include($$$($$$($$('Opal'), 'SourceMap'), 'Map')); self.$attr_reader("source_maps"); $def(self, '$initialize', function $$initialize(source_maps, $kwargs) { var join, self = this; $kwargs = $ensure_kwargs($kwargs); join = $hash_get($kwargs, "join");if (join == null) join = nil; self.source_maps = source_maps; return (self.join = join); }, -2); return $def(self, '$map', function $$map() { var self = this, offset_line = nil, offset_column = nil; offset_line = 0; offset_column = 0; return (new Map([["version", 3], ["sections", $send(self.source_maps, 'map', [], function $$1(source_map){var self = $$1.$$s == null ? this : $$1.$$s, map = nil, generated_code = nil, new_lines_count = nil, last_line = nil; if (self.join == null) self.join = nil; if (source_map == null) source_map = nil; map = (new Map([["offset", (new Map([["line", offset_line], ["column", offset_column]]))], ["map", source_map.$to_h()]])); generated_code = source_map.$generated_code(); if ($truthy(self.join)) { generated_code = $rb_plus(generated_code, self.join) }; new_lines_count = generated_code.$count("\n"); last_line = generated_code['$[]'](Opal.Range.$new($rb_plus(generated_code.$rindex("\n"), 1), -1, false)); offset_line = $rb_plus(offset_line, new_lines_count); offset_column = $rb_plus(offset_column, last_line.$size()); return map;}, {$$s: self})]])); }); })($$$($$('Opal'), 'SourceMap'), null, $nesting) }; Opal.modules["opal/source_map/vlq"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $const_set = Opal.const_set, $rb_minus = Opal.rb_minus, $send = Opal.send, $range = Opal.range, $truthy = Opal.truthy, $rb_lt = Opal.rb_lt, $rb_plus = Opal.rb_plus, $rb_gt = Opal.rb_gt, $thrower = Opal.thrower, $defs = Opal.defs, $eqeq = Opal.eqeq, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('<<,-,split,inject,[]=,[],each,<,+,-@,loop,&,>>,>,|,join,any?,shift,raise,==,map,encode,each_with_index,decode'); return (function($base, $parent_nesting) { var self = $module($base, 'VLQ'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $const_set($nesting[0], 'VLQ_BASE_SHIFT', 5); $const_set($nesting[0], 'VLQ_BASE', (1)['$<<']($$('VLQ_BASE_SHIFT'))); $const_set($nesting[0], 'VLQ_BASE_MASK', $rb_minus($$('VLQ_BASE'), 1)); $const_set($nesting[0], 'VLQ_CONTINUATION_BIT', $$('VLQ_BASE')); $const_set($nesting[0], 'BASE64_DIGITS', "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".$split("")); $const_set($nesting[0], 'BASE64_VALUES', $send($range(0, 64, true), 'inject', [(new Map())], function $VLQ$1(h, i){ if (h == null) h = nil; if (i == null) i = nil; h['$[]=']($$('BASE64_DIGITS')['$[]'](i), i); return h;})); $defs(self, '$encode', function $$encode(ary) { var self = this, result = nil; result = []; $send(ary, 'each', [], function $$2(n){var self = $$2.$$s == null ? this : $$2.$$s, vlq = nil; if (n == null) n = nil; vlq = ($truthy($rb_lt(n, 0)) ? ($rb_plus(n['$-@']()['$<<'](1), 1)) : (n['$<<'](1))); return (function(){try { var $t_break = $thrower('break'); return $send(self, 'loop', [], function $$3(){var digit = nil; digit = vlq['$&']($$('VLQ_BASE_MASK')); vlq = vlq['$>>']($$('VLQ_BASE_SHIFT')); if ($truthy($rb_gt(vlq, 0))) { digit = digit['$|']($$('VLQ_CONTINUATION_BIT')) }; result['$<<']($$('BASE64_DIGITS')['$[]'](digit)); if ($truthy($rb_gt(vlq, 0))) { return nil } else { $t_break.$throw(nil, $$3.$$is_lambda) };})} catch($e) { if ($e === $t_break) return $e.$v; throw $e; } finally {$t_break.is_orphan = true;}})();}, {$$s: self}); return result.$join(); }); $defs(self, '$decode', function $$decode(str) { var self = this, result = nil, chars = nil, vlq = nil, shift = nil, continuation = nil, char$ = nil, digit = nil; result = []; chars = str.$split(""); while ($truthy(chars['$any?']())) { vlq = 0; shift = 0; continuation = true; while ($truthy(continuation)) { char$ = chars.$shift(); if (!$truthy(char$)) { self.$raise($$('ArgumentError')) }; digit = $$('BASE64_VALUES')['$[]'](char$); if ($eqeq(digit['$&']($$('VLQ_CONTINUATION_BIT')), 0)) { continuation = false }; digit = digit['$&']($$('VLQ_BASE_MASK')); vlq = $rb_plus(vlq, digit['$<<'](shift)); shift = $rb_plus(shift, $$('VLQ_BASE_SHIFT')); }; result['$<<'](($eqeq(vlq['$&'](1), 1) ? (vlq['$>>'](1)['$-@']()) : (vlq['$>>'](1)))); }; return result; }); $defs(self, '$encode_mappings', function $$encode_mappings(ary) { var self = this; return $send(ary, 'map', [], function $$4(group){var self = $$4.$$s == null ? this : $$4.$$s; if (group == null) group = nil; return $send(group, 'map', [], function $$5(segment){var self = $$5.$$s == null ? this : $$5.$$s; if (segment == null) segment = nil; return self.$encode(segment);}, {$$s: self}).$join(",");}, {$$s: self}).$join(";") }); return $defs(self, '$decode_mappings', function $$decode_mappings(str) { var self = this, mappings = nil; mappings = []; $send(str.$split(";"), 'each_with_index', [], function $$6(group, index){var self = $$6.$$s == null ? this : $$6.$$s; if (group == null) group = nil; if (index == null) index = nil; mappings['$[]='](index, []); return $send(group.$split(","), 'each', [], function $$7(segment){var self = $$7.$$s == null ? this : $$7.$$s; if (segment == null) segment = nil; return mappings['$[]'](index)['$<<'](self.$decode(segment));}, {$$s: self});}, {$$s: self}); return mappings; }); })($$$($$('Opal'), 'SourceMap'), $nesting) }; Opal.modules["opal/source_map"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $nesting = [], nil = Opal.nil; Opal.add_stubs('autoload'); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base) { var self = $module($base, 'SourceMap'); self.$autoload("Map", "opal/source_map/map"); self.$autoload("File", "opal/source_map/file"); self.$autoload("Index", "opal/source_map/index"); return self.$autoload("VLQ", "opal/source_map/vlq"); })($nesting[0]) })($nesting[0], $nesting) }; Opal.modules["opal/compiler"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $defs = Opal.defs, $klass = Opal.klass, $const_set = Opal.const_set, $send = Opal.send, $truthy = Opal.truthy, $not = Opal.not, $def = Opal.def, $eqeqeq = Opal.eqeqeq, $Opal = Opal.Opal, $to_ary = Opal.to_ary, $alias = Opal.alias, $regexp = Opal.regexp, $rb_minus = Opal.rb_minus, $return_ivar = Opal.return_ivar, $slice = Opal.slice, $rb_plus = Opal.rb_plus, $to_a = Opal.to_a, $eqeq = Opal.eqeq, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,compile,new,include,freeze,join,dirname,first,split,basename,to_s,cleanpath,Pathname,fetch,define_method,option_value,key?,[],!,include?,raise,inspect,[]=,compiler_option,===,backtick_javascript?,warning,attr_reader,attr_accessor,parse,re_raise_with_location,flatten,process,end_with?,code,last,<<,fragment,s,map,to_proc,file,source=,default_parser,tokenize,requirable?,eval?,tap,meta,location,children,associate_locations,eof,magic_comments,to_sym,strip,async_await,async_await_before_typecasting,async_await_set_to_regexp,to_a,gsub,escape,location=,opal_location_from_error,path=,label,label=,lines,-,to_i,line,message,set_backtrace,backtrace,add_opal_location_to_error,warn,empty?,+,start_with?,helpers,new_temp,queue_temp,push_while,pop_while,in_while?,nil?,scope,handlers,type,compile_to_fragments,error,returns,updated,backtick_javascript_or_warn?,==,uses_block!,block_name,find_parent_def,cache,source_map'); self.$require("corelib/string/unpack"); self.$require("set"); self.$require("opal/parser"); self.$require("opal/fragment"); self.$require("opal/nodes"); self.$require("opal/eof_content"); self.$require("opal/errors"); self.$require("opal/magic_comments"); self.$require("opal/nodes/closure"); self.$require("opal/source_map"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs(self, '$compile', function $$compile(source, options) { if (options == null) options = (new Map()); return $$('Compiler').$new(source, options).$compile(); }, -2); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Compiler'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.option_values = $proto.options = $proto.magic_comments = $proto.backtick_javascript_warned = $proto.fragments = $proto.buffer = $proto.source = $proto.source_map = $proto.result = $proto.helpers = $proto.method_calls = $proto.async_await = $proto.unique = $proto.indent = $proto.scope = $proto.case_stmt = $proto.handlers = $proto.requires = $proto.required_trees = $proto.autoloads = nil; self.$include($$$($$$($$('Nodes'), 'Closure'), 'CompilerSupport')); $const_set($nesting[0], 'INDENT', " "); $const_set($nesting[0], 'COMPARE', ["<", ">", "<=", ">="].$freeze()); $defs(self, '$module_name', function $$module_name(path) { var self = this; path = $$('File').$join($$('File').$dirname(path), $$('File').$basename(path).$split(".").$first()); return self.$Pathname(path).$cleanpath().$to_s(); }); $defs(self, '$compiler_option', function $$compiler_option(name, config) { var self = this, method_name = nil; if (config == null) config = (new Map()); method_name = config.$fetch("as", name); return $send(self, 'define_method', [method_name], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s; return self.$option_value(name, config)}, {$$s: self}); }, -2); $def(self, '$option_value', function $$option_value(name, config) { var $a, self = this, default_value = nil, valid_values = nil, magic_comment = nil, value = nil; if ($truthy(self.option_values['$key?'](name))) { return self.option_values['$[]'](name) }; default_value = config['$[]']("default"); valid_values = config['$[]']("valid_values"); magic_comment = config['$[]']("magic_comment"); value = self.options.$fetch(name, default_value); if (($truthy(magic_comment) && ($truthy(self.magic_comments['$key?'](name))))) { value = self.magic_comments.$fetch(name) }; if (($truthy(valid_values) && ($not(valid_values['$include?'](value))))) { self.$raise($$('ArgumentError'), "" + ("invalid value " + (value.$inspect()) + " for option " + (name.$inspect()) + " ") + ("(valid values: " + (valid_values.$inspect()) + ")")) }; return ($a = [name, value], $send(self.option_values, '[]=', $a), $a[$a.length - 1]); }); self.$compiler_option("file", (new Map([["default", "(file)"]]))); self.$compiler_option("method_missing", (new Map([["default", true], ["as", "method_missing?"]]))); self.$compiler_option("arity_check", (new Map([["default", false], ["as", "arity_check?"]]))); self.$compiler_option("freezing", (new Map([["default", true], ["as", "freezing?"]]))); self.$compiler_option("irb", (new Map([["default", false], ["as", "irb?"]]))); self.$compiler_option("dynamic_require_severity", (new Map([["default", "ignore"], ["valid_values", ["error", "warning", "ignore"]]]))); self.$compiler_option("requirable", (new Map([["default", false], ["as", "requirable?"]]))); self.$compiler_option("load", (new Map([["default", false], ["as", "load?"]]))); self.$compiler_option("esm", (new Map([["default", false], ["as", "esm?"]]))); self.$compiler_option("no_export", (new Map([["default", false], ["as", "no_export?"]]))); self.$compiler_option("inline_operators", (new Map([["default", true], ["as", "inline_operators?"]]))); self.$compiler_option("eval", (new Map([["default", false], ["as", "eval?"]]))); self.$compiler_option("enable_source_location", (new Map([["default", false], ["as", "enable_source_location?"]]))); self.$compiler_option("enable_file_source_embed", (new Map([["default", false], ["as", "enable_file_source_embed?"]]))); self.$compiler_option("use_strict", (new Map([["default", false], ["as", "use_strict?"], ["magic_comment", true]]))); self.$compiler_option("parse_comments", (new Map([["default", false], ["as", "parse_comments?"]]))); self.$compiler_option("backtick_javascript", (new Map([["default", nil], ["as", "backtick_javascript?"], ["magic_comment", true]]))); $def(self, '$backtick_javascript_or_warn?', function $Compiler_backtick_javascript_or_warn$ques$2() { var self = this, $ret_or_1 = nil, $ret_or_2 = nil; if ($eqeqeq(true, ($ret_or_1 = self['$backtick_javascript?']()))) { return true } else if ($eqeqeq(nil, $ret_or_1)) { self.backtick_javascript_warned = ($truthy(($ret_or_2 = self.backtick_javascript_warned)) ? ($ret_or_2) : ((self.$warning("Backtick operator usage interpreted as intent to embed JavaScript; this code will " + "break in Opal 2.0; add a magic comment: `# backtick_javascript: true`"), true))); return true; } else if ($eqeqeq(false, $ret_or_1)) { return false } else { return nil } }); self.$compiler_option("scope_variables", (new Map([["default", []]]))); self.$compiler_option("await", (new Map([["default", false], ["as", "async_await"], ["magic_comment", true]]))); self.$attr_reader("result"); self.$attr_reader("fragments"); self.$attr_accessor("scope"); self.$attr_accessor("top_scope"); self.$attr_reader("case_stmt"); self.$attr_reader("eof_content"); self.$attr_reader("comments"); self.$attr_reader("method_calls"); self.$attr_reader("magic_comments"); self.$attr_reader("source"); self.$attr_accessor("dynamic_cache_result"); $def(self, '$initialize', function $$initialize(source, options) { var self = this; if (options == null) options = (new Map()); self.source = source; self.indent = ""; self.unique = 0; self.options = options; self.comments = $$('Hash').$new([]); self.case_stmt = nil; self.method_calls = $$('Set').$new(); self.option_values = (new Map()); self.magic_comments = (new Map()); return (self.dynamic_cache_result = false); }, -2); $def(self, '$compile', function $$compile() { var self = this; self.$parse(); self.fragments = $send(self, 're_raise_with_location', [], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s; if (self.sexp == null) self.sexp = nil; return self.$process(self.sexp).$flatten()}, {$$s: self}); if (!$truthy(self.fragments.$last().$code()['$end_with?']("\n"))) { self.fragments['$<<'](self.$fragment("\n", nil, self.$s("newline"))) }; return (self.result = $send(self.fragments, 'map', [], "code".$to_proc()).$join("")); }); $def(self, '$parse', function $$parse() { var $a, $b, self = this, sexp = nil, comments = nil, tokens = nil, kind = nil, first_node = nil; self.buffer = $$$($$$($Opal, 'Parser'), 'SourceBuffer').$new(self.$file(), 1); self.buffer['$source='](self.source); self.parser = $$$($$('Opal'), 'Parser').$default_parser(); $b = $send(self, 're_raise_with_location', [], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; if (self.parser == null) self.parser = nil; if (self.buffer == null) self.buffer = nil; return self.parser.$tokenize(self.buffer)}, {$$s: self}), $a = $to_ary($b), (sexp = ($a[0] == null ? nil : $a[0])), (comments = ($a[1] == null ? nil : $a[1])), (tokens = ($a[2] == null ? nil : $a[2])), $b; kind = ($truthy(self['$requirable?']()) ? ("require") : ($truthy(self['$eval?']()) ? ("eval") : ("main"))); self.sexp = $send(sexp, 'tap', [], function $$5(i){var $c; if (i == null) i = nil; return ($c = ["kind", kind], $send(i.$meta(), '[]=', $c), $c[$c.length - 1]);}); if ($truthy(sexp.$children().$first().$location())) { first_node = sexp.$children().$first() }; self.comments = $$$($$$($$$('Parser'), 'Source'), 'Comment').$associate_locations(first_node, comments); self.magic_comments = $$('MagicComments').$parse(first_node, comments); return (self.eof_content = $$('EofContent').$new(tokens, self.source).$eof()); }); $def(self, '$source_map', function $$source_map() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.source_map))) { return $ret_or_1 } else { return $$$($$$($Opal, 'SourceMap'), 'File').$new(self.fragments, self.$file(), self.source, self.result) } }); $def(self, '$helpers', function $$helpers() { var self = this, $ret_or_1 = nil; return (self.helpers = ($truthy(($ret_or_1 = self.helpers)) ? ($ret_or_1) : ($$('Set').$new($send(self.$magic_comments()['$[]']("helpers").$to_s().$split(","), 'map', [], function $$6(h){ if (h == null) h = nil; return h.$strip().$to_sym();}))))) }); $def(self, '$record_method_call', function $$record_method_call(mid) { var self = this; return self.method_calls['$<<'](mid) }); $alias(self, "async_await_before_typecasting", "async_await"); $def(self, '$async_await', function $$async_await() { var $a, self = this, original = nil, $ret_or_1 = nil; if ($truthy((($a = self['async_await'], $a != null && $a !== nil) ? 'instance-variable' : nil))) { return self.async_await } else { original = self.$async_await_before_typecasting(); return (self.async_await = ($eqeqeq($$('String'), ($ret_or_1 = original)) ? (self.$async_await_set_to_regexp($send(original.$split(","), 'map', [], function $$7(h){ if (h == null) h = nil; return h.$strip().$to_sym();}))) : (($eqeqeq($$('Array'), $ret_or_1) || ($eqeqeq($$('Set'), $ret_or_1))) ? (self.$async_await_set_to_regexp($send(original.$to_a(), 'map', [], "to_sym".$to_proc()))) : (($eqeqeq($$('Regexp'), $ret_or_1) || (($eqeqeq(true, $ret_or_1) || ($eqeqeq(false, $ret_or_1))))) ? (original) : (self.$raise("A value of await compiler option can be either " + "a Set, an Array, a String or a Boolean.")))))); } }); $def(self, '$async_await_set_to_regexp', function $$async_await_set_to_regexp(set) { set = $send(set, 'map', [], function $$8(name){ if (name == null) name = nil; return $$('Regexp').$escape(name.$to_s()).$gsub("\\*", ".*?");}); set = set.$join("|"); return $regexp(["^(", set, ")$"]); }); $def(self, '$error', function $$error(msg, line) { var self = this, error = nil; if (line == null) line = nil; error = $$$($Opal, 'SyntaxError').$new(msg); error['$location=']($$$($$('Opal'), 'OpalBacktraceLocation').$new(self.$file(), line)); return self.$raise(error); }, -2); $def(self, '$re_raise_with_location', function $$re_raise_with_location() { var $yield = $$re_raise_with_location.$$p || nil, self = this, error = nil, opal_location = nil, $ret_or_1 = nil, new_error = nil; $$re_raise_with_location.$$p = null; try { return Opal.yieldX($yield, []); } catch ($err) { if (Opal.rescue($err, [$$('StandardError'), $$$($Opal, 'SyntaxError')])) {(error = $err) try { opal_location = $Opal.$opal_location_from_error(error); opal_location['$path='](self.$file()); if ($truthy(($ret_or_1 = opal_location.$label()))) { $ret_or_1 } else { opal_location['$label='](self.source.$lines()['$[]']($rb_minus(opal_location.$line().$to_i(), 1)).$strip()) }; new_error = $$$($Opal, 'SyntaxError').$new(error.$message()); new_error.$set_backtrace(error.$backtrace()); $Opal.$add_opal_location_to_error(opal_location, new_error); return self.$raise(new_error); } finally { Opal.pop_exception($err); } } else { throw $err; } } }); $def(self, '$warning', function $$warning(msg, line) { var self = this; if (line == null) line = nil; return self.$warn("warning: " + (msg) + " -- " + (self.$file()) + ":" + (line)); }, -2); $def(self, '$parser_indent', $return_ivar("indent")); $def(self, '$s', function $$s(type, $a) { var $post_args, children; $post_args = $slice(arguments, 1); children = $post_args; return $$$($$$($Opal, 'AST'), 'Node').$new(type, children); }, -2); $def(self, '$fragment', function $$fragment(str, scope, sexp) { if (sexp == null) sexp = nil; return $$('Fragment').$new(str, scope, sexp); }, -3); $def(self, '$unique_temp', function $$unique_temp(name) { var self = this, unique = nil; name = name.$to_s(); if (($truthy(name) && ($not(name['$empty?']())))) { name = name.$to_s().$gsub("<=>", "$lt_eq_gt").$gsub("===", "$eq_eq_eq").$gsub("==", "$eq_eq").$gsub("=~", "$eq_tilde").$gsub("!~", "$excl_tilde").$gsub("!=", "$not_eq").$gsub("<=", "$lt_eq").$gsub(">=", "$gt_eq").$gsub("=", "$eq").$gsub("?", "$ques").$gsub("!", "$excl").$gsub("/", "$slash").$gsub("%", "$percent").$gsub("+", "$plus").$gsub("-", "$minus").$gsub("<", "$lt").$gsub(">", "$gt").$gsub(/[^\w\$]/, "$") }; unique = (self.unique = $rb_plus(self.unique, 1)); return "" + (($truthy(name['$start_with?']("$")) ? (nil) : ("$"))) + (name) + "$" + (unique); }); $def(self, '$helper', function $$helper(name) { var self = this; return self.$helpers()['$<<'](name) }); $def(self, '$indent', function $$indent() { var $yield = $$indent.$$p || nil, self = this, indent = nil, res = nil; $$indent.$$p = null; indent = self.indent; self.indent = $rb_plus(self.indent, $$('INDENT')); self.space = "\n" + (self.indent); res = Opal.yieldX($yield, []); self.indent = indent; self.space = "\n" + (self.indent); return res; }); $def(self, '$with_temp', function $$with_temp() { var $yield = $$with_temp.$$p || nil, self = this, tmp = nil, res = nil; $$with_temp.$$p = null; tmp = self.scope.$new_temp(); res = Opal.yield1($yield, tmp); self.scope.$queue_temp(tmp); return res; }); $def(self, '$in_while', function $$in_while() { var $yield = $$in_while.$$p || nil, self = this, result = nil; $$in_while.$$p = null; if (!($yield !== nil)) { return nil }; self.while_loop = self.scope.$push_while(); result = Opal.yieldX($yield, []); self.scope.$pop_while(); return result; }); $def(self, '$in_case', function $$in_case() { var $yield = $$in_case.$$p || nil, self = this, old = nil; $$in_case.$$p = null; if (!($yield !== nil)) { return nil }; old = self.case_stmt; self.case_stmt = (new Map()); Opal.yieldX($yield, []); return (self.case_stmt = old); }); $def(self, '$in_while?', function $Compiler_in_while$ques$9() { var self = this; return self.scope['$in_while?']() }); $def(self, '$process', function $$process(sexp, level) { var self = this, handler = nil; if (level == null) level = "expr"; if ($truthy(sexp['$nil?']())) { return self.$fragment("", self.$scope()) }; if ($truthy((handler = self.$handlers()['$[]'](sexp.$type())))) { return handler.$new(sexp, level, self).$compile_to_fragments() } else { return self.$error("Unsupported sexp: " + (sexp.$type())) }; }, -2); $def(self, '$handlers', function $$handlers() { var self = this, $ret_or_1 = nil; return (self.handlers = ($truthy(($ret_or_1 = self.handlers)) ? ($ret_or_1) : ($$$($$$($$('Opal'), 'Nodes'), 'Base').$handlers()))) }); $def(self, '$requires', function $$requires() { var self = this, $ret_or_1 = nil; return (self.requires = ($truthy(($ret_or_1 = self.requires)) ? ($ret_or_1) : ([]))) }); $def(self, '$required_trees', function $$required_trees() { var self = this, $ret_or_1 = nil; return (self.required_trees = ($truthy(($ret_or_1 = self.required_trees)) ? ($ret_or_1) : ([]))) }); $def(self, '$autoloads', function $$autoloads() { var self = this, $ret_or_1 = nil; return (self.autoloads = ($truthy(($ret_or_1 = self.autoloads)) ? ($ret_or_1) : ([]))) }); $def(self, '$returns', function $$returns(sexp) { var $a, $b, self = this, when_sexp = nil, then_sexp = nil, body_sexp = nil, resbodies = nil, else_sexp = nil, klass = nil, lvar = nil, body = nil, rescue_sexp = nil, ensure_body = nil, rest = nil, last = nil, cond = nil, true_body = nil, false_body = nil; if (!$truthy(sexp)) { return self.$returns(self.$s("nil")) }; switch (sexp.$type().valueOf()) { case "undef": return self.$returns(sexp.$updated("begin", [sexp, self.$s("nil")])) case "break": case "next": case "redo": case "retry": return sexp case "yield": return sexp.$updated("returnable_yield", nil) case "when": $a = [].concat($to_a(sexp)), $b = $a.length - 1, $b = ($b < 0) ? 0 : $b, (when_sexp = $slice($a, 0, $b)), (then_sexp = ($a[$b] == null ? nil : $a[$b])), $a; return sexp.$updated(nil, [].concat($to_a(when_sexp)).concat([self.$returns(then_sexp)])); case "rescue": $a = [].concat($to_a(sexp)), (body_sexp = ($a[0] == null ? nil : $a[0])), $b = $a.length - 1, $b = ($b < 1) ? 1 : $b, (resbodies = $slice($a, 1, $b)), (else_sexp = ($a[$b] == null ? nil : $a[$b])), $a; resbodies = $send(resbodies, 'map', [], function $$10(resbody){var self = $$10.$$s == null ? this : $$10.$$s; if (resbody == null) resbody = nil; return self.$returns(resbody);}, {$$s: self}); if ($truthy(else_sexp)) { else_sexp = self.$returns(else_sexp) }; return sexp.$updated(nil, [self.$returns(body_sexp)].concat($to_a(resbodies)).concat([else_sexp])); case "resbody": $a = [].concat($to_a(sexp)), (klass = ($a[0] == null ? nil : $a[0])), (lvar = ($a[1] == null ? nil : $a[1])), (body = ($a[2] == null ? nil : $a[2])), $a; return sexp.$updated(nil, [klass, lvar, self.$returns(body)]); case "ensure": $a = [].concat($to_a(sexp)), (rescue_sexp = ($a[0] == null ? nil : $a[0])), (ensure_body = ($a[1] == null ? nil : $a[1])), $a; sexp = sexp.$updated(nil, [self.$returns(rescue_sexp), ensure_body]); return sexp.$updated("js_return", [sexp]); case "begin": case "kwbegin": $a = [].concat($to_a(sexp)), $b = $a.length - 1, $b = ($b < 0) ? 0 : $b, (rest = $slice($a, 0, $b)), (last = ($a[$b] == null ? nil : $a[$b])), $a; return sexp.$updated(nil, [].concat($to_a(rest)).concat([self.$returns(last)])); case "while": case "until": case "while_post": case "until_post": return sexp case "return": case "js_return": case "returnable_yield": return sexp case "xstr": if ($truthy(self['$backtick_javascript_or_warn?']())) { return sexp.$updated(nil, [$send(self, 's', ["js_return"].concat($to_a(sexp.$children())))]) } else { return sexp } break; case "if": $a = [].concat($to_a(sexp)), (cond = ($a[0] == null ? nil : $a[0])), (true_body = ($a[1] == null ? nil : $a[1])), (false_body = ($a[2] == null ? nil : $a[2])), $a; return $send(sexp.$updated(nil, [cond, self.$returns(true_body), self.$returns(false_body)]), 'tap', [], function $$11(s){var $c; if (s == null) s = nil; return ($c = ["returning", true], $send(s.$meta(), '[]=', $c), $c[$c.length - 1]);}); default: if (($eqeq(sexp.$type(), "send") && ($eqeq(sexp.$children()['$[]'](1), "debugger")))) { return sexp.$updated("begin", [sexp, self.$s("js_return", self.$s("nil"))]) } else { return sexp.$updated("js_return", [sexp]) } }; }); $def(self, '$handle_block_given_call', function $$handle_block_given_call(sexp) { var self = this, scope = nil; self.scope['$uses_block!'](); if ($truthy(self.scope.$block_name())) { return self.$fragment("(" + (self.scope.$block_name()) + " !== nil)", self.$scope(), sexp) } else if (($truthy((scope = self.scope.$find_parent_def())) && ($truthy(scope.$block_name())))) { return self.$fragment("(" + (scope.$block_name()) + " !== nil)", scope, sexp) } else { return self.$fragment("false", scope, sexp) }; }); $def(self, '$marshal_dump', function $$marshal_dump() { var self = this, $ret_or_1 = nil; return [self.options, self.option_values, (self.source_map = ($truthy(($ret_or_1 = self.source_map)) ? ($ret_or_1) : (self.$source_map().$cache()))), self.magic_comments, self.result, self.required_trees, self.requires, self.autoloads] }); return $def(self, '$marshal_load', function $$marshal_load(src) { var $a, $b, self = this; return $b = src, $a = $to_ary($b), (self.options = ($a[0] == null ? nil : $a[0])), (self.option_values = ($a[1] == null ? nil : $a[1])), (self.source_map = ($a[2] == null ? nil : $a[2])), (self.magic_comments = ($a[3] == null ? nil : $a[3])), (self.result = ($a[4] == null ? nil : $a[4])), (self.required_trees = ($a[5] == null ? nil : $a[5])), (self.requires = ($a[6] == null ? nil : $a[6])), (self.autoloads = ($a[7] == null ? nil : $a[7])), $b }); })($nesting[0], null, $nesting); })($nesting[0], $nesting); }; Opal.modules["opal/erb"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $defs = Opal.defs, $klass = Opal.klass, $const_set = Opal.const_set, $def = Opal.def, $truthy = Opal.truthy, $rb_plus = Opal.rb_plus, $send = Opal.send, $regexp = Opal.regexp, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,compile,new,freeze,fix_quotes,find_contents,find_code,wrap_compiled,require_erb,prepared_source,gsub,+,last_match,=~,sub'); self.$require("opal/compiler"); return (function($base, $parent_nesting) { var self = $module($base, 'Opal'); var $nesting = [self].concat($parent_nesting); return (function($base, $parent_nesting) { var self = $module($base, 'ERB'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs(self, '$compile', function $$compile(source, file_name) { if (file_name == null) file_name = "(erb)"; return $$('Compiler').$new(source, file_name).$compile(); }, -2); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Compiler'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.prepared_source = $proto.source = $proto.file_name = nil; $const_set($nesting[0], 'BLOCK_EXPR', /\s+(do|\{)(\s*\|[^|]*\|)?\s*\Z/.$freeze()); $def(self, '$initialize', function $$initialize(source, file_name) { var $a, self = this; if (file_name == null) file_name = "(erb)"; return $a = [source, file_name, source], (self.source = $a[0]), (self.file_name = $a[1]), (self.result = $a[2]), $a; }, -2); $def(self, '$prepared_source', function $$prepared_source() { var self = this, $ret_or_1 = nil, source = nil; return (self.prepared_source = ($truthy(($ret_or_1 = self.prepared_source)) ? ($ret_or_1) : (((source = self.source), (source = self.$fix_quotes(source)), (source = self.$find_contents(source)), (source = self.$find_code(source)), (source = self.$wrap_compiled(source)), (source = self.$require_erb(source)), source)))) }); $def(self, '$compile', function $$compile() { var self = this; return $$('Opal').$compile(self.$prepared_source()) }); $def(self, '$fix_quotes', function $$fix_quotes(result) { return result.$gsub("\"", "\\\"") }); $def(self, '$require_erb', function $$require_erb(result) { return $rb_plus("require \"erb\";", result) }); $def(self, '$find_contents', function $$find_contents(result) { return $send(result, 'gsub', [/<%=([\s\S]+?)%>/], function $$1(){var inner = nil; inner = $$('Regexp').$last_match(1).$gsub(/\\'/, "'").$gsub(/\\"/, "\""); if ($truthy(inner['$=~']($$('BLOCK_EXPR')))) { return "\")\noutput_buffer.append= " + (inner) + "\noutput_buffer.append(\"" } else { return "\")\noutput_buffer.append=(" + (inner) + ")\noutput_buffer.append(\"" };}) }); $def(self, '$find_code', function $$find_code(result) { return $send(result, 'gsub', [/<%([\s\S]+?)%>/], function $$2(){var inner = nil; inner = $$('Regexp').$last_match(1).$gsub(/\\"/, "\""); return "\")\n" + (inner) + "\noutput_buffer.append(\"";}) }); return $def(self, '$wrap_compiled', function $$wrap_compiled(result) { var self = this, path = nil; path = self.file_name.$sub($regexp(["\\.opalerb", $$('REGEXP_END')]), ""); return "Template.new('" + (path) + "') do |output_buffer|\noutput_buffer.append(\"" + (result) + "\")\noutput_buffer.join\nend\n"; }); })($nesting[0], null, $nesting); })($nesting[0], $nesting) })($nesting[0], $nesting); }; Opal.modules["opal-parser"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $call = Opal.call, $raise = Opal.raise, $module = Opal.module, $Opal = Opal.Opal, $truthy = Opal.truthy, $rb_plus = Opal.rb_plus, $def = Opal.def, $thrower = Opal.thrower, self = Opal.top, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,coerce_to!,merge,new,compile,[],+,to_data_uri_comment,source_map,js_eval'); self.$require("corelib/string/unpack"); self.$require("opal/compiler"); self.$require("opal/erb"); self.$require("opal/version"); (function($base, $parent_nesting) { var self = $module($base, 'Kernel'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$eval', function $Kernel_eval$1(str, binding, file, line) { var self = this, default_eval_options = nil, $ret_or_1 = nil, compiling_options = nil, compiler = nil, code = nil; if (binding == null) binding = nil; if (file == null) file = nil; if (line == null) line = nil; str = $Opal['$coerce_to!'](str, $$('String'), "to_str"); default_eval_options = (new Map([["file", ($truthy(($ret_or_1 = file)) ? ($ret_or_1) : ("(eval)"))], ["eval", true]])); compiling_options = (new Map([['arity_check', false]])).$merge(default_eval_options); compiler = $$$($$('Opal'), 'Compiler').$new(str, compiling_options); code = compiler.$compile(); if (!$truthy(compiling_options['$[]']("no_source_map"))) { code = $rb_plus(code, compiler.$source_map().$to_data_uri_comment()) }; if ($truthy(binding)) { return binding.$js_eval(code) } else { return (function(self) { return eval(code); })(self) }; }, -2); return $def(self, '$require_remote', function $$require_remote(url) {try { var $a, self = this; var r = new XMLHttpRequest(); r.open("GET", url, false); r.send(''); ; return ($a = r.responseText, typeof Opal.compile === 'function' ? eval(Opal.compile($a, {scope_variables: ["url"], arity_check: false, file: '(eval)', eval: true})) : self.$eval($a));} catch($e) { if ($e === Opal.t_eval_return) return $e.$v; throw $e; } }); })($nesting[0], $nesting); var $has_own = Object.hasOwn || $call.bind(Object.prototype.hasOwnProperty); Opal.compile = function(str, options) { try { str = $Opal['$coerce_to!'](str, $$('String'), "to_str") if (options) options = Opal.hash(options); return Opal.Opal.$compile(str, options); } catch (e) { if (e.$$class === Opal.Opal.SyntaxError) { var err = Opal.SyntaxError.$new(e.message); err.$set_backtrace(e.$backtrace()); throw(err); } else { throw e; } } }; Opal['eval'] = function(str, options) { return eval(Opal.compile(str, options)); }; function run_ruby_scripts() { var tag, tags = document.getElementsByTagName('script'); for (var i = 0, len = tags.length; i < len; i++) { tag = tags[i]; if (tag.type === "text/ruby") { if (tag.src) Opal.Kernel.$require_remote(tag.src); if (tag.innerHTML) Opal.Kernel.$eval(tag.innerHTML); } } } if (typeof(document) !== 'undefined') { if (window.addEventListener) { window.addEventListener('DOMContentLoaded', run_ruby_scripts, false); } else { window.attachEvent('onload', run_ruby_scripts); } } ; }; Opal.modules["singleton"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $def = Opal.def, $send2 = Opal.send2, $find_super = Opal.find_super, $send = Opal.send, $truthy = Opal.truthy, $defs = Opal.defs, $nesting = [], nil = Opal.nil; Opal.add_stubs('raise,class,__init__,instance_eval,new,extend'); return (function($base, $parent_nesting) { var self = $module($base, 'Singleton'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$clone', function $$clone() { var self = this; return self.$raise($$('TypeError'), "can't clone instance of singleton " + (self.$class())) }); $def(self, '$dup', function $$dup() { var self = this; return self.$raise($$('TypeError'), "can't dup instance of singleton " + (self.$class())) }); (function($base, $parent_nesting) { var self = $module($base, 'SingletonClassMethods'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$clone', function $$clone() { var $yield = $$clone.$$p || nil, self = this; $$clone.$$p = null; return $$('Singleton').$__init__($send2(self, $find_super(self, 'clone', $$clone, false, true), 'clone', [], $yield)) }); return $def(self, '$inherited', function $$inherited(sub_klass) { var $yield = $$inherited.$$p || nil, self = this; $$inherited.$$p = null; $send2(self, $find_super(self, 'inherited', $$inherited, false, true), 'inherited', [sub_klass], $yield); return $$('Singleton').$__init__(sub_klass); }); })($nesting[0], $nesting); return (function(self, $parent_nesting) { var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$__init__', function $$__init__(klass) { var self = this; $send(klass, 'instance_eval', [], function $$1(){var self = $$1.$$s == null ? this : $$1.$$s; return (self.singleton__instance__ = nil)}, {$$s: self}); $defs(klass, '$instance', function $$instance() { var self = this; if (self.singleton__instance__ == null) self.singleton__instance__ = nil; if ($truthy(self.singleton__instance__)) { return self.singleton__instance__ }; return (self.singleton__instance__ = self.$new()); }); return klass; }); return $def(self, '$included', function $$included(klass) { var $yield = $$included.$$p || nil, self = this; $$included.$$p = null; $send2(self, $find_super(self, 'included', $$included, false, true), 'included', [klass], $yield); klass.$extend($$('SingletonClassMethods')); return $$('Singleton').$__init__(klass); }); })(Opal.get_singleton_class($$('Singleton')), $nesting); })($nesting[0], $nesting) }; Opal.modules["ruby2_keywords"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $truthy = Opal.truthy, $slice = Opal.slice, $def = Opal.def, $defs = Opal.defs, $return_self = Opal.return_self, $return_val = Opal.return_val, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, main = nil; Opal.add_stubs('private_method_defined?,private,eval,respond_to?,method_defined?,dup'); (function($base, $super) { var self = $klass($base, $super, 'Module'); if ($truthy(self['$private_method_defined?']("ruby2_keywords"))) { return nil } else { self.$private(); return $def(self, '$ruby2_keywords', function $$ruby2_keywords(name, $a) { var $post_args, $fwd_rest; $post_args = $slice(arguments, 1); $fwd_rest = $post_args; return nil; }, -2); } })($nesting[0], null); main = $$('TOPLEVEL_BINDING').$eval("self"); if (!$truthy(main['$respond_to?']("ruby2_keywords", true))) { $defs(main, '$ruby2_keywords', function $$ruby2_keywords(name, $a) { var $post_args, $fwd_rest; $post_args = $slice(arguments, 1); $fwd_rest = $post_args; return nil; }, -2) }; (function($base, $super) { var self = $klass($base, $super, 'Proc'); if ($truthy(self['$method_defined?']("ruby2_keywords"))) { return nil } else { return $def(self, '$ruby2_keywords', $return_self) } })($nesting[0], null); return (function(self, $parent_nesting) { if (!$truthy(self['$method_defined?']("ruby2_keywords_hash?"))) { $def(self, '$ruby2_keywords_hash?', $return_val(false)) }; if ($truthy(self['$method_defined?']("ruby2_keywords_hash"))) { return nil } else { return $def(self, '$ruby2_keywords_hash', function $$ruby2_keywords_hash(hash) { return hash.$dup() }) }; })(Opal.get_singleton_class($$('Hash')), $nesting); }; Opal.modules["delegate"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $freeze = Opal.freeze, $freeze_props = Opal.freeze_props, $klass = Opal.klass, $const_set = Opal.const_set, $Kernel = Opal.Kernel, $send = Opal.send, $truthy = Opal.truthy, $Object = Opal.Object, $defs = Opal.defs, $def = Opal.def, $slice = Opal.slice, $to_a = Opal.to_a, $send2 = Opal.send2, $find_super = Opal.find_super, $not = Opal.not, $eqeqeq = Opal.eqeqeq, $to_ary = Opal.to_ary, $eqeq = Opal.eqeq, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $return_ivar = Opal.return_ivar, $lambda = Opal.lambda, $rb_minus = Opal.rb_minus, $find_block_super = Opal.find_block_super, self = Opal.top, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,dup,class_eval,alias_method,each,undef_method,private_instance_methods,=~,include,const_get,__setobj__,ruby2_keywords,__getobj__,target_respond_to?,__send__,to_proc,private_method_defined?,method_defined?,bind_call,instance_method,!,warn,private_constant,private,===,respond_to?,|,methods,public_methods,protected_methods,equal?,==,!=,eql?,__raise__,reject,instance_variables,map,instance_variable_get,each_with_index,instance_variable_set,[],clone,freeze,public_instance_methods,new,public_api,protected_instance_methods,-,module_eval,define_method,delegating_block,protected,define_singleton_method,instance_methods,include?,raise,public_instance_method'); self.$require("ruby2_keywords"); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Delegator'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), kernel = nil; $const_set($nesting[0], 'VERSION', "0.2.0"); kernel = $Kernel.$dup(); $send(kernel, 'class_eval', [], function $Delegator$1(){var self = $Delegator$1.$$s == null ? this : $Delegator$1.$$s; self.$alias_method("__raise__", "raise"); $send(["to_s", "inspect", "!~", "===", "<=>", "hash"], 'each', [], function $$2(m){var self = $$2.$$s == null ? this : $$2.$$s; if (m == null) m = nil; return self.$undef_method(m);}, {$$s: self}); return $send(self.$private_instance_methods(), 'each', [], function $$3(m){var self = $$3.$$s == null ? this : $$3.$$s; if (m == null) m = nil; if ($truthy(/^block_given\?$|^iterator\?$|^__.*__$/['$=~'](m))) { return nil }; return self.$undef_method(m);}, {$$s: self});}, {$$s: self}); self.$include(kernel); $defs(self, '$const_missing', function $$const_missing(n) { return $Object.$const_get(n) }); $def(self, '$initialize', function $$initialize(obj) { var self = this; return self.$__setobj__(obj) }); self.$ruby2_keywords($def(self, '$method_missing', function $$method_missing(m, $a) { var block = $$method_missing.$$p || nil, $post_args, args, self = this, r = nil, target = nil; $$method_missing.$$p = null; ; $post_args = $slice(arguments, 1); args = $post_args; r = true; target = $send(self, '__getobj__', [], function $$4(){ return (r = false)}); if (($truthy(r) && ($truthy(self['$target_respond_to?'](target, m, false))))) { return $send(target, '__send__', [m].concat($to_a(args)), block.$to_proc()) } else if (($truthy($Kernel['$method_defined?'](m)) || ($truthy($Kernel['$private_method_defined?'](m))))) { return $send($Kernel.$instance_method(m), 'bind_call', [self].concat($to_a(args)), block.$to_proc()) } else { return $send2(self, $find_super(self, 'method_missing', $$method_missing, false, true), 'method_missing', [m].concat($to_a(args)), block.$to_proc()) }; }, -2)); $def(self, '$respond_to_missing?', function $Delegator_respond_to_missing$ques$5(m, include_private) { var self = this, r = nil, target = nil, $ret_or_1 = nil; r = true; target = $send(self, '__getobj__', [], function $$6(){ return (r = false)}); r = ($truthy(($ret_or_1 = r)) ? (self['$target_respond_to?'](target, m, include_private)) : ($ret_or_1)); if ((($truthy(r) && ($truthy(include_private))) && ($not(self['$target_respond_to?'](target, m, false))))) { self.$warn("delegator does not forward private method #" + (m), (new Map([["uplevel", 3]]))); return false; }; return r; }); $const_set($nesting[0], 'KERNEL_RESPOND_TO', $Kernel.$instance_method("respond_to?")); self.$private_constant("KERNEL_RESPOND_TO"); self.$private($def(self, '$target_respond_to?', function $Delegator_target_respond_to$ques$7(target, m, include_private) { var $ret_or_1 = nil; if ($eqeqeq($$('Object'), ($ret_or_1 = target))) { return target['$respond_to?'](m, include_private) } else if ($truthy($$('KERNEL_RESPOND_TO').$bind_call(target, "respond_to?"))) { return target['$respond_to?'](m, include_private) } else { return $$('KERNEL_RESPOND_TO').$bind_call(target, m, include_private) } })); $def(self, '$methods', function $$methods(all) { var $yield = $$methods.$$p || nil, self = this; $$methods.$$p = null; if (all == null) all = true; return self.$__getobj__().$methods(all)['$|']($send2(self, $find_super(self, 'methods', $$methods, false, true), 'methods', [all], $yield)); }, -1); $def(self, '$public_methods', function $$public_methods(all) { var $yield = $$public_methods.$$p || nil, self = this; $$public_methods.$$p = null; if (all == null) all = true; return self.$__getobj__().$public_methods(all)['$|']($send2(self, $find_super(self, 'public_methods', $$public_methods, false, true), 'public_methods', [all], $yield)); }, -1); $def(self, '$protected_methods', function $$protected_methods(all) { var $yield = $$protected_methods.$$p || nil, self = this; $$protected_methods.$$p = null; if (all == null) all = true; return self.$__getobj__().$protected_methods(all)['$|']($send2(self, $find_super(self, 'protected_methods', $$protected_methods, false, true), 'protected_methods', [all], $yield)); }, -1); $def(self, '$==', function $Delegator_$eq_eq$8(obj) { var self = this; if ($truthy(obj['$equal?'](self))) { return true }; return self.$__getobj__()['$=='](obj); }); $def(self, '$!=', function $Delegator_$not_eq$9(obj) { var self = this; if ($truthy(obj['$equal?'](self))) { return false }; return self.$__getobj__()['$!='](obj); }); $def(self, '$eql?', function $Delegator_eql$ques$10(obj) { var self = this; if ($truthy(obj['$equal?'](self))) { return true }; return obj['$eql?'](self.$__getobj__()); }); $def(self, '$!', function $Delegator_$excl$11() { var self = this; return self.$__getobj__()['$!']() }); $def(self, '$__getobj__', function $$__getobj__() { var self = this; return self.$__raise__($$$('NotImplementedError'), "need to define `__getobj__'") }); $def(self, '$__setobj__', function $$__setobj__(obj) { var self = this; return self.$__raise__($$$('NotImplementedError'), "need to define `__setobj__'") }); $def(self, '$marshal_dump', function $$marshal_dump() { var self = this, ivars = nil; ivars = $send(self.$instance_variables(), 'reject', [], function $$12(var$){ if (var$ == null) var$ = nil; return /^@delegate_/['$=~'](var$);}); return ["__v2__", ivars, $send(ivars, 'map', [], function $$13(var$){var self = $$13.$$s == null ? this : $$13.$$s; if (var$ == null) var$ = nil; return self.$instance_variable_get(var$);}, {$$s: self}), self.$__getobj__()]; }); $def(self, '$marshal_load', function $$marshal_load(data) { var $a, $b, self = this, version = nil, vars = nil, values = nil, obj = nil; $b = data, $a = $to_ary($b), (version = ($a[0] == null ? nil : $a[0])), (vars = ($a[1] == null ? nil : $a[1])), (values = ($a[2] == null ? nil : $a[2])), (obj = ($a[3] == null ? nil : $a[3])), $b; if ($eqeq(version, "__v2__")) { $send(vars, 'each_with_index', [], function $$14(var$, i){var self = $$14.$$s == null ? this : $$14.$$s; if (var$ == null) var$ = nil; if (i == null) i = nil; return self.$instance_variable_set(var$, values['$[]'](i));}, {$$s: self}); return self.$__setobj__(obj); } else { return self.$__setobj__(data) }; }); $def(self, '$initialize_clone', function $$initialize_clone(obj, $kwargs) { var freeze, self = this; $kwargs = $ensure_kwargs($kwargs); freeze = $hash_get($kwargs, "freeze");if (freeze == null) freeze = nil; return self.$__setobj__(obj.$__getobj__().$clone((new Map([["freeze", freeze]])))); }, -2); $def(self, '$initialize_dup', function $$initialize_dup(obj) { var self = this; return self.$__setobj__(obj.$__getobj__().$dup()) }); self.$private("initialize_clone", "initialize_dup"); $def(self, '$freeze', function $$freeze() { var self = this; self.$__getobj__().$freeze(); $freeze_props(self); return $freeze(self);; }); $def(self, '$frozen?', function $Delegator_frozen$ques$15() { var self = this; return (self.$$frozen || false); }); self.delegator_api = self.$public_instance_methods(); return $defs(self, '$public_api', $return_ivar("delegator_api")); })($nesting[0], $$('BasicObject'), $nesting); (function($base, $super) { var self = $klass($base, $super, 'SimpleDelegator'); var $proto = self.$$prototype; $proto.delegate_sd_obj = nil; $def(self, '$__getobj__', function $$__getobj__() { var $a, $yield = $$__getobj__.$$p || nil, self = this; $$__getobj__.$$p = null; if (!$truthy((($a = self['delegate_sd_obj'], $a != null && $a !== nil) ? 'instance-variable' : nil))) { if (($yield !== nil)) { return Opal.yieldX($yield, []) }; self.$__raise__($$$('ArgumentError'), "not delegated"); }; return self.delegate_sd_obj; }); return $def(self, '$__setobj__', function $$__setobj__(obj) { var self = this; if ($truthy(self['$equal?'](obj))) { self.$__raise__($$$('ArgumentError'), "cannot delegate to self") }; return (self.delegate_sd_obj = obj); }); })($nesting[0], $$('Delegator')); $defs($$('Delegator'), '$delegating_block', function $$delegating_block(mid) { var $yield = $$delegating_block.$$p || nil, self = this; $$delegating_block.$$p = null; return $lambda(function $$16($a){var block = $$16.$$p || nil, $post_args, args, self = $$16.$$s == null ? this : $$16.$$s, target = nil; $$16.$$p = null; ; $post_args = $slice(arguments); args = $post_args; target = self.$__getobj__(); return $send(target, '__send__', [mid].concat($to_a(args)), block.$to_proc());}, {$$arity: -1, $$s: self}).$ruby2_keywords() }); return $def(self, '$DelegateClass', function $$DelegateClass(superclass) { var block = $$DelegateClass.$$p || nil, self = this, klass = nil, ignores = nil, protected_instance_methods = nil, public_instance_methods = nil; $$DelegateClass.$$p = null; ; klass = $$('Class').$new($$('Delegator')); ignores = [].concat($to_a($$$('Delegator').$public_api())).concat(["to_s", "inspect", "=~", "!~", "==="]); protected_instance_methods = superclass.$protected_instance_methods(); protected_instance_methods = $rb_minus(protected_instance_methods, ignores); public_instance_methods = superclass.$public_instance_methods(); public_instance_methods = $rb_minus(public_instance_methods, ignores); $send(klass, 'module_eval', [], function $$17(){var self = $$17.$$s == null ? this : $$17.$$s; $def(self, '$__getobj__', function $$__getobj__() { var $a, $yield = $$__getobj__.$$p || nil, self = this; if (self.delegate_dc_obj == null) self.delegate_dc_obj = nil; $$__getobj__.$$p = null; if (!$truthy((($a = self['delegate_dc_obj'], $a != null && $a !== nil) ? 'instance-variable' : nil))) { if (($yield !== nil)) { return Opal.yieldX($yield, []) }; self.$__raise__($$$('ArgumentError'), "not delegated"); }; return self.delegate_dc_obj; }); $def(self, '$__setobj__', function $$__setobj__(obj) { var self = this; if ($truthy(self['$equal?'](obj))) { self.$__raise__($$$('ArgumentError'), "cannot delegate to self") }; return (self.delegate_dc_obj = obj); }); $send(protected_instance_methods, 'each', [], function $$18(method){var self = $$18.$$s == null ? this : $$18.$$s; if (method == null) method = nil; self.$define_method(method, $$('Delegator').$delegating_block(method)); return self.$protected(method);}, {$$s: self}); return $send(public_instance_methods, 'each', [], function $$19(method){var self = $$19.$$s == null ? this : $$19.$$s; if (method == null) method = nil; return self.$define_method(method, $$('Delegator').$delegating_block(method));}, {$$s: self});}, {$$s: self}); $send(klass, 'define_singleton_method', ["public_instance_methods"], function $$20(all){var self = $$20.$$s == null ? this : $$20.$$s; if (all == null) all = true; return $send2(self, $find_block_super(self, 'DelegateClass', ($$20.$$def || $$DelegateClass), false, false), 'DelegateClass', [all], null)['$|'](superclass.$public_instance_methods());}, {$$arity: -1, $$s: self}); $send(klass, 'define_singleton_method', ["protected_instance_methods"], function $$21(all){var self = $$21.$$s == null ? this : $$21.$$s; if (all == null) all = true; return $send2(self, $find_block_super(self, 'DelegateClass', ($$21.$$def || $$DelegateClass), false, false), 'DelegateClass', [all], null)['$|'](superclass.$protected_instance_methods());}, {$$arity: -1, $$s: self}); $send(klass, 'define_singleton_method', ["instance_methods"], function $$22(all){var self = $$22.$$s == null ? this : $$22.$$s; if (all == null) all = true; return $send2(self, $find_block_super(self, 'DelegateClass', ($$22.$$def || $$DelegateClass), false, false), 'DelegateClass', [all], null)['$|'](superclass.$instance_methods());}, {$$arity: -1, $$s: self}); $send(klass, 'define_singleton_method', ["public_instance_method"], function $$23(name){var self = $$23.$$s == null ? this : $$23.$$s; if (name == null) name = nil; try { return $send2(self, $find_block_super(self, 'DelegateClass', ($$23.$$def || $$DelegateClass), false, false), 'DelegateClass', [name], null) } catch ($err) { if (Opal.rescue($err, [$$('NameError')])) { try { if (!$truthy(self.$public_instance_methods()['$include?'](name))) { self.$raise() }; return superclass.$public_instance_method(name); } finally { Opal.pop_exception($err); } } else { throw $err; } };}, {$$s: self}); $send(klass, 'define_singleton_method', ["instance_method"], function $$24(name){var self = $$24.$$s == null ? this : $$24.$$s; if (name == null) name = nil; try { return $send2(self, $find_block_super(self, 'DelegateClass', ($$24.$$def || $$DelegateClass), false, false), 'DelegateClass', [name], null) } catch ($err) { if (Opal.rescue($err, [$$('NameError')])) { try { if (!$truthy(self.$instance_methods()['$include?'](name))) { self.$raise() }; return superclass.$instance_method(name); } finally { Opal.pop_exception($err); } } else { throw $err; } };}, {$$s: self}); if ($truthy(block)) { $send(klass, 'module_eval', [], block.$to_proc()) }; return klass; }); }; Opal.modules["forwardable"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $send = Opal.send, $truthy = Opal.truthy, $def = Opal.def, $slice = Opal.slice, $to_a = Opal.to_a, $alias = Opal.alias, $nesting = [], nil = Opal.nil; Opal.add_stubs('each,respond_to?,def_instance_delegator,include?,start_with?,to_s,define_method,__send__,instance_variable_get,to_proc,instance_delegate,def_instance_delegators,def_single_delegator,define_singleton_method,single_delegate,def_single_delegators'); (function($base) { var self = $module($base, 'Forwardable'); $def(self, '$instance_delegate', function $$instance_delegate(hash) { var self = this; return $send(hash, 'each', [], function $$1(methods, accessor){var self = $$1.$$s == null ? this : $$1.$$s; if (methods == null) methods = nil; if (accessor == null) accessor = nil; if (!$truthy(methods['$respond_to?']("each"))) { methods = [methods] }; return $send(methods, 'each', [], function $$2(method){var self = $$2.$$s == null ? this : $$2.$$s; if (method == null) method = nil; return self.$def_instance_delegator(accessor, method);}, {$$s: self});}, {$$s: self}) }); $def(self, '$def_instance_delegators', function $$def_instance_delegators(accessor, $a) { var $post_args, methods, self = this; $post_args = $slice(arguments, 1); methods = $post_args; return $send(methods, 'each', [], function $$3(method){var self = $$3.$$s == null ? this : $$3.$$s; if (method == null) method = nil; if ($truthy(["__send__", "__id__"]['$include?'](method))) { return nil }; return self.$def_instance_delegator(accessor, method);}, {$$s: self}); }, -2); $def(self, '$def_instance_delegator', function $$def_instance_delegator(accessor, method, ali) { var $yield = $$def_instance_delegator.$$p || nil, self = this; $$def_instance_delegator.$$p = null; if (ali == null) ali = method; if ($truthy(accessor.$to_s()['$start_with?']("@"))) { return $send(self, 'define_method', [ali], function $$4($a){var block = $$4.$$p || nil, $post_args, args, self = $$4.$$s == null ? this : $$4.$$s; $$4.$$p = null; ; $post_args = $slice(arguments); args = $post_args; return $send(self.$instance_variable_get(accessor), '__send__', [method].concat($to_a(args)), block.$to_proc());}, {$$arity: -1, $$s: self}) } else { return $send(self, 'define_method', [ali], function $$5($a){var block = $$5.$$p || nil, $post_args, args, self = $$5.$$s == null ? this : $$5.$$s; $$5.$$p = null; ; $post_args = $slice(arguments); args = $post_args; return $send(self.$__send__(accessor), '__send__', [method].concat($to_a(args)), block.$to_proc());}, {$$arity: -1, $$s: self}) }; }, -3); $alias(self, "delegate", "instance_delegate"); $alias(self, "def_delegators", "def_instance_delegators"); return $alias(self, "def_delegator", "def_instance_delegator"); })($nesting[0]); return (function($base) { var self = $module($base, 'SingleForwardable'); $def(self, '$single_delegate', function $$single_delegate(hash) { var self = this; return $send(hash, 'each', [], function $$6(methods, accessor){var self = $$6.$$s == null ? this : $$6.$$s; if (methods == null) methods = nil; if (accessor == null) accessor = nil; if (!$truthy(methods['$respond_to?']("each"))) { methods = [methods] }; return $send(methods, 'each', [], function $$7(method){var self = $$7.$$s == null ? this : $$7.$$s; if (method == null) method = nil; return self.$def_single_delegator(accessor, method);}, {$$s: self});}, {$$s: self}) }); $def(self, '$def_single_delegators', function $$def_single_delegators(accessor, $a) { var $post_args, methods, self = this; $post_args = $slice(arguments, 1); methods = $post_args; return $send(methods, 'each', [], function $$8(method){var self = $$8.$$s == null ? this : $$8.$$s; if (method == null) method = nil; if ($truthy(["__send__", "__id__"]['$include?'](method))) { return nil }; return self.$def_single_delegator(accessor, method);}, {$$s: self}); }, -2); $def(self, '$def_single_delegator', function $$def_single_delegator(accessor, method, ali) { var $yield = $$def_single_delegator.$$p || nil, self = this; $$def_single_delegator.$$p = null; if (ali == null) ali = method; if ($truthy(accessor.$to_s()['$start_with?']("@"))) { return $send(self, 'define_singleton_method', [ali], function $$9($a){var block = $$9.$$p || nil, $post_args, args, self = $$9.$$s == null ? this : $$9.$$s; $$9.$$p = null; ; $post_args = $slice(arguments); args = $post_args; return $send(self.$instance_variable_get(accessor), '__send__', [method].concat($to_a(args)), block.$to_proc());}, {$$arity: -1, $$s: self}) } else { return $send(self, 'define_singleton_method', [ali], function $$10($a){var block = $$10.$$p || nil, $post_args, args, self = $$10.$$s == null ? this : $$10.$$s; $$10.$$p = null; ; $post_args = $slice(arguments); args = $post_args; return $send(self.$__send__(accessor), '__send__', [method].concat($to_a(args)), block.$to_proc());}, {$$arity: -1, $$s: self}) }; }, -3); $alias(self, "delegate", "single_delegate"); $alias(self, "def_delegators", "def_single_delegators"); return $alias(self, "def_delegator", "def_single_delegator"); })($nesting[0]); }; Opal.modules["thread"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $truthy = Opal.truthy, $defs = Opal.defs, $slice = Opal.slice, $def = Opal.def, $send = Opal.send, $Opal = Opal.Opal, $alias = Opal.alias, $return_ivar = Opal.return_ivar, $const_set = Opal.const_set, $assign_ivar_val = Opal.assign_ivar_val, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('allocate,core_initialize!,current,raise,[],coerce_key_name,[]=,key?,keys,private,coerce_to!,clear,empty?,size,shift,push,each,to_proc,pop,=~,last_match,to_i,inspect,attr_reader,path,locked?,lock,unlock'); $klass($nesting[0], $$('StandardError'), 'ThreadError'); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Thread'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.fiber_locals = $proto.thread_locals = nil; $defs(self, '$current', function $$current() { var self = this; if (self.current == null) self.current = nil; if (!$truthy(self.current)) { self.current = self.$allocate(); self.current['$core_initialize!'](); }; return self.current; }); $defs(self, '$list', function $$list() { var self = this; return [self.$current()] }); $def(self, '$initialize', function $$initialize($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; return self.$raise($$('NotImplementedError'), "Thread creation not available"); }, -1); $def(self, '$[]', function $Thread_$$$1(key) { var self = this; return self.fiber_locals['$[]'](self.$coerce_key_name(key)) }); $def(self, '$[]=', function $Thread_$$$eq$2(key, value) { var $a, self = this; return ($a = [self.$coerce_key_name(key), value], $send(self.fiber_locals, '[]=', $a), $a[$a.length - 1]) }); $def(self, '$key?', function $Thread_key$ques$3(key) { var self = this; return self.fiber_locals['$key?'](self.$coerce_key_name(key)) }); $def(self, '$keys', function $$keys() { var self = this; return self.fiber_locals.$keys() }); $def(self, '$thread_variable_get', function $$thread_variable_get(key) { var self = this; return self.thread_locals['$[]'](self.$coerce_key_name(key)) }); $def(self, '$thread_variable_set', function $$thread_variable_set(key, value) { var $a, self = this; return ($a = [self.$coerce_key_name(key), value], $send(self.thread_locals, '[]=', $a), $a[$a.length - 1]) }); $def(self, '$thread_variable?', function $Thread_thread_variable$ques$4(key) { var self = this; return self.thread_locals['$key?'](self.$coerce_key_name(key)) }); $def(self, '$thread_variables', function $$thread_variables() { var self = this; return self.thread_locals.$keys() }); self.$private(); $def(self, '$core_initialize!', function $Thread_core_initialize$excl$5() { var self = this; self.thread_locals = (new Map()); return (self.fiber_locals = (new Map())); }); $def(self, '$coerce_key_name', function $$coerce_key_name(key) { return $Opal['$coerce_to!'](key, $$('String'), "to_s") }); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Queue'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.storage = nil; $def(self, '$initialize', function $$initialize() { var self = this; return self.$clear() }); $def(self, '$clear', function $$clear() { var self = this; return (self.storage = []) }); $def(self, '$empty?', function $Queue_empty$ques$6() { var self = this; return self.storage['$empty?']() }); $def(self, '$size', function $$size() { var self = this; return self.storage.$size() }); $def(self, '$pop', function $$pop(non_block) { var self = this; if (non_block == null) non_block = false; if ($truthy(self['$empty?']())) { if ($truthy(non_block)) { self.$raise($$('ThreadError'), "Queue empty") }; self.$raise($$('ThreadError'), "Deadlock"); }; return self.storage.$shift(); }, -1); $def(self, '$push', function $$push(value) { var self = this; return self.storage.$push(value) }); $def(self, '$each', function $$each() { var block = $$each.$$p || nil, self = this; $$each.$$p = null; ; return $send(self.storage, 'each', [], block.$to_proc()); }); $alias(self, "<<", "push"); $alias(self, "deq", "pop"); $alias(self, "enq", "push"); $alias(self, "length", "size"); return $alias(self, "shift", "pop"); })($nesting[0], null, $nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Backtrace'); var $nesting = [self].concat($parent_nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Location'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.label = $proto.str = nil; $def(self, '$initialize', function $$initialize(str) { var self = this, $ret_or_1 = nil; self.str = str; str['$=~'](/^(.*?):(\d+):(\d+):in `(.*?)'$/); self.path = $$('Regexp').$last_match(1); self.label = $$('Regexp').$last_match(4); self.lineno = $$('Regexp').$last_match(2).$to_i(); self.label['$=~'](/(\w+)$/); return (self.base_label = ($truthy(($ret_or_1 = $$('Regexp').$last_match(1))) ? ($ret_or_1) : (self.label))); }); $def(self, '$to_s', $return_ivar("str")); $def(self, '$inspect', function $$inspect() { var self = this; return self.str.$inspect() }); self.$attr_reader("base_label", "label", "lineno", "path"); return $alias(self, "absolute_path", "path"); })($nesting[0], null, $nesting) })($nesting[0], null, $nesting); })($nesting[0], null, $nesting); $const_set($nesting[0], 'Queue', $$$($$('Thread'), 'Queue')); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Mutex'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.locked = nil; $def(self, '$initialize', $assign_ivar_val("locked", false)); $def(self, '$lock', function $$lock() { var self = this; if ($truthy(self.locked)) { self.$raise($$('ThreadError'), "Deadlock") }; self.locked = true; return self; }); $def(self, '$locked?', $return_ivar("locked")); $def(self, '$owned?', $return_ivar("locked")); $def(self, '$try_lock', function $$try_lock() { var self = this; if ($truthy(self['$locked?']())) { return false } else { self.$lock(); return true; } }); $def(self, '$unlock', function $$unlock() { var self = this; if (!$truthy(self.locked)) { self.$raise($$('ThreadError'), "Mutex not locked") }; self.locked = false; return self; }); return $def(self, '$synchronize', function $$synchronize() { var $yield = $$synchronize.$$p || nil, self = this; $$synchronize.$$p = null; self.$lock(); return (function() { try { return Opal.yieldX($yield, []); } finally { self.$unlock() }; })();; }); })($nesting[0], null, $nesting); }; Opal.modules["stringio"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $const_set = Opal.const_set, $defs = Opal.defs, $send2 = Opal.send2, $find_super = Opal.find_super, $def = Opal.def, $eqeqeq = Opal.eqeqeq, $truthy = Opal.truthy, $rb_ge = Opal.rb_ge, $rb_gt = Opal.rb_gt, $rb_plus = Opal.rb_plus, $rb_minus = Opal.rb_minus, $return_ivar = Opal.return_ivar, $eqeq = Opal.eqeq, $alias = Opal.alias, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('new,call,close,attr_accessor,check_readable,==,length,===,>=,raise,>,+,-,seek,check_writable,String,[],eof?,write,read,tell'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'StringIO'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.position = $proto.string = nil; $const_set($nesting[0], 'VERSION', "0"); $defs(self, '$open', function $$open(string, mode) { var block = $$open.$$p || nil, self = this, io = nil, res = nil; $$open.$$p = null; ; if (string == null) string = ""; if (mode == null) mode = nil; io = self.$new(string, mode); res = block.$call(io); io.$close(); return res; }, -1); self.$attr_accessor("string"); $def(self, '$initialize', function $$initialize(string, mode) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; if (string == null) string = ""; if (mode == null) mode = "rw"; self.string = string; self.position = 0; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [nil, mode], null); }, -1); $def(self, '$eof?', function $StringIO_eof$ques$1() { var self = this; self.$check_readable(); return self.position['$=='](self.string.$length()); }); $def(self, '$seek', function $$seek(pos, whence) { var self = this, $ret_or_1 = nil; if (whence == null) whence = $$$($$('IO'), 'SEEK_SET'); self.read_buffer = ""; if ($eqeqeq($$$($$('IO'), 'SEEK_SET'), ($ret_or_1 = whence))) { if (!$truthy($rb_ge(pos, 0))) { self.$raise($$$($$('Errno'), 'EINVAL')) }; self.position = pos; } else if ($eqeqeq($$$($$('IO'), 'SEEK_CUR'), $ret_or_1)) { if ($truthy($rb_gt($rb_plus(self.position, pos), self.string.$length()))) { self.position = self.string.$length() } else { self.position = $rb_plus(self.position, pos) } } else if ($eqeqeq($$$($$('IO'), 'SEEK_END'), $ret_or_1)) { if ($truthy($rb_gt(pos, self.string.$length()))) { self.position = 0 } else { self.position = $rb_minus(self.position, pos) } } else { nil }; return 0; }, -2); $def(self, '$tell', $return_ivar("position")); $def(self, '$rewind', function $$rewind() { var self = this; return self.$seek(0) }); $def(self, '$write', function $$write(string) { var self = this, before = nil, after = nil; self.$check_writable(); self.read_buffer = ""; string = self.$String(string); if ($eqeq(self.string.$length(), self.position)) { self.string = $rb_plus(self.string, string); return (self.position = $rb_plus(self.position, string.$length())); } else { before = self.string['$[]'](Opal.Range.$new(0, $rb_minus(self.position, 1), false)); after = self.string['$[]'](Opal.Range.$new($rb_plus(self.position, string.$length()), -1, false)); self.string = $rb_plus($rb_plus(before, string), after); return (self.position = $rb_plus(self.position, string.$length())); }; }); $def(self, '$read', function $$read(length, outbuf) { var self = this, string = nil, str = nil; if (length == null) length = nil; if (outbuf == null) outbuf = nil; self.$check_readable(); if ($truthy(self['$eof?']())) { return nil }; string = ($truthy(length) ? (((str = self.string['$[]'](self.position, length)), (self.position = $rb_plus(self.position, length)), ($truthy($rb_gt(self.position, self.string.$length())) ? ((self.position = self.string.$length())) : nil), str)) : (((str = self.string['$[]'](Opal.Range.$new(self.position, -1, false))), (self.position = self.string.$length()), str))); if ($truthy(outbuf)) { return outbuf.$write(string) } else { return string }; }, -1); $def(self, '$sysread', function $$sysread(length) { var self = this; self.$check_readable(); return self.$read(length); }); $alias(self, "eof", "eof?"); $alias(self, "pos", "tell"); $alias(self, "pos=", "seek"); return $alias(self, "readpartial", "read"); })($nesting[0], $$('IO'), $nesting) }; Opal.modules["prettyprint"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $send = Opal.send, $rb_times = Opal.rb_times, $defs = Opal.defs, $truthy = Opal.truthy, $def = Opal.def, $rb_lt = Opal.rb_lt, $rb_plus = Opal.rb_plus, $rb_minus = Opal.rb_minus, $eqeqeq = Opal.eqeqeq, $assign_ivar_val = Opal.assign_ivar_val, $return_ivar = Opal.return_ivar, $slice = Opal.slice, $thrower = Opal.thrower, $return_val = Opal.return_val, $nesting = [], nil = Opal.nil; Opal.add_stubs('dup,lambda,*,new,to_proc,flush,attr_reader,last,<,+,deq,empty?,breakables,shift,output,-,width,!,===,first,length,<<,add,break_outmost_groups,group,breakable,break?,call,text,group_sub,nest,depth,push,enq,pop,delete,each,clear,indent,current_group,newline,genspace,group_queue,[],downto,slice!,break,[]='); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'PrettyPrint'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.group_stack = $proto.maxwidth = $proto.output_width = $proto.buffer_width = $proto.group_queue = $proto.buffer = $proto.output = $proto.newline = $proto.genspace = $proto.indent = nil; $defs($$('PrettyPrint'), '$format', function $$format(output, maxwidth, newline, genspace) { var $yield = $$format.$$p || nil, self = this, q = nil; $$format.$$p = null; if (output == null) output = "".$dup(); if (maxwidth == null) maxwidth = 79; if (newline == null) newline = "\n"; if (genspace == null) genspace = $send(self, 'lambda', [], function $$1(n){ if (n == null) n = nil; return $rb_times(" ", n);}); q = $send($$('PrettyPrint'), 'new', [output, maxwidth, newline], genspace.$to_proc()); Opal.yield1($yield, q); q.$flush(); return output; }, -1); $defs($$('PrettyPrint'), '$singleline_format', function $$singleline_format(output, maxwidth, newline, genspace) { var $yield = $$singleline_format.$$p || nil, q = nil; $$singleline_format.$$p = null; if (output == null) output = "".$dup(); if (maxwidth == null) maxwidth = nil; if (newline == null) newline = nil; if (genspace == null) genspace = nil; q = $$('SingleLine').$new(output); Opal.yield1($yield, q); return output; }, -1); $def(self, '$initialize', function $$initialize(output, maxwidth, newline) { var genspace = $$initialize.$$p || nil, self = this, $ret_or_1 = nil, root_group = nil; $$initialize.$$p = null; ; if (output == null) output = "".$dup(); if (maxwidth == null) maxwidth = 79; if (newline == null) newline = "\n"; self.output = output; self.maxwidth = maxwidth; self.newline = newline; self.genspace = ($truthy(($ret_or_1 = genspace)) ? ($ret_or_1) : ($send(self, 'lambda', [], function $$2(n){ if (n == null) n = nil; return $rb_times(" ", n);}))); self.output_width = 0; self.buffer_width = 0; self.buffer = []; root_group = $$('Group').$new(0); self.group_stack = [root_group]; self.group_queue = $$('GroupQueue').$new(root_group); return (self.indent = 0); }, -1); self.$attr_reader("output"); self.$attr_reader("maxwidth"); self.$attr_reader("newline"); self.$attr_reader("genspace"); self.$attr_reader("indent"); self.$attr_reader("group_queue"); $def(self, '$current_group', function $$current_group() { var self = this; return self.group_stack.$last() }); $def(self, '$break_outmost_groups', function $$break_outmost_groups() { var self = this, group = nil, data = nil, $ret_or_1 = nil, text = nil; while ($truthy($rb_lt(self.maxwidth, $rb_plus(self.output_width, self.buffer_width)))) { if (!$truthy((group = self.group_queue.$deq()))) { return nil }; while (!($truthy(group.$breakables()['$empty?']()))) { data = self.buffer.$shift(); self.output_width = data.$output(self.output, self.output_width); self.buffer_width = $rb_minus(self.buffer_width, data.$width()); }; while ($truthy(($truthy(($ret_or_1 = self.buffer['$empty?']()['$!']())) ? ($$('Text')['$==='](self.buffer.$first())) : ($ret_or_1)))) { text = self.buffer.$shift(); self.output_width = text.$output(self.output, self.output_width); self.buffer_width = $rb_minus(self.buffer_width, text.$width()); }; } }); $def(self, '$text', function $$text(obj, width) { var self = this, text = nil; if (width == null) width = obj.$length(); if ($truthy(self.buffer['$empty?']())) { self.output['$<<'](obj); return (self.output_width = $rb_plus(self.output_width, width)); } else { text = self.buffer.$last(); if (!$eqeqeq($$('Text'), text)) { text = $$('Text').$new(); self.buffer['$<<'](text); }; text.$add(obj, width); self.buffer_width = $rb_plus(self.buffer_width, width); return self.$break_outmost_groups(); }; }, -2); $def(self, '$fill_breakable', function $$fill_breakable(sep, width) { var self = this; if (sep == null) sep = " "; if (width == null) width = sep.$length(); return $send(self, 'group', [], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s; return self.$breakable(sep, width)}, {$$s: self}); }, -1); $def(self, '$breakable', function $$breakable(sep, width) { var self = this, group = nil; if (sep == null) sep = " "; if (width == null) width = sep.$length(); group = self.group_stack.$last(); if ($truthy(group['$break?']())) { self.$flush(); self.output['$<<'](self.newline); self.output['$<<'](self.genspace.$call(self.indent)); self.output_width = self.indent; return (self.buffer_width = 0); } else { self.buffer['$<<']($$('Breakable').$new(sep, width, self)); self.buffer_width = $rb_plus(self.buffer_width, width); return self.$break_outmost_groups(); }; }, -1); $def(self, '$group', function $$group(indent, open_obj, close_obj, open_width, close_width) { var $yield = $$group.$$p || nil, self = this; $$group.$$p = null; if (indent == null) indent = 0; if (open_obj == null) open_obj = ""; if (close_obj == null) close_obj = ""; if (open_width == null) open_width = open_obj.$length(); if (close_width == null) close_width = close_obj.$length(); self.$text(open_obj, open_width); $send(self, 'group_sub', [], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; return $send(self, 'nest', [indent], function $$5(){ return Opal.yieldX($yield, []);})}, {$$s: self}); return self.$text(close_obj, close_width); }, -1); $def(self, '$group_sub', function $$group_sub() { var $yield = $$group_sub.$$p || nil, self = this, group = nil; $$group_sub.$$p = null; group = $$('Group').$new($rb_plus(self.group_stack.$last().$depth(), 1)); self.group_stack.$push(group); self.group_queue.$enq(group); return (function() { try { return Opal.yieldX($yield, []); } finally { (self.group_stack.$pop(), ($truthy(group.$breakables()['$empty?']()) ? (self.group_queue.$delete(group)) : nil)) }; })();; }); $def(self, '$nest', function $$nest(indent) { var $yield = $$nest.$$p || nil, self = this; $$nest.$$p = null; self.indent = $rb_plus(self.indent, indent); return (function() { try { return Opal.yieldX($yield, []); } finally { (self.indent = $rb_minus(self.indent, indent)) }; })();; }); $def(self, '$flush', function $$flush() { var self = this; $send(self.buffer, 'each', [], function $$6(data){var self = $$6.$$s == null ? this : $$6.$$s; if (self.output == null) self.output = nil; if (self.output_width == null) self.output_width = nil; if (data == null) data = nil; return (self.output_width = data.$output(self.output, self.output_width));}, {$$s: self}); self.buffer.$clear(); return (self.buffer_width = 0); }); (function($base, $super) { var self = $klass($base, $super, 'Text'); var $proto = self.$$prototype; $proto.objs = $proto.width = nil; $def(self, '$initialize', function $$initialize() { var self = this; self.objs = []; return (self.width = 0); }); self.$attr_reader("width"); $def(self, '$output', function $$output(out, output_width) { var self = this; $send(self.objs, 'each', [], function $$7(obj){ if (obj == null) obj = nil; return out['$<<'](obj);}); return $rb_plus(output_width, self.width); }); return $def(self, '$add', function $$add(obj, width) { var self = this; self.objs['$<<'](obj); return (self.width = $rb_plus(self.width, width)); }); })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'Breakable'); var $proto = self.$$prototype; $proto.group = $proto.pp = $proto.indent = $proto.obj = $proto.width = nil; $def(self, '$initialize', function $$initialize(sep, width, q) { var self = this; self.obj = sep; self.width = width; self.pp = q; self.indent = q.$indent(); self.group = q.$current_group(); return self.group.$breakables().$push(self); }); self.$attr_reader("obj"); self.$attr_reader("width"); self.$attr_reader("indent"); return $def(self, '$output', function $$output(out, output_width) { var self = this; self.group.$breakables().$shift(); if ($truthy(self.group['$break?']())) { out['$<<'](self.pp.$newline()); out['$<<'](self.pp.$genspace().$call(self.indent)); return self.indent; } else { if ($truthy(self.group.$breakables()['$empty?']())) { self.pp.$group_queue().$delete(self.group) }; out['$<<'](self.obj); return $rb_plus(output_width, self.width); }; }); })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'Group'); $def(self, '$initialize', function $$initialize(depth) { var self = this; self.depth = depth; self.breakables = []; return (self["break"] = false); }); self.$attr_reader("depth"); self.$attr_reader("breakables"); $def(self, '$break', $assign_ivar_val("break", true)); $def(self, '$break?', $return_ivar("break")); return $def(self, '$first?', function $Group_first$ques$8() { var $a, self = this; if ($truthy((($a = self['first'], $a != null && $a !== nil) ? 'instance-variable' : nil))) { return false } else { self.first = false; return true; } }); })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'GroupQueue'); var $proto = self.$$prototype; $proto.queue = nil; $def(self, '$initialize', function $$initialize($a) { var $post_args, groups, self = this; $post_args = $slice(arguments); groups = $post_args; self.queue = []; return $send(groups, 'each', [], function $$9(g){var self = $$9.$$s == null ? this : $$9.$$s; if (g == null) g = nil; return self.$enq(g);}, {$$s: self}); }, -1); $def(self, '$enq', function $$enq(group) { var self = this, depth = nil; depth = group.$depth(); while (!($truthy($rb_lt(depth, self.queue.$length())))) { self.queue['$<<']([]) }; return self.queue['$[]'](depth)['$<<'](group); }); $def(self, '$deq', function $$deq() {try { var $t_return = $thrower('return'); var self = this; $send(self.queue, 'each', [], function $$10(gs){ if (gs == null) gs = nil; $send($rb_minus(gs.$length(), 1), 'downto', [0], function $$11(i){var group = nil; if (i == null) i = nil; if ($truthy(gs['$[]'](i).$breakables()['$empty?']())) { return nil } else { group = gs['$slice!'](i, 1).$first(); group.$break(); $t_return.$throw(group, $$11.$$is_lambda); };}, {$$ret: $t_return}); $send(gs, 'each', [], function $$12(group){ if (group == null) group = nil; return group.$break();}); return gs.$clear();}); return nil;} catch($e) { if ($e === $t_return) return $e.$v; throw $e; } finally {$t_return.is_orphan = true;} }); return $def(self, '$delete', function $GroupQueue_delete$13(group) { var self = this; return self.queue['$[]'](group.$depth()).$delete(group) }); })($nesting[0], null); return (function($base, $super) { var self = $klass($base, $super, 'SingleLine'); var $proto = self.$$prototype; $proto.output = $proto.first = nil; $def(self, '$initialize', function $$initialize(output, maxwidth, newline) { var self = this; if (maxwidth == null) maxwidth = nil; if (newline == null) newline = nil; self.output = output; return (self.first = [true]); }, -2); $def(self, '$text', function $$text(obj, width) { var self = this; if (width == null) width = nil; return self.output['$<<'](obj); }, -2); $def(self, '$breakable', function $$breakable(sep, width) { var self = this; if (sep == null) sep = " "; if (width == null) width = nil; return self.output['$<<'](sep); }, -1); $def(self, '$nest', function $$nest(indent) { var $yield = $$nest.$$p || nil; $$nest.$$p = null; return Opal.yieldX($yield, []); }); $def(self, '$group', function $$group(indent, open_obj, close_obj, open_width, close_width) { var $yield = $$group.$$p || nil, self = this; $$group.$$p = null; if (indent == null) indent = nil; if (open_obj == null) open_obj = ""; if (close_obj == null) close_obj = ""; if (open_width == null) open_width = nil; if (close_width == null) close_width = nil; self.first.$push(true); self.output['$<<'](open_obj); Opal.yieldX($yield, []); self.output['$<<'](close_obj); return self.first.$pop(); }, -1); $def(self, '$flush', $return_val(nil)); return $def(self, '$first?', function $SingleLine_first$ques$14() { var self = this, result = nil; result = self.first['$[]'](-1); self.first['$[]='](-1, false); return result; }); })($nesting[0], null); })($nesting[0], null, $nesting) }; Opal.modules["pp"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $gvars = Opal.gvars, $send = Opal.send, $defs = Opal.defs, $slice = Opal.slice, $to_a = Opal.to_a, $module = Opal.module, $eqeq = Opal.eqeq, $def = Opal.def, $truthy = Opal.truthy, $rb_plus = Opal.rb_plus, $eqeqeq = Opal.eqeqeq, $neqeq = Opal.neqeq, $not = Opal.not, $rb_gt = Opal.rb_gt, $rb_le = Opal.rb_le, self = Opal.top, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,new,guard_inspect_key,pp,flush,<<,bind_call,instance_method,to_proc,attr_accessor,==,[],current,[]=,compare_by_identity,include?,delete,text,is_a?,__getobj__,check_inspect_key,group,pretty_print_cycle,push_inspect_key,pretty_print,sharing_detection,pop_inspect_key,+,name,class,chomp,breakable,lambda,comma_breakable,__send__,call,object_address_group,seplist,pretty_print_instance_variables,===,to_s,instance_eval,include,!=,owner,inspect,respond_to?,!,pp_object,sort,instance_variables,raise,singleline_pp,dup,empty?,pp_hash,each,keys,sprintf,mcall,begin,exclude_end?,end,lines,>,size,named_captures,regexp,object_group,class_eval,string,<=,first,module_function'); self.$require("thread"); self.$require("stringio"); self.$require("prettyprint"); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'PP'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs($$('PP'), '$pp', function $$pp(obj, out, width) { var q = nil; if ($gvars.stdout == null) $gvars.stdout = nil; if (out == null) out = $gvars.stdout; if (width == null) width = 79; q = $$('PP').$new(out, width); $send(q, 'guard_inspect_key', [], function $$1(){ return q.$pp(obj)}); q.$flush(); return out['$<<']("\n"); }, -2); $defs($$('PP'), '$singleline_pp', function $$singleline_pp(obj, out) { var q = nil; if ($gvars.stdout == null) $gvars.stdout = nil; if (out == null) out = $gvars.stdout; q = $$('SingleLine').$new(out); $send(q, 'guard_inspect_key', [], function $$2(){ return q.$pp(obj)}); q.$flush(); return out; }, -2); $defs($$('PP'), '$mcall', function $$mcall(obj, mod, meth, $a) { var block = $$mcall.$$p || nil, $post_args, args; $$mcall.$$p = null; ; $post_args = $slice(arguments, 3); args = $post_args; return $send(mod.$instance_method(meth), 'bind_call', [obj].concat($to_a(args)), block.$to_proc()); }, -4); self.sharing_detection = false; (function(self, $parent_nesting) { return self.$attr_accessor("sharing_detection") })(Opal.get_singleton_class(self), $nesting); (function($base, $parent_nesting) { var self = $module($base, 'PPMethods'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$guard_inspect_key', function $$guard_inspect_key() { var $a, $yield = $$guard_inspect_key.$$p || nil, save = nil; $$guard_inspect_key.$$p = null; if ($eqeq($$('Thread').$current()['$[]']("__recursive_key__"), nil)) { $$('Thread').$current()['$[]=']("__recursive_key__", (new Map()).$compare_by_identity()) }; if ($eqeq($$('Thread').$current()['$[]']("__recursive_key__")['$[]']("inspect"), nil)) { $$('Thread').$current()['$[]']("__recursive_key__")['$[]=']("inspect", (new Map()).$compare_by_identity()) }; save = $$('Thread').$current()['$[]']("__recursive_key__")['$[]']("inspect"); return (function() { try { $$('Thread').$current()['$[]']("__recursive_key__")['$[]=']("inspect", (new Map()).$compare_by_identity()); return Opal.yieldX($yield, []);; } finally { ($a = ["inspect", save], $send($$('Thread').$current()['$[]']("__recursive_key__"), '[]=', $a), $a[$a.length - 1]) }; })();; }); $def(self, '$check_inspect_key', function $$check_inspect_key(id) { var $ret_or_1 = nil, $ret_or_2 = nil; if ($truthy(($ret_or_1 = ($truthy(($ret_or_2 = $$('Thread').$current()['$[]']("__recursive_key__"))) ? ($$('Thread').$current()['$[]']("__recursive_key__")['$[]']("inspect")) : ($ret_or_2))))) { return $$('Thread').$current()['$[]']("__recursive_key__")['$[]']("inspect")['$include?'](id) } else { return $ret_or_1 } }); $def(self, '$push_inspect_key', function $$push_inspect_key(id) { var $a; return ($a = [id, true], $send($$('Thread').$current()['$[]']("__recursive_key__")['$[]']("inspect"), '[]=', $a), $a[$a.length - 1]) }); $def(self, '$pop_inspect_key', function $$pop_inspect_key(id) { return $$('Thread').$current()['$[]']("__recursive_key__")['$[]']("inspect").$delete(id) }); $def(self, '$pp', function $$pp(obj) { var $a, self = this; ; if (obj === null) { self.$text("null") return nil } else if (obj === undefined) { self.$text("undefined") return nil } else if (obj.$$class === undefined) { self.$text(Object.prototype.toString.apply(obj)) return nil } ; if (($truthy((($a = $$$('::', 'Delegator', 'skip_raise')) ? 'constant' : nil)) && ($truthy(obj['$is_a?']($$$('Delegator')))))) { obj = obj.$__getobj__() }; if ($truthy(self.$check_inspect_key(obj))) { $send(self, 'group', [], function $$3(){var self = $$3.$$s == null ? this : $$3.$$s; return obj.$pretty_print_cycle(self)}, {$$s: self}); return nil; }; return (function() { try { self.$push_inspect_key(obj); return $send(self, 'group', [], function $$4(){var self = $$4.$$s == null ? this : $$4.$$s; return obj.$pretty_print(self)}, {$$s: self}); } finally { ($truthy($$('PP').$sharing_detection()) ? (nil) : (self.$pop_inspect_key(obj))) }; })();; }, -1); $def(self, '$object_group', function $$object_group(obj) { var block = $$object_group.$$p || nil, self = this; $$object_group.$$p = null; ; return $send(self, 'group', [1, $rb_plus("#<", obj.$class().$name()), ">"], block.$to_proc()); }); $def(self, '$object_address_group', function $$object_address_group(obj) { var block = $$object_address_group.$$p || nil, self = this, str = nil; $$object_address_group.$$p = null; ; str = $$('Kernel').$instance_method("to_s").$bind_call(obj); str = str.$chomp(">"); return $send(self, 'group', [1, str, ">"], block.$to_proc()); }); $def(self, '$comma_breakable', function $$comma_breakable() { var self = this; self.$text(","); return self.$breakable(); }); $def(self, '$seplist', function $$seplist(list, sep, iter_method) { var $yield = $$seplist.$$p || nil, self = this, $ret_or_1 = nil, first = nil; $$seplist.$$p = null; if (sep == null) sep = nil; if (iter_method == null) iter_method = "each"; sep = ($truthy(($ret_or_1 = sep)) ? ($ret_or_1) : ($send(self, 'lambda', [], function $$5(){var self = $$5.$$s == null ? this : $$5.$$s; return self.$comma_breakable()}, {$$s: self}))); first = true; return $send(list, '__send__', [iter_method], function $$6($a){var $post_args, v; $post_args = $slice(arguments); v = $post_args; if ($truthy(first)) { first = false } else { sep.$call() }; return Opal.yieldX($yield, $to_a(v));;}, -1); }, -2); $def(self, '$pp_object', function $$pp_object(obj) { var self = this; return $send(self, 'object_address_group', [obj], function $$7(){var self = $$7.$$s == null ? this : $$7.$$s; return $send(self, 'seplist', [obj.$pretty_print_instance_variables(), $send(self, 'lambda', [], function $$8(){var self = $$8.$$s == null ? this : $$8.$$s; return self.$text(",")}, {$$s: self})], function $$9(v){var self = $$9.$$s == null ? this : $$9.$$s; if (v == null) v = nil; self.$breakable(); if ($eqeqeq($$('Symbol'), v)) { v = v.$to_s() }; self.$text(v); self.$text("="); return $send(self, 'group', [1], function $$10(){var self = $$10.$$s == null ? this : $$10.$$s; self.$breakable(""); return self.$pp(obj.$instance_eval(v));}, {$$s: self});}, {$$s: self})}, {$$s: self}) }); return $def(self, '$pp_hash', function $$pp_hash(obj) { var self = this; return $send(self, 'group', [1, "{", "}"], function $$11(){var self = $$11.$$s == null ? this : $$11.$$s; return $send(self, 'seplist', [obj, nil, "each_pair"], function $$12(k, v){var self = $$12.$$s == null ? this : $$12.$$s; if (k == null) k = nil; if (v == null) v = nil; return $send(self, 'group', [], function $$13(){var self = $$13.$$s == null ? this : $$13.$$s; self.$pp(k); self.$text("=>"); return $send(self, 'group', [1], function $$14(){var self = $$14.$$s == null ? this : $$14.$$s; self.$breakable(""); return self.$pp(v);}, {$$s: self});}, {$$s: self});}, {$$s: self})}, {$$s: self}) }); })($nesting[0], $nesting); self.$include($$('PPMethods')); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'SingleLine'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return self.$include($$('PPMethods')) })($nesting[0], $$$($$('PrettyPrint'), 'SingleLine'), $nesting); return (function($base, $parent_nesting) { var self = $module($base, 'ObjectMixin'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$pretty_print', function $$pretty_print(q) { var self = this, umethod_method = nil, inspect_method = nil; umethod_method = $$('Object').$instance_method("method"); try { inspect_method = umethod_method.$bind_call(self, "inspect") } catch ($err) { if (Opal.rescue($err, [$$('NameError')])) { try { nil } finally { Opal.pop_exception($err); } } else { throw $err; } };; if (($truthy(inspect_method) && ($neqeq(inspect_method.$owner(), $$('Kernel'))))) { return q.$text(self.$inspect()) } else if (($not(inspect_method) && ($truthy(self['$respond_to?']("inspect"))))) { return q.$text(self.$inspect()) } else { return q.$pp_object(self) }; }); $def(self, '$pretty_print_cycle', function $$pretty_print_cycle(q) { var self = this; return $send(q, 'object_address_group', [self], function $$15(){ q.$breakable(); return q.$text("...");}) }); $def(self, '$pretty_print_instance_variables', function $$pretty_print_instance_variables() { var self = this; return self.$instance_variables().$sort() }); return $def(self, '$pretty_print_inspect', function $$pretty_print_inspect() { var self = this; if ($eqeq($$('Object').$instance_method("method").$bind_call(self, "pretty_print").$owner(), $$$($$('PP'), 'ObjectMixin'))) { self.$raise("pretty_print is not overridden for " + (self.$class())) }; return $$('PP').$singleline_pp(self, "".$dup()); }); })($nesting[0], $nesting); })($nesting[0], $$('PrettyPrint'), $nesting); (function($base, $super) { var self = $klass($base, $super, 'Array'); $def(self, '$pretty_print', function $$pretty_print(q) { var self = this; return $send(q, 'group', [1, "[", "]"], function $$16(){var self = $$16.$$s == null ? this : $$16.$$s; return $send(q, 'seplist', [self], function $$17(v){ if (v == null) v = nil; return q.$pp(v);})}, {$$s: self}) }); return $def(self, '$pretty_print_cycle', function $$pretty_print_cycle(q) { var self = this; return q.$text(($truthy(self['$empty?']()) ? ("[]") : ("[...]"))) }); })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'Hash'); $def(self, '$pretty_print', function $$pretty_print(q) { var self = this; return q.$pp_hash(self) }); return $def(self, '$pretty_print_cycle', function $$pretty_print_cycle(q) { var self = this; return q.$text(($truthy(self['$empty?']()) ? ("{}") : ("{...}"))) }); })($nesting[0], null); (function(self, $parent_nesting) { var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return $def(self, '$pretty_print', function $$pretty_print(q) { var h = nil; h = (new Map()); $send($$('ENV').$keys().$sort(), 'each', [], function $$18(k){var $a; if (k == null) k = nil; return ($a = [k, $$('ENV')['$[]'](k)], $send(h, '[]=', $a), $a[$a.length - 1]);}); return q.$pp_hash(h); }) })(Opal.get_singleton_class($$('ENV')), $nesting); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Struct'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$pretty_print', function $$pretty_print(q) { var self = this; return $send(q, 'group', [1, self.$sprintf("#"], function $$19(){var self = $$19.$$s == null ? this : $$19.$$s; return $send(q, 'seplist', [$$('PP').$mcall(self, $$('Struct'), "members"), $send(self, 'lambda', [], function $$20(){ return q.$text(",")})], function $$21(member){var self = $$21.$$s == null ? this : $$21.$$s; if (member == null) member = nil; q.$breakable(); q.$text(member.$to_s()); q.$text("="); return $send(q, 'group', [1], function $$22(){var self = $$22.$$s == null ? this : $$22.$$s; q.$breakable(""); return q.$pp(self['$[]'](member));}, {$$s: self});}, {$$s: self})}, {$$s: self}) }); return $def(self, '$pretty_print_cycle', function $$pretty_print_cycle(q) { var self = this; return q.$text(self.$sprintf("#", $$('PP').$mcall(self, $$('Kernel'), "class").$name())) }); })($nesting[0], null, $nesting); (function($base, $super) { var self = $klass($base, $super, 'Range'); return $def(self, '$pretty_print', function $$pretty_print(q) { var self = this; q.$pp(self.$begin()); q.$breakable(""); q.$text(($truthy(self['$exclude_end?']()) ? ("...") : (".."))); q.$breakable(""); if ($truthy(self.$end())) { return q.$pp(self.$end()) } else { return nil }; }) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'String'); return $def(self, '$pretty_print', function $$pretty_print(q) { var self = this, lines = nil; lines = self.$lines(); if ($truthy($rb_gt(lines.$size(), 1))) { return $send(q, 'group', [0, "", ""], function $$23(){var self = $$23.$$s == null ? this : $$23.$$s; return $send(q, 'seplist', [lines, $send(self, 'lambda', [], function $$24(){ q.$text(" +"); return q.$breakable();})], function $$25(v){ if (v == null) v = nil; return q.$pp(v);})}, {$$s: self}) } else { return q.$text(self.$inspect()) }; }) })($nesting[0], null); (function($base, $super) { var self = $klass($base, $super, 'MatchData'); return $def(self, '$pretty_print', function $$pretty_print(q) { var self = this, nc = nil; nc = []; $send(self.$regexp().$named_captures(), 'each', [], function $$26(name, indexes){ if (name == null) name = nil; if (indexes == null) indexes = nil; return $send(indexes, 'each', [], function $$27(i){var $a; if (i == null) i = nil; return ($a = [i, name], $send(nc, '[]=', $a), $a[$a.length - 1]);});}); return $send(q, 'object_group', [self], function $$28(){var self = $$28.$$s == null ? this : $$28.$$s; q.$breakable(); return $send(q, 'seplist', [Opal.Range.$new(0,self.$size(), true), $send(self, 'lambda', [], function $$29(){ return q.$breakable()})], function $$30(i){var self = $$30.$$s == null ? this : $$30.$$s; if (i == null) i = nil; if ($eqeq(i, 0)) { return q.$pp(self['$[]'](i)) } else { if ($truthy(nc['$[]'](i))) { q.$text(nc['$[]'](i)) } else { q.$pp(i) }; q.$text(":"); return q.$pp(self['$[]'](i)); };}, {$$s: self});}, {$$s: self}); }) })($nesting[0], null); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Object'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return self.$include($$$($$('PP'), 'ObjectMixin')) })($nesting[0], $$('BasicObject'), $nesting); $send([$$('Numeric'), $$('Symbol'), $$('FalseClass'), $$('TrueClass'), $$('NilClass'), $$('Module')], 'each', [], function $$31(c){var self = $$31.$$s == null ? this : $$31.$$s; if (c == null) c = nil; return $send(c, 'class_eval', [], function $$32(){var self = $$32.$$s == null ? this : $$32.$$s; return $def(self, '$pretty_print_cycle', function $$pretty_print_cycle(q) { var self = this; return q.$text(self.$inspect()) })}, {$$s: self});}, {$$s: self}); $send([$$('Numeric'), $$('FalseClass'), $$('TrueClass'), $$('Module')], 'each', [], function $$33(c){var self = $$33.$$s == null ? this : $$33.$$s; if (c == null) c = nil; return $send(c, 'class_eval', [], function $$34(){var self = $$34.$$s == null ? this : $$34.$$s; return $def(self, '$pretty_print', function $$pretty_print(q) { var self = this; return q.$text(self.$inspect()) })}, {$$s: self});}, {$$s: self}); return (function($base, $parent_nesting) { var self = $module($base, 'Kernel'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$pretty_inspect', function $$pretty_inspect() { var self = this; return $$('PP').$pp(self, $$('StringIO').$new()).$string() }); $def(self, '$pp', function $$pp($a) { var $post_args, objs; $post_args = $slice(arguments); objs = $post_args; $send(objs, 'each', [], function $$35(obj){ if (obj == null) obj = nil; return $$('PP').$pp(obj);}); if ($truthy($rb_le(objs.$size(), 1))) { return objs.$first() } else { return objs }; }, -1); return self.$module_function("pp"); })($nesting[0], $nesting); }; Opal.modules["promise"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $defs = Opal.defs, $slice = Opal.slice, $def = Opal.def, $eqeqeq = Opal.eqeqeq, $truthy = Opal.truthy, $return_ivar = Opal.return_ivar, $not = Opal.not, $send = Opal.send, $to_a = Opal.to_a, $rb_plus = Opal.rb_plus, $alias = Opal.alias, $send2 = Opal.send2, $find_super = Opal.find_super, $rb_le = Opal.rb_le, $rb_minus = Opal.rb_minus, $const_set = Opal.const_set, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil; Opal.add_stubs('resolve,new,reject,attr_reader,===,value,key?,keys,!=,==,<<,>>,exception?,[],resolved?,rejected?,!,error,include?,action,realized?,raise,^,call,resolve!,exception!,any?,each,reject!,there_can_be_only_one!,then,to_proc,fail,always,trace,class,object_id,+,inspect,rescue,to_v2,fail!,then!,always!,itself,nil?,prev,act?,push,concat,it,proc,reverse,pop,<=,length,shift,-,wait,map,reduce,try,tap,all?,find,collect,inject'); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Promise'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.value = $proto.action = $proto.realized = $proto.next = $proto.delayed = $proto.error = $proto.prev = nil; $defs(self, '$value', function $$value(value) { var self = this; return self.$new().$resolve(value) }); $defs(self, '$error', function $$error(value) { var self = this; return self.$new().$reject(value) }); $defs(self, '$when', function $$when($a) { var $post_args, promises; $post_args = $slice(arguments); promises = $post_args; return $$('When').$new(promises); }, -1); self.$attr_reader("error", "prev", "next"); $def(self, '$initialize', function $$initialize(action) { var self = this; if (action == null) action = (new Map()); self.action = action; self.realized = false; self.exception = false; self.value = nil; self.error = nil; self.delayed = false; self.prev = nil; return (self.next = []); }, -1); $def(self, '$value', function $$value() { var self = this; if ($eqeqeq($$('Promise'), self.value)) { return self.value.$value() } else { return self.value } }); $def(self, '$act?', function $Promise_act$ques$1() { var self = this, $ret_or_1 = nil; if ($truthy(($ret_or_1 = self.action['$key?']("success")))) { return $ret_or_1 } else { return self.action['$key?']("always") } }); $def(self, '$action', function $$action() { var self = this; return self.action.$keys() }); $def(self, '$exception?', $return_ivar("exception")); $def(self, '$realized?', function $Promise_realized$ques$2() { var self = this; return self.realized['$!='](false) }); $def(self, '$resolved?', function $Promise_resolved$ques$3() { var self = this; return self.realized['$==']("resolve") }); $def(self, '$rejected?', function $Promise_rejected$ques$4() { var self = this; return self.realized['$==']("reject") }); $def(self, '$^', function $Promise_$$5(promise) { var self = this; promise['$<<'](self); self['$>>'](promise); return promise; }); $def(self, '$<<', function $Promise_$lt$lt$6(promise) { var self = this; self.prev = promise; return self; }); $def(self, '$>>', function $Promise_$gt$gt$7(promise) { var self = this; self.next['$<<'](promise); if ($truthy(self['$exception?']())) { promise.$reject(self.delayed['$[]'](0)) } else if ($truthy(self['$resolved?']())) { promise.$resolve(($truthy(self.delayed) ? (self.delayed['$[]'](0)) : (self.$value()))) } else if ($truthy(self['$rejected?']())) { if (($not(self.action['$key?']("failure")) || ($eqeqeq($$('Promise'), ($truthy(self.delayed) ? (self.delayed['$[]'](0)) : (self.error)))))) { promise.$reject(($truthy(self.delayed) ? (self.delayed['$[]'](0)) : (self.$error()))) } else if ($truthy(promise.$action()['$include?']("always"))) { promise.$reject(($truthy(self.delayed) ? (self.delayed['$[]'](0)) : (self.$error()))) } }; return self; }); $def(self, '$resolve', function $$resolve(value) { var self = this, block = nil, $ret_or_1 = nil, e = nil; if (value == null) value = nil; if ($truthy(self['$realized?']())) { self.$raise($$('ArgumentError'), "the promise has already been realized") }; if ($eqeqeq($$('Promise'), value)) { return value['$<<'](self.prev)['$^'](self) }; try { block = ($truthy(($ret_or_1 = self.action['$[]']("success"))) ? ($ret_or_1) : (self.action['$[]']("always"))); if ($truthy(block)) { value = block.$call(value) }; self['$resolve!'](value); } catch ($err) { if (Opal.rescue($err, [$$('Exception')])) {(e = $err) try { self['$exception!'](e) } finally { Opal.pop_exception($err); } } else { throw $err; } };; return self; }, -1); $def(self, '$resolve!', function $Promise_resolve$excl$8(value) { var self = this; self.realized = "resolve"; self.value = value; if ($truthy(self.next['$any?']())) { return $send(self.next, 'each', [], function $$9(p){ if (p == null) p = nil; return p.$resolve(value);}) } else { return (self.delayed = [value]) }; }); $def(self, '$reject', function $$reject(value) { var self = this, block = nil, $ret_or_1 = nil, e = nil; if (value == null) value = nil; if ($truthy(self['$realized?']())) { self.$raise($$('ArgumentError'), "the promise has already been realized") }; if ($eqeqeq($$('Promise'), value)) { return value['$<<'](self.prev)['$^'](self) }; try { block = ($truthy(($ret_or_1 = self.action['$[]']("failure"))) ? ($ret_or_1) : (self.action['$[]']("always"))); if ($truthy(block)) { value = block.$call(value) }; if ($truthy(self.action['$key?']("always"))) { self['$resolve!'](value) } else { self['$reject!'](value) }; } catch ($err) { if (Opal.rescue($err, [$$('Exception')])) {(e = $err) try { self['$exception!'](e) } finally { Opal.pop_exception($err); } } else { throw $err; } };; return self; }, -1); $def(self, '$reject!', function $Promise_reject$excl$10(value) { var self = this; self.realized = "reject"; self.error = value; if ($truthy(self.next['$any?']())) { return $send(self.next, 'each', [], function $$11(p){ if (p == null) p = nil; return p.$reject(value);}) } else { return (self.delayed = [value]) }; }); $def(self, '$exception!', function $Promise_exception$excl$12(error) { var self = this; self.exception = true; return self['$reject!'](error); }); $def(self, '$then', function $$then() { var block = $$then.$$p || nil, self = this; $$then.$$p = null; ; return self['$^']($$('Promise').$new((new Map([["success", block]])))); }); $def(self, '$then!', function $Promise_then$excl$13() { var block = $Promise_then$excl$13.$$p || nil, self = this; $Promise_then$excl$13.$$p = null; ; self['$there_can_be_only_one!'](); return $send(self, 'then', [], block.$to_proc()); }); $def(self, '$fail', function $$fail() { var block = $$fail.$$p || nil, self = this; $$fail.$$p = null; ; return self['$^']($$('Promise').$new((new Map([["failure", block]])))); }); $def(self, '$fail!', function $Promise_fail$excl$14() { var block = $Promise_fail$excl$14.$$p || nil, self = this; $Promise_fail$excl$14.$$p = null; ; self['$there_can_be_only_one!'](); return $send(self, 'fail', [], block.$to_proc()); }); $def(self, '$always', function $$always() { var block = $$always.$$p || nil, self = this; $$always.$$p = null; ; return self['$^']($$('Promise').$new((new Map([["always", block]])))); }); $def(self, '$always!', function $Promise_always$excl$15() { var block = $Promise_always$excl$15.$$p || nil, self = this; $Promise_always$excl$15.$$p = null; ; self['$there_can_be_only_one!'](); return $send(self, 'always', [], block.$to_proc()); }); $def(self, '$trace', function $$trace(depth) { var block = $$trace.$$p || nil, self = this; $$trace.$$p = null; ; if (depth == null) depth = nil; return self['$^']($$('Trace').$new(depth, block)); }, -1); $def(self, '$trace!', function $Promise_trace$excl$16($a) { var block = $Promise_trace$excl$16.$$p || nil, $post_args, args, self = this; $Promise_trace$excl$16.$$p = null; ; $post_args = $slice(arguments); args = $post_args; self['$there_can_be_only_one!'](); return $send(self, 'trace', $to_a(args), block.$to_proc()); }, -1); $def(self, '$there_can_be_only_one!', function $Promise_there_can_be_only_one$excl$17() { var self = this; if ($truthy(self.next['$any?']())) { return self.$raise($$('ArgumentError'), "a promise has already been chained") } else { return nil } }); $def(self, '$inspect', function $$inspect() { var self = this, result = nil, $ret_or_1 = nil; result = "#<" + (self.$class()) + "(" + (self.$object_id()) + ")"; if ($truthy(self.next['$any?']())) { result = $rb_plus(result, " >> " + (self.next.$inspect())) }; result = $rb_plus(result, ($truthy(self['$realized?']()) ? (": " + (($truthy(($ret_or_1 = self.value)) ? ($ret_or_1) : (self.error)).$inspect()) + ">") : (">"))); return result; }); $def(self, '$to_v2', function $$to_v2() { var self = this, v2 = nil; v2 = $$('PromiseV2').$new(); $send($send(self, 'then', [], function $$18(i){ if (i == null) i = nil; return v2.$resolve(i);}), 'rescue', [], function $$19(i){ if (i == null) i = nil; return v2.$reject(i);}); return v2; }); $alias(self, "await", "to_v2"); $alias(self, "catch", "fail"); $alias(self, "catch!", "fail!"); $alias(self, "do", "then"); $alias(self, "do!", "then!"); $alias(self, "ensure", "always"); $alias(self, "ensure!", "always!"); $alias(self, "finally", "always"); $alias(self, "finally!", "always!"); $alias(self, "rescue", "fail"); $alias(self, "rescue!", "fail!"); $alias(self, "to_n", "to_v2"); $alias(self, "to_v1", "itself"); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Trace'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs(self, '$it', function $$it(promise) { var self = this, current = nil, prev = nil; current = []; if (($truthy(promise['$act?']()) || ($truthy(promise.$prev()['$nil?']())))) { current.$push(promise.$value()) }; prev = promise.$prev(); if ($truthy(prev)) { return current.$concat(self.$it(prev)) } else { return current }; }); return $def(self, '$initialize', function $$initialize(depth, block) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; self.depth = depth; return $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [(new Map([["success", $send(self, 'proc', [], function $$20(){var self = $$20.$$s == null ? this : $$20.$$s, trace = nil; trace = $$('Trace').$it(self).$reverse(); trace.$pop(); if (($truthy(depth) && ($truthy($rb_le(depth, trace.$length()))))) { trace.$shift($rb_minus(trace.$length(), depth)) }; return $send(block, 'call', $to_a(trace));}, {$$s: self})]]))], null); }); })($nesting[0], self, $nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'When'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.wait = nil; $def(self, '$initialize', function $$initialize(promises) { var $yield = $$initialize.$$p || nil, self = this; $$initialize.$$p = null; if (promises == null) promises = []; $send2(self, $find_super(self, 'initialize', $$initialize, false, true), 'initialize', [], null); self.wait = []; return $send(promises, 'each', [], function $$21(promise){var self = $$21.$$s == null ? this : $$21.$$s; if (promise == null) promise = nil; return self.$wait(promise);}, {$$s: self}); }, -1); $def(self, '$each', function $$each() { var block = $$each.$$p || nil, self = this; $$each.$$p = null; ; if (!$truthy(block)) { self.$raise($$('ArgumentError'), "no block given") }; return $send(self, 'then', [], function $$22(values){ if (values == null) values = nil; return $send(values, 'each', [], block.$to_proc());}); }); $def(self, '$collect', function $$collect() { var block = $$collect.$$p || nil, self = this; $$collect.$$p = null; ; if (!$truthy(block)) { self.$raise($$('ArgumentError'), "no block given") }; return $send(self, 'then', [], function $$23(values){ if (values == null) values = nil; return $$('When').$new($send(values, 'map', [], block.$to_proc()));}); }); $def(self, '$inject', function $$inject($a) { var block = $$inject.$$p || nil, $post_args, args, self = this; $$inject.$$p = null; ; $post_args = $slice(arguments); args = $post_args; return $send(self, 'then', [], function $$24(values){ if (values == null) values = nil; return $send(values, 'reduce', $to_a(args), block.$to_proc());}); }, -1); $def(self, '$wait', function $$wait(promise) { var self = this; if (!$eqeqeq($$('Promise'), promise)) { promise = $$('Promise').$value(promise) }; if ($truthy(promise['$act?']())) { promise = promise.$then() }; self.wait['$<<'](promise); $send(promise, 'always', [], function $$25(){var self = $$25.$$s == null ? this : $$25.$$s; if (self.next == null) self.next = nil; if ($truthy(self.next['$any?']())) { return self.$try() } else { return nil }}, {$$s: self}); return self; }); $def(self, '$>>', function $When_$gt$gt$26($a) { var $post_args, $fwd_rest, $yield = $When_$gt$gt$26.$$p || nil, self = this; $When_$gt$gt$26.$$p = null; $post_args = $slice(arguments); $fwd_rest = $post_args; return $send($send2(self, $find_super(self, '>>', $When_$gt$gt$26, false, true), '>>', $to_a($fwd_rest), $yield), 'tap', [], function $$27(){var self = $$27.$$s == null ? this : $$27.$$s; return self.$try()}, {$$s: self}); }, -1); $def(self, '$try', function $When_try$28() { var self = this, promise = nil; if ($truthy($send(self.wait, 'all?', [], "realized?".$to_proc()))) { promise = $send(self.wait, 'find', [], "rejected?".$to_proc()); if ($truthy(promise)) { return self.$reject(promise.$error()) } else { return self.$resolve($send(self.wait, 'map', [], "value".$to_proc())) }; } else { return nil } }); $alias(self, "map", "collect"); $alias(self, "reduce", "inject"); return $alias(self, "and", "wait"); })($nesting[0], self, $nesting); })($nesting[0], null, $nesting); return $const_set($nesting[0], 'PromiseV1', $$('Promise')); }; Opal.modules["date/infinity"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $def = Opal.def, $return_val = Opal.return_val, $eqeqeq = Opal.eqeqeq, $to_ary = Opal.to_ary, $send2 = Opal.send2, $find_super = Opal.find_super, $eqeq = Opal.eqeq, $truthy = Opal.truthy, $rb_gt = Opal.rb_gt, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('include,<=>,attr_reader,nonzero?,d,zero?,new,class,-@,+@,===,coerce,==,>'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Date'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Infinity'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.d = nil; self.$include($$('Comparable')); $def(self, '$initialize', function $$initialize(d) { var self = this; if (d == null) d = 1; return (self.d = d['$<=>'](0)); }, -1); self.$attr_reader("d"); $def(self, '$zero?', $return_val(false)); $def(self, '$finite?', $return_val(false)); $def(self, '$infinite?', function $Infinity_infinite$ques$1() { var self = this; return self.$d()['$nonzero?']() }); $def(self, '$nan?', function $Infinity_nan$ques$2() { var self = this; return self.$d()['$zero?']() }); $def(self, '$abs', function $$abs() { var self = this; return self.$class().$new() }); $def(self, '$-@', function $Infinity_$minus$$3() { var self = this; return self.$class().$new(self.$d()['$-@']()) }); $def(self, '$+@', function $Infinity_$plus$$4() { var self = this; return self.$class().$new(self.$d()['$+@']()) }); $def(self, '$<=>', function $Infinity_$lt_eq_gt$5(other) { var $a, $b, self = this, $ret_or_1 = nil, l = nil, r = nil; if ($eqeqeq($$('Infinity'), ($ret_or_1 = other))) { return self.$d()['$<=>'](other.$d()) } else if ($eqeqeq($$('Numeric'), $ret_or_1)) { return self.$d() } else { try { $b = other.$coerce(self), $a = $to_ary($b), (l = ($a[0] == null ? nil : $a[0])), (r = ($a[1] == null ? nil : $a[1])), $b; return l['$<=>'](r); } catch ($err) { if (Opal.rescue($err, [$$('NoMethodError')])) { try { return nil } finally { Opal.pop_exception($err); } } else { throw $err; } }; } }); $def(self, '$coerce', function $$coerce(other) { var $yield = $$coerce.$$p || nil, self = this, $ret_or_1 = nil; $$coerce.$$p = null; if ($eqeqeq($$('Numeric'), ($ret_or_1 = other))) { return [self.$d()['$-@'](), self.$d()] } else { return $send2(self, $find_super(self, 'coerce', $$coerce, false, true), 'coerce', [other], $yield) } }); return $def(self, '$to_f', function $$to_f() { var self = this; if ($eqeq(self.d, 0)) { return 0 }; if ($truthy($rb_gt(self.d, 0))) { return $$$($$('Float'), 'INFINITY') } else { return $$$($$('Float'), 'INFINITY')['$-@']() }; }); })($nesting[0], $$('Numeric'), $nesting) })($nesting[0], null, $nesting) }; Opal.modules["date/date_time"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $def = Opal.def, $alias = Opal.alias, $rb_divide = Opal.rb_divide, $rb_times = Opal.rb_times, $rb_plus = Opal.rb_plus, $rb_minus = Opal.rb_minus, $truthy = Opal.truthy, $return_self = Opal.return_self, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('wrap,now,parse,new,def_delegators,min,sec,/,usec,sec_fraction,gmt_offset,*,+,-,is_a?,clone,_parse_offset,dup,year,month,day'); return (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'DateTime'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.date = nil; (function(self, $parent_nesting) { var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$now', function $$now() { var self = this; return self.$wrap($$('Time').$now()) }); return $def(self, '$parse', function $$parse(str) { var self = this; return self.$wrap($$('Time').$parse(str)) }); })(Opal.get_singleton_class(self), $nesting); $def(self, '$initialize', function $$initialize(year, month, day, hours, minutes, seconds, offset, start) { var self = this; if (year == null) year = -4712; if (month == null) month = 1; if (day == null) day = 1; if (hours == null) hours = 0; if (minutes == null) minutes = 0; if (seconds == null) seconds = 0; if (offset == null) offset = 0; if (start == null) start = $$('ITALY'); // Because of Gregorian reform calendar goes from 1582-10-04 to 1582-10-15. // All days in between end up as 4 october. if (year === 1582 && month === 10 && day > 4 && day < 15) { day = 4; } ; self.date = $$('Time').$new(year, month, day, hours, minutes, seconds, offset); return (self.start = start); }, -1); self.$def_delegators("@date", "min", "hour", "sec"); $alias(self, "minute", "min"); $alias(self, "second", "sec"); $def(self, '$sec_fraction', function $$sec_fraction() { var self = this; return $rb_divide(self.date.$usec(), $$$('Rational').$new(1000000, 1)) }); $alias(self, "second_fraction", "sec_fraction"); $def(self, '$offset', function $$offset() { var self = this; return $rb_divide(self.date.$gmt_offset(), $rb_times(24, $$$('Rational').$new(3600, 1))) }); $def(self, '$+', function $DateTime_$plus$1(other) { var self = this; return $$$('DateTime').$wrap($rb_plus(self.date, other)) }); $def(self, '$-', function $DateTime_$minus$2(other) { var self = this, result = nil; if (Opal.is_a(other, $$$('Date'))) other = other.date; result = $rb_minus(self.date, other); if ($truthy(result['$is_a?']($$$('Time')))) { return $$$('DateTime').$wrap(result) } else { return result }; }); $def(self, '$new_offset', function $$new_offset(offset) { var self = this, new_date = nil; new_date = self.$clone(); offset = $$('Time').$_parse_offset(offset); new_date.date.timezone = offset; return new_date; }); $def(self, '$to_datetime', $return_self); $def(self, '$to_time', function $$to_time() { var self = this; return self.date.$dup() }); return $def(self, '$to_date', function $$to_date() { var self = this; return $$('Date').$new(self.$year(), self.$month(), self.$day()) }); })($nesting[0], $$('Date'), $nesting) }; Opal.modules["date/formatters"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $slice = Opal.slice, $extract_kwargs = Opal.extract_kwargs, $ensure_kwargs = Opal.ensure_kwargs, $kwrestargs = Opal.kwrestargs, $send = Opal.send, $to_a = Opal.to_a, $defs = Opal.defs, $alias = Opal.alias, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil; Opal.add_stubs('def_formatter,asctime,iso8601,rfc2822,xmlschema'); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Date'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs(self, '$def_formatter', function $$def_formatter($a, $b) { var $post_args, $kwargs, args, kwargs, self = this; $post_args = $slice(arguments); $kwargs = $extract_kwargs($post_args); $kwargs = $ensure_kwargs($kwargs); args = $post_args; kwargs = $kwrestargs($kwargs, {}); return $send($$('Time'), 'def_formatter', $to_a(args).concat([Opal.to_hash(kwargs).$merge((new Map([["on", self]])))])); }, -1); self.$def_formatter("asctime", "%c"); $alias(self, "ctime", "asctime"); self.$def_formatter("iso8601", "%F"); $alias(self, "xmlschema", "iso8601"); self.$def_formatter("rfc3339", "%FT%T%:z"); self.$def_formatter("rfc2822", "%a, %-d %b %Y %T %z"); $alias(self, "rfc822", "rfc2822"); self.$def_formatter("httpdate", "%a, %d %b %Y %T GMT", (new Map([["utc", true]]))); self.$def_formatter("jisx0301", "%J"); return $alias(self, "to_s", "iso8601"); })($nesting[0], null, $nesting); return (function($base, $super) { var self = $klass($base, $super, 'DateTime'); self.$def_formatter("xmlschema", "%FT%T", (new Map([["fractions", true], ["tz_format", "%:z"]]))); $alias(self, "iso8601", "xmlschema"); $alias(self, "rfc3339", "xmlschema"); self.$def_formatter("jisx0301", "%JT%T", (new Map([["fractions", true], ["tz_format", "%:z"]]))); $alias(self, "to_s", "xmlschema"); return self.$def_formatter("zone", "%:z"); })($nesting[0], $$('Date')); }; Opal.modules["date"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $const_set = Opal.const_set, $rb_plus = Opal.rb_plus, $def = Opal.def, $send = Opal.send, $alias = Opal.alias, $rb_minus = Opal.rb_minus, $return_self = Opal.return_self, $return_ivar = Opal.return_ivar, $truthy = Opal.truthy, $rb_lt = Opal.rb_lt, $rb_times = Opal.rb_times, $defs = Opal.defs, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,extend,new,-@,+,allocate,join,compact,map,to_proc,downcase,wrap,raise,attr_reader,<=>,jd,===,<<,prev_month,dup,def_delegators,day,month,clone,prev_day,next_day,_days_in_month,class,-,year,prev_year,to_s,strftime,to_i,<,*,reverse,step,abs,each,==,next'); self.$require("forwardable"); self.$require("date/infinity"); self.$require("time"); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Date'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting), $proto = self.$$prototype; $proto.date = $proto.start = nil; self.$include($$('Comparable')); self.$extend($$('Forwardable')); $const_set($nesting[0], 'JULIAN', $$('Infinity').$new()); $const_set($nesting[0], 'GREGORIAN', $$('Infinity').$new()['$-@']()); $const_set($nesting[0], 'ITALY', 2299161); $const_set($nesting[0], 'ENGLAND', 2361222); $const_set($nesting[0], 'MONTHNAMES', $rb_plus([nil], ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"])); $const_set($nesting[0], 'ABBR_MONTHNAMES', ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"]); $const_set($nesting[0], 'DAYNAMES', ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]); $const_set($nesting[0], 'ABBR_DAYNAMES', ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]); (function(self, $parent_nesting) { var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $def(self, '$wrap', function $$wrap(native$) { var self = this, instance = nil; instance = self.$allocate(); instance.start = $$('ITALY'); instance.date = native$; return instance; }); $def(self, '$parse', function $$parse(string, comp) { var self = this; if (comp == null) comp = true; var current_date = new Date(); var current_day = current_date.getDate(), current_month = current_date.getMonth(), current_year = current_date.getFullYear(), current_wday = current_date.getDay(), full_month_name_regexp = $$('MONTHNAMES').$compact().$join("|"); function match1(match) { return match[1]; } function match2(match) { return match[2]; } function match3(match) { return match[3]; } function match4(match) { return match[4]; } // Converts passed short year (0..99) // to a 4-digits year in the range (1969..2068) function fromShortYear(fn) { return function(match) { var short_year = fn(match); if (short_year >= 69) { short_year += 1900; } else { short_year += 2000; } return short_year; } } // Converts month abbr (nov) to a month number function fromMonthAbbr(fn) { return function(match) { var abbr = fn(match).toLowerCase(); return $$('ABBR_MONTHNAMES').indexOf(abbr) + 1; } } function toInt(fn) { return function(match) { var value = fn(match); return parseInt(value, 10); } } // Depending on the 'comp' value appends 20xx to a passed year function to2000(fn) { return function(match) { var value = fn(match); if (comp) { return value + 2000; } else { return value; } } } // Converts passed week day name to a day number function fromDayName(fn) { return function(match) { var dayname = fn(match), wday = $send($$('DAYNAMES'), 'map', [], "downcase".$to_proc()).indexOf((dayname).$downcase()); return current_day - current_wday + wday; } } // Converts passed month name to a month number function fromFullMonthName(fn) { return function(match) { var month_name = fn(match); return $send($$('MONTHNAMES').$compact(), 'map', [], "downcase".$to_proc()).indexOf((month_name).$downcase()) + 1; } } var rules = [ { // DD as month day number regexp: /^(\d{2})$/, year: current_year, month: current_month, day: toInt(match1) }, { // DDD as year day number regexp: /^(\d{3})$/, year: current_year, month: 0, day: toInt(match1) }, { // MMDD as month and day regexp: /^(\d{2})(\d{2})$/, year: current_year, month: toInt(match1), day: toInt(match2) }, { // YYDDD as year and day number in 1969--2068 regexp: /^(\d{2})(\d{3})$/, year: fromShortYear(toInt(match1)), month: 0, day: toInt(match2) }, { // YYMMDD as year, month and day in 1969--2068 regexp: /^(\d{2})(\d{2})(\d{2})$/, year: fromShortYear(toInt(match1)), month: toInt(match2), day: toInt(match3) }, { // YYYYDDD as year and day number regexp: /^(\d{4})(\d{3})$/, year: toInt(match1), month: 0, day: toInt(match2) }, { // YYYYMMDD as year, month and day number regexp: /^(\d{4})(\d{2})(\d{2})$/, year: toInt(match1), month: toInt(match2), day: toInt(match3) }, { // mmm YYYY regexp: /^([a-z]{3})[\s\.\/\-](\d{3,4})$/, year: toInt(match2), month: fromMonthAbbr(match1), day: 1 }, { // DD mmm YYYY regexp: /^(\d{1,2})[\s\.\/\-]([a-z]{3})[\s\.\/\-](\d{3,4})$/i, year: toInt(match3), month: fromMonthAbbr(match2), day: toInt(match1) }, { // mmm DD YYYY regexp: /^([a-z]{3})[\s\.\/\-](\d{1,2})[\s\.\/\-](\d{3,4})$/i, year: toInt(match3), month: fromMonthAbbr(match1), day: toInt(match2) }, { // YYYY mmm DD regexp: /^(\d{3,4})[\s\.\/\-]([a-z]{3})[\s\.\/\-](\d{1,2})$/i, year: toInt(match1), month: fromMonthAbbr(match2), day: toInt(match3) }, { // YYYY-MM-DD YYYY/MM/DD YYYY.MM.DD regexp: /^(\-?\d{3,4})[\s\.\/\-](\d{1,2})[\s\.\/\-](\d{1,2})$/, year: toInt(match1), month: toInt(match2), day: toInt(match3) }, { // YY-MM-DD regexp: /^(\d{2})[\s\.\/\-](\d{1,2})[\s\.\/\-](\d{1,2})$/, year: to2000(toInt(match1)), month: toInt(match2), day: toInt(match3) }, { // DD-MM-YYYY regexp: /^(\d{1,2})[\s\.\/\-](\d{1,2})[\s\.\/\-](\-?\d{3,4})$/, year: toInt(match3), month: toInt(match2), day: toInt(match1) }, { // ddd regexp: new RegExp("^(" + $$('DAYNAMES').$join("|") + ")$", 'i'), year: current_year, month: current_month, day: fromDayName(match1) }, { // monthname daynumber YYYY regexp: new RegExp("^(" + full_month_name_regexp + ")[\\s\\.\\/\\-](\\d{1,2})(th|nd|rd)[\\s\\.\\/\\-](\\-?\\d{3,4})$", "i"), year: toInt(match4), month: fromFullMonthName(match1), day: toInt(match2) }, { // monthname daynumber regexp: new RegExp("^(" + full_month_name_regexp + ")[\\s\\.\\/\\-](\\d{1,2})(th|nd|rd)", "i"), year: current_year, month: fromFullMonthName(match1), day: toInt(match2) }, { // daynumber monthname YYYY regexp: new RegExp("^(\\d{1,2})(th|nd|rd)[\\s\\.\\/\\-](" + full_month_name_regexp + ")[\\s\\.\\/\\-](\\-?\\d{3,4})$", "i"), year: toInt(match4), month: fromFullMonthName(match3), day: toInt(match1) }, { // YYYY monthname daynumber regexp: new RegExp("^(\\-?\\d{3,4})[\\s\\.\\/\\-](" + full_month_name_regexp + ")[\\s\\.\\/\\-](\\d{1,2})(th|nd|rd)$", "i"), year: toInt(match1), month: fromFullMonthName(match2), day: toInt(match3) } ] var rule, i, match; for (i = 0; i < rules.length; i++) { rule = rules[i]; match = rule.regexp.exec(string); if (match) { var year = rule.year; if (typeof(year) === 'function') { year = year(match); } var month = rule.month; if (typeof(month) === 'function') { month = month(match) - 1 } var day = rule.day; if (typeof(day) === 'function') { day = day(match); } var result = new Date(year, month, day); // an edge case, JS can't handle 'new Date(1)', minimal year is 1970 if (year >= 0 && year <= 1970) { result.setFullYear(year); } return self.$wrap(result); } } ; return self.$raise($$('ArgumentError'), "invalid date"); }, -2); $def(self, '$today', function $$today() { var self = this; return self.$wrap(new Date()) }); $def(self, '$gregorian_leap?', function $gregorian_leap$ques$1(year) { return (new Date(year, 1, 29).getMonth()-1) === 0 }); return $alias(self, "civil", "new"); })(Opal.get_singleton_class(self), $nesting); $def(self, '$initialize', function $$initialize(year, month, day, start) { var self = this; if (year == null) year = -4712; if (month == null) month = 1; if (day == null) day = 1; if (start == null) start = $$('ITALY'); // Because of Gregorian reform calendar goes from 1582-10-04 to 1582-10-15. // All days in between end up as 4 october. if (year === 1582 && month === 10 && day > 4 && day < 15) { day = 4; } ; self.date = new Date(year, month - 1, day); return (self.start = start); }, -1); self.$attr_reader("start"); $def(self, '$<=>', function $Date_$lt_eq_gt$2(other) { var self = this; if (other.$$is_number) { return self.$jd()['$<=>'](other) } if ($$$('Date')['$==='](other)) { var a = self.date, b = other.date; if (!Opal.is_a(self, $$$('DateTime'))) a.setHours(0, 0, 0, 0); if (!Opal.is_a(other, $$$('DateTime'))) b.setHours(0, 0, 0, 0); if (a < b) { return -1; } else if (a > b) { return 1; } else { return 0; } } else { return nil; } }); $def(self, '$>>', function $Date_$gt$gt$3(n) { var self = this; if (!n.$$is_number) self.$raise($$$('TypeError')); return self['$<<'](n['$-@']()); }); $def(self, '$<<', function $Date_$lt$lt$4(n) { var self = this; if (!n.$$is_number) self.$raise($$$('TypeError')); return self.$prev_month(n); }); $def(self, '$clone', function $$clone() { var self = this, date = nil; date = $$('Date').$wrap(self.date.$dup()); date.start = self.start; return date; }); self.$def_delegators("@date", "sunday?", "monday?", "tuesday?", "wednesday?", "thursday?", "friday?", "saturday?", "day", "month", "year", "wday", "yday"); $alias(self, "mday", "day"); $alias(self, "mon", "month"); $def(self, '$jd', function $$jd() { var self = this; //Adapted from http://www.physics.sfasu.edu/astro/javascript/julianday.html var mm = self.date.getMonth() + 1, dd = self.date.getDate(), yy = self.date.getFullYear(), hr = 12, mn = 0, sc = 0, ggg, s, a, j1, jd; hr = hr + (mn / 60) + (sc/3600); ggg = 1; if (yy <= 1585) { ggg = 0; } jd = -1 * Math.floor(7 * (Math.floor((mm + 9) / 12) + yy) / 4); s = 1; if ((mm - 9) < 0) { s =- 1; } a = Math.abs(mm - 9); j1 = Math.floor(yy + s * Math.floor(a / 7)); j1 = -1 * Math.floor((Math.floor(j1 / 100) + 1) * 3 / 4); jd = jd + Math.floor(275 * mm / 9) + dd + (ggg * j1); jd = jd + 1721027 + 2 * ggg + 367 * yy - 0.5; jd = jd + (hr / 24); return jd; }); $def(self, '$julian?', function $Date_julian$ques$5() { var self = this; return self.date < new Date(1582, 10 - 1, 15, 12) }); $def(self, '$new_start', function $$new_start(start) { var self = this, new_date = nil; new_date = self.$clone(); new_date.start = start; return new_date; }); $def(self, '$next', function $$next() { var self = this; return $rb_plus(self, 1) }); $def(self, '$-', function $Date_$minus$6(date) { var self = this; if (date.date) { return Math.round((self.date - date.date) / (1000 * 60 * 60 * 24)); } ; return self.$prev_day(date); }); $def(self, '$+', function $Date_$plus$7(date) { var self = this; return self.$next_day(date) }); $def(self, '$prev_day', function $$prev_day(n) { var self = this; if (n == null) n = 1; if (n.$$is_number) { var result = self.$clone(); result.date.setDate(self.date.getDate() - n); return result; } else { self.$raise($$$('TypeError')); } ; }, -1); $def(self, '$next_day', function $$next_day(n) { var self = this; if (n == null) n = 1; if (!n.$$is_number) self.$raise($$$('TypeError')); return self.$prev_day(n['$-@']()); }, -1); $def(self, '$prev_month', function $$prev_month(n) { var self = this; if (n == null) n = 1; if (!n.$$is_number) self.$raise($$$('TypeError')) var result = self.$clone(), date = result.date, cur = date.getDate(); date.setDate(1); date.setMonth(date.getMonth() - n); date.setDate(Math.min(cur, $$('Date').$_days_in_month(date.getFullYear(), date.getMonth()))); return result; ; }, -1); $def(self, '$next_month', function $$next_month(n) { var self = this; if (n == null) n = 1; if (!n.$$is_number) self.$raise($$$('TypeError')); return self.$prev_month(n['$-@']()); }, -1); $def(self, '$prev_year', function $$prev_year(years) { var self = this; if (years == null) years = 1; if (!years.$$is_number) self.$raise($$$('TypeError')); return self.$class().$new($rb_minus(self.$year(), years), self.$month(), self.$day()); }, -1); $def(self, '$next_year', function $$next_year(years) { var self = this; if (years == null) years = 1; if (!years.$$is_number) self.$raise($$$('TypeError')); return self.$prev_year(years['$-@']()); }, -1); $def(self, '$strftime', function $$strftime(format) { var self = this; if (format == null) format = ""; if (format == '') { return self.$to_s(); } return self.date.$strftime(format) ; }, -1); $def(self, '$to_s', function $$to_s() { var self = this; var d = self.date, year = d.getFullYear(), month = d.getMonth() + 1, day = d.getDate(); if (month < 10) { month = '0' + month; } if (day < 10) { day = '0' + day; } return year + '-' + month + '-' + day; }); $def(self, '$to_time', function $$to_time() { var self = this; return $$('Time').$new(self.$year(), self.$month(), self.$day()) }); $def(self, '$to_date', $return_self); $def(self, '$to_datetime', function $$to_datetime() { var self = this; return $$('DateTime').$new(self.$year(), self.$month(), self.$day()) }); $def(self, '$to_n', $return_ivar("date")); $def(self, '$step', function $$step(limit, step) { var block = $$step.$$p || nil, self = this, steps_count = nil, steps = nil, result = nil; $$step.$$p = null; ; if (step == null) step = 1; steps_count = $rb_minus(limit, self).$to_i(); steps = ($truthy($rb_lt($rb_times(steps_count, step), 0)) ? ([]) : ($truthy($rb_lt(steps_count, 0)) ? ($send(Opal.Range.$new(0, steps_count['$-@'](), false).$step(step.$abs()), 'map', [], "-@".$to_proc()).$reverse()) : (Opal.Range.$new(0, steps_count, false).$step(step.$abs())))); result = $send(steps, 'map', [], function $$8(i){var self = $$8.$$s == null ? this : $$8.$$s; if (i == null) i = nil; return $rb_plus(self, i);}, {$$s: self}); if ((block !== nil)) { $send(result, 'each', [], function $$9(i){ if (i == null) i = nil; return Opal.yield1(block, i);;}); return self; } else { return result }; }, -2); $def(self, '$upto', function $$upto(max) { var block = $$upto.$$p || nil, self = this; $$upto.$$p = null; ; return $send(self, 'step', [max, 1], block.$to_proc()); }); $def(self, '$downto', function $$downto(min) { var block = $$downto.$$p || nil, self = this; $$downto.$$p = null; ; return $send(self, 'step', [min, -1], block.$to_proc()); }); $def(self, '$cwday', function $$cwday() { var self = this; return self.date.getDay() || 7 }); $def(self, '$cweek', function $$cweek() { var self = this; var d = new Date(self.date); d.setHours(0,0,0); d.setDate(d.getDate()+4-(d.getDay()||7)); return Math.ceil((((d-new Date(d.getFullYear(),0,1))/8.64e7)+1)/7); }); $defs(self, '$_days_in_month', function $$_days_in_month(year, month) { var leap = ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0); return [31, (leap ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; }); $alias(self, "eql?", "=="); return $alias(self, "succ", "next"); })($nesting[0], null, $nesting); self.$require("date/date_time"); return self.$require("date/formatters"); }; Opal.modules["time"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $klass = Opal.klass, $defs = Opal.defs, $ensure_kwargs = Opal.ensure_kwargs, $hash_get = Opal.hash_get, $send = Opal.send, $eqeqeq = Opal.eqeqeq, $truthy = Opal.truthy, $rb_gt = Opal.rb_gt, $rb_plus = Opal.rb_plus, $alias = Opal.alias, $def = Opal.def, $return_self = Opal.return_self, self = Opal.top, $nesting = [], nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('define_method,===,new_offset,utc,year,month,day,getutc,strftime,>,+,def_formatter,rfc2822,xmlschema,wrap,require'); (function($base, $super, $parent_nesting) { var self = $klass($base, $super, 'Time'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); $defs(self, '$parse', function $$parse(str) { var d = Date.parse(str); if (d !== d) { // parsing failed, d is a NaN // probably str is not in ISO 8601 format, which is the only format, required to be supported by Javascript // try to make the format more like ISO or more like Chrome and parse again str = str.replace(/^(\d+)([\./])(\d+)([\./])?(\d+)?/, function(matched_sub, c1, c2, c3, c4, c5, offset, orig_string) { if ((c2 === c4) && c5) { // 2007.10.1 or 2007/10/1 are ok, but 2007/10.1 is not, convert to 2007-10-1 return c1 + '-' + c3 + '-' + c5; } else if (c3 && !c4) { // 2007.10 or 2007/10 // Chrome and Ruby can parse "2007/10", assuming its "2007-10-01", do the same return c1 + '-' + c3 + '-01'; }; return matched_sub; }); d = Date.parse(str); } return new Date(d); }); $defs(self, '$def_formatter', function $$def_formatter(name, format, $kwargs) { var on_utc, utc_tz, tz_format, fractions, on, self = this; $kwargs = $ensure_kwargs($kwargs); on_utc = $hash_get($kwargs, "on_utc");if (on_utc == null) on_utc = false; utc_tz = $hash_get($kwargs, "utc_tz");if (utc_tz == null) utc_tz = nil; tz_format = $hash_get($kwargs, "tz_format");if (tz_format == null) tz_format = nil; fractions = $hash_get($kwargs, "fractions");if (fractions == null) fractions = false; on = $hash_get($kwargs, "on");if (on == null) on = self; return $send(on, 'define_method', [name], function $$1(fdigits){var $a, $b, self = $$1.$$s == null ? this : $$1.$$s, $ret_or_2 = nil, $ret_or_1 = nil, date = nil, str = nil; if (fdigits == null) fdigits = 0; if ($eqeqeq(($truthy(($ret_or_2 = (($a = $$$('::', 'DateTime', 'skip_raise')) ? 'constant' : nil))) ? ($$$('DateTime')) : ($ret_or_2)), ($ret_or_1 = self))) { date = ($truthy(on_utc) ? (self.$new_offset(0)) : (self)) } else if ($eqeqeq(($truthy(($ret_or_2 = (($b = $$$('::', 'Date', 'skip_raise')) ? 'constant' : nil))) ? ($$$('Date')) : ($ret_or_2)), $ret_or_1)) { date = $$$('Time').$utc(self.$year(), self.$month(), self.$day()) } else if ($eqeqeq($$$('Time'), $ret_or_1)) { date = ($truthy(on_utc) ? (self.$getutc()) : (self)) } else { nil }; str = date.$strftime(format); if (($truthy(fractions) && ($truthy($rb_gt(fdigits, 0))))) { str = $rb_plus(str, date.$strftime(".%" + (fdigits) + "N")) }; if ($truthy(utc_tz)) { str = $rb_plus(str, ($truthy(self.$utc()) ? (utc_tz) : (date.$strftime(tz_format)))) } else if ($truthy(tz_format)) { str = $rb_plus(str, date.$strftime(tz_format)) }; return str;}, {$$arity: -1, $$s: self}); }, -3); self.$def_formatter("rfc2822", "%a, %d %b %Y %T ", (new Map([["utc_tz", "-00:00"], ["tz_format", "%z"]]))); $alias(self, "rfc822", "rfc2822"); self.$def_formatter("httpdate", "%a, %d %b %Y %T GMT", (new Map([["on_utc", true]]))); self.$def_formatter("xmlschema", "%FT%T", (new Map([["utc_tz", "Z"], ["tz_format", "%:z"], ["fractions", true]]))); $alias(self, "iso8601", "xmlschema"); $def(self, '$to_date', function $$to_date() { var self = this; return $$('Date').$wrap(self) }); $def(self, '$to_datetime', function $$to_datetime() { var self = this; return $$('DateTime').$wrap(self) }); return $def(self, '$to_time', $return_self); })($nesting[0], null, $nesting); return self.$require("date"); }; Opal.modules["dxopal/patches/require_remote"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $thrower = Opal.thrower, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require'); self.$require("opal-parser"); return $def(self, '$require_remote', function $$require_remote(url) {try { var $a, self = this; var r = new XMLHttpRequest(); r.overrideMimeType("text/plain"); // https://github.com/yhara/dxopal/issues/12 r.open("GET", url, false); r.send(''); ; return ($a = r.responseText, typeof Opal.compile === 'function' ? eval(Opal.compile($a, {scope_variables: ["url"], arity_check: false, file: '(eval)', eval: true})) : self.$eval($a));} catch($e) { if ($e === Opal.t_eval_return) return $e.$v; throw $e; } }); }; Opal.modules["dxopal/patches/require_dxopal"] = function(Opal) {/* Generated by Opal 1.8.2 */ var $module = Opal.module, $alias = Opal.alias, $slice = Opal.slice, $eqeq = Opal.eqeq, $send = Opal.send, $to_a = Opal.to_a, $def = Opal.def, self = Opal.top, $nesting = [], nil = Opal.nil; Opal.add_stubs('require,==,dxopal_orig_require'); (function($base) { var self = $module($base, 'Kernel'); return $alias(self, "dxopal_orig_require", "require") })($nesting[0]); return $def(self, '$require', function $$require($a) { var $post_args, args, self = this; $post_args = $slice(arguments); args = $post_args; if ($eqeq(args, ["dxopal"])) { return nil } else { return $send(self, 'dxopal_orig_require', $to_a(args)) }; }, -1); }; Opal.queue(function(Opal) {/* Generated by Opal 1.8.2 */ var $gvars = Opal.gvars, $def = Opal.def, $module = Opal.module, $truthy = Opal.truthy, $defs = Opal.defs, $const_set = Opal.const_set, $send = Opal.send, $rb_ge = Opal.rb_ge, $rb_plus = Opal.rb_plus, self = Opal.top, $nesting = [], $$ = Opal.$r($nesting), nil = Opal.nil, $$$ = Opal.$$$; Opal.add_stubs('require,include,call,name,class,Array,backtrace,raise,new,[]=,join,sort,keys,>=,[],inspect,+'); self.$require("opal"); self.$require("console"); $def(self, '$console', function $$console() { if ($gvars.console == null) $gvars.console = nil; return $gvars.console }); self.$require("dxopal/constants/colors"); self.$require("dxopal/font"); self.$require("dxopal/input"); self.$require("dxopal/input/key_codes"); self.$require("dxopal/image"); self.$require("dxopal/sound"); self.$require("dxopal/sound_effect"); self.$require("dxopal/sprite"); self.$require("dxopal/window"); self.$require("dxopal/version"); self.$require("opal-parser"); self.$require("singleton"); self.$require("delegate"); self.$require("forwardable"); self.$require("pp"); self.$require("promise"); self.$require("set"); self.$require("time"); self.$require("dxopal/patches/require_remote"); self.$require("dxopal/patches/require_dxopal"); (function($base, $parent_nesting) { var self = $module($base, 'DXOpal'); var $nesting = [self].concat($parent_nesting), $$ = Opal.$r($nesting); self.$include($$$($$$($$('DXOpal'), 'Constants'), 'Colors')); self.$include($$$($$$($$('DXOpal'), 'Input'), 'KeyCodes')); self.$include($$$($$$($$('DXOpal'), 'Input'), 'MouseCodes')); self.$include($$$($$$($$('DXOpal'), 'SoundEffect'), 'WaveTypes')); $defs(self, '$dump_error', function $$dump_error() { var block = $$dump_error.$$p || nil, self = this, ex = nil, div = nil; $$dump_error.$$p = null; ; try { return block.$call() } catch ($err) { if (Opal.rescue($err, [$$('Exception')])) {(ex = $err) try { div = document.getElementById('dxopal-errors'); if ($truthy(div && !ex.DXOpalPrinted)) { div.textContent = "ERROR: " + ex.$class().$name(); var ul = document.createElement('ul'); // Note: ex.backtrace may be an Array or a String self.$Array(ex.$backtrace()).forEach(function(line){ var li = document.createElement('li'); li.textContent = line; ul.appendChild(li); }); div.appendChild(ul); ex.DXOpalPrinted = true; }; return self.$raise(ex); } finally { Opal.pop_exception($err); } } else { throw $err; } }; }); $const_set($nesting[0], 'P_CT', $send($$('Hash'), 'new', [], function $DXOpal$1(h, k){var $a; if (h == null) h = nil; if (k == null) k = nil; return ($a = [k, 0], $send(h, '[]=', $a), $a[$a.length - 1]);})); return $def(self, '$p_', function $$p_(hash, n) { var $a, key = nil; if (n == null) n = 10; key = hash.$keys().$sort().$join(); if ($truthy($rb_ge($$('P_CT')['$[]'](key), n))) { return nil }; console.log(hash.$inspect()); return ($a = [key, $rb_plus($$('P_CT')['$[]'](key), 1)], $send($$('P_CT'), '[]=', $a), $a[$a.length - 1]); }, -2); })($nesting[0], $nesting); // Like `console.log`, but prints only limited times. // Example: // Opal.DXOpal.p_("player", player) (function(){ var P_CT = {}; Opal.DXOpal.p_ = function(key, obj, n) { n = (n || 10); P_CT[key] = (P_CT[key] || 0); if (P_CT[key] < n) { console.log(key, obj); P_CT[key] += 1; } }; })(); ; return self.$include($$('DXOpal')); });