UNPKG

@coolwallet/ton

Version:
142 lines (141 loc) 48.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.finalizeTransferTokenTransaction = finalizeTransferTokenTransaction; exports.finalizeTransferTransaction = finalizeTransferTransaction; var _tonweb = _interopRequireDefault(require("tonweb")); var _tonweb2 = require("./tonweb"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function finalize(_x) { return _finalize.apply(this, arguments); } function _finalize() { _finalize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(props) { var wallet, signature, signingMessage, seqno, body, stateInit, deploy, selfAddress, header, resultMessage, boc; return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: wallet = props.wallet, signature = props.signature, signingMessage = props.signingMessage, seqno = props.seqno; body = new _tonweb2.tonweb.boc.Cell(); body.bits.writeBytes(signature); body.writeCell(signingMessage); if (!(seqno === 0)) { _context.next = 9; break; } _context.next = 7; return wallet.createStateInit(); case 7: deploy = _context.sent; stateInit = deploy.stateInit; case 9: _context.next = 11; return wallet.getAddress(); case 11: selfAddress = _context.sent; header = _tonweb["default"].Contract.createExternalMessageHeader(selfAddress); resultMessage = _tonweb["default"].Contract.createCommonMsgInfo(header, stateInit, body); _context.t0 = _tonweb2.tonweb.utils; _context.next = 17; return resultMessage.toBoc(false); case 17: _context.t1 = _context.sent; boc = _context.t0.bytesToBase64.call(_context.t0, _context.t1); return _context.abrupt("return", boc); case 20: case "end": return _context.stop(); } }, _callee); })); return _finalize.apply(this, arguments); } function finalizeTransferTransaction(_x2, _x3, _x4) { return _finalizeTransferTransaction.apply(this, arguments); } function _finalizeTransferTransaction() { _finalizeTransferTransaction = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(transaction, publicKey, signature) { var toAddress, amount, seqno, expireAt, payload, sendMode, wallet, signingMessage; return _regeneratorRuntime().wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: toAddress = transaction.toAddress, amount = transaction.amount, seqno = transaction.seqno, expireAt = transaction.expireAt, payload = transaction.payload, sendMode = transaction.sendMode; wallet = (0, _tonweb2.getWalletV4R2)(publicKey); signingMessage = wallet.createSigningMessage(seqno, expireAt); signingMessage.bits.writeUint8(sendMode); signingMessage.refs.push(_tonweb["default"].Contract.createOutMsg(toAddress, amount, payload)); _context2.next = 7; return finalize({ wallet: wallet, signature: signature, signingMessage: signingMessage, seqno: seqno }); case 7: return _context2.abrupt("return", _context2.sent); case 8: case "end": return _context2.stop(); } }, _callee2); })); return _finalizeTransferTransaction.apply(this, arguments); } function finalizeTransferTokenTransaction(_x5, _x6, _x7) { return _finalizeTransferTokenTransaction.apply(this, arguments); } function _finalizeTransferTokenTransaction() { _finalizeTransferTokenTransaction = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(transaction, publicKey, signature) { var fromTokenAccount, amount, seqno, expireAt, payload, sendMode, tokenInfo, jettonAmount, receiver, forwardAmount, forwardPayload, responseAddress, wallet, jettonWallet, tokenTransferBody, signingMessage; return _regeneratorRuntime().wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: fromTokenAccount = transaction.toAddress, amount = transaction.amount, seqno = transaction.seqno, expireAt = transaction.expireAt, payload = transaction.payload, sendMode = transaction.sendMode, tokenInfo = transaction.tokenInfo; jettonAmount = payload.jettonAmount, receiver = payload.toAddress, forwardAmount = payload.forwardAmount, forwardPayload = payload.forwardPayload, responseAddress = payload.responseAddress; wallet = (0, _tonweb2.getWalletV4R2)(publicKey); _context3.next = 5; return (0, _tonweb2.getJettonWallet)(fromTokenAccount); case 5: jettonWallet = _context3.sent; _context3.next = 8; return jettonWallet.createTransferBody({ jettonAmount: jettonAmount, toAddress: new _tonweb["default"].utils.Address(receiver), forwardAmount: forwardAmount, forwardPayload: new Uint8Array([].concat(_toConsumableArray(new Uint8Array(4)), _toConsumableArray(new TextEncoder().encode(forwardPayload || '')))), responseAddress: new _tonweb["default"].utils.Address(responseAddress) }); case 8: tokenTransferBody = _context3.sent; signingMessage = wallet.createSigningMessage(seqno, expireAt); signingMessage.bits.writeUint8(sendMode); signingMessage.refs.push(_tonweb["default"].Contract.createOutMsg(fromTokenAccount, amount, tokenTransferBody)); _context3.next = 14; return finalize({ wallet: wallet, signature: signature, signingMessage: signingMessage, seqno: seqno }); case 14: return _context3.abrupt("return", _context3.sent); case 15: case "end": return _context3.stop(); } }, _callee3); })); return _finalizeTransferTokenTransaction.apply(this, arguments); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9ud2ViIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdG9ud2ViMiIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiVHlwZUVycm9yIiwibWluTGVuIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJuIiwiT2JqZWN0IiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsIml0ZXIiLCJpc0FycmF5IiwibGVuIiwibGVuZ3RoIiwiaSIsImFycjIiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiaGFzT3duUHJvcGVydHkiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiYSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJrZXkiLCJpbmZvIiwiZXJyb3IiLCJfYXN5bmNUb0dlbmVyYXRvciIsImZuIiwic2VsZiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsImVyciIsInVuZGVmaW5lZCIsImZpbmFsaXplIiwiX3giLCJfZmluYWxpemUiLCJfY2FsbGVlIiwicHJvcHMiLCJ3YWxsZXQiLCJzaWduYXR1cmUiLCJzaWduaW5nTWVzc2FnZSIsInNlcW5vIiwiYm9keSIsInN0YXRlSW5pdCIsImRlcGxveSIsInNlbGZBZGRyZXNzIiwiaGVhZGVyIiwicmVzdWx0TWVzc2FnZSIsImJvYyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJ0b253ZWIiLCJDZWxsIiwiYml0cyIsIndyaXRlQnl0ZXMiLCJ3cml0ZUNlbGwiLCJjcmVhdGVTdGF0ZUluaXQiLCJnZXRBZGRyZXNzIiwiVG9uV2ViIiwiQ29udHJhY3QiLCJjcmVhdGVFeHRlcm5hbE1lc3NhZ2VIZWFkZXIiLCJjcmVhdGVDb21tb25Nc2dJbmZvIiwidDAiLCJ1dGlscyIsInRvQm9jIiwidDEiLCJieXRlc1RvQmFzZTY0IiwiZmluYWxpemVUcmFuc2ZlclRyYW5zYWN0aW9uIiwiX3gyIiwiX3gzIiwiX3g0IiwiX2ZpbmFsaXplVHJhbnNmZXJUcmFuc2FjdGlvbiIsIl9jYWxsZWUyIiwidHJhbnNhY3Rpb24iLCJwdWJsaWNLZXkiLCJ0b0FkZHJlc3MiLCJhbW91bnQiLCJleHBpcmVBdCIsInBheWxvYWQiLCJzZW5kTW9kZSIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImdldFdhbGxldFY0UjIiLCJjcmVhdGVTaWduaW5nTWVzc2FnZSIsIndyaXRlVWludDgiLCJyZWZzIiwiY3JlYXRlT3V0TXNnIiwiZmluYWxpemVUcmFuc2ZlclRva2VuVHJhbnNhY3Rpb24iLCJfeDUiLCJfeDYiLCJfeDciLCJfZmluYWxpemVUcmFuc2ZlclRva2VuVHJhbnNhY3Rpb24iLCJfY2FsbGVlMyIsImZyb21Ub2tlbkFjY291bnQiLCJ0b2tlbkluZm8iLCJqZXR0b25BbW91bnQiLCJyZWNlaXZlciIsImZvcndhcmRBbW91bnQiLCJmb3J3YXJkUGF5bG9hZCIsInJlc3BvbnNlQWRkcmVzcyIsImpldHRvbldhbGxldCIsInRva2VuVHJhbnNmZXJCb2R5IiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiZ2V0SmV0dG9uV2FsbGV0IiwiY3JlYXRlVHJhbnNmZXJCb2R5IiwiQWRkcmVzcyIsIlVpbnQ4QXJyYXkiLCJjb25jYXQiLCJUZXh0RW5jb2RlciIsImVuY29kZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90cmFuc2FjdGlvblV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUb25XZWIgZnJvbSAndG9ud2ViJztcbmltcG9ydCB7IFRyYW5zZmVyVG9rZW5UcmFuc2FjdGlvbiwgVHJhbnNmZXJUcmFuc2FjdGlvbiB9IGZyb20gJy4uL2NvbmZpZy90eXBlcyc7XG5pbXBvcnQgeyBnZXRKZXR0b25XYWxsZXQsIGdldFdhbGxldFY0UjIsIHRvbndlYiB9IGZyb20gJy4vdG9ud2ViJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICd0b253ZWIvZGlzdC90eXBlcy9ib2MvY2VsbCc7XG5pbXBvcnQgeyBXYWxsZXRWNENvbnRyYWN0UjIgfSBmcm9tICd0b253ZWIvZGlzdC90eXBlcy9jb250cmFjdC93YWxsZXQvdjQvd2FsbGV0LXY0LWNvbnRyYWN0LXIyJztcblxuYXN5bmMgZnVuY3Rpb24gZmluYWxpemUocHJvcHM6IHtcbiAgd2FsbGV0OiBXYWxsZXRWNENvbnRyYWN0UjI7XG4gIHNpZ25hdHVyZTogQnVmZmVyO1xuICBzaWduaW5nTWVzc2FnZTogQ2VsbDtcbiAgc2Vxbm86IG51bWJlcjtcbn0pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHdhbGxldCwgc2lnbmF0dXJlLCBzaWduaW5nTWVzc2FnZSwgc2Vxbm8gfSA9IHByb3BzO1xuXG4gIGNvbnN0IGJvZHkgPSBuZXcgdG9ud2ViLmJvYy5DZWxsKCk7XG4gIGJvZHkuYml0cy53cml0ZUJ5dGVzKHNpZ25hdHVyZSk7XG4gIGJvZHkud3JpdGVDZWxsKHNpZ25pbmdNZXNzYWdlKTtcblxuICBsZXQgc3RhdGVJbml0O1xuXG4gIGlmIChzZXFubyA9PT0gMCkge1xuICAgIGNvbnN0IGRlcGxveSA9IGF3YWl0IHdhbGxldC5jcmVhdGVTdGF0ZUluaXQoKTtcbiAgICBzdGF0ZUluaXQgPSBkZXBsb3kuc3RhdGVJbml0O1xuICB9XG5cbiAgY29uc3Qgc2VsZkFkZHJlc3MgPSBhd2FpdCB3YWxsZXQuZ2V0QWRkcmVzcygpO1xuICBjb25zdCBoZWFkZXIgPSBUb25XZWIuQ29udHJhY3QuY3JlYXRlRXh0ZXJuYWxNZXNzYWdlSGVhZGVyKHNlbGZBZGRyZXNzKTtcbiAgY29uc3QgcmVzdWx0TWVzc2FnZSA9IFRvbldlYi5Db250cmFjdC5jcmVhdGVDb21tb25Nc2dJbmZvKGhlYWRlciwgc3RhdGVJbml0LCBib2R5KTtcblxuICBjb25zdCBib2MgPSB0b253ZWIudXRpbHMuYnl0ZXNUb0Jhc2U2NChhd2FpdCByZXN1bHRNZXNzYWdlLnRvQm9jKGZhbHNlKSk7XG4gIHJldHVybiBib2M7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5hbGl6ZVRyYW5zZmVyVHJhbnNhY3Rpb24oXG4gIHRyYW5zYWN0aW9uOiBSZXF1aXJlZDxUcmFuc2ZlclRyYW5zYWN0aW9uPixcbiAgcHVibGljS2V5OiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogQnVmZmVyXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHRvQWRkcmVzcywgYW1vdW50LCBzZXFubywgZXhwaXJlQXQsIHBheWxvYWQsIHNlbmRNb2RlIH0gPSB0cmFuc2FjdGlvbjtcblxuICBjb25zdCB3YWxsZXQgPSBnZXRXYWxsZXRWNFIyKHB1YmxpY0tleSk7XG5cbiAgY29uc3Qgc2lnbmluZ01lc3NhZ2UgPSAod2FsbGV0IGFzIGFueSkuY3JlYXRlU2lnbmluZ01lc3NhZ2Uoc2Vxbm8sIGV4cGlyZUF0KSBhcyBDZWxsO1xuICBzaWduaW5nTWVzc2FnZS5iaXRzLndyaXRlVWludDgoc2VuZE1vZGUpO1xuICBzaWduaW5nTWVzc2FnZS5yZWZzLnB1c2goKFRvbldlYi5Db250cmFjdCBhcyBhbnkpLmNyZWF0ZU91dE1zZyh0b0FkZHJlc3MsIGFtb3VudCwgcGF5bG9hZCkpO1xuXG4gIHJldHVybiBhd2FpdCBmaW5hbGl6ZSh7IHdhbGxldCwgc2lnbmF0dXJlLCBzaWduaW5nTWVzc2FnZSwgc2Vxbm8gfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5hbGl6ZVRyYW5zZmVyVG9rZW5UcmFuc2FjdGlvbihcbiAgdHJhbnNhY3Rpb246IFJlcXVpcmVkPFRyYW5zZmVyVG9rZW5UcmFuc2FjdGlvbj4sXG4gIHB1YmxpY0tleTogc3RyaW5nLFxuICBzaWduYXR1cmU6IEJ1ZmZlclxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyB0b0FkZHJlc3M6IGZyb21Ub2tlbkFjY291bnQsIGFtb3VudCwgc2Vxbm8sIGV4cGlyZUF0LCBwYXlsb2FkLCBzZW5kTW9kZSwgdG9rZW5JbmZvIH0gPSB0cmFuc2FjdGlvbjtcbiAgY29uc3QgeyBqZXR0b25BbW91bnQsIHRvQWRkcmVzczogcmVjZWl2ZXIsIGZvcndhcmRBbW91bnQsIGZvcndhcmRQYXlsb2FkLCByZXNwb25zZUFkZHJlc3MgfSA9IHBheWxvYWQ7XG5cbiAgY29uc3Qgd2FsbGV0ID0gZ2V0V2FsbGV0VjRSMihwdWJsaWNLZXkpO1xuICBjb25zdCBqZXR0b25XYWxsZXQgPSBhd2FpdCBnZXRKZXR0b25XYWxsZXQoZnJvbVRva2VuQWNjb3VudCk7XG5cbiAgY29uc3QgdG9rZW5UcmFuc2ZlckJvZHkgPSBhd2FpdCBqZXR0b25XYWxsZXQuY3JlYXRlVHJhbnNmZXJCb2R5KHtcbiAgICBqZXR0b25BbW91bnQsXG4gICAgdG9BZGRyZXNzOiBuZXcgVG9uV2ViLnV0aWxzLkFkZHJlc3MocmVjZWl2ZXIpLFxuICAgIGZvcndhcmRBbW91bnQsXG4gICAgZm9yd2FyZFBheWxvYWQ6IG5ldyBVaW50OEFycmF5KFsuLi5uZXcgVWludDhBcnJheSg0KSwgLi4ubmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGZvcndhcmRQYXlsb2FkIHx8ICcnKV0pLFxuICAgIHJlc3BvbnNlQWRkcmVzczogbmV3IFRvbldlYi51dGlscy5BZGRyZXNzKHJlc3BvbnNlQWRkcmVzcyksXG4gIH0gYXMgYW55KTtcblxuICBjb25zdCBzaWduaW5nTWVzc2FnZSA9ICh3YWxsZXQgYXMgYW55KS5jcmVhdGVTaWduaW5nTWVzc2FnZShzZXFubywgZXhwaXJlQXQpIGFzIENlbGw7XG4gIHNpZ25pbmdNZXNzYWdlLmJpdHMud3JpdGVVaW50OChzZW5kTW9kZSk7XG4gIHNpZ25pbmdNZXNzYWdlLnJlZnMucHVzaCgoVG9uV2ViLkNvbnRyYWN0IGFzIGFueSkuY3JlYXRlT3V0TXNnKGZyb21Ub2tlbkFjY291bnQsIGFtb3VudCwgdG9rZW5UcmFuc2ZlckJvZHkpKTtcblxuICByZXR1cm4gYXdhaXQgZmluYWxpemUoeyB3YWxsZXQsIHNpZ25hdHVyZSwgc2lnbmluZ01lc3NhZ2UsIHNlcW5vIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQWtFLFNBQUFELHVCQUFBRyxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsZ0JBQUFBLEdBQUE7QUFBQSxTQUFBRSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLG1CQUFBQyxHQUFBLFdBQUFDLGtCQUFBLENBQUFELEdBQUEsS0FBQUUsZ0JBQUEsQ0FBQUYsR0FBQSxLQUFBRywyQkFBQSxDQUFBSCxHQUFBLEtBQUFJLGtCQUFBO0FBQUEsU0FBQUEsbUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBVCxDQUFBLEVBQUFZLE1BQUEsU0FBQVosQ0FBQSxxQkFBQUEsQ0FBQSxzQkFBQWEsaUJBQUEsQ0FBQWIsQ0FBQSxFQUFBWSxNQUFBLE9BQUFFLENBQUEsR0FBQUMsTUFBQSxDQUFBWCxTQUFBLENBQUFZLFFBQUEsQ0FBQUMsSUFBQSxDQUFBakIsQ0FBQSxFQUFBa0IsS0FBQSxhQUFBSixDQUFBLGlCQUFBZCxDQUFBLENBQUFHLFdBQUEsRUFBQVcsQ0FBQSxHQUFBZCxDQUFBLENBQUFHLFdBQUEsQ0FBQWdCLElBQUEsTUFBQUwsQ0FBQSxjQUFBQSxDQUFBLG1CQUFBTSxL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