@bitgo/sdk-coin-starknet 1.6.4 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,13 +32,16 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
39
  const utils_1 = __importStar(require("../../src/lib/utils"));
37
40
  const statics_1 = require("@bitgo/statics");
38
41
  const transactionBuilderFactory_1 = require("../../src/lib/transactionBuilderFactory");
39
42
  const starknet_1 = require("../resources/starknet");
40
43
  const constants_1 = require("../../src/lib/constants");
41
- require("should");
44
+ const should_1 = __importDefault(require("should"));
42
45
  describe('Starknet Utils', () => {
43
46
  describe('isValidAddress', () => {
44
47
  it('should accept a valid Starknet address', () => {
@@ -56,6 +59,9 @@ describe('Starknet Utils', () => {
56
59
  it('should reject address without 0x prefix', () => {
57
60
  utils_1.default.isValidAddress('04a1f29b8b8e3d3c9f6c9b7a8d2e1f0c5b4a3d2e1f0c5b4a3d2e1f0c5b4a3d2e').should.equal(false);
58
61
  });
62
+ it('should reject zero (addresses must be non-zero)', () => {
63
+ utils_1.default.isValidAddress('0x0').should.equal(false);
64
+ });
59
65
  });
60
66
  describe('isValidPublicKey', () => {
61
67
  it('should accept a valid uncompressed public key', () => {
@@ -296,5 +302,51 @@ describe('Starknet Utils', () => {
296
302
  hash.should.equal(tx.starknetTransactionData.transactionHash);
297
303
  });
298
304
  });
305
+ describe('parseUdcDeployCall / isUdcDeployCall', () => {
306
+ it('should parse a valid UDC deploy call', () => {
307
+ const derived = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(starknet_1.Accounts.account2.publicKey));
308
+ const call = {
309
+ contractAddress: constants_1.UDC_ADDRESS,
310
+ entrypoint: constants_1.UDC_DEPLOY_ENTRYPOINT,
311
+ calldata: [constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, derived.salt, '0x0', '0x4', ...derived.constructorCalldata],
312
+ };
313
+ (0, utils_1.isUdcDeployCall)(call).should.equal(true);
314
+ const parsed = (0, utils_1.parseUdcDeployCall)(call);
315
+ should_1.default.exist(parsed);
316
+ parsed.unique.should.equal(false);
317
+ parsed.classHash.should.equal(constants_1.OZ_ETH_ACCOUNT_CLASS_HASH);
318
+ parsed.salt.should.equal(derived.salt);
319
+ parsed.constructorCalldata.should.deepEqual(derived.constructorCalldata);
320
+ });
321
+ it('should reject a transfer call', () => {
322
+ const call = {
323
+ contractAddress: starknet_1.SandboxTransferData.tokenContract,
324
+ entrypoint: 'transfer',
325
+ calldata: [starknet_1.Accounts.account2.address, '0x1', '0x0'],
326
+ };
327
+ (0, utils_1.isUdcDeployCall)(call).should.equal(false);
328
+ should_1.default.equal((0, utils_1.parseUdcDeployCall)(call), undefined);
329
+ });
330
+ it('should parse unique=true but leave unique flag set', () => {
331
+ const derived = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(starknet_1.Accounts.account2.publicKey));
332
+ const call = {
333
+ contractAddress: constants_1.UDC_ADDRESS,
334
+ entrypoint: constants_1.UDC_DEPLOY_ENTRYPOINT,
335
+ calldata: [constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, derived.salt, '0x1', '0x4', ...derived.constructorCalldata],
336
+ };
337
+ const parsed = (0, utils_1.parseUdcDeployCall)(call);
338
+ should_1.default.exist(parsed);
339
+ parsed.unique.should.equal(true);
340
+ });
341
+ it('should return undefined when ctor_len exceeds remaining calldata', () => {
342
+ const call = {
343
+ contractAddress: constants_1.UDC_ADDRESS,
344
+ entrypoint: constants_1.UDC_DEPLOY_ENTRYPOINT,
345
+ calldata: [constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, '0x1', '0x0', '0x99'],
346
+ };
347
+ (0, utils_1.isUdcDeployCall)(call).should.equal(true);
348
+ should_1.default.equal((0, utils_1.parseUdcDeployCall)(call), undefined);
349
+ });
350
+ });
299
351
  });
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2REFNNkI7QUFDN0IsNENBQXVDO0FBQ3ZDLHVGQUFvRjtBQUNwRixvREFBeUY7QUFDekYsdURBQW1EO0FBQ25ELGtCQUFnQjtBQUVoQixRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO0lBQzlCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxlQUFLLENBQUMsY0FBYyxDQUFDLG1CQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1lBQzlDLGVBQUssQ0FBQyxjQUFjLENBQUMsbUJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLGVBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5Q0FB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LENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXRpbHMsIHtcbiAgZW5jb2RlU2hvcnRTdHJpbmcsXG4gIGdldFNlbGVjdG9yRnJvbU5hbWUsXG4gIGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEsXG4gIGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCxcbiAgY2FsY3VsYXRlRGVwbG95QWNjb3VudFRyYW5zYWN0aW9uSGFzaCxcbn0gZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgQWNjb3VudHMsIFNhbmRib3hUcmFuc2ZlckRhdGEsIEtub3duR29vZEludm9rZVR4IH0gZnJvbSAnLi4vcmVzb3VyY2VzL3N0YXJrbmV0JztcbmltcG9ydCB7IE1BU0tfMTI4IH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0ICdzaG91bGQnO1xuXG5kZXNjcmliZSgnU3RhcmtuZXQgVXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdpc1ZhbGlkQWRkcmVzcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHZhbGlkIFN0YXJrbmV0IGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHNlY29uZCB2YWxpZCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoJ25vdF9hbl9hZGRyZXNzJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYWRkcmVzcyB3aXRob3V0IDB4IHByZWZpeCcsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcwNGExZjI5YjhiOGUzZDNjOWY2YzliN2E4ZDJlMWYwYzViNGEzZDJlMWYwYzViNGEzZDJlMWYwYzViNGEzZDJlJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRQdWJsaWNLZXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYSB2YWxpZCB1bmNvbXByZXNzZWQgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhbiBpbnZhbGlkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHVibGljS2V5KCdub3RfYV9rZXknKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZFB1YmxpY0tleSgnJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRQcml2YXRlS2V5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYWNjZXB0IGEgdmFsaWQgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5hY2NvdW50MS5zZWNyZXRLZXkpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleSgnbm90X2Ffa2V5Jykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIDEyOCBoZXggY2hhcnMgZnJvbSB1bmNvbXByZXNzZWQga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMuZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICByZXN1bHQubGVuZ3RoLnNob3VsZC5lcXVhbCgxMjgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGZvcm1hdCBzaWduYXR1cmUgYXMgNSBmZWx0MjUyIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSAnYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCc7XG4gICAgICBjb25zdCBzID0gJzEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMuZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZShyLCBzLCAwKTtcbiAgICAgIHJlc3VsdC5sZW5ndGguc2hvdWxkLmVxdWFsKDUpO1xuICAgICAgcmVzdWx0LmZvckVhY2goKHZhbCkgPT4gdmFsLnNob3VsZC5zdGFydFdpdGgoJzB4JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmVjaWQgMCBhbmQgMScsICgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSAnYWFhYSc7XG4gICAgICBjb25zdCBzID0gJ2JiYmInO1xuICAgICAgY29uc3Qgc2lnMCA9IHV0aWxzLmZvcm1hdEV0aEFjY291bnRTaWduYXR1cmUociwgcywgMCk7XG4gICAgICBjb25zdCBzaWcxID0gdXRpbHMuZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZShyLCBzLCAxKTtcbiAgICAgIHNpZzBbNF0uc2hvdWxkLmVxdWFsKCcweDAnKTtcbiAgICAgIHNpZzFbNF0uc2hvdWxkLmVxdWFsKCcweDEnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VuY29kZVNob3J0U3RyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZW5jb2RlIFwiaW52b2tlXCIgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgZW5jb2RlU2hvcnRTdHJpbmcoJ2ludm9rZScpLnNob3VsZC5lcXVhbCgweDY5NmU3NjZmNmI2NW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgXCJMMV9HQVNcIiBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBlbmNvZGVTaG9ydFN0cmluZygnTDFfR0FTJykuc2hvdWxkLmVxdWFsKDB4NGMzMTVmNDc0MTUzbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVuY29kZSBcIkwyX0dBU1wiIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGVuY29kZVNob3J0U3RyaW5nKCdMMl9HQVMnKS5zaG91bGQuZXF1YWwoMHg0YzMyNWY0NzQxNTNuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZW5jb2RlIFwiTDFfREFUQVwiIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGVuY29kZVNob3J0U3RyaW5nKCdMMV9EQVRBJykuc2hvdWxkLmVxdWFsKDB4NGMzMTVmNDQ0MTU0NDFuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHN0cmluZ3MgbG9uZ2VyIHRoYW4gMzEgY2hhcnMnLCAoKSA9PiB7XG4gICAgICAoKCkgPT4gZW5jb2RlU2hvcnRTdHJpbmcoJ2EnLnJlcGVhdCgzMikpKS5zaG91bGQudGhyb3coL3RvbyBsb25nLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTZWxlY3RvckZyb21OYW1lJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY29tcHV0ZSBzZWxlY3RvciBmb3IgXCJ0cmFuc2ZlclwiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21OYW1lKCd0cmFuc2ZlcicpO1xuICAgICAgKHR5cGVvZiBzZWxlY3Rvcikuc2hvdWxkLmVxdWFsKCdiaWdpbnQnKTtcbiAgICAgIChzZWxlY3RvciA+IDBuKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAoc2VsZWN0b3IgPCAxbiA8PCAyNTBuKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGRldGVybWluaXN0aWMnLCAoKSA9PiB7XG4gICAgICBnZXRTZWxlY3RvckZyb21OYW1lKCd0cmFuc2ZlcicpLnNob3VsZC5lcXVhbChnZXRTZWxlY3RvckZyb21OYW1lKCd0cmFuc2ZlcicpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvbXBpbGVFeGVjdXRlQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb21waWxlIGEgc2luZ2xlIHRyYW5zZmVyIGNhbGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxscyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0LFxuICAgICAgICAgIGVudHJ5cG9pbnQ6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgY2FsbGRhdGE6IFtcbiAgICAgICAgICAgIFNhbmRib3hUcmFuc2ZlckRhdGEucmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICAgICAgJzB4JyArIChCaWdJbnQoU2FuZGJveFRyYW5zZmVyRGF0YS5hbW91bnQpICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICcweCcgKyAoQmlnSW50KFNhbmRib3hUcmFuc2ZlckRhdGEuYW1vdW50KSA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBjb21waWxlZCA9IGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEoY2FsbHMpO1xuICAgICAgY29tcGlsZWRbMF0uc2hvdWxkLmVxdWFsKCcweDEnKTsgLy8gbnVtX2NhbGxzID0gMVxuICAgICAgY29tcGlsZWRbMV0uc2hvdWxkLmVxdWFsKFNhbmRib3hUcmFuc2ZlckRhdGEudG9rZW5Db250cmFjdCk7IC8vIHRvXG4gICAgICBjb21waWxlZC5sZW5ndGguc2hvdWxkLmVxdWFsKDEgKyAxICsgMSArIDEgKyAzKTsgLy8gbnVtX2NhbGxzICsgdG8gKyBzZWxlY3RvciArIGRhdGFfbGVuICsgMyBjYWxsZGF0YVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIGRldGVybWluaXN0aWMgaGFzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3QsXG4gICAgICAgICAgZW50cnlwb2ludDogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBjYWxsZGF0YTogW1xuICAgICAgICAgICAgU2FuZGJveFRyYW5zZmVyRGF0YS5yZWNlaXZlckFkZHJlc3MsXG4gICAgICAgICAgICAnMHgnICsgKEJpZ0ludChTYW5kYm94VHJhbnNmZXJEYXRhLmFtb3VudCkgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgJzB4JyArIChCaWdJbnQoU2FuZGJveFRyYW5zZmVyRGF0YS5hbW91bnQpID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvbXBpbGVkQ2FsbGRhdGEgPSBjb21waWxlRXhlY3V0ZUNhbGxkYXRhKGNhbGxzKTtcblxuICAgICAgY29uc3QgaGFzaDEgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBoYXNoMiA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG5cbiAgICAgIGhhc2gxLnNob3VsZC5lcXVhbChoYXNoMik7XG4gICAgICBoYXNoMS5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIGRpZmZlcmVudCBoYXNoZXMgZm9yIGRpZmZlcmVudCBub25jZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxscyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0LFxuICAgICAgICAgIGVudHJ5cG9pbnQ6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgY2FsbGRhdGE6IFtTYW5kYm94VHJhbnNmZXJEYXRhLnJlY2VpdmVyQWRkcmVzcywgJzB4ZGUwYjZiM2E3NjQwMDAwJywgJzB4MCddLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvbXBpbGVkQ2FsbGRhdGEgPSBjb21waWxlRXhlY3V0ZUNhbGxkYXRhKGNhbGxzKTtcblxuICAgICAgY29uc3QgaGFzaDEgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBoYXNoMiA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MScsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG5cbiAgICAgIGhhc2gxLnNob3VsZC5ub3QuZXF1YWwoaGFzaDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgaW5jbHVkZSBwcm9vZl9mYWN0cyB3aGVuIGFic2VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3QsXG4gICAgICAgICAgZW50cnlwb2ludDogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBjYWxsZGF0YTogW1NhbmRib3hUcmFuc2ZlckRhdGEucmVjZWl2ZXJBZGRyZXNzLCAnMHhkZTBiNmIzYTc2NDAwMDAnLCAnMHgwJ10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgY29tcGlsZWRDYWxsZGF0YSA9IGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEoY2FsbHMpO1xuXG4gICAgICBjb25zdCBoYXNoV2l0aG91dCA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhhc2hXaXRoRW1wdHkgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgICAgcHJvb2ZGYWN0czogW10sXG4gICAgICB9KTtcblxuICAgICAgLy8gRW1wdHkgcHJvb2ZGYWN0cyBzaG91bGQgYmUgb21pdHRlZCwgcHJvZHVjaW5nIHNhbWUgaGFzaCBhcyBhYnNlbnRcbiAgICAgIGhhc2hXaXRob3V0LnNob3VsZC5lcXVhbChoYXNoV2l0aEVtcHR5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2gga25vd24tZ29vZCBzYW5kYm94IHR4IGhhc2ggKDB4NzM5YTcyOC4uLiknLCAoKSA9PiB7XG4gICAgICBjb25zdCB0diA9IEtub3duR29vZEludm9rZVR4O1xuICAgICAgY29uc3QgYW1vdW50QmlnID0gQmlnSW50KHR2LmFtb3VudCk7XG4gICAgICBjb25zdCBjYWxscyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogdHYudG9rZW5Db250cmFjdCxcbiAgICAgICAgICBlbnRyeXBvaW50OiAndHJhbnNmZXInLFxuICAgICAgICAgIGNhbGxkYXRhOiBbXG4gICAgICAgICAgICB0di5yZWNlaXZlckFkZHJlc3MsXG4gICAgICAgICAgICAnMHgnICsgKGFtb3VudEJpZyAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgICAgICAgICAnMHgnICsgKGFtb3VudEJpZyA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBjb21waWxlZENhbGxkYXRhID0gY29tcGlsZUV4ZWN1dGVDYWxsZGF0YShjYWxscyk7XG5cbiAgICAgIGNvbnN0IGhhc2ggPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiB0di5zZW5kZXJBZGRyZXNzLFxuICAgICAgICBjb21waWxlZENhbGxkYXRhLFxuICAgICAgICBjaGFpbklkOiB0di5jaGFpbklkLFxuICAgICAgICBub25jZTogdHYubm9uY2UsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiB0di5yZXNvdXJjZUJvdW5kcyxcbiAgICAgICAgdGlwOiB0di50aXAsXG4gICAgICB9KTtcblxuICAgICAgaGFzaC5zaG91bGQuZXF1YWwodHYuZXhwZWN0ZWRUeEhhc2gpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2FsY3VsYXRlRGVwbG95QWNjb3VudFRyYW5zYWN0aW9uSGFzaCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJlIGRldGVybWluaXN0aWMgZm9yIHRoZSBzYW1lIGRlcGxveSBpbnB1dHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmdWxsUHViID0gdXRpbHMuZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvbnN0cnVjdG9yQ2FsbGRhdGEsIHNhbHQgfSA9IHV0aWxzLmNvbXB1dGVTdGFya25ldEFkZHJlc3MoZnVsbFB1Yik7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgY2xhc3NIYXNoOiAnMHgzOTQwYmMxOGFiZjFkZjZiYzU0MGNhYmFkYjFjYWQ5NDg2YzY4MDNiOTU4MDFlNTdiNjE1M2FlMjFhYmZlMDYnLFxuICAgICAgICBjb25zdHJ1Y3RvckNhbGxkYXRhLFxuICAgICAgICBjb250cmFjdEFkZHJlc3NTYWx0OiBzYWx0LFxuICAgICAgICBjaGFpbklkOiBTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQsXG4gICAgICAgIG5vbmNlOiAnMHgwJyxcbiAgICAgICAgcmVzb3VyY2VCb3VuZHM6IFNhbmRib3hUcmFuc2ZlckRhdGEucmVzb3VyY2VCb3VuZHMsXG4gICAgICAgIHRpcDogJzB4MCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgaGFzaDEgPSBjYWxjdWxhdGVEZXBsb3lBY2NvdW50VHJhbnNhY3Rpb25IYXNoKHBhcmFtcyk7XG4gICAgICBjb25zdCBoYXNoMiA9IGNhbGN1bGF0ZURlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2gocGFyYW1zKTtcbiAgICAgIGhhc2gxLnNob3VsZC5lcXVhbChoYXNoMik7XG4gICAgICBoYXNoMS5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBoYXNoIGZyb20gV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyIGJ1aWxkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgnc3RhcmtuZXQnKSk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuZnJvbVB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpLm5vbmNlKCcweDAnKS5jaGFpbklkKFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIGltcG9ydCgnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbicpLlRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgZnVsbFB1YiA9IHV0aWxzLmdldFVuY29tcHJlc3NlZFB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpO1xuICAgICAgY29uc3QgeyBhZGRyZXNzLCBjb25zdHJ1Y3RvckNhbGxkYXRhLCBzYWx0IH0gPSB1dGlscy5jb21wdXRlU3RhcmtuZXRBZGRyZXNzKGZ1bGxQdWIpO1xuICAgICAgY29uc3QgaGFzaCA9IGNhbGN1bGF0ZURlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBjb250cmFjdEFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIGNsYXNzSGFzaDogJzB4Mzk0MGJjMThhYmYxZGY2YmM1NDBjYWJhZGIxY2FkOTQ4NmM2ODAzYjk1ODAxZTU3YjYxNTNhZTIxYWJmZTA2JyxcbiAgICAgICAgY29uc3RydWN0b3JDYWxsZGF0YSxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzU2FsdDogc2FsdCxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG4gICAgICBoYXNoLnNob3VsZC5lcXVhbCh0eC5zdGFya25ldFRyYW5zYWN0aW9uRGF0YS50cmFuc2FjdGlvbkhhc2gpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2REFRNkI7QUFDN0IsNENBQXVDO0FBQ3ZDLHVGQUFvRjtBQUNwRixvREFBeUY7QUFDekYsdURBQWtIO0FBQ2xILG9EQUE0QjtBQUU1QixRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO0lBQzlCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxlQUFLLENBQUMsY0FBYyxDQUFDLG1CQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1lBQzlDLGVBQUssQ0FBQyxjQUFjLENBQUMsbUJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLGVBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5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LE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtZQUMxRSxNQUFNLElBQUksR0FBRztnQkFDWCxlQUFlLEVBQUUsdUJBQVc7Z0JBQzVCLFVBQVUsRUFBRSxpQ0FBcUI7Z0JBQ2pDLFFBQVEsRUFBRSxDQUFDLHFDQUF5QixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDO2FBQzVELENBQUM7WUFDRixJQUFBLHVCQUFlLEVBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFBLDBCQUFrQixFQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1dGlscywge1xuICBlbmNvZGVTaG9ydFN0cmluZyxcbiAgZ2V0U2VsZWN0b3JGcm9tTmFtZSxcbiAgY29tcGlsZUV4ZWN1dGVDYWxsZGF0YSxcbiAgY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoLFxuICBjYWxjdWxhdGVEZXBsb3lBY2NvdW50VHJhbnNhY3Rpb25IYXNoLFxuICBwYXJzZVVkY0RlcGxveUNhbGwsXG4gIGlzVWRjRGVwbG95Q2FsbCxcbn0gZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgQWNjb3VudHMsIFNhbmRib3hUcmFuc2ZlckRhdGEsIEtub3duR29vZEludm9rZVR4IH0gZnJvbSAnLi4vcmVzb3VyY2VzL3N0YXJrbmV0JztcbmltcG9ydCB7IE1BU0tfMTI4LCBPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILCBVRENfQUREUkVTUywgVURDX0RFUExPWV9FTlRSWVBPSU5UIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuXG5kZXNjcmliZSgnU3RhcmtuZXQgVXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdpc1ZhbGlkQWRkcmVzcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHZhbGlkIFN0YXJrbmV0IGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHNlY29uZCB2YWxpZCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoJ25vdF9hbl9hZGRyZXNzJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYWRkcmVzcyB3aXRob3V0IDB4IHByZWZpeCcsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcwNGExZjI5YjhiOGUzZDNjOWY2YzliN2E4ZDJlMWYwYzViNGEzZDJlMWYwYzViNGEzZDJlMWYwYzViNGEzZDJlJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHplcm8gKGFkZHJlc3NlcyBtdXN0IGJlIG5vbi16ZXJvKScsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcweDAnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZFB1YmxpY0tleScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHZhbGlkIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZFB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoJ25vdF9hX2tleScpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHVibGljS2V5KCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZFByaXZhdGVLZXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYSB2YWxpZCBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KEFjY291bnRzLmFjY291bnQxLnNlY3JldEtleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KCdub3RfYV9rZXknKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoJycpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRVbmNvbXByZXNzZWRQdWJsaWNLZXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gMTI4IGhleCBjaGFycyBmcm9tIHVuY29tcHJlc3NlZCBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5nZXRVbmNvbXByZXNzZWRQdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICAgIHJlc3VsdC5sZW5ndGguc2hvdWxkLmVxdWFsKDEyOCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmb3JtYXRFdGhBY2NvdW50U2lnbmF0dXJlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZm9ybWF0IHNpZ25hdHVyZSBhcyA1IGZlbHQyNTIgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgciA9ICdhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwJztcbiAgICAgIGNvbnN0IHMgPSAnMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZic7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5mb3JtYXRFdGhBY2NvdW50U2lnbmF0dXJlKHIsIHMsIDApO1xuICAgICAgcmVzdWx0Lmxlbmd0aC5zaG91bGQuZXF1YWwoNSk7XG4gICAgICByZXN1bHQuZm9yRWFjaCgodmFsKSA9PiB2YWwuc2hvdWxkLnN0YXJ0V2l0aCgnMHgnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSByZWNpZCAwIGFuZCAxJywgKCkgPT4ge1xuICAgICAgY29uc3QgciA9ICdhYWFhJztcbiAgICAgIGNvbnN0IHMgPSAnYmJiYic7XG4gICAgICBjb25zdCBzaWcwID0gdXRpbHMuZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZShyLCBzLCAwKTtcbiAgICAgIGNvbnN0IHNpZzEgPSB1dGlscy5mb3JtYXRFdGhBY2NvdW50U2lnbmF0dXJlKHIsIHMsIDEpO1xuICAgICAgc2lnMFs0XS5zaG91bGQuZXF1YWwoJzB4MCcpO1xuICAgICAgc2lnMVs0XS5zaG91bGQuZXF1YWwoJzB4MScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZW5jb2RlU2hvcnRTdHJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgXCJpbnZva2VcIiBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBlbmNvZGVTaG9ydFN0cmluZygnaW52b2tlJykuc2hvdWxkLmVxdWFsKDB4Njk2ZTc2NmY2YjY1bik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVuY29kZSBcIkwxX0dBU1wiIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGVuY29kZVNob3J0U3RyaW5nKCdMMV9HQVMnKS5zaG91bGQuZXF1YWwoMHg0YzMxNWY0NzQxNTNuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZW5jb2RlIFwiTDJfR0FTXCIgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgZW5jb2RlU2hvcnRTdHJpbmcoJ0wyX0dBUycpLnNob3VsZC5lcXVhbCgweDRjMzI1ZjQ3NDE1M24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgXCJMMV9EQVRBXCIgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgZW5jb2RlU2hvcnRTdHJpbmcoJ0wxX0RBVEEnKS5zaG91bGQuZXF1YWwoMHg0YzMxNWY0NDQxNTQ0MW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3Qgc3RyaW5ncyBsb25nZXIgdGhhbiAzMSBjaGFycycsICgpID0+IHtcbiAgICAgICgoKSA9PiBlbmNvZGVTaG9ydFN0cmluZygnYScucmVwZWF0KDMyKSkpLnNob3VsZC50aHJvdygvdG9vIGxvbmcvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFNlbGVjdG9yRnJvbU5hbWUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb21wdXRlIHNlbGVjdG9yIGZvciBcInRyYW5zZmVyXCInLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yRnJvbU5hbWUoJ3RyYW5zZmVyJyk7XG4gICAgICAodHlwZW9mIHNlbGVjdG9yKS5zaG91bGQuZXF1YWwoJ2JpZ2ludCcpO1xuICAgICAgKHNlbGVjdG9yID4gMG4pLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIChzZWxlY3RvciA8IDFuIDw8IDI1MG4pLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYmUgZGV0ZXJtaW5pc3RpYycsICgpID0+IHtcbiAgICAgIGdldFNlbGVjdG9yRnJvbU5hbWUoJ3RyYW5zZmVyJykuc2hvdWxkLmVxdWFsKGdldFNlbGVjdG9yRnJvbU5hbWUoJ3RyYW5zZmVyJykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29tcGlsZUV4ZWN1dGVDYWxsZGF0YScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbXBpbGUgYSBzaW5nbGUgdHJhbnNmZXIgY2FsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3QsXG4gICAgICAgICAgZW50cnlwb2ludDogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBjYWxsZGF0YTogW1xuICAgICAgICAgICAgU2FuZGJveFRyYW5zZmVyRGF0YS5yZWNlaXZlckFkZHJlc3MsXG4gICAgICAgICAgICAnMHgnICsgKEJpZ0ludChTYW5kYm94VHJhbnNmZXJEYXRhLmFtb3VudCkgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgJzB4JyArIChCaWdJbnQoU2FuZGJveFRyYW5zZmVyRGF0YS5hbW91bnQpID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvbXBpbGVkID0gY29tcGlsZUV4ZWN1dGVDYWxsZGF0YShjYWxscyk7XG4gICAgICBjb21waWxlZFswXS5zaG91bGQuZXF1YWwoJzB4MScpOyAvLyBudW1fY2FsbHMgPSAxXG4gICAgICBjb21waWxlZFsxXS5zaG91bGQuZXF1YWwoU2FuZGJveFRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0KTsgLy8gdG9cbiAgICAgIGNvbXBpbGVkLmxlbmd0aC5zaG91bGQuZXF1YWwoMSArIDEgKyAxICsgMSArIDMpOyAvLyBudW1fY2FsbHMgKyB0byArIHNlbGVjdG9yICsgZGF0YV9sZW4gKyAzIGNhbGxkYXRhXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2gnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIGEgZGV0ZXJtaW5pc3RpYyBoYXNoJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEudG9rZW5Db250cmFjdCxcbiAgICAgICAgICBlbnRyeXBvaW50OiAndHJhbnNmZXInLFxuICAgICAgICAgIGNhbGxkYXRhOiBbXG4gICAgICAgICAgICBTYW5kYm94VHJhbnNmZXJEYXRhLnJlY2VpdmVyQWRkcmVzcyxcbiAgICAgICAgICAgICcweCcgKyAoQmlnSW50KFNhbmRib3hUcmFuc2ZlckRhdGEuYW1vdW50KSAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgICAgICAgICAnMHgnICsgKEJpZ0ludChTYW5kYm94VHJhbnNmZXJEYXRhLmFtb3VudCkgPj4gMTI4bikudG9TdHJpbmcoMTYpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgY29tcGlsZWRDYWxsZGF0YSA9IGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEoY2FsbHMpO1xuXG4gICAgICBjb25zdCBoYXNoMSA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhhc2gyID0gY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoKHtcbiAgICAgICAgc2VuZGVyQWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS5zZW5kZXJBZGRyZXNzLFxuICAgICAgICBjb21waWxlZENhbGxkYXRhLFxuICAgICAgICBjaGFpbklkOiBTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQsXG4gICAgICAgIG5vbmNlOiAnMHgwJyxcbiAgICAgICAgcmVzb3VyY2VCb3VuZHM6IFNhbmRib3hUcmFuc2ZlckRhdGEucmVzb3VyY2VCb3VuZHMsXG4gICAgICB9KTtcblxuICAgICAgaGFzaDEuc2hvdWxkLmVxdWFsKGhhc2gyKTtcbiAgICAgIGhhc2gxLnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb2R1Y2UgZGlmZmVyZW50IGhhc2hlcyBmb3IgZGlmZmVyZW50IG5vbmNlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3QsXG4gICAgICAgICAgZW50cnlwb2ludDogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBjYWxsZGF0YTogW1NhbmRib3hUcmFuc2ZlckRhdGEucmVjZWl2ZXJBZGRyZXNzLCAnMHhkZTBiNmIzYTc2NDAwMDAnLCAnMHgwJ10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgY29tcGlsZWRDYWxsZGF0YSA9IGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEoY2FsbHMpO1xuXG4gICAgICBjb25zdCBoYXNoMSA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhhc2gyID0gY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoKHtcbiAgICAgICAgc2VuZGVyQWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS5zZW5kZXJBZGRyZXNzLFxuICAgICAgICBjb21waWxlZENhbGxkYXRhLFxuICAgICAgICBjaGFpbklkOiBTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQsXG4gICAgICAgIG5vbmNlOiAnMHgxJyxcbiAgICAgICAgcmVzb3VyY2VCb3VuZHM6IFNhbmRib3hUcmFuc2ZlckRhdGEucmVzb3VyY2VCb3VuZHMsXG4gICAgICB9KTtcblxuICAgICAgaGFzaDEuc2hvdWxkLm5vdC5lcXVhbChoYXNoMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBpbmNsdWRlIHByb29mX2ZhY3RzIHdoZW4gYWJzZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEudG9rZW5Db250cmFjdCxcbiAgICAgICAgICBlbnRyeXBvaW50OiAndHJhbnNmZXInLFxuICAgICAgICAgIGNhbGxkYXRhOiBbU2FuZGJveFRyYW5zZmVyRGF0YS5yZWNlaXZlckFkZHJlc3MsICcweGRlMGI2YjNhNzY0MDAwMCcsICcweDAnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBjb21waWxlZENhbGxkYXRhID0gY29tcGlsZUV4ZWN1dGVDYWxsZGF0YShjYWxscyk7XG5cbiAgICAgIGNvbnN0IGhhc2hXaXRob3V0ID0gY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoKHtcbiAgICAgICAgc2VuZGVyQWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS5zZW5kZXJBZGRyZXNzLFxuICAgICAgICBjb21waWxlZENhbGxkYXRhLFxuICAgICAgICBjaGFpbklkOiBTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQsXG4gICAgICAgIG5vbmNlOiAnMHgwJyxcbiAgICAgICAgcmVzb3VyY2VCb3VuZHM6IFNhbmRib3hUcmFuc2ZlckRhdGEucmVzb3VyY2VCb3VuZHMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaGFzaFdpdGhFbXB0eSA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgICBwcm9vZkZhY3RzOiBbXSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBFbXB0eSBwcm9vZkZhY3RzIHNob3VsZCBiZSBvbWl0dGVkLCBwcm9kdWNpbmcgc2FtZSBoYXNoIGFzIGFic2VudFxuICAgICAgaGFzaFdpdGhvdXQuc2hvdWxkLmVxdWFsKGhhc2hXaXRoRW1wdHkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBrbm93bi1nb29kIHNhbmRib3ggdHggaGFzaCAoMHg3MzlhNzI4Li4uKScsICgpID0+IHtcbiAgICAgIGNvbnN0IHR2ID0gS25vd25Hb29kSW52b2tlVHg7XG4gICAgICBjb25zdCBhbW91bnRCaWcgPSBCaWdJbnQodHYuYW1vdW50KTtcbiAgICAgIGNvbnN0IGNhbGxzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzOiB0di50b2tlbkNvbnRyYWN0LFxuICAgICAgICAgIGVudHJ5cG9pbnQ6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgY2FsbGRhdGE6IFtcbiAgICAgICAgICAgIHR2LnJlY2VpdmVyQWRkcmVzcyxcbiAgICAgICAgICAgICcweCcgKyAoYW1vdW50QmlnICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICcweCcgKyAoYW1vdW50QmlnID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvbXBpbGVkQ2FsbGRhdGEgPSBjb21waWxlRXhlY3V0ZUNhbGxkYXRhKGNhbGxzKTtcblxuICAgICAgY29uc3QgaGFzaCA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IHR2LnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IHR2LmNoYWluSWQsXG4gICAgICAgIG5vbmNlOiB0di5ub25jZSxcbiAgICAgICAgcmVzb3VyY2VCb3VuZHM6IHR2LnJlc291cmNlQm91bmRzLFxuICAgICAgICB0aXA6IHR2LnRpcCxcbiAgICAgIH0pO1xuXG4gICAgICBoYXNoLnNob3VsZC5lcXVhbCh0di5leHBlY3RlZFR4SGFzaCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjYWxjdWxhdGVEZXBsb3lBY2NvdW50VHJhbnNhY3Rpb25IYXNoJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYmUgZGV0ZXJtaW5pc3RpYyBmb3IgdGhlIHNhbWUgZGVwbG95IGlucHV0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGZ1bGxQdWIgPSB1dGlscy5nZXRVbmNvbXByZXNzZWRQdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICAgIGNvbnN0IHsgYWRkcmVzcywgY29uc3RydWN0b3JDYWxsZGF0YSwgc2FsdCB9ID0gdXRpbHMuY29tcHV0ZVN0YXJrbmV0QWRkcmVzcyhmdWxsUHViKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICBjbGFzc0hhc2g6ICcweDM5NDBiYzE4YWJmMWRmNmJjNTQwY2FiYWRiMWNhZDk0ODZjNjgwM2I5NTgwMWU1N2I2MTUzYWUyMWFiZmUwNicsXG4gICAgICAgIGNvbnN0cnVjdG9yQ2FsbGRhdGEsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzc1NhbHQ6IHNhbHQsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgICAgdGlwOiAnMHgwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBoYXNoMSA9IGNhbGN1bGF0ZURlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2gocGFyYW1zKTtcbiAgICAgIGNvbnN0IGhhc2gyID0gY2FsY3VsYXRlRGVwbG95QWNjb3VudFRyYW5zYWN0aW9uSGFzaChwYXJhbXMpO1xuICAgICAgaGFzaDEuc2hvdWxkLmVxdWFsKGhhc2gyKTtcbiAgICAgIGhhc2gxLnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIGhhc2ggZnJvbSBXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIgYnVpbGQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCdzdGFya25ldCcpKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5mcm9tUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSkubm9uY2UoJzB4MCcpLmNoYWluSWQoU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkKTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgaW1wb3J0KCcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJykuVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBmdWxsUHViID0gdXRpbHMuZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvbnN0cnVjdG9yQ2FsbGRhdGEsIHNhbHQgfSA9IHV0aWxzLmNvbXB1dGVTdGFya25ldEFkZHJlc3MoZnVsbFB1Yik7XG4gICAgICBjb25zdCBoYXNoID0gY2FsY3VsYXRlRGVwbG95QWNjb3VudFRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgY2xhc3NIYXNoOiAnMHgzOTQwYmMxOGFiZjFkZjZiYzU0MGNhYmFkYjFjYWQ5NDg2YzY4MDNiOTU4MDFlNTdiNjE1M2FlMjFhYmZlMDYnLFxuICAgICAgICBjb25zdHJ1Y3RvckNhbGxkYXRhLFxuICAgICAgICBjb250cmFjdEFkZHJlc3NTYWx0OiBzYWx0LFxuICAgICAgICBjaGFpbklkOiBTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQsXG4gICAgICAgIG5vbmNlOiAnMHgwJyxcbiAgICAgICAgcmVzb3VyY2VCb3VuZHM6IFNhbmRib3hUcmFuc2ZlckRhdGEucmVzb3VyY2VCb3VuZHMsXG4gICAgICB9KTtcbiAgICAgIGhhc2guc2hvdWxkLmVxdWFsKHR4LnN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhLnRyYW5zYWN0aW9uSGFzaCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwYXJzZVVkY0RlcGxveUNhbGwgLyBpc1VkY0RlcGxveUNhbGwnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHZhbGlkIFVEQyBkZXBsb3kgY2FsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWQgPSB1dGlscy5jb21wdXRlU3RhcmtuZXRBZGRyZXNzKHV0aWxzLmdldFVuY29tcHJlc3NlZFB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50Mi5wdWJsaWNLZXkpKTtcbiAgICAgIGNvbnN0IGNhbGwgPSB7XG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogVURDX0FERFJFU1MsXG4gICAgICAgIGVudHJ5cG9pbnQ6IFVEQ19ERVBMT1lfRU5UUllQT0lOVCxcbiAgICAgICAgY2FsbGRhdGE6IFtPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILCBkZXJpdmVkLnNhbHQsICcweDAnLCAnMHg0JywgLi4uZGVyaXZlZC5jb25zdHJ1Y3RvckNhbGxkYXRhXSxcbiAgICAgIH07XG4gICAgICBpc1VkY0RlcGxveUNhbGwoY2FsbCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VVZGNEZXBsb3lDYWxsKGNhbGwpO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZCk7XG4gICAgICBwYXJzZWQhLnVuaXF1ZS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgcGFyc2VkIS5jbGFzc0hhc2guc2hvdWxkLmVxdWFsKE9aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gpO1xuICAgICAgcGFyc2VkIS5zYWx0LnNob3VsZC5lcXVhbChkZXJpdmVkLnNhbHQpO1xuICAgICAgcGFyc2VkIS5jb25zdHJ1Y3RvckNhbGxkYXRhLnNob3VsZC5kZWVwRXF1YWwoZGVyaXZlZC5jb25zdHJ1Y3RvckNhbGxkYXRhKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGEgdHJhbnNmZXIgY2FsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGwgPSB7XG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0LFxuICAgICAgICBlbnRyeXBvaW50OiAndHJhbnNmZXInLFxuICAgICAgICBjYWxsZGF0YTogW0FjY291bnRzLmFjY291bnQyLmFkZHJlc3MsICcweDEnLCAnMHgwJ10sXG4gICAgICB9O1xuICAgICAgaXNVZGNEZXBsb3lDYWxsKGNhbGwpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VVZGNEZXBsb3lDYWxsKGNhbGwpLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB1bmlxdWU9dHJ1ZSBidXQgbGVhdmUgdW5pcXVlIGZsYWcgc2V0JywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZCA9IHV0aWxzLmNvbXB1dGVTdGFya25ldEFkZHJlc3ModXRpbHMuZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQyLnB1YmxpY0tleSkpO1xuICAgICAgY29uc3QgY2FsbCA9IHtcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBVRENfQUREUkVTUyxcbiAgICAgICAgZW50cnlwb2ludDogVURDX0RFUExPWV9FTlRSWVBPSU5ULFxuICAgICAgICBjYWxsZGF0YTogW09aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsIGRlcml2ZWQuc2FsdCwgJzB4MScsICcweDQnLCAuLi5kZXJpdmVkLmNvbnN0cnVjdG9yQ2FsbGRhdGFdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlVWRjRGVwbG95Q2FsbChjYWxsKTtcbiAgICAgIHNob3VsZC5leGlzdChwYXJzZWQpO1xuICAgICAgcGFyc2VkIS51bmlxdWUuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gY3Rvcl9sZW4gZXhjZWVkcyByZW1haW5pbmcgY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsID0ge1xuICAgICAgICBjb250cmFjdEFkZHJlc3M6IFVEQ19BRERSRVNTLFxuICAgICAgICBlbnRyeXBvaW50OiBVRENfREVQTE9ZX0VOVFJZUE9JTlQsXG4gICAgICAgIGNhbGxkYXRhOiBbT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCwgJzB4MScsICcweDAnLCAnMHg5OSddLFxuICAgICAgfTtcbiAgICAgIGlzVWRjRGVwbG95Q2FsbChjYWxsKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VVZGNEZXBsb3lDYWxsKGNhbGwpLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19