diff options
Diffstat (limited to 'node_modules/utila/scripts/js/lib/classic.js')
-rw-r--r-- | node_modules/utila/scripts/js/lib/classic.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/node_modules/utila/scripts/js/lib/classic.js b/node_modules/utila/scripts/js/lib/classic.js new file mode 100644 index 000000000..3de0c290f --- /dev/null +++ b/node_modules/utila/scripts/js/lib/classic.js @@ -0,0 +1,87 @@ +var classic, + __slice = [].slice; + +module.exports = classic = {}; + +classic.implement = function() { + var classProto, classReference, desc, member, mixin, mixins, _i, _j, _len; + mixins = 2 <= arguments.length ? __slice.call(arguments, 0, _i = arguments.length - 1) : (_i = 0, []), classReference = arguments[_i++]; + for (_j = 0, _len = mixins.length; _j < _len; _j++) { + mixin = mixins[_j]; + classProto = classReference.prototype; + for (member in mixin.prototype) { + if (!Object.getOwnPropertyDescriptor(classProto, member)) { + desc = Object.getOwnPropertyDescriptor(mixin.prototype, member); + Object.defineProperty(classProto, member, desc); + } + } + } + return classReference; +}; + +classic.mix = function() { + var classProto, classReference, desc, member, mixin, mixins, _i, _j, _len; + mixins = 2 <= arguments.length ? __slice.call(arguments, 0, _i = arguments.length - 1) : (_i = 0, []), classReference = arguments[_i++]; + classProto = classReference.prototype; + classReference.__mixinCloners = []; + classReference.__applyClonersFor = function(instance, args) { + var cloner, _j, _len, _ref; + if (args == null) { + args = null; + } + _ref = classReference.__mixinCloners; + for (_j = 0, _len = _ref.length; _j < _len; _j++) { + cloner = _ref[_j]; + cloner.apply(instance, args); + } + }; + classReference.__mixinInitializers = []; + classReference.__initMixinsFor = function(instance, args) { + var initializer, _j, _len, _ref; + if (args == null) { + args = null; + } + _ref = classReference.__mixinInitializers; + for (_j = 0, _len = _ref.length; _j < _len; _j++) { + initializer = _ref[_j]; + initializer.apply(instance, args); + } + }; + classReference.__mixinQuitters = []; + classReference.__applyQuittersFor = function(instance, args) { + var quitter, _j, _len, _ref; + if (args == null) { + args = null; + } + _ref = classReference.__mixinQuitters; + for (_j = 0, _len = _ref.length; _j < _len; _j++) { + quitter = _ref[_j]; + quitter.apply(instance, args); + } + }; + for (_j = 0, _len = mixins.length; _j < _len; _j++) { + mixin = mixins[_j]; + if (!(mixin.constructor instanceof Function)) { + throw Error("Mixin should be a function"); + } + for (member in mixin.prototype) { + if (member.substr(0, 11) === '__initMixin') { + classReference.__mixinInitializers.push(mixin.prototype[member]); + continue; + } else if (member.substr(0, 11) === '__clonerFor') { + classReference.__mixinCloners.push(mixin.prototype[member]); + continue; + } else if (member.substr(0, 12) === '__quitterFor') { + classReference.__mixinQuitters.push(mixin.prototype[member]); + continue; + } + if (!Object.getOwnPropertyDescriptor(classProto, member)) { + desc = Object.getOwnPropertyDescriptor(mixin.prototype, member); + Object.defineProperty(classProto, member, desc); + } + } + } + return classReference; +}; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpYy5qcyIsInNvdXJjZVJvb3QiOiIuLlxcLi4iLCJzb3VyY2VzIjpbImNvZmZlZVxcbGliXFxjbGFzc2ljLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFBLE9BQUE7RUFBQSxrQkFBQTs7QUNBQSxNQ0FNLENDQUMsT0NBUCxHQ0FpQixPQ0FBLEdDQVUsRUFBM0IsQ0FBQTs7QUNJQSxPQ0FPLENDQUMsU0NBUixHQ0FvQixTQ0FBLEdDQUE7QUNFbkIsTUNBQSxxRUNBQTtBQ0FBLEVDRm9CLHVHQ0FXLGdDQ0UvQixDQ0FBO0FDQUEsT0NBQSw2Q0NBQTt1QkNBQTtBQ0VDLElDQUEsVUNBQSxHQ0FhLGNDQWMsQ0NBQSxTQ0EzQixDQ0FBO0FDRUEsU0NBQSx5QkNBQSxHQ0FBO0FDRUMsTUNBQSxJQ0FBLENDQU8sTUNBTSxDQ0FDLHdCQ0FQLENDQWdDLFVDQWhDLEVDQTRDLE1DQTVDLENDQVA7QUNFQyxRQ0FBLElDQUEsR0NBTyxNQ0FNLENDQUMsd0JDQVAsQ0NBZ0MsS0NBSyxDQ0FBLFNDQXJDLEVDQXlDLE1DQXpDLENDQVAsQ0NBQTtBQ0FBLFFDRUEsTUNBTSxDQ0FDLGNDQVAsQ0NBc0IsVUNBdEIsRUNBa0MsTUNBbEMsRUNBMEMsSUNBMUMsQ0NGQSxDQ0ZEO09DRkQ7QUNBQSxLQ0pEO0FDQUEsR0NBQTtTQ1lBLGVDZG1CO0FDQUEsQ0FKcEIsQ0FBQTs7QUNvQkEsT0NBTyxDQ0FDLEdDQVIsR0NBYyxTQ0FBLEdDQUE7QUNFYixNQ0FBLHFFQ0FBO0FDQUEsRUNGYyx1R0NBVyxnQ0NFekIsQ0NBQTtBQ0FBLEVDQUEsVUNBQSxHQ0FhLGNDQWMsQ0NBQSxTQ0EzQixDQ0FBO0FDQUEsRUNFQSxjQ0FjLENDQUMsY0NBZixHQ0FnQyxFQ0ZoQyxDQ0FBO0FDQUEsRUNJQSxjQ0FjLENDQUMsaUJDQWYsR0NBbUMsU0NBQyxRQ0FELEVDQVcsSUNBWCxHQ0FBO0FDRWxDLFFDQUEsc0JDQUE7O01DRjZDLE9DQU87S0NFcEQ7QUNBQTtBQ0FBLFNDQUEsMkNDQUE7d0JDQUE7QUNFQyxNQ0FBLE1DQU0sQ0NBQyxLQ0FQLENDQWEsUUNBYixFQ0F1QixJQ0F2QixDQ0FBLENDRkQ7QUNBQSxLQ0ZrQztFQ0FBLENDSm5DLENDQUE7QUNBQSxFQ1lBLGNDQWMsQ0NBQyxtQkNBZixHQ0FxQyxFQ1pyQyxDQ0FBO0FDQUEsRUNjQSxjQ0FjLENDQUMsZUNBZixHQ0FpQyxTQ0FDLFFDQUQsRUNBVyxJQ0FYLEdDQUE7QUNFaEMsUUNBQSwyQkNBQTs7TUNGMkMsT0NBTztLQ0VsRDtBQ0FBO0FDQUEsU0NBQSwyQ0NBQTs2QkNBQTtBQ0VDLE1DQUEsV0NBVyxDQ0FDLEtDQVosQ0NBa0IsUUNBbEIsRUNBNEIsSUNBNUIsQ0NBQSxDQ0ZEO0FDQUEsS0NGZ0M7RUNBQSxDQ2RqQyxDQ0FBO0FDQUEsRUNzQkEsY0NBYyxDQ0FDLGVDQWYsR0NBaUMsRUN0QmpDLENDQUE7QUNBQSxFQ3dCQSxjQ0FjLENDQUMsa0JDQWYsR0NBb0MsU0NBQyxRQ0FELEVDQVcsSUNBWCxHQ0FBO0FDRW5DLFFDQUEsdUJDQUE7O01DRjhDLE9DQU87S0NFckQ7QUNBQTtBQ0FBLFNDQUEsMkNDQUE7eUJDQUE7QUNFQyxNQ0FBLE9DQU8sQ0NBQyxLQ0FSLENDQWMsUUNBZCxFQ0F3QixJQ0F4QixDQ0FBLENDRkQ7QUNBQSxLQ0ZtQztFQ0FBLENDeEJwQyxDQ0FBO0FDZ0NBLE9DQUEsNkNDQUE7dUJDQUE7QUNFQyxJQ0FBLElDQUEsQ0NBQSxDQ0FPLEtDQUssQ0NBQyxXQ0FOLFlDQTZCLFFDQXBDLENDQUE7QUNFQyxZQ0FNLEtDQUEsQ0NBTSw0QkNBTixDQ0FOLENDRkQ7S0NBQTtBQ0lBLFNDQUEseUJDQUEsR0NBQTtBQ0VDLE1DQUEsSUNBRyxNQ0FNLENDQUMsTUNBUCxDQ0FjLENDQWQsRUNBaUIsRUNBakIsQ0NBQSxLQ0F3QixhQ0EzQjtBQ0VDLFFDQUEsY0NBYyxDQ0FDLG1CQ0FtQixDQ0FDLElDQW5DLENDQXdDLEtDQUssQ0NBQSxTQ0FHLENDQUEsTUNBQSxDQ0FoRCxDQ0FBLENDQUE7QUNFQSxpQkNKRDtPQ0FBLE1DTUssSUNBRyxNQ0FNLENDQUMsTUNBUCxDQ0FjLENDQWQsRUNBaUIsRUNBakIsQ0NBQSxLQ0F3QixhQ0EzQjtBQ0VKLFFDQUEsY0NBYyxDQ0FDLGNDQWMsQ0NBQyxJQ0E5QixDQ0FtQyxLQ0FLLENDQUEsU0NBRyxDQ0FBLE1DQUEsQ0NBM0MsQ0NBQSxDQ0FBO0FDRUEsaUJDSkk7T0NBQSxNQ01BLElDQUcsTUNBTSxDQ0FDLE1DQVAsQ0NBYyxDQ0FkLEVDQWlCLEVDQWpCLENDQUEsS0NBd0IsY0NBM0I7QUNFSixRQ0FBLGNDQWMsQ0NBQyxlQ0FlLENDQUMsSUNBL0IsQ0NBb0MsS0NBSyxDQ0FBLFNDQUcsQ0NBQSxNQ0FBLENDQTVDLENDQUEsQ0NBQTtBQ0VBLGlCQ0pJO09DWkw7QUNrQkEsTUNBQSxJQ0FBLENDQU8sTUNBTSxDQ0FDLHdCQ0FQLENDQWdDLFVDQWhDLEVDQTRDLE1DQTVDLENDQVA7QUNFQyxRQ0FBLElDQUEsR0NBTyxNQ0FNLENDQUMsd0JDQVAsQ0NBZ0MsS0NBSyxDQ0FBLFNDQXJDLEVDQXlDLE1DQXpDLENDQVAsQ0NBQTtBQ0FBLFFDRUEsTUNBTSxDQ0FDLGNDQVAsQ0NBc0IsVUNBdEIsRUNBa0MsTUNBbEMsRUNBMEMsSUNBMUMsQ0NGQSxDQ0ZEO09DcEJEO0FDQUEsS0NORDtBQ0FBLEdDaENBO1NDZ0VBLGVDbEVhO0FDQUEsQ0FwQmQsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXJyYXkgPVxuXG5cdCMjI1xuXHRUcmllcyB0byB0dXJuIGFueXRoaW5nIGludG8gYW4gYXJyYXkuXG5cdCMjI1xuXHRmcm9tOiAocikgLT5cblxuXHRcdEFycmF5OjpzbGljZS5jYWxsIHJcblxuXHQjIyNcblx0Q2xvbmUgb2YgYW4gYXJyYXkuIFByb3BlcnRpZXMgd2lsbCBiZSBzaGFsbG93IGNvcGllcy5cblx0IyMjXG5cdHNpbXBsZUNsb25lOiAoYSkgLT5cblxuXHRcdGEuc2xpY2UgMFxuXG5cdHNoYWxsb3dFcXVhbDogKGExLCBhMikgLT5cblxuXHRcdHJldHVybiBubyB1bmxlc3MgQXJyYXkuaXNBcnJheShhMSkgYW5kIEFycmF5LmlzQXJyYXkoYTIpIGFuZCBhMS5sZW5ndGggaXMgYTIubGVuZ3RoXG5cblx0XHRmb3IgdmFsLCBpIGluIGExXG5cblx0XHRcdHJldHVybiBubyB1bmxlc3MgYTJbaV0gaXMgdmFsXG5cblx0XHR5ZXNcblxuXHRwbHVjazogKGEsIGkpIC0+XG5cblx0XHRyZXR1cm4gYSBpZiBhLmxlbmd0aCA8IDFcblxuXG5cdFx0Zm9yIHZhbHVlLCBpbmRleCBpbiBhXG5cblx0XHRcdGlmIGluZGV4ID4gaVxuXG5cdFx0XHRcdGFbaW5kZXggLSAxXSA9IGFbaW5kZXhdXG5cblx0XHRhLmxlbmd0aCA9IGEubGVuZ3RoIC0gMVxuXG5cdFx0YVxuXG5cdHBsdWNrSXRlbTogKGEsIGl0ZW0pIC0+XG5cblx0XHRyZXR1cm4gYSBpZiBhLmxlbmd0aCA8IDFcblxuXG5cdFx0cmVtb3ZlZCA9IDBcblxuXHRcdGZvciB2YWx1ZSwgaW5kZXggaW4gYVxuXG5cdFx0XHRpZiB2YWx1ZSBpcyBpdGVtXG5cblx0XHRcdFx0cmVtb3ZlZCsrXG5cblx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0aWYgcmVtb3ZlZCBpc250IDBcblxuXHRcdFx0XHRhW2luZGV4IC0gcmVtb3ZlZF0gPSBhW2luZGV4XVxuXG5cdFx0YS5sZW5ndGggPSBhLmxlbmd0aCAtIHJlbW92ZWQgaWYgcmVtb3ZlZCA+IDBcblxuXHRcdGFcblxuXHRwbHVja09uZUl0ZW06IChhLCBpdGVtKSAtPlxuXG5cdFx0cmV0dXJuIGEgaWYgYS5sZW5ndGggPCAxXG5cblx0XHRyZWFjaGVkID0gbm9cblxuXHRcdGZvciB2YWx1ZSwgaW5kZXggaW4gYVxuXG5cdFx0XHRpZiBub3QgcmVhY2hlZFxuXG5cdFx0XHRcdGlmIHZhbHVlIGlzIGl0ZW1cblxuXHRcdFx0XHRcdHJlYWNoZWQgPSB5ZXNcblxuXHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdGVsc2VcblxuXHRcdFx0XHRhW2luZGV4IC0gMV0gPSBhW2luZGV4XVxuXG5cdFx0YS5sZW5ndGggPSBhLmxlbmd0aCAtIDEgaWYgcmVhY2hlZFxuXG5cdFx0YVxuXG5cdHBsdWNrQnlDYWxsYmFjazogKGEsIGNiKSAtPlxuXG5cdFx0cmV0dXJuIGEgaWYgYS5sZW5ndGggPCAxXG5cblx0XHRyZW1vdmVkID0gMFxuXG5cdFx0Zm9yIHZhbHVlLCBpbmRleCBpbiBhXG5cblx0XHRcdGlmIGNiIHZhbHVlLCBpbmRleFxuXG5cdFx0XHRcdHJlbW92ZWQrK1xuXG5cdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdGlmIHJlbW92ZWQgaXNudCAwXG5cblx0XHRcdFx0YVtpbmRleCAtIHJlbW92ZWRdID0gYVtpbmRleF1cblxuXHRcdGlmIHJlbW92ZWQgPiAwXG5cblx0XHRcdGEubGVuZ3RoID0gYS5sZW5ndGggLSByZW1vdmVkXG5cblx0XHRhXG5cblx0cGx1Y2tNdWx0aXBsZTogKGFycmF5LCBpbmRleGVzVG9SZW1vdmUpIC0+XG5cblx0XHRyZXR1cm4gYXJyYXkgaWYgYXJyYXkubGVuZ3RoIDwgMVxuXG5cdFx0cmVtb3ZlZFNvRmFyID0gMFxuXG5cdFx0aW5kZXhlc1RvUmVtb3ZlLnNvcnQoKVxuXG5cdFx0Zm9yIGkgaW4gaW5kZXhlc1RvUmVtb3ZlXG5cblx0XHRcdEBwbHVjayBhcnJheSwgaSAtIHJlbW92ZWRTb0ZhclxuXG5cdFx0XHRyZW1vdmVkU29GYXIrK1xuXG5cdFx0YXJyYXlcblxuXHRpbmplY3RCeUNhbGxiYWNrOiAoYSwgdG9JbmplY3QsIHNob3VsZEluamVjdCkgLT5cblxuXHRcdHZhbEEgPSBudWxsXG5cblx0XHR2YWxCID0gbnVsbFxuXG5cdFx0bGVuID0gYS5sZW5ndGhcblxuXHRcdGlmIGxlbiA8IDFcblxuXHRcdFx0YS5wdXNoIHRvSW5qZWN0XG5cblx0XHRcdHJldHVybiBhXG5cblxuXHRcdGZvciB2YWwsIGkgaW4gYVxuXG5cdFx0XHR2YWxBID0gdmFsQlxuXG5cdFx0XHR2YWxCID0gdmFsXG5cblx0XHRcdGlmIHNob3VsZEluamVjdCB2YWxBLCB2YWxCLCB0b0luamVjdFxuXG5cdFx0XHRcdHJldHVybiBhLnNwbGljZSBpLCAwLCB0b0luamVjdFxuXG5cdFx0YS5wdXNoIHRvSW5qZWN0XG5cblx0XHRhXG5cblx0aW5qZWN0SW5JbmRleDogKGEsIGluZGV4LCB0b0luamVjdCkgLT5cblxuXHRcdGxlbiA9IGEubGVuZ3RoXG5cblx0XHRpID0gaW5kZXhcblxuXHRcdGlmIGxlbiA8IDFcblxuXHRcdFx0YS5wdXNoIHRvSW5qZWN0XG5cblx0XHRcdHJldHVybiBhXG5cblx0XHR0b1B1dCA9IHRvSW5qZWN0XG5cblx0XHR0b1B1dE5leHQgPSBudWxsXG5cblx0XHRgZm9yKDsgaSA8PSBsZW47IGkrKyl7XG5cblx0XHRcdHRvUHV0TmV4dCA9IGFbaV07XG5cblx0XHRcdGFbaV0gPSB0b1B1dDtcblxuXHRcdFx0dG9QdXQgPSB0b1B1dE5leHQ7XG5cblx0XHR9YFxuXG5cdFx0IyBhW2ldID0gdG9QdXRcblxuXHRcdG51bGwiLCJtb2R1bGUuZXhwb3J0cyA9IGNsYXNzaWMgPSB7fVxuXG4jIExpdHRsZSBoZWxwZXIgZm9yIG1peGlucyBmcm9tIENvZmZlZVNjcmlwdCBGQVEsXG4jIGNvdXJ0ZXN5IG9mIFNldGhhdXJ1cyAoaHR0cDovL2dpdGh1Yi5jb20vc2V0aGF1cnVzKVxuY2xhc3NpYy5pbXBsZW1lbnQgPSAobWl4aW5zLi4uLCBjbGFzc1JlZmVyZW5jZSkgLT5cblxuXHRmb3IgbWl4aW4gaW4gbWl4aW5zXG5cblx0XHRjbGFzc1Byb3RvID0gY2xhc3NSZWZlcmVuY2U6OlxuXG5cdFx0Zm9yIG1lbWJlciBvZiBtaXhpbjo6XG5cblx0XHRcdHVubGVzcyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNsYXNzUHJvdG8sIG1lbWJlclxuXG5cdFx0XHRcdGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIG1peGluOjosIG1lbWJlclxuXG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjbGFzc1Byb3RvLCBtZW1iZXIsIGRlc2NcblxuXHRjbGFzc1JlZmVyZW5jZVxuXG5jbGFzc2ljLm1peCA9IChtaXhpbnMuLi4sIGNsYXNzUmVmZXJlbmNlKSAtPlxuXG5cdGNsYXNzUHJvdG8gPSBjbGFzc1JlZmVyZW5jZTo6XG5cblx0Y2xhc3NSZWZlcmVuY2UuX19taXhpbkNsb25lcnMgPSBbXVxuXG5cdGNsYXNzUmVmZXJlbmNlLl9fYXBwbHlDbG9uZXJzRm9yID0gKGluc3RhbmNlLCBhcmdzID0gbnVsbCkgLT5cblxuXHRcdGZvciBjbG9uZXIgaW4gY2xhc3NSZWZlcmVuY2UuX19taXhpbkNsb25lcnNcblxuXHRcdFx0Y2xvbmVyLmFwcGx5IGluc3RhbmNlLCBhcmdzXG5cblx0XHRyZXR1cm5cblxuXHRjbGFzc1JlZmVyZW5jZS5fX21peGluSW5pdGlhbGl6ZXJzID0gW11cblxuXHRjbGFzc1JlZmVyZW5jZS5fX2luaXRNaXhpbnNGb3IgPSAoaW5zdGFuY2UsIGFyZ3MgPSBudWxsKSAtPlxuXG5cdFx0Zm9yIGluaXRpYWxpemVyIGluIGNsYXNzUmVmZXJlbmNlLl9fbWl4aW5Jbml0aWFsaXplcnNcblxuXHRcdFx0aW5pdGlhbGl6ZXIuYXBwbHkgaW5zdGFuY2UsIGFyZ3NcblxuXHRcdHJldHVyblxuXG5cdGNsYXNzUmVmZXJlbmNlLl9fbWl4aW5RdWl0dGVycyA9IFtdXG5cblx0Y2xhc3NSZWZlcmVuY2UuX19hcHBseVF1aXR0ZXJzRm9yID0gKGluc3RhbmNlLCBhcmdzID0gbnVsbCkgLT5cblxuXHRcdGZvciBxdWl0dGVyIGluIGNsYXNzUmVmZXJlbmNlLl9fbWl4aW5RdWl0dGVyc1xuXG5cdFx0XHRxdWl0dGVyLmFwcGx5IGluc3RhbmNlLCBhcmdzXG5cblx0XHRyZXR1cm5cblxuXHRmb3IgbWl4aW4gaW4gbWl4aW5zXG5cblx0XHR1bmxlc3MgbWl4aW4uY29uc3RydWN0b3IgaW5zdGFuY2VvZiBGdW5jdGlvblxuXG5cdFx0XHR0aHJvdyBFcnJvciBcIk1peGluIHNob3VsZCBiZSBhIGZ1bmN0aW9uXCJcblxuXHRcdGZvciBtZW1iZXIgb2YgbWl4aW46OlxuXG5cdFx0XHRpZiBtZW1iZXIuc3Vic3RyKDAsIDExKSBpcyAnX19pbml0TWl4aW4nXG5cblx0XHRcdFx0Y2xhc3NSZWZlcmVuY2UuX19taXhpbkluaXRpYWxpemVycy5wdXNoIG1peGluOjpbbWVtYmVyXVxuXG5cdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdGVsc2UgaWYgbWVtYmVyLnN1YnN0cigwLCAxMSkgaXMgJ19fY2xvbmVyRm9yJ1xuXG5cdFx0XHRcdGNsYXNzUmVmZXJlbmNlLl9fbWl4aW5DbG9uZXJzLnB1c2ggbWl4aW46OlttZW1iZXJdXG5cblx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0ZWxzZSBpZiBtZW1iZXIuc3Vic3RyKDAsIDEyKSBpcyAnX19xdWl0dGVyRm9yJ1xuXG5cdFx0XHRcdGNsYXNzUmVmZXJlbmNlLl9fbWl4aW5RdWl0dGVycy5wdXNoIG1peGluOjpbbWVtYmVyXVxuXG5cdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdHVubGVzcyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNsYXNzUHJvdG8sIG1lbWJlclxuXG5cdFx0XHRcdGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIG1peGluOjosIG1lbWJlclxuXG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjbGFzc1Byb3RvLCBtZW1iZXIsIGRlc2NcblxuXHRjbGFzc1JlZmVyZW5jZSJdfQ==
\ No newline at end of file |