parse-server 7.0.0-alpha.21 → 7.0.0-alpha.23

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.
@@ -5,7 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.ParseGraphQLServer = void 0;
7
7
  var _cors = _interopRequireDefault(require("cors"));
8
- var _node = require("@graphql-yoga/node");
8
+ var _graphqlUploadExpress = _interopRequireDefault(require("graphql-upload/graphqlUploadExpress.js"));
9
+ var _server = require("@apollo/server");
10
+ var _express = require("@apollo/server/express4");
11
+ var _disabled = require("@apollo/server/plugin/disabled");
12
+ var _express2 = _interopRequireDefault(require("express"));
9
13
  var _graphql = require("graphql");
10
14
  var _subscriptionsTransportWs = require("subscriptions-transport-ws");
11
15
  var _middlewares = require("../middlewares");
@@ -37,20 +41,16 @@ class ParseGraphQLServer {
37
41
  try {
38
42
  return {
39
43
  schema: await this.parseGraphQLSchema.load(),
40
- context: ({
41
- req: {
42
- info,
43
- config,
44
- auth
45
- }
46
- }) => ({
47
- info,
48
- config,
49
- auth
50
- }),
51
- maskedErrors: false,
52
- multipart: {
53
- fileSize: this._transformMaxUploadSizeToBytes(this.parseServer.config.maxUploadSize || '20mb')
44
+ context: async ({
45
+ req,
46
+ res
47
+ }) => {
48
+ res.set('access-control-allow-origin', req.get('origin') || '*');
49
+ return {
50
+ info: req.info,
51
+ config: req.config,
52
+ auth: req.auth
53
+ };
54
54
  }
55
55
  };
56
56
  } catch (e) {
@@ -64,8 +64,24 @@ class ParseGraphQLServer {
64
64
  if (schemaRef === newSchemaRef && this._server) {
65
65
  return this._server;
66
66
  }
67
- const options = await this._getGraphQLOptions();
68
- this._server = (0, _node.createServer)(options);
67
+ const {
68
+ schema,
69
+ context
70
+ } = await this._getGraphQLOptions();
71
+ const apollo = new _server.ApolloServer({
72
+ csrfPrevention: {
73
+ // See https://www.apollographql.com/docs/router/configuration/csrf/
74
+ // needed since we use graphql upload
75
+ requestHeaders: ['X-Parse-Application-Id']
76
+ },
77
+ introspection: true,
78
+ plugins: [(0, _disabled.ApolloServerPluginCacheControlDisabled)()],
79
+ schema
80
+ });
81
+ await apollo.start();
82
+ this._server = (0, _express.expressMiddleware)(apollo, {
83
+ context
84
+ });
69
85
  return this._server;
70
86
  }
71
87
  _transformMaxUploadSizeToBytes(maxUploadSize) {
@@ -84,9 +100,12 @@ class ParseGraphQLServer {
84
100
  app.use(this.config.graphQLPath, _middlewares.handleParseHeaders);
85
101
  app.use(this.config.graphQLPath, _middlewares.handleParseSession);
86
102
  app.use(this.config.graphQLPath, _middlewares.handleParseErrors);
87
- app.use(this.config.graphQLPath, async (req, res) => {
103
+ app.use(this.config.graphQLPath, (0, _graphqlUploadExpress.default)({
104
+ maxFileSize: this._transformMaxUploadSizeToBytes(this.parseServer.config.maxUploadSize || '20mb')
105
+ }));
106
+ app.use(this.config.graphQLPath, _express2.default.json(), async (req, res, next) => {
88
107
  const server = await this._getServer();
89
- return server(req, res);
108
+ return server(req, res, next);
90
109
  });
91
110
  }
92
111
  applyPlayground(app) {
@@ -95,14 +114,26 @@ class ParseGraphQLServer {
95
114
  }
96
115
  app.get(this.config.playgroundPath || (0, _requiredParameter.default)('You must provide a config.playgroundPath to applyPlayground!'), (_req, res) => {
97
116
  res.setHeader('Content-Type', 'text/html');
98
- res.write((0, _node.renderGraphiQL)({
99
- endpoint: this.config.graphQLPath,
100
- subscriptionEndpoint: this.config.subscriptionsPath,
101
- headers: JSON.stringify({
102
- 'X-Parse-Application-Id': this.parseServer.config.appId,
103
- 'X-Parse-Master-Key': this.parseServer.config.masterKey
104
- })
105
- }));
117
+ res.write(`<div id="sandbox" style="position:absolute;top:0;right:0;bottom:0;left:0"></div>
118
+ <script src="https://embeddable-sandbox.cdn.apollographql.com/_latest/embeddable-sandbox.umd.production.min.js"></script>
119
+ <script>
120
+ new window.EmbeddedSandbox({
121
+ target: "#sandbox",
122
+ endpointIsEditable: false,
123
+ initialEndpoint: "${JSON.stringify(this.config.graphQLPath)}",
124
+ handleRequest: (endpointUrl, options) => {
125
+ return fetch(endpointUrl, {
126
+ ...options,
127
+ headers: {
128
+ ...options.headers,
129
+ 'X-Parse-Application-Id': "${JSON.stringify(this.parseServer.config.appId)}",
130
+ 'X-Parse-Master-Key': "${JSON.stringify(this.parseServer.config.masterKey)}",
131
+ },
132
+ })
133
+ },
134
+ });
135
+ // advanced options: https://www.apollographql.com/docs/studio/explorer/sandbox#embedding-sandbox
136
+ </script>`);
106
137
  res.end();
107
138
  });
108
139
  }
@@ -121,4 +152,4 @@ class ParseGraphQLServer {
121
152
  }
122
153
  }
123
154
  exports.ParseGraphQLServer = ParseGraphQLServer;
124
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29ycyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX25vZGUiLCJfZ3JhcGhxbCIsIl9zdWJzY3JpcHRpb25zVHJhbnNwb3J0V3MiLCJfbWlkZGxld2FyZXMiLCJfcmVxdWlyZWRQYXJhbWV0ZXIiLCJfbG9nZ2VyIiwiX1BhcnNlR3JhcGhRTFNjaGVtYSIsIl9QYXJzZUdyYXBoUUxDb250cm9sbGVyIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiUGFyc2VHcmFwaFFMU2VydmVyIiwiY29uc3RydWN0b3IiLCJwYXJzZVNlcnZlciIsImNvbmZpZyIsInJlcXVpcmVkUGFyYW1ldGVyIiwiZ3JhcGhRTFBhdGgiLCJwYXJzZUdyYXBoUUxDb250cm9sbGVyIiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImRlZmF1bHRMb2dnZXIiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJQYXJzZUdyYXBoUUxTY2hlbWEiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJncmFwaFFMQ3VzdG9tVHlwZURlZnMiLCJhcHBJZCIsIl9nZXRHcmFwaFFMT3B0aW9ucyIsInNjaGVtYSIsImxvYWQiLCJjb250ZXh0IiwicmVxIiwiaW5mbyIsImF1dGgiLCJtYXNrZWRFcnJvcnMiLCJtdWx0aXBhcnQiLCJmaWxlU2l6ZSIsIl90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyIsIm1heFVwbG9hZFNpemUiLCJlIiwiZXJyb3IiLCJzdGFjayIsInRvU3RyaW5nIiwiX2dldFNlcnZlciIsInNjaGVtYVJlZiIsImdyYXBoUUxTY2hlbWEiLCJuZXdTY2hlbWFSZWYiLCJfc2VydmVyIiwib3B0aW9ucyIsImNyZWF0ZVNlcnZlciIsInVuaXRNYXAiLCJrYiIsIm1iIiwiZ2IiLCJOdW1iZXIiLCJzbGljZSIsIk1hdGgiLCJwb3ciLCJ0b0xvd2VyQ2FzZSIsImFwcGx5R3JhcGhRTCIsImFwcCIsInVzZSIsImNvcnNNaWRkbGV3YXJlIiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwiaGFuZGxlUGFyc2VFcnJvcnMiLCJyZXMiLCJzZXJ2ZXIiLCJhcHBseVBsYXlncm91bmQiLCJwbGF5Z3JvdW5kUGF0aCIsIl9yZXEiLCJzZXRIZWFkZXIiLCJ3cml0ZSIsInJlbmRlckdyYXBoaVFMIiwiZW5kcG9pbnQiLCJzdWJzY3JpcHRpb25FbmRwb2ludCIsInN1YnNjcmlwdGlvbnNQYXRoIiwiaGVhZGVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJtYXN0ZXJLZXkiLCJlbmQiLCJjcmVhdGVTdWJzY3JpcHRpb25zIiwiU3Vic2NyaXB0aW9uU2VydmVyIiwiY3JlYXRlIiwiZXhlY3V0ZSIsInN1YnNjcmliZSIsIm9uT3BlcmF0aW9uIiwiX21lc3NhZ2UiLCJwYXJhbXMiLCJ3ZWJTb2NrZXQiLCJhc3NpZ24iLCJ1cGdyYWRlUmVxIiwicGF0aCIsInNldEdyYXBoUUxDb25maWciLCJncmFwaFFMQ29uZmlnIiwidXBkYXRlR3JhcGhRTENvbmZpZyIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvR3JhcGhRTC9QYXJzZUdyYXBoUUxTZXJ2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvcnNNaWRkbGV3YXJlIGZyb20gJ2NvcnMnO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyLCByZW5kZXJHcmFwaGlRTCB9IGZyb20gJ0BncmFwaHFsLXlvZ2Evbm9kZSc7XG5pbXBvcnQgeyBleGVjdXRlLCBzdWJzY3JpYmUgfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvblNlcnZlciB9IGZyb20gJ3N1YnNjcmlwdGlvbnMtdHJhbnNwb3J0LXdzJztcbmltcG9ydCB7IGhhbmRsZVBhcnNlRXJyb3JzLCBoYW5kbGVQYXJzZUhlYWRlcnMsIGhhbmRsZVBhcnNlU2Vzc2lvbiB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCByZXF1aXJlZFBhcmFtZXRlciBmcm9tICcuLi9yZXF1aXJlZFBhcmFtZXRlcic7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgUGFyc2VHcmFwaFFMU2NoZW1hIH0gZnJvbSAnLi9QYXJzZUdyYXBoUUxTY2hlbWEnO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsIHsgUGFyc2VHcmFwaFFMQ29uZmlnIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5cbmNsYXNzIFBhcnNlR3JhcGhRTFNlcnZlciB7XG4gIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3IocGFyc2VTZXJ2ZXIsIGNvbmZpZykge1xuICAgIHRoaXMucGFyc2VTZXJ2ZXIgPSBwYXJzZVNlcnZlciB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIHBhcnNlU2VydmVyIGluc3RhbmNlIScpO1xuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcuZ3JhcGhRTFBhdGgpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLmdyYXBoUUxQYXRoIScpO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIgPSB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5wYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuICAgIHRoaXMubG9nID1cbiAgICAgICh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyAmJiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hID0gbmV3IFBhcnNlR3JhcGhRTFNjaGVtYSh7XG4gICAgICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgICBkYXRhYmFzZUNvbnRyb2xsZXI6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmRhdGFiYXNlQ29udHJvbGxlcixcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6IHRoaXMuY29uZmlnLmdyYXBoUUxDdXN0b21UeXBlRGVmcyxcbiAgICAgIGFwcElkOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRHcmFwaFFMT3B0aW9ucygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hOiBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCksXG4gICAgICAgIGNvbnRleHQ6ICh7IHJlcTogeyBpbmZvLCBjb25maWcsIGF1dGggfSB9KSA9PiAoe1xuICAgICAgICAgIGluZm8sXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgIH0pLFxuICAgICAgICBtYXNrZWRFcnJvcnM6IGZhbHNlLFxuICAgICAgICBtdWx0aXBhcnQ6IHtcbiAgICAgICAgICBmaWxlU2l6ZTogdGhpcy5fdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMoXG4gICAgICAgICAgICB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5tYXhVcGxvYWRTaXplIHx8ICcyMG1iJ1xuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGUuc3RhY2sgfHwgKHR5cGVvZiBlLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIGUudG9TdHJpbmcoKSkgfHwgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9nZXRTZXJ2ZXIoKSB7XG4gICAgY29uc3Qgc2NoZW1hUmVmID0gdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEuZ3JhcGhRTFNjaGVtYTtcbiAgICBjb25zdCBuZXdTY2hlbWFSZWYgPSBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCk7XG4gICAgaWYgKHNjaGVtYVJlZiA9PT0gbmV3U2NoZW1hUmVmICYmIHRoaXMuX3NlcnZlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHRoaXMuX2dldEdyYXBoUUxPcHRpb25zKCk7XG4gICAgdGhpcy5fc2VydmVyID0gY3JlYXRlU2VydmVyKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gIH1cblxuICBfdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZSkge1xuICAgIGNvbnN0IHVuaXRNYXAgPSB7XG4gICAgICBrYjogMSxcbiAgICAgIG1iOiAyLFxuICAgICAgZ2I6IDMsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICBOdW1iZXIobWF4VXBsb2FkU2l6ZS5zbGljZSgwLCAtMikpICpcbiAgICAgIE1hdGgucG93KDEwMjQsIHVuaXRNYXBbbWF4VXBsb2FkU2l6ZS5zbGljZSgtMikudG9Mb3dlckNhc2UoKV0pXG4gICAgKTtcbiAgfVxuXG4gIGFwcGx5R3JhcGhRTChhcHApIHtcbiAgICBpZiAoIWFwcCB8fCAhYXBwLnVzZSkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gRXhwcmVzcy5qcyBhcHAgaW5zdGFuY2UhJyk7XG4gICAgfVxuXG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgY29yc01pZGRsZXdhcmUoKSk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VIZWFkZXJzKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZVNlc3Npb24pO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlRXJyb3JzKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZlciA9IGF3YWl0IHRoaXMuX2dldFNlcnZlcigpO1xuICAgICAgcmV0dXJuIHNlcnZlcihyZXEsIHJlcyk7XG4gICAgfSk7XG4gIH1cblxuICBhcHBseVBsYXlncm91bmQoYXBwKSB7XG4gICAgaWYgKCFhcHAgfHwgIWFwcC5nZXQpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGFuIEV4cHJlc3MuanMgYXBwIGluc3RhbmNlIScpO1xuICAgIH1cbiAgICBhcHAuZ2V0KFxuICAgICAgdGhpcy5jb25maWcucGxheWdyb3VuZFBhdGggfHxcbiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcucGxheWdyb3VuZFBhdGggdG8gYXBwbHlQbGF5Z3JvdW5kIScpLFxuICAgICAgKF9yZXEsIHJlcykgPT4ge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgICAgIHJlcy53cml0ZShcbiAgICAgICAgICByZW5kZXJHcmFwaGlRTCh7XG4gICAgICAgICAgICBlbmRwb2ludDogdGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25FbmRwb2ludDogdGhpcy5jb25maWcuc3Vic2NyaXB0aW9uc1BhdGgsXG4gICAgICAgICAgICBoZWFkZXJzOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJzogdGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQsXG4gICAgICAgICAgICAgICdYLVBhcnNlLU1hc3Rlci1LZXknOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5tYXN0ZXJLZXksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbnMoc2VydmVyKSB7XG4gICAgU3Vic2NyaXB0aW9uU2VydmVyLmNyZWF0ZShcbiAgICAgIHtcbiAgICAgICAgZXhlY3V0ZSxcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBvbk9wZXJhdGlvbjogYXN5bmMgKF9tZXNzYWdlLCBwYXJhbXMsIHdlYlNvY2tldCkgPT5cbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMsIGF3YWl0IHRoaXMuX2dldEdyYXBoUUxPcHRpb25zKHdlYlNvY2tldC51cGdyYWRlUmVxKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIHBhdGg6XG4gICAgICAgICAgdGhpcy5jb25maWcuc3Vic2NyaXB0aW9uc1BhdGggfHxcbiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5zdWJzY3JpcHRpb25zUGF0aCB0byBjcmVhdGVTdWJzY3JpcHRpb25zIScpLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRHcmFwaFFMQ29uZmlnKGdyYXBoUUxDb25maWc6IFBhcnNlR3JhcGhRTENvbmZpZyk6IFByb21pc2Uge1xuICAgIHJldHVybiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIudXBkYXRlR3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnKTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUdyYXBoUUxTZXJ2ZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcseUJBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGtCQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxPQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxtQkFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsdUJBQUEsR0FBQUMsdUJBQUEsQ0FBQVQsT0FBQTtBQUFtRyxTQUFBVSx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdBQUE7QUFBQSxTQUFBRix3QkFBQU0sR0FBQSxFQUFBSixXQUFBLFNBQUFBLFdBQUEsSUFBQUksR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsV0FBQUQsR0FBQSxRQUFBQSxHQUFBLG9CQUFBQSxHQUFBLHdCQUFBQSxHQUFBLDRCQUFBRSxPQUFBLEVBQUFGLEdBQUEsVUFBQUcsS0FBQSxHQUFBUix3QkFBQSxDQUFBQyxXQUFBLE9BQUFPLEtBQUEsSUFBQUEsS0FBQSxDQUFBQyxHQUFBLENBQUFKLEdBQUEsWUFBQUcsS0FBQSxDQUFBRSxHQUFBLENBQUFMLEdBQUEsU0FBQU0sTUFBQSxXQUFBQyxxQkFBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxHQUFBLElBQUFYLEdBQUEsUUFBQVcsR0FBQSxr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
155
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29ycyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dyYXBocWxVcGxvYWRFeHByZXNzIiwiX3NlcnZlciIsIl9leHByZXNzIiwiX2Rpc2FibGVkIiwiX2V4cHJlc3MyIiwiX2dyYXBocWwiLCJfc3Vic2NyaXB0aW9uc1RyYW5zcG9ydFdzIiwiX21pZGRsZXdhcmVzIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX2xvZ2dlciIsIl9QYXJzZUdyYXBoUUxTY2hlbWEiLCJfUGFyc2VHcmFwaFFMQ29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIlBhcnNlR3JhcGhRTFNlcnZlciIsImNvbnN0cnVjdG9yIiwicGFyc2VTZXJ2ZXIiLCJjb25maWciLCJyZXF1aXJlZFBhcmFtZXRlciIsImdyYXBoUUxQYXRoIiwicGFyc2VHcmFwaFFMQ29udHJvbGxlciIsImxvZyIsImxvZ2dlckNvbnRyb2xsZXIiLCJkZWZhdWx0TG9nZ2VyIiwicGFyc2VHcmFwaFFMU2NoZW1hIiwiUGFyc2VHcmFwaFFMU2NoZW1hIiwiZGF0YWJhc2VDb250cm9sbGVyIiwiZ3JhcGhRTEN1c3RvbVR5cGVEZWZzIiwiYXBwSWQiLCJfZ2V0R3JhcGhRTE9wdGlvbnMiLCJzY2hlbWEiLCJsb2FkIiwiY29udGV4dCIsInJlcSIsInJlcyIsImluZm8iLCJhdXRoIiwiZSIsImVycm9yIiwic3RhY2siLCJ0b1N0cmluZyIsIl9nZXRTZXJ2ZXIiLCJzY2hlbWFSZWYiLCJncmFwaFFMU2NoZW1hIiwibmV3U2NoZW1hUmVmIiwiYXBvbGxvIiwiQXBvbGxvU2VydmVyIiwiY3NyZlByZXZlbnRpb24iLCJyZXF1ZXN0SGVhZGVycyIsImludHJvc3BlY3Rpb24iLCJwbHVnaW5zIiwiQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQiLCJzdGFydCIsImV4cHJlc3NNaWRkbGV3YXJlIiwiX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzIiwibWF4VXBsb2FkU2l6ZSIsInVuaXRNYXAiLCJrYiIsIm1iIiwiZ2IiLCJOdW1iZXIiLCJzbGljZSIsIk1hdGgiLCJwb3ciLCJ0b0xvd2VyQ2FzZSIsImFwcGx5R3JhcGhRTCIsImFwcCIsInVzZSIsImNvcnNNaWRkbGV3YXJlIiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwiaGFuZGxlUGFyc2VFcnJvcnMiLCJncmFwaHFsVXBsb2FkRXhwcmVzcyIsIm1heEZpbGVTaXplIiwiZXhwcmVzcyIsImpzb24iLCJuZXh0Iiwic2VydmVyIiwiYXBwbHlQbGF5Z3JvdW5kIiwicGxheWdyb3VuZFBhdGgiLCJfcmVxIiwic2V0SGVhZGVyIiwid3JpdGUiLCJKU09OIiwic3RyaW5naWZ5IiwibWFzdGVyS2V5IiwiZW5kIiwiY3JlYXRlU3Vic2NyaXB0aW9ucyIsIlN1YnNjcmlwdGlvblNlcnZlciIsImNyZWF0ZSIsImV4ZWN1dGUiLCJzdWJzY3JpYmUiLCJvbk9wZXJhdGlvbiIsIl9tZXNzYWdlIiwicGFyYW1zIiwid2ViU29ja2V0IiwiYXNzaWduIiwidXBncmFkZVJlcSIsInBhdGgiLCJzdWJzY3JpcHRpb25zUGF0aCIsInNldEdyYXBoUUxDb25maWciLCJncmFwaFFMQ29uZmlnIiwidXBkYXRlR3JhcGhRTENvbmZpZyIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvR3JhcGhRTC9QYXJzZUdyYXBoUUxTZXJ2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvcnNNaWRkbGV3YXJlIGZyb20gJ2NvcnMnO1xuaW1wb3J0IGdyYXBocWxVcGxvYWRFeHByZXNzIGZyb20gJ2dyYXBocWwtdXBsb2FkL2dyYXBocWxVcGxvYWRFeHByZXNzLmpzJztcbmltcG9ydCB7IEFwb2xsb1NlcnZlciB9IGZyb20gJ0BhcG9sbG8vc2VydmVyJztcbmltcG9ydCB7IGV4cHJlc3NNaWRkbGV3YXJlIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXIvZXhwcmVzczQnO1xuaW1wb3J0IHsgQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQgfSBmcm9tICdAYXBvbGxvL3NlcnZlci9wbHVnaW4vZGlzYWJsZWQnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBleGVjdXRlLCBzdWJzY3JpYmUgfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvblNlcnZlciB9IGZyb20gJ3N1YnNjcmlwdGlvbnMtdHJhbnNwb3J0LXdzJztcbmltcG9ydCB7IGhhbmRsZVBhcnNlRXJyb3JzLCBoYW5kbGVQYXJzZUhlYWRlcnMsIGhhbmRsZVBhcnNlU2Vzc2lvbiB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCByZXF1aXJlZFBhcmFtZXRlciBmcm9tICcuLi9yZXF1aXJlZFBhcmFtZXRlcic7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgUGFyc2VHcmFwaFFMU2NoZW1hIH0gZnJvbSAnLi9QYXJzZUdyYXBoUUxTY2hlbWEnO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsIHsgUGFyc2VHcmFwaFFMQ29uZmlnIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5cbmNsYXNzIFBhcnNlR3JhcGhRTFNlcnZlciB7XG4gIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3IocGFyc2VTZXJ2ZXIsIGNvbmZpZykge1xuICAgIHRoaXMucGFyc2VTZXJ2ZXIgPSBwYXJzZVNlcnZlciB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIHBhcnNlU2VydmVyIGluc3RhbmNlIScpO1xuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcuZ3JhcGhRTFBhdGgpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLmdyYXBoUUxQYXRoIScpO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIgPSB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5wYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuICAgIHRoaXMubG9nID1cbiAgICAgICh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyAmJiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hID0gbmV3IFBhcnNlR3JhcGhRTFNjaGVtYSh7XG4gICAgICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgICBkYXRhYmFzZUNvbnRyb2xsZXI6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmRhdGFiYXNlQ29udHJvbGxlcixcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6IHRoaXMuY29uZmlnLmdyYXBoUUxDdXN0b21UeXBlRGVmcyxcbiAgICAgIGFwcElkOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRHcmFwaFFMT3B0aW9ucygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hOiBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCksXG4gICAgICAgIGNvbnRleHQ6IGFzeW5jICh7IHJlcSwgcmVzIH0pID0+IHtcbiAgICAgICAgICByZXMuc2V0KCdhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW4nLCByZXEuZ2V0KCdvcmlnaW4nKSB8fCAnKicpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmZvOiByZXEuaW5mbyxcbiAgICAgICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgICAgIGF1dGg6IHJlcS5hdXRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGUuc3RhY2sgfHwgKHR5cGVvZiBlLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIGUudG9TdHJpbmcoKSkgfHwgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9nZXRTZXJ2ZXIoKSB7XG4gICAgY29uc3Qgc2NoZW1hUmVmID0gdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEuZ3JhcGhRTFNjaGVtYTtcbiAgICBjb25zdCBuZXdTY2hlbWFSZWYgPSBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCk7XG4gICAgaWYgKHNjaGVtYVJlZiA9PT0gbmV3U2NoZW1hUmVmICYmIHRoaXMuX3NlcnZlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgY29uc3QgeyBzY2hlbWEsIGNvbnRleHQgfSA9IGF3YWl0IHRoaXMuX2dldEdyYXBoUUxPcHRpb25zKCk7XG4gICAgY29uc3QgYXBvbGxvID0gbmV3IEFwb2xsb1NlcnZlcih7XG4gICAgICBjc3JmUHJldmVudGlvbjoge1xuICAgICAgICAvLyBTZWUgaHR0cHM6Ly93d3cuYXBvbGxvZ3JhcGhxbC5jb20vZG9jcy9yb3V0ZXIvY29uZmlndXJhdGlvbi9jc3JmL1xuICAgICAgICAvLyBuZWVkZWQgc2luY2Ugd2UgdXNlIGdyYXBocWwgdXBsb2FkXG4gICAgICAgIHJlcXVlc3RIZWFkZXJzOiBbJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnXSxcbiAgICAgIH0sXG4gICAgICBpbnRyb3NwZWN0aW9uOiB0cnVlLFxuICAgICAgcGx1Z2luczogW0Fwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkKCldLFxuICAgICAgc2NoZW1hLFxuICAgIH0pO1xuICAgIGF3YWl0IGFwb2xsby5zdGFydCgpO1xuICAgIHRoaXMuX3NlcnZlciA9IGV4cHJlc3NNaWRkbGV3YXJlKGFwb2xsbywge1xuICAgICAgY29udGV4dCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICB9XG5cbiAgX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCB1bml0TWFwID0ge1xuICAgICAga2I6IDEsXG4gICAgICBtYjogMixcbiAgICAgIGdiOiAzLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgTnVtYmVyKG1heFVwbG9hZFNpemUuc2xpY2UoMCwgLTIpKSAqXG4gICAgICBNYXRoLnBvdygxMDI0LCB1bml0TWFwW21heFVwbG9hZFNpemUuc2xpY2UoLTIpLnRvTG93ZXJDYXNlKCldKVxuICAgICk7XG4gIH1cblxuICBhcHBseUdyYXBoUUwoYXBwKSB7XG4gICAgaWYgKCFhcHAgfHwgIWFwcC51c2UpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGFuIEV4cHJlc3MuanMgYXBwIGluc3RhbmNlIScpO1xuICAgIH1cbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBjb3JzTWlkZGxld2FyZSgpKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUhlYWRlcnMpO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlU2Vzc2lvbik7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VFcnJvcnMpO1xuICAgIGFwcC51c2UoXG4gICAgICB0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCxcbiAgICAgIGdyYXBocWxVcGxvYWRFeHByZXNzKHtcbiAgICAgICAgbWF4RmlsZVNpemU6IHRoaXMuX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKFxuICAgICAgICAgIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1heFVwbG9hZFNpemUgfHwgJzIwbWInXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgZXhwcmVzcy5qc29uKCksIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgdGhpcy5fZ2V0U2VydmVyKCk7XG4gICAgICByZXR1cm4gc2VydmVyKHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UGxheWdyb3VuZChhcHApIHtcbiAgICBpZiAoIWFwcCB8fCAhYXBwLmdldCkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gRXhwcmVzcy5qcyBhcHAgaW5zdGFuY2UhJyk7XG4gICAgfVxuXG4gICAgYXBwLmdldChcbiAgICAgIHRoaXMuY29uZmlnLnBsYXlncm91bmRQYXRoIHx8XG4gICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLnBsYXlncm91bmRQYXRoIHRvIGFwcGx5UGxheWdyb3VuZCEnKSxcbiAgICAgIChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICByZXMud3JpdGUoXG4gICAgICAgICAgYDxkaXYgaWQ9XCJzYW5kYm94XCIgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MFwiPjwvZGl2PlxuICAgICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9lbWJlZGRhYmxlLXNhbmRib3guY2RuLmFwb2xsb2dyYXBocWwuY29tL19sYXRlc3QvZW1iZWRkYWJsZS1zYW5kYm94LnVtZC5wcm9kdWN0aW9uLm1pbi5qc1wiPjwvc2NyaXB0PlxuICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgIG5ldyB3aW5kb3cuRW1iZWRkZWRTYW5kYm94KHtcbiAgICAgICAgICAgICB0YXJnZXQ6IFwiI3NhbmRib3hcIixcbiAgICAgICAgICAgICBlbmRwb2ludElzRWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgIGluaXRpYWxFbmRwb2ludDogXCIke0pTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoKX1cIixcbiAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0OiAoZW5kcG9pbnRVcmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZldGNoKGVuZHBvaW50VXJsLCB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiBcIiR7SlNPTi5zdHJpbmdpZnkodGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQpfVwiLFxuICAgICAgICAgICAgICAgICAgICAnWC1QYXJzZS1NYXN0ZXItS2V5JzogXCIke0pTT04uc3RyaW5naWZ5KHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1hc3RlcktleSl9XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgIH0pO1xuICAgICAgICAgICAvLyBhZHZhbmNlZCBvcHRpb25zOiBodHRwczovL3d3dy5hcG9sbG9ncmFwaHFsLmNvbS9kb2NzL3N0dWRpby9leHBsb3Jlci9zYW5kYm94I2VtYmVkZGluZy1zYW5kYm94XG4gICAgICAgICAgPC9zY3JpcHQ+YFxuICAgICAgICApO1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbnMoc2VydmVyKSB7XG4gICAgU3Vic2NyaXB0aW9uU2VydmVyLmNyZWF0ZShcbiAgICAgIHtcbiAgICAgICAgZXhlY3V0ZSxcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBvbk9wZXJhdGlvbjogYXN5bmMgKF9tZXNzYWdlLCBwYXJhbXMsIHdlYlNvY2tldCkgPT5cbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMsIGF3YWl0IHRoaXMuX2dldEdyYXBoUUxPcHRpb25zKHdlYlNvY2tldC51cGdyYWRlUmVxKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIHBhdGg6XG4gICAgICAgICAgdGhpcy5jb25maWcuc3Vic2NyaXB0aW9uc1BhdGggfHxcbiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5zdWJzY3JpcHRpb25zUGF0aCB0byBjcmVhdGVTdWJzY3JpcHRpb25zIScpLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRHcmFwaFFMQ29uZmlnKGdyYXBoUUxDb25maWc6IFBhcnNlR3JhcGhRTENvbmZpZyk6IFByb21pc2Uge1xuICAgIHJldHVybiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIudXBkYXRlR3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnKTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUdyYXBoUUxTZXJ2ZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsS0FB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