UNPKG

ember-legacy-class-transform

Version:
318 lines (277 loc) 31.9 kB
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } import { CONSTANT_TAG, isConst, isModified, ReferenceCache, ConstReference } from '@glimmer/reference'; import { initializeGuid } from '@glimmer/util'; import { APPEND_OPCODES, UpdatingOpcode } from '../../opcodes'; import { FALSE_REFERENCE, NULL_REFERENCE, PrimitiveReference, TRUE_REFERENCE, UNDEFINED_REFERENCE } from '../../references'; APPEND_OPCODES.add(20 /* ChildScope */, function (vm) { return vm.pushChildScope(); }); APPEND_OPCODES.add(21 /* PopScope */, function (vm) { return vm.popScope(); }); APPEND_OPCODES.add(39 /* PushDynamicScope */, function (vm) { return vm.pushDynamicScope(); }); APPEND_OPCODES.add(40 /* PopDynamicScope */, function (vm) { return vm.popDynamicScope(); }); APPEND_OPCODES.add(12 /* Immediate */, function (vm, _ref) { var number = _ref.op1; vm.stack.push(number); }); APPEND_OPCODES.add(13 /* Constant */, function (vm, _ref2) { var other = _ref2.op1; vm.stack.push(vm.constants.getOther(other)); }); APPEND_OPCODES.add(14 /* PrimitiveReference */, function (vm, _ref3) { var primitive = _ref3.op1; var stack = vm.stack; var flag = (primitive & 3 << 30) >>> 30; var value = primitive & ~(3 << 30); switch (flag) { case 0: stack.push(PrimitiveReference.create(value)); break; case 1: stack.push(PrimitiveReference.create(vm.constants.getFloat(value))); break; case 2: stack.push(PrimitiveReference.create(vm.constants.getString(value))); break; case 3: switch (value) { case 0: stack.push(FALSE_REFERENCE); break; case 1: stack.push(TRUE_REFERENCE); break; case 2: stack.push(NULL_REFERENCE); break; case 3: stack.push(UNDEFINED_REFERENCE); break; } break; } }); APPEND_OPCODES.add(15 /* Dup */, function (vm, _ref4) { var register = _ref4.op1, offset = _ref4.op2; var position = vm.fetchValue(register) - offset; vm.stack.dup(position); }); APPEND_OPCODES.add(16 /* Pop */, function (vm, _ref5) { var count = _ref5.op1; return vm.stack.pop(count); }); APPEND_OPCODES.add(17 /* Load */, function (vm, _ref6) { var register = _ref6.op1; return vm.load(register); }); APPEND_OPCODES.add(18 /* Fetch */, function (vm, _ref7) { var register = _ref7.op1; return vm.fetch(register); }); APPEND_OPCODES.add(38 /* BindDynamicScope */, function (vm, _ref8) { var _names = _ref8.op1; var names = vm.constants.getArray(_names); vm.bindDynamicScope(names); }); APPEND_OPCODES.add(47 /* PushFrame */, function (vm) { return vm.pushFrame(); }); APPEND_OPCODES.add(48 /* PopFrame */, function (vm) { return vm.popFrame(); }); APPEND_OPCODES.add(49 /* Enter */, function (vm, _ref9) { var args = _ref9.op1; return vm.enter(args); }); APPEND_OPCODES.add(50 /* Exit */, function (vm) { return vm.exit(); }); APPEND_OPCODES.add(41 /* CompileDynamicBlock */, function (vm) { var stack = vm.stack; var block = stack.pop(); stack.push(block ? block.compileDynamic(vm.env) : null); }); APPEND_OPCODES.add(42 /* InvokeStatic */, function (vm, _ref10) { var _block = _ref10.op1; var block = vm.constants.getBlock(_block); var compiled = block.compileStatic(vm.env); vm.call(compiled.handle); }); APPEND_OPCODES.add(43 /* InvokeDynamic */, function (vm, _ref11) { var _invoker = _ref11.op1; var invoker = vm.constants.getOther(_invoker); var block = vm.stack.pop(); invoker.invoke(vm, block); }); APPEND_OPCODES.add(44 /* Jump */, function (vm, _ref12) { var target = _ref12.op1; return vm.goto(target); }); APPEND_OPCODES.add(45 /* JumpIf */, function (vm, _ref13) { var target = _ref13.op1; var reference = vm.stack.pop(); if (isConst(reference)) { if (reference.value()) { vm.goto(target); } } else { var cache = new ReferenceCache(reference); if (cache.peek()) { vm.goto(target); } vm.updateWith(new Assert(cache)); } }); APPEND_OPCODES.add(46 /* JumpUnless */, function (vm, _ref14) { var target = _ref14.op1; var reference = vm.stack.pop(); if (isConst(reference)) { if (!reference.value()) { vm.goto(target); } } else { var cache = new ReferenceCache(reference); if (!cache.peek()) { vm.goto(target); } vm.updateWith(new Assert(cache)); } }); APPEND_OPCODES.add(22 /* Return */, function (vm) { return vm.return(); }); APPEND_OPCODES.add(23 /* ReturnTo */, function (vm, _ref15) { var relative = _ref15.op1; vm.returnTo(relative); }); export var ConstTest = function (ref, _env) { return new ConstReference(!!ref.value()); }; export var SimpleTest = function (ref, _env) { return ref; }; export var EnvironmentTest = function (ref, env) { return env.toConditionalReference(ref); }; APPEND_OPCODES.add(51 /* Test */, function (vm, _ref16) { var _func = _ref16.op1; var stack = vm.stack; var operand = stack.pop(); var func = vm.constants.getFunction(_func); stack.push(func(operand, vm.env)); }); export var Assert = function (_UpdatingOpcode) { _inherits(Assert, _UpdatingOpcode); function Assert(cache) { _classCallCheck(this, Assert); var _this = _possibleConstructorReturn(this, _UpdatingOpcode.call(this)); _this.type = 'assert'; _this.tag = cache.tag; _this.cache = cache; return _this; } Assert.prototype.evaluate = function evaluate(vm) { var cache = this.cache; if (isModified(cache.revalidate())) { vm.throw(); } }; Assert.prototype.toJSON = function toJSON() { var type = this.type, _guid = this._guid, cache = this.cache; var expected = void 0; try { expected = JSON.stringify(cache.peek()); } catch (e) { expected = String(cache.peek()); } return { args: [], details: { expected: expected }, guid: _guid, type: type }; }; return Assert; }(UpdatingOpcode); export var JumpIfNotModifiedOpcode = function (_UpdatingOpcode2) { _inherits(JumpIfNotModifiedOpcode, _UpdatingOpcode2); function JumpIfNotModifiedOpcode(tag, target) { _classCallCheck(this, JumpIfNotModifiedOpcode); var _this2 = _possibleConstructorReturn(this, _UpdatingOpcode2.call(this)); _this2.target = target; _this2.type = 'jump-if-not-modified'; _this2.tag = tag; _this2.lastRevision = tag.value(); return _this2; } JumpIfNotModifiedOpcode.prototype.evaluate = function evaluate(vm) { var tag = this.tag, target = this.target, lastRevision = this.lastRevision; if (!vm.alwaysRevalidate && tag.validate(lastRevision)) { vm.goto(target); } }; JumpIfNotModifiedOpcode.prototype.didModify = function didModify() { this.lastRevision = this.tag.value(); }; JumpIfNotModifiedOpcode.prototype.toJSON = function toJSON() { return { args: [JSON.stringify(this.target.inspect())], guid: this._guid, type: this.type }; }; return JumpIfNotModifiedOpcode; }(UpdatingOpcode); export var DidModifyOpcode = function (_UpdatingOpcode3) { _inherits(DidModifyOpcode, _UpdatingOpcode3); function DidModifyOpcode(target) { _classCallCheck(this, DidModifyOpcode); var _this3 = _possibleConstructorReturn(this, _UpdatingOpcode3.call(this)); _this3.target = target; _this3.type = 'did-modify'; _this3.tag = CONSTANT_TAG; return _this3; } DidModifyOpcode.prototype.evaluate = function evaluate() { this.target.didModify(); }; return DidModifyOpcode; }(UpdatingOpcode); export var LabelOpcode = function () { function LabelOpcode(label) { _classCallCheck(this, LabelOpcode); this.tag = CONSTANT_TAG; this.type = 'label'; this.label = null; this.prev = null; this.next = null; initializeGuid(this); this.label = label; } LabelOpcode.prototype.evaluate = function evaluate() {}; LabelOpcode.prototype.inspect = function inspect() { return this.label + ' [' + this._guid + ']'; }; LabelOpcode.prototype.toJSON = function toJSON() { return { args: [JSON.stringify(this.inspect())], guid: this._guid, type: this.type }; }; return LabelOpcode; }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21waWxlZC9vcGNvZGVzL3ZtLmpzIl0sIm5hbWVzIjpbIkNPTlNUQU5UX1RBRyIsImlzQ29uc3QiLCJpc01vZGlmaWVkIiwiUmVmZXJlbmNlQ2FjaGUiLCJDb25zdFJlZmVyZW5jZSIsImluaXRpYWxpemVHdWlkIiwiQVBQRU5EX09QQ09ERVMiLCJVcGRhdGluZ09wY29kZSIsIkZBTFNFX1JFRkVSRU5DRSIsIk5VTExfUkVGRVJFTkNFIiwiUHJpbWl0aXZlUmVmZXJlbmNlIiwiVFJVRV9SRUZFUkVOQ0UiLCJVTkRFRklORURfUkVGRVJFTkNFIiwiYWRkIiwidm0iLCJwdXNoQ2hpbGRTY29wZSIsInBvcFNjb3BlIiwicHVzaER5bmFtaWNTY29wZSIsInBvcER5bmFtaWNTY29wZSIsIm51bWJlciIsIm9wMSIsInN0YWNrIiwicHVzaCIsIm90aGVyIiwiY29uc3RhbnRzIiwiZ2V0T3RoZXIiLCJwcmltaXRpdmUiLCJmbGFnIiwidmFsdWUiLCJjcmVhdGUiLCJnZXRGbG9hdCIsImdldFN0cmluZyIsInJlZ2lzdGVyIiwib2Zmc2V0Iiwib3AyIiwicG9zaXRpb24iLCJmZXRjaFZhbHVlIiwiZHVwIiwiY291bnQiLCJwb3AiLCJsb2FkIiwiZmV0Y2giLCJfbmFtZXMiLCJuYW1lcyIsImdldEFycmF5IiwiYmluZER5bmFtaWNTY29wZSIsInB1c2hGcmFtZSIsInBvcEZyYW1lIiwiYXJncyIsImVudGVyIiwiZXhpdCIsImJsb2NrIiwiY29tcGlsZUR5bmFtaWMiLCJlbnYiLCJfYmxvY2siLCJnZXRCbG9jayIsImNvbXBpbGVkIiwiY29tcGlsZVN0YXRpYyIsImNhbGwiLCJoYW5kbGUiLCJfaW52b2tlciIsImludm9rZXIiLCJpbnZva2UiLCJ0YXJnZXQiLCJnb3RvIiwicmVmZXJlbmNlIiwiY2FjaGUiLCJwZWVrIiwidXBkYXRlV2l0aCIsIkFzc2VydCIsInJldHVybiIsInJlbGF0aXZlIiwicmV0dXJuVG8iLCJDb25zdFRlc3QiLCJyZWYiLCJfZW52IiwiU2ltcGxlVGVzdCIsIkVudmlyb25tZW50VGVzdCIsInRvQ29uZGl0aW9uYWxSZWZlcmVuY2UiLCJfZnVuYyIsIm9wZXJhbmQiLCJmdW5jIiwiZ2V0RnVuY3Rpb24iLCJ0eXBlIiwidGFnIiwiZXZhbHVhdGUiLCJyZXZhbGlkYXRlIiwidGhyb3ciLCJ0b0pTT04iLCJfZ3VpZCIsImV4cGVjdGVkIiwiSlNPTiIsInN0cmluZ2lmeSIsImUiLCJTdHJpbmciLCJkZXRhaWxzIiwiZ3VpZCIsIkp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlIiwibGFzdFJldmlzaW9uIiwiYWx3YXlzUmV2YWxpZGF0ZSIsInZhbGlkYXRlIiwiZGlkTW9kaWZ5IiwiaW5zcGVjdCIsIkRpZE1vZGlmeU9wY29kZSIsIkxhYmVsT3Bjb2RlIiwibGFiZWwiLCJwcmV2IiwibmV4dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxTQUFTQSxZQUFULEVBQXVCQyxPQUF2QixFQUFnQ0MsVUFBaEMsRUFBNENDLGNBQTVDLEVBQTREQyxjQUE1RCxRQUFrRixvQkFBbEY7QUFDQSxTQUFTQyxjQUFULFFBQStCLGVBQS9CO0FBQ0EsU0FBU0MsY0FBVCxFQUF5QkMsY0FBekIsUUFBK0MsZUFBL0M7QUFDQSxTQUFTQyxlQUFULEVBQTBCQyxjQUExQixFQUEwQ0Msa0JBQTFDLEVBQThEQyxjQUE5RCxFQUE4RUMsbUJBQTlFLFFBQXlHLGtCQUF6RztBQUNBTixlQUFlTyxHQUFmLENBQW1CLEVBQW5CLENBQXNCLGdCQUF0QixFQUF3QztBQUFBLFdBQU1DLEdBQUdDLGNBQUgsRUFBTjtBQUFBLENBQXhDO0FBQ0FULGVBQWVPLEdBQWYsQ0FBbUIsRUFBbkIsQ0FBc0IsY0FBdEIsRUFBc0M7QUFBQSxXQUFNQyxHQUFHRSxRQUFILEVBQU47QUFBQSxDQUF0QztBQUNBVixlQUFlTyxHQUFmLENBQW1CLEVBQW5CLENBQXNCLHNCQUF0QixFQUE4QztBQUFBLFdBQU1DLEdBQUdHLGdCQUFILEVBQU47QUFBQSxDQUE5QztBQUNBWCxlQUFlTyxHQUFmLENBQW1CLEVB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QWNJRCxNQWRKLHFCQWNhO0FBQ0wsZUFBTztBQUNIeEMsa0JBQU0sQ0FBQzJDLEtBQUtDLFNBQUwsQ0FBZSxLQUFLVSxPQUFMLEVBQWYsQ0FBRCxDQURIO0FBRUhOLGtCQUFNLEtBQUtQLEtBRlI7QUFHSE4sa0JBQU0sS0FBS0E7QUFIUixTQUFQO0FBS0gsS0FwQkw7O0FBQUE7QUFBQSIsImZpbGUiOiJsaWIvY29tcGlsZWQvb3Bjb2Rlcy92bS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENPTlNUQU5UX1RBRywgaXNDb25zdCwgaXNNb2RpZmllZCwgUmVmZXJlbmNlQ2FjaGUsIENvbnN0UmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IGluaXRpYWxpemVHdWlkIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IEZBTFNFX1JFRkVSRU5DRSwgTlVMTF9SRUZFUkVOQ0UsIFByaW1pdGl2ZVJlZmVyZW5jZSwgVFJVRV9SRUZFUkVOQ0UsIFVOREVGSU5FRF9SRUZFUkVOQ0UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbkFQUEVORF9PUENPREVTLmFkZCgyMCAvKiBDaGlsZFNjb3BlICovLCB2bSA9PiB2bS5wdXNoQ2hpbGRTY29wZSgpKTtcbkFQUEVORF9PUENPREVTLmFkZCgyMSAvKiBQb3BTY29wZSAqLywgdm0gPT4gdm0ucG9wU2NvcGUoKSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoMzkgLyogUHVzaER5bmFtaWNTY29wZSAqLywgdm0gPT4gdm0ucHVzaER5bmFtaWNTY29wZSgpKTtcbkFQUEVORF9PUENPREVTLmFkZCg0MCAvKiBQb3BEeW5hbWljU2NvcGUgKi8sIHZtID0+IHZtLnBvcER5bmFtaWNTY29wZSgpKTtcbkFQUEVORF9PUENPREVTLmFkZCgxMiAvKiBJbW1lZGlhdGUgKi8sICh2bSwgeyBvcDE6IG51bWJlciB9KSA9PiB7XG4gICAgdm0uc3RhY2sucHVzaChudW1iZXIpO1xufSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoMTMgLyogQ29uc3RhbnQgKi8sICh2bSwgeyBvcDE6IG90aGVyIH0pID0+IHtcbiAgICB2bS5zdGFjay5wdXNoKHZtLmNvbnN0YW50cy5nZXRPdGhlcihvdGhlcikpO1xufSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoMTQgLyogUHJpbWl0aXZlUmVmZXJlbmNlICovLCAodm0sIHsgb3AxOiBwcmltaXRpdmUgfSkgPT4ge1xuICAgIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICAgIGxldCBmbGFnID0gKHByaW1pdGl2ZSAmIDMgPDwgMzApID4+PiAzMDtcbiAgICBsZXQgdmFsdWUgPSBwcmltaXRpdmUgJiB+KDMgPDwgMzApO1xuICAgIHN3aXRjaCAoZmxhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBzdGFjay5wdXNoKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodmFsdWUpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodm0uY29uc3RhbnRzLmdldEZsb2F0KHZhbHVlKSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHZhbHVlKSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goRkFMU0VfUkVGRVJFTkNFKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKFRSVUVfUkVGRVJFTkNFKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKE5VTExfUkVGRVJFTkNFKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKFVOREVGSU5FRF9SRUZFUkVOQ0UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn0pO1xuQVBQRU5EX09QQ09ERVMuYWRkKDE1IC8qIER1cCAqLywgKHZtLCB7IG9wMTogcmVnaXN0ZXIsIG9wMjogb2Zmc2V0IH0pID0+IHtcbiAgICBsZXQgcG9zaXRpb24gPSB2bS5mZXRjaFZhbHVlKHJlZ2lzdGVyKSAtIG9mZnNldDtcbiAgICB2bS5zdGFjay5kdXAocG9zaXRpb24pO1xufSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoMTYgLyogUG9wICovLCAodm0sIHsgb3AxOiBjb3VudCB9KSA9PiB2bS5zdGFjay5wb3AoY291bnQpKTtcbkFQUEVORF9PUENPREVTLmFkZCgxNyAvKiBMb2FkICovLCAodm0sIHsgb3AxOiByZWdpc3RlciB9KSA9PiB2bS5sb2FkKHJlZ2lzdGVyKSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoMTggLyogRmV0Y2ggKi8sICh2bSwgeyBvcDE6IHJlZ2lzdGVyIH0pID0+IHZtLmZldGNoKHJlZ2lzdGVyKSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoMzggLyogQmluZER5bmFtaWNTY29wZSAqLywgKHZtLCB7IG9wMTogX25hbWVzIH0pID0+IHtcbiAgICBsZXQgbmFtZXMgPSB2bS5jb25zdGFudHMuZ2V0QXJyYXkoX25hbWVzKTtcbiAgICB2bS5iaW5kRHluYW1pY1Njb3BlKG5hbWVzKTtcbn0pO1xuQVBQRU5EX09QQ09ERVMuYWRkKDQ3IC8qIFB1c2hGcmFtZSAqLywgdm0gPT4gdm0ucHVzaEZyYW1lKCkpO1xuQVBQRU5EX09QQ09ERVMuYWRkKDQ4IC8qIFBvcEZyYW1lICovLCB2bSA9PiB2bS5wb3BGcmFtZSgpKTtcbkFQUEVORF9PUENPREVTLmFkZCg0OSAvKiBFbnRlciAqLywgKHZtLCB7IG9wMTogYXJncyB9KSA9PiB2bS5lbnRlcihhcmdzKSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoNTAgLyogRXhpdCAqLywgdm0gPT4gdm0uZXhpdCgpKTtcbkFQUEVORF9PUENPREVTLmFkZCg0MSAvKiBDb21waWxlRHluYW1pY0Jsb2NrICovLCB2bSA9PiB7XG4gICAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gICAgbGV0IGJsb2NrID0gc3RhY2sucG9wKCk7XG4gICAgc3RhY2sucHVzaChibG9jayA/IGJsb2NrLmNvbXBpbGVEeW5hbWljKHZtLmVudikgOiBudWxsKTtcbn0pO1xuQVBQRU5EX09QQ09ERVMuYWRkKDQyIC8qIEludm9rZVN0YXRpYyAqLywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgICBsZXQgYmxvY2sgPSB2bS5jb25zdGFudHMuZ2V0QmxvY2soX2Jsb2NrKTtcbiAgICBsZXQgY29tcGlsZWQgPSBibG9jay5jb21waWxlU3RhdGljKHZtLmVudik7XG4gICAgdm0uY2FsbChjb21waWxlZC5oYW5kbGUpO1xufSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoNDMgLyogSW52b2tlRHluYW1pYyAqLywgKHZtLCB7IG9wMTogX2ludm9rZXIgfSkgPT4ge1xuICAgIGxldCBpbnZva2VyID0gdm0uY29uc3RhbnRzLmdldE90aGVyKF9pbnZva2VyKTtcbiAgICBsZXQgYmxvY2sgPSB2bS5zdGFjay5wb3AoKTtcbiAgICBpbnZva2VyLmludm9rZSh2bSwgYmxvY2spO1xufSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoNDQgLyogSnVtcCAqLywgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHZtLmdvdG8odGFyZ2V0KSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoNDUgLyogSnVtcElmICovLCAodm0sIHsgb3AxOiB0YXJnZXQgfSkgPT4ge1xuICAgIGxldCByZWZlcmVuY2UgPSB2bS5zdGFjay5wb3AoKTtcbiAgICBpZiAoaXNDb25zdChyZWZlcmVuY2UpKSB7XG4gICAgICAgIGlmIChyZWZlcmVuY2UudmFsdWUoKSkge1xuICAgICAgICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG4gICAgICAgIGlmIChjYWNoZS5wZWVrKCkpIHtcbiAgICAgICAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgICB9XG59KTtcbkFQUEVORF9PUENPREVTLmFkZCg0NiAvKiBKdW1wVW5sZXNzICovLCAodm0sIHsgb3AxOiB0YXJnZXQgfSkgPT4ge1xuICAgIGxldCByZWZlcmVuY2UgPSB2bS5zdGFjay5wb3AoKTtcbiAgICBpZiAoaXNDb25zdChyZWZlcmVuY2UpKSB7XG4gICAgICAgIGlmICghcmVmZXJlbmNlLnZhbHVlKCkpIHtcbiAgICAgICAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuICAgICAgICBpZiAoIWNhY2hlLnBlZWsoKSkge1xuICAgICAgICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICAgIH1cbn0pO1xuQVBQRU5EX09QQ09ERVMuYWRkKDIyIC8qIFJldHVybiAqLywgdm0gPT4gdm0ucmV0dXJuKCkpO1xuQVBQRU5EX09QQ09ERVMuYWRkKDIzIC8qIFJldHVyblRvICovLCAodm0sIHsgb3AxOiByZWxhdGl2ZSB9KSA9PiB7XG4gICAgdm0ucmV0dXJuVG8ocmVsYXRpdmUpO1xufSk7XG5leHBvcnQgY29uc3QgQ29uc3RUZXN0ID0gZnVuY3Rpb24gKHJlZiwgX2Vudikge1xuICAgIHJldHVybiBuZXcgQ29uc3RSZWZlcmVuY2UoISFyZWYudmFsdWUoKSk7XG59O1xuZXhwb3J0IGNvbnN0IFNpbXBsZVRlc3QgPSBmdW5jdGlvbiAocmVmLCBfZW52KSB7XG4gICAgcmV0dXJuIHJlZjtcbn07XG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRUZXN0ID0gZnVuY3Rpb24gKHJlZiwgZW52KSB7XG4gICAgcmV0dXJuIGVudi50b0NvbmRpdGlvbmFsUmVmZXJlbmNlKHJlZik7XG59O1xuQVBQRU5EX09QQ09ERVMuYWRkKDUxIC8qIFRlc3QgKi8sICh2bSwgeyBvcDE6IF9mdW5jIH0pID0+IHtcbiAgICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgICBsZXQgb3BlcmFuZCA9IHN0YWNrLnBvcCgpO1xuICAgIGxldCBmdW5jID0gdm0uY29uc3RhbnRzLmdldEZ1bmN0aW9uKF9mdW5jKTtcbiAgICBzdGFjay5wdXNoKGZ1bmMob3BlcmFuZCwgdm0uZW52KSk7XG59KTtcbmV4cG9ydCBjbGFzcyBBc3NlcnQgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gICAgY29uc3RydWN0b3IoY2FjaGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2Fzc2VydCc7XG4gICAgICAgIHRoaXMudGFnID0gY2FjaGUudGFnO1xuICAgICAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG4gICAgfVxuICAgIGV2YWx1YXRlKHZtKSB7XG4gICAgICAgIGxldCB7IGNhY2hlIH0gPSB0aGlzO1xuICAgICAgICBpZiAoaXNNb2RpZmllZChjYWNoZS5yZXZhbGlkYXRlKCkpKSB7XG4gICAgICAgICAgICB2bS50aHJvdygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgbGV0IHsgdHlwZSwgX2d1aWQsIGNhY2hlIH0gPSB0aGlzO1xuICAgICAgICBsZXQgZXhwZWN0ZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBleHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5KGNhY2hlLnBlZWsoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGV4cGVjdGVkID0gU3RyaW5nKGNhY2hlLnBlZWsoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFyZ3M6IFtdLFxuICAgICAgICAgICAgZGV0YWlsczogeyBleHBlY3RlZCB9LFxuICAgICAgICAgICAgZ3VpZDogX2d1aWQsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICAgIGNvbnN0cnVjdG9yKHRhZywgdGFyZ2V0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLnR5cGUgPSAnanVtcC1pZi1ub3QtbW9kaWZpZWQnO1xuICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgdGhpcy5sYXN0UmV2aXNpb24gPSB0YWcudmFsdWUoKTtcbiAgICB9XG4gICAgZXZhbHVhdGUodm0pIHtcbiAgICAgICAgbGV0IHsgdGFnLCB0YXJnZXQsIGxhc3RSZXZpc2lvbiB9ID0gdGhpcztcbiAgICAgICAgaWYgKCF2bS5hbHdheXNSZXZhbGlkYXRlICYmIHRhZy52YWxpZGF0ZShsYXN0UmV2aXNpb24pKSB7XG4gICAgICAgICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlkTW9kaWZ5KCkge1xuICAgICAgICB0aGlzLmxhc3RSZXZpc2lvbiA9IHRoaXMudGFnLnZhbHVlKCk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLnRhcmdldC5pbnNwZWN0KCkpXSxcbiAgICAgICAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGVcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgRGlkTW9kaWZ5T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy50eXBlID0gJ2RpZC1tb2RpZnknO1xuICAgICAgICB0aGlzLnRhZyA9IENPTlNUQU5UX1RBRztcbiAgICB9XG4gICAgZXZhbHVhdGUoKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0LmRpZE1vZGlmeSgpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBMYWJlbE9wY29kZSB7XG4gICAgY29uc3RydWN0b3IobGFiZWwpIHtcbiAgICAgICAgdGhpcy50YWcgPSBDT05TVEFOVF9UQUc7XG4gICAgICAgIHRoaXMudHlwZSA9ICdsYWJlbCc7XG4gICAgICAgIHRoaXMubGFiZWwgPSBudWxsO1xuICAgICAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgICAgICB0aGlzLm5leHQgPSBudWxsO1xuICAgICAgICBpbml0aWFsaXplR3VpZCh0aGlzKTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgIH1cbiAgICBldmFsdWF0ZSgpIHt9XG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGFiZWx9IFske3RoaXMuX2d1aWR9XWA7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLmluc3BlY3QoKSldLFxuICAgICAgICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZVxuICAgICAgICB9O1xuICAgIH1cbn0iXX0=