appium 2.0.0-beta.23 → 2.0.0-beta.24
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.
- package/README.md +1 -2
- package/build/lib/appium.js +19 -7
- package/build/lib/cli/args.js +13 -15
- package/build/lib/cli/parser.js +2 -2
- package/build/lib/config.js +31 -24
- package/build/lib/extension-config.js +1 -1
- package/build/lib/main.js +29 -28
- package/build/lib/plugins.js +4 -2
- package/build/lib/schema/arg-spec.js +5 -3
- package/build/lib/schema/cli-args.js +7 -13
- package/build/lib/schema/schema.js +80 -9
- package/build/lib/utils.js +16 -36
- package/build/test/cli/cli-helpers.js +1 -1
- package/build/test/config-specs.js +122 -35
- package/build/test/driver-specs.js +96 -31
- package/build/test/fixtures/flattened-schema.js +31 -3
- package/build/test/parser-specs.js +69 -64
- package/build/test/schema/cli-args-specs.js +4 -27
- package/build/test/schema/schema-specs.js +56 -38
- package/build/test/utils-specs.js +24 -2
- package/lib/appium.js +45 -8
- package/lib/cli/args.js +17 -14
- package/lib/cli/parser.js +1 -1
- package/lib/config.js +75 -31
- package/lib/extension-config.js +1 -1
- package/lib/main.js +87 -37
- package/lib/plugins.js +2 -0
- package/lib/schema/arg-spec.js +8 -2
- package/lib/schema/cli-args.js +6 -30
- package/lib/schema/schema.js +142 -22
- package/lib/utils.js +28 -29
- package/package.json +4 -4
- package/types/types.d.ts +5 -0
|
@@ -8,8 +8,12 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
8
8
|
|
|
9
9
|
var _sinon = _interopRequireDefault(require("sinon"));
|
|
10
10
|
|
|
11
|
+
var _extensionConfig = require("../../lib/extension-config");
|
|
12
|
+
|
|
11
13
|
var _appiumConfigSchema = _interopRequireDefault(require("../../lib/schema/appium-config-schema"));
|
|
12
14
|
|
|
15
|
+
var _argSpec = require("../../lib/schema/arg-spec");
|
|
16
|
+
|
|
13
17
|
var _defaultArgs = _interopRequireDefault(require("../fixtures/default-args"));
|
|
14
18
|
|
|
15
19
|
var _driver = _interopRequireDefault(require("../fixtures/driver.schema"));
|
|
@@ -18,8 +22,6 @@ var _flattenedSchema = _interopRequireDefault(require("../fixtures/flattened-sch
|
|
|
18
22
|
|
|
19
23
|
var _helpers = require("../helpers");
|
|
20
24
|
|
|
21
|
-
var _argSpec = require("../../lib/schema/arg-spec");
|
|
22
|
-
|
|
23
25
|
const {
|
|
24
26
|
expect
|
|
25
27
|
} = chai;
|
|
@@ -28,20 +30,18 @@ describe('schema', function () {
|
|
|
28
30
|
let sandbox;
|
|
29
31
|
let SchemaFinalizationError;
|
|
30
32
|
let SchemaUnknownSchemaError;
|
|
33
|
+
let SchemaUnsupportedSchemaError;
|
|
31
34
|
let mocks;
|
|
32
35
|
beforeEach(function () {
|
|
33
36
|
sandbox = _sinon.default.createSandbox();
|
|
34
37
|
mocks = {
|
|
35
|
-
'../../lib/extension-config': {
|
|
36
|
-
DRIVER_TYPE: 'driver',
|
|
37
|
-
PLUGIN_TYPE: 'plugin'
|
|
38
|
-
},
|
|
39
38
|
'resolve-from': sandbox.stub(),
|
|
40
39
|
'@sidvind/better-ajv-errors': sandbox.stub()
|
|
41
40
|
};
|
|
42
41
|
schema = _helpers.rewiremock.proxy(() => require('../../lib/schema/schema'), mocks);
|
|
43
42
|
SchemaFinalizationError = schema.SchemaFinalizationError;
|
|
44
43
|
SchemaUnknownSchemaError = schema.SchemaUnknownSchemaError;
|
|
44
|
+
SchemaUnsupportedSchemaError = schema.SchemaUnsupportedSchemaError;
|
|
45
45
|
schema.resetSchema();
|
|
46
46
|
});
|
|
47
47
|
afterEach(function () {
|
|
@@ -51,30 +51,46 @@ describe('schema', function () {
|
|
|
51
51
|
describe('error conditions', function () {
|
|
52
52
|
describe('when provided no parameters', function () {
|
|
53
53
|
it('should throw a TypeError', function () {
|
|
54
|
-
expect(() =>
|
|
54
|
+
expect(() => {
|
|
55
|
+
schema.registerSchema();
|
|
56
|
+
}).to.throw(TypeError, /expected extension type/i);
|
|
55
57
|
});
|
|
56
58
|
});
|
|
57
59
|
describe('when provided `type` and `name`, but not `schema`', function () {
|
|
58
60
|
it('should throw a TypeError', function () {
|
|
59
|
-
expect(() => schema.registerSchema(
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
describe('when provided `type`, a nonempty `name`, but an empty `schema`', function () {
|
|
63
|
-
it('should throw a TypeError', function () {
|
|
64
|
-
expect(() => schema.registerSchema('driver', 'whoopeee', {})).to.throw(TypeError, 'Expected nonempty extension type, extension name and schema parameters');
|
|
61
|
+
expect(() => schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'whoopeee')).to.throw(TypeError, /expected extension type/i);
|
|
65
62
|
});
|
|
66
63
|
});
|
|
67
64
|
describe('when provided `type` and nonempty `schema`, but no `name`', function () {
|
|
68
65
|
it('should throw a TypeError', function () {
|
|
69
|
-
expect(() => schema.registerSchema(
|
|
66
|
+
expect(() => schema.registerSchema(_extensionConfig.DRIVER_TYPE, undefined, {
|
|
70
67
|
title: 'whoopeee'
|
|
71
|
-
})).to.throw(TypeError,
|
|
68
|
+
})).to.throw(TypeError, /expected extension type/i);
|
|
72
69
|
});
|
|
73
70
|
});
|
|
74
|
-
describe('when
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
describe('when the schema is of an unsupported type', function () {
|
|
72
|
+
describe('when schema is a object but not a plain object', function () {
|
|
73
|
+
it('should throw', function () {
|
|
74
|
+
expect(() => {
|
|
75
|
+
schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'whoopeee', [45]);
|
|
76
|
+
}).to.throw(SchemaUnsupportedSchemaError, /must be a plain object/i);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('when the schema is async', function () {
|
|
80
|
+
it('should throw', function () {
|
|
81
|
+
expect(() => {
|
|
82
|
+
schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'whoopee', {
|
|
83
|
+
$async: true
|
|
84
|
+
});
|
|
85
|
+
}).to.throw(SchemaUnsupportedSchemaError, /cannot be an async schema/i);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('when the schema is boolean', function () {
|
|
89
|
+
it('should throw', function () {
|
|
90
|
+
expect(() => {
|
|
91
|
+
schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'whoopee', true);
|
|
92
|
+
}).to.throw(SchemaUnsupportedSchemaError);
|
|
93
|
+
});
|
|
78
94
|
});
|
|
79
95
|
});
|
|
80
96
|
describe('when schema previously registered', function () {
|
|
@@ -83,8 +99,8 @@ describe('schema', function () {
|
|
|
83
99
|
const schemaObject = {
|
|
84
100
|
title: 'whoopee'
|
|
85
101
|
};
|
|
86
|
-
schema.registerSchema(
|
|
87
|
-
expect(() => schema.registerSchema(
|
|
102
|
+
schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'whoopee', schemaObject);
|
|
103
|
+
expect(() => schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'whoopee', schemaObject)).not.to.throw();
|
|
88
104
|
});
|
|
89
105
|
});
|
|
90
106
|
describe('when the schema is different', function () {
|
|
@@ -92,8 +108,8 @@ describe('schema', function () {
|
|
|
92
108
|
const schemaObject = {
|
|
93
109
|
title: 'whoopee'
|
|
94
110
|
};
|
|
95
|
-
schema.registerSchema(
|
|
96
|
-
expect(() => schema.registerSchema(
|
|
111
|
+
schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'whoopee', schemaObject);
|
|
112
|
+
expect(() => schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'whoopee', {
|
|
97
113
|
title: 'cushion?'
|
|
98
114
|
})).to.throw(Error, /conflicts with an existing schema/);
|
|
99
115
|
});
|
|
@@ -105,7 +121,7 @@ describe('schema', function () {
|
|
|
105
121
|
const schemaObject = {
|
|
106
122
|
title: 'whoopee'
|
|
107
123
|
};
|
|
108
|
-
expect(() => schema.registerSchema(
|
|
124
|
+
expect(() => schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'whoopee', schemaObject)).not.to.throw();
|
|
109
125
|
});
|
|
110
126
|
describe('when the `name` is not unique but `type` is', function () {
|
|
111
127
|
it('should register both', function () {
|
|
@@ -115,8 +131,8 @@ describe('schema', function () {
|
|
|
115
131
|
const schema2 = {
|
|
116
132
|
title: 'anti-skub'
|
|
117
133
|
};
|
|
118
|
-
schema.registerSchema(
|
|
119
|
-
expect(() => schema.registerSchema(
|
|
134
|
+
schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'skub', schema1);
|
|
135
|
+
expect(() => schema.registerSchema(_extensionConfig.PLUGIN_TYPE, 'skub', schema2)).not.to.throw();
|
|
120
136
|
});
|
|
121
137
|
});
|
|
122
138
|
});
|
|
@@ -157,7 +173,7 @@ describe('schema', function () {
|
|
|
157
173
|
});
|
|
158
174
|
describe('when schema already compiled including an extension', function () {
|
|
159
175
|
beforeEach(function () {
|
|
160
|
-
schema.registerSchema(
|
|
176
|
+
schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'stuff', _driver.default);
|
|
161
177
|
schema.finalizeSchema();
|
|
162
178
|
});
|
|
163
179
|
it('should return the extension schema', function () {
|
|
@@ -165,23 +181,23 @@ describe('schema', function () {
|
|
|
165
181
|
});
|
|
166
182
|
});
|
|
167
183
|
});
|
|
168
|
-
describe('
|
|
184
|
+
describe('getDefaultsForSchema()', function () {
|
|
169
185
|
describe('when schema not yet compiled', function () {
|
|
170
186
|
it('should throw', function () {
|
|
171
|
-
expect(() => schema.
|
|
187
|
+
expect(() => schema.getDefaultsForSchema()).to.throw(SchemaFinalizationError);
|
|
172
188
|
});
|
|
173
189
|
});
|
|
174
190
|
describe('when schema already compiled', function () {
|
|
175
191
|
it('should return a Record object with only defined default values', function () {
|
|
176
192
|
schema.finalizeSchema();
|
|
177
|
-
const defaults = schema.
|
|
193
|
+
const defaults = schema.getDefaultsForSchema();
|
|
178
194
|
expect(defaults).to.eql(_defaultArgs.default);
|
|
179
195
|
});
|
|
180
196
|
describe('when extension schemas include defaults', function () {
|
|
181
197
|
it('should return a Record object containing defaults for the extensions', function () {
|
|
182
|
-
schema.registerSchema(
|
|
198
|
+
schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'stuff', _driver.default);
|
|
183
199
|
schema.finalizeSchema();
|
|
184
|
-
const defaults = schema.
|
|
200
|
+
const defaults = schema.getDefaultsForSchema();
|
|
185
201
|
expect(defaults).to.have.property('driver.stuff.answer', 50);
|
|
186
202
|
});
|
|
187
203
|
});
|
|
@@ -205,7 +221,7 @@ describe('schema', function () {
|
|
|
205
221
|
describe('when extensions provide schemas', function () {
|
|
206
222
|
let expected;
|
|
207
223
|
beforeEach(function () {
|
|
208
|
-
schema.registerSchema(
|
|
224
|
+
schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'fake', require('@appium/fake-driver/build/lib/fake-driver-schema').default);
|
|
209
225
|
schema.finalizeSchema();
|
|
210
226
|
expected = [..._flattenedSchema.default, {
|
|
211
227
|
schema: {
|
|
@@ -216,11 +232,12 @@ describe('schema', function () {
|
|
|
216
232
|
},
|
|
217
233
|
argSpec: {
|
|
218
234
|
name: 'silly-web-server-port',
|
|
219
|
-
extType:
|
|
235
|
+
extType: _extensionConfig.DRIVER_TYPE,
|
|
220
236
|
extName: 'fake',
|
|
221
237
|
ref: 'driver-fake.json#/properties/silly-web-server-port',
|
|
222
238
|
arg: 'driver-fake-silly-web-server-port',
|
|
223
239
|
dest: 'driver.fake.sillyWebServerPort',
|
|
240
|
+
rawDest: 'sillyWebServerPort',
|
|
224
241
|
defaultValue: undefined
|
|
225
242
|
}
|
|
226
243
|
}, {
|
|
@@ -231,11 +248,12 @@ describe('schema', function () {
|
|
|
231
248
|
},
|
|
232
249
|
argSpec: {
|
|
233
250
|
name: 'sillyWebServerHost',
|
|
234
|
-
extType:
|
|
251
|
+
extType: _extensionConfig.DRIVER_TYPE,
|
|
235
252
|
extName: 'fake',
|
|
236
253
|
ref: 'driver-fake.json#/properties/sillyWebServerHost',
|
|
237
254
|
arg: 'driver-fake-silly-web-server-host',
|
|
238
255
|
dest: 'driver.fake.sillyWebServerHost',
|
|
256
|
+
rawDest: 'sillyWebServerHost',
|
|
239
257
|
defaultValue: 'sillyhost'
|
|
240
258
|
}
|
|
241
259
|
}];
|
|
@@ -255,7 +273,7 @@ describe('schema', function () {
|
|
|
255
273
|
});
|
|
256
274
|
describe('when extensions register schemas', function () {
|
|
257
275
|
beforeEach(function () {
|
|
258
|
-
schema.registerSchema(
|
|
276
|
+
schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'stuff', _driver.default);
|
|
259
277
|
});
|
|
260
278
|
it('should return a Record containing all extension schemas _and_ the base schema containing references to the extension schemas', function () {
|
|
261
279
|
const baseSchemaWithRefs = _lodash.default.cloneDeep(_appiumConfigSchema.default);
|
|
@@ -333,7 +351,7 @@ describe('schema', function () {
|
|
|
333
351
|
});
|
|
334
352
|
describe('when schema already compiled, with extensions', function () {
|
|
335
353
|
beforeEach(function () {
|
|
336
|
-
schema.registerSchema(
|
|
354
|
+
schema.registerSchema(_extensionConfig.DRIVER_TYPE, 'stuff', _driver.default);
|
|
337
355
|
schema.finalizeSchema();
|
|
338
356
|
});
|
|
339
357
|
describe('when provided an invalid schema ID ref', function () {
|
|
@@ -386,4 +404,4 @@ describe('schema', function () {
|
|
|
386
404
|
});require('source-map-support').install();
|
|
387
405
|
|
|
388
406
|
|
|
389
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3Qvc2NoZW1hL3NjaGVtYS1zcGVjcy5qcyJdLCJuYW1lcyI6WyJleHBlY3QiLCJjaGFpIiwiZGVzY3JpYmUiLCJzY2hlbWEiLCJzYW5kYm94IiwiU2NoZW1hRmluYWxpemF0aW9uRXJyb3IiLCJTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IiLCJtb2NrcyIsImJlZm9yZUVhY2giLCJzaW5vbiIsImNyZWF0ZVNhbmRib3giLCJEUklWRVJfVFlQRSIsIlBMVUdJTl9UWVBFIiwic3R1YiIsInJld2lyZW1vY2siLCJwcm94eSIsInJlcXVpcmUiLCJyZXNldFNjaGVtYSIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJpdCIsInJlZ2lzdGVyU2NoZW1hIiwidG8iLCJ0aHJvdyIsIlR5cGVFcnJvciIsInVuZGVmaW5lZCIsInRpdGxlIiwic2NoZW1hT2JqZWN0Iiwibm90IiwiRXJyb3IiLCJzY2hlbWExIiwic2NoZW1hMiIsImdldFNjaGVtYSIsImZpbmFsaXplU2NoZW1hIiwiZXFsIiwiYXBwaXVtQ29uZmlnU2NoZW1hIiwiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJleGlzdCIsImFuZCIsInByb3BlcnRpZXMiLCJzZXJ2ZXIiLCJhZGRyZXNzIiwiRFJJVkVSX1NDSEVNQV9GSVhUVVJFIiwiZ2V0RGVmYXVsdHNGcm9tU2NoZW1hIiwiZGVmYXVsdHMiLCJkZWZhdWx0QXJnc0ZpeHR1cmUiLCJoYXZlIiwicHJvcGVydHkiLCJmbGF0dGVuU2NoZW1hIiwiZmxhdHRlbmVkU2NoZW1hRml4dHVyZSIsImV4cGVjdGVkIiwiZGVmYXVsdCIsInR5cGUiLCJtaW5pbXVtIiwibWF4aW11bSIsImRlc2NyaXB0aW9uIiwiYXJnU3BlYyIsIm5hbWUiLCJleHRUeXBlIiwiZXh0TmFtZSIsInJlZiIsImFyZyIsImRlc3QiLCJkZWZhdWx0VmFsdWUiLCJiYXNlU2NoZW1hV2l0aFJlZnMiLCJfIiwiY2xvbmVEZWVwIiwiZHJpdmVyIiwic3R1ZmYiLCIkcmVmIiwiJGNvbW1lbnQiLCJpc0ZpbmFsaXplZCIsImJlIiwidHJ1ZSIsImZhbHNlIiwidmFsaWRhdGUiLCJhbiIsImVtcHR5IiwiYW5zd2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNO0FBQUNBLEVBQUFBO0FBQUQsSUFBV0MsSUFBakI7QUFFQUMsUUFBUSxDQUFDLFFBQUQsRUFBVyxZQUFZO0FBRTdCLE1BQUlDLE1BQUo7QUFFQSxNQUFJQyxPQUFKO0FBS0EsTUFBSUMsdUJBQUo7QUFLQSxNQUFJQyx3QkFBSjtBQUVBLE1BQUlDLEtBQUo7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDckJKLElBQUFBLE9BQU8sR0FBR0ssZUFBTUMsYUFBTixFQUFWO0FBRUFILElBQUFBLEtBQUssR0FBRztBQUNOLG9DQUE4QjtBQUM1QkksUUFBQUEsV0FBVyxFQUFFLFFBRGU7QUFFNUJDLFFBQUFBLFdBQVcsRUFBRTtBQUZlLE9BRHhCO0FBTU4sc0JBQWdCUixPQUFPLENBQUNTLElBQVIsRUFOVjtBQVFOLG9DQUE4QlQsT0FBTyxDQUFDUyxJQUFSO0FBUnhCLEtBQVI7QUFXQVYsSUFBQUEsTUFBTSxHQUFHVyxvQkFBV0MsS0FBWCxDQUFpQixNQUFNQyxPQUFPLENBQUMseUJBQUQsQ0FBOUIsRUFBMkRULEtBQTNELENBQVQ7QUFDQUYsSUFBQUEsdUJBQXVCLEdBQUdGLE1BQU0sQ0FBQ0UsdUJBQWpDO0FBQ0FDLElBQUFBLHdCQUF3QixHQUFHSCxNQUFNLENBQUNHLHdCQUFsQztBQUNBSCxJQUFBQSxNQUFNLENBQUNjLFdBQVA7QUFDRCxHQWxCUyxDQUFWO0FBb0JBQyxFQUFBQSxTQUFTLENBQUMsWUFBWTtBQUNwQmQsSUFBQUEsT0FBTyxDQUFDZSxPQUFSO0FBQ0QsR0FGUSxDQUFUO0FBSUFqQixFQUFBQSxRQUFRLENBQUMsa0JBQUQsRUFBcUIsWUFBWTtBQUN2Q0EsSUFBQUEsUUFBUSxDQUFDLGtCQUFELEVBQXFCLFlBQVk7QUFDdkNBLE1BQUFBLFFBQVEsQ0FBQyw2QkFBRCxFQUFnQyxZQUFZO0FBQ2xEa0IsUUFBQUEsRUFBRSxDQUFDLDBCQUFELEVBQTZCLFlBQVk7QUFFekNwQixVQUFBQSxNQUFNLENBQUMsTUFBTUcsTUFBTSxDQUFDa0IsY0FBUCxFQUFQLENBQU4sQ0FBc0NDLEVBQXRDLENBQXlDQyxLQUF6QyxDQUNFQyxTQURGLEVBRUUsd0VBRkY7QUFJRCxTQU5DLENBQUY7QUFPRCxPQVJPLENBQVI7QUFVQXRCLE1BQUFBLFFBQVEsQ0FBQyxtREFBRCxFQUFzRCxZQUFZO0FBQ3hFa0IsUUFBQUEsRUFBRSxDQUFDLDBCQUFELEVBQTZCLFlBQVk7QUFDekNwQixVQUFBQSxNQUFNLENBQUMsTUFFTEcsTUFBTSxDQUFDa0IsY0FBUCxDQUFzQixRQUF0QixFQUFnQyxVQUFoQyxDQUZJLENBQU4sQ0FHRUMsRUFIRixDQUdLQyxLQUhMLENBSUVDLFNBSkYsRUFLRSx3RUFMRjtBQU9ELFNBUkMsQ0FBRjtBQVNELE9BVk8sQ0FBUjtBQVlBdEIsTUFBQUEsUUFBUSxDQUFDLGdFQUFELEVBQW1FLFlBQVk7QUFDckZrQixRQUFBQSxFQUFFLENBQUMsMEJBQUQsRUFBNkIsWUFBWTtBQUN6Q3BCLFVBQUFBLE1BQU0sQ0FBQyxNQUNMRyxNQUFNLENBQUNrQixjQUFQLENBQXNCLFFBQXRCLEVBQWdDLFVBQWhDLEVBQTRDLEVBQTVDLENBREksQ0FBTixDQUVFQyxFQUZGLENBRUtDLEtBRkwsQ0FHRUMsU0FIRixFQUlFLHdFQUpGO0FBTUQsU0FQQyxDQUFGO0FBUUQsT0FUTyxDQUFSO0FBV0F0QixNQUFBQSxRQUFRLENBQUMsMkRBQUQsRUFBOEQsWUFBWTtBQUNoRmtCLFFBQUFBLEVBQUUsQ0FBQywwQkFBRCxFQUE2QixZQUFZO0FBQ3pDcEIsVUFBQUEsTUFBTSxDQUFDLE1BRUxHLE1BQU0sQ0FBQ2tCLGNBQVAsQ0FBc0IsUUFBdEIsRUFBZ0NJLFNBQWhDLEVBQTJDO0FBQ3pDQyxZQUFBQSxLQUFLLEVBQUU7QUFEa0MsV0FBM0MsQ0FGSSxDQUFOLENBS0VKLEVBTEYsQ0FLS0MsS0FMTCxDQU1FQyxTQU5GLEVBT0Usd0VBUEY7QUFTRCxTQVZDLENBQUY7QUFXRCxPQVpPLENBQVI7QUFjQXRCLE1BQUFBLFFBQVEsQ0FBQyxxRUFBRCxFQUF3RSxZQUFZO0FBQzFGa0IsUUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUM3QixnQkFBTU8sWUFBWSxHQUFHLENBQUMsRUFBRCxDQUFyQjtBQUNBM0IsVUFBQUEsTUFBTSxDQUFDLE1BQ0xHLE1BQU0sQ0FBQ2tCLGNBQVAsQ0FBc0IsUUFBdEIsRUFBZ0MsVUFBaEMsRUFBNENNLFlBQTVDLENBREksQ0FBTixDQUVFTCxFQUZGLENBRUtDLEtBRkwsQ0FFVyxvQkFGWDtBQUdELFNBTEMsQ0FBRjtBQU1ELE9BUE8sQ0FBUjtBQVNBckIsTUFBQUEsUUFBUSxDQUFDLG1DQUFELEVBQXNDLFlBQVk7QUFDeERBLFFBQUFBLFFBQVEsQ0FBQyw4QkFBRCxFQUFpQyxZQUFZO0FBQ25Ea0IsVUFBQUEsRUFBRSxDQUFDLGtCQUFELEVBQXFCLFlBQVk7QUFDakMsa0JBQU1PLFlBQVksR0FBRztBQUFDRCxjQUFBQSxLQUFLLEVBQUU7QUFBUixhQUFyQjtBQUNBdkIsWUFBQUEsTUFBTSxDQUFDa0IsY0FBUCxDQUFzQixRQUF0QixFQUFnQyxTQUFoQyxFQUEyQ00sWUFBM0M7QUFDQTNCLFlBQUFBLE1BQU0sQ0FBQyxNQUNMRyxNQUFNLENBQUNrQixjQUFQLENBQXNCLFFBQXRCLEVBQWdDLFNBQWhDLEVBQTJDTSxZQUEzQyxDQURJLENBQU4sQ0FFRUMsR0FGRixDQUVNTixFQUZOLENBRVNDLEtBRlQ7QUFHRCxXQU5DLENBQUY7QUFPRCxTQVJPLENBQVI7QUFVQXJCLFFBQUFBLFFBQVEsQ0FBQyw4QkFBRCxFQUFpQyxZQUFZO0FBQ25Ea0IsVUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUM3QixrQkFBTU8sWUFBWSxHQUFHO0FBQUNELGNBQUFBLEtBQUssRUFBRTtBQUFSLGFBQXJCO0FBQ0F2QixZQUFBQSxNQUFNLENBQUNrQixjQUFQLENBQXNCLFFBQXRCLEVBQWdDLFNBQWhDLEVBQTJDTSxZQUEzQztBQUNBM0IsWUFBQUEsTUFBTSxDQUFDLE1BQ0xHLE1BQU0sQ0FBQ2tCLGNBQVAsQ0FBc0IsUUFBdEIsRUFBZ0MsU0FBaEMsRUFBMkM7QUFDekNLLGNBQUFBLEtBQUssRUFBRTtBQURrQyxhQUEzQyxDQURJLENBQU4sQ0FJRUosRUFKRixDQUlLQyxLQUpMLENBSVdNLEtBSlgsRUFJa0IsbUNBSmxCO0FBS0QsV0FSQyxDQUFGO0FBU0QsU0FWTyxDQUFSO0FBV0QsT0F0Qk8sQ0FBUjtBQXVCRCxLQWhGTyxDQUFSO0FBa0ZBM0IsSUFBQUEsUUFBUSxDQUFDLHNEQUFELEVBQXlELFlBQVk7QUFDM0VrQixNQUFBQSxFQUFFLENBQUMsNEJBQUQsRUFBK0IsWUFBWTtBQUMzQyxjQUFNTyxZQUFZLEdBQUc7QUFBQ0QsVUFBQUEsS0FBSyxFQUFFO0FBQVIsU0FBckI7QUFDQTFCLFFBQUFBLE1BQU0sQ0FBQyxNQUNMRyxNQUFNLENBQUNrQixjQUFQLENBQXNCLFFBQXRCLEVBQWdDLFNBQWhDLEVBQTJDTSxZQUEzQyxDQURJLENBQU4sQ0FFRUMsR0FGRixDQUVNTixFQUZOLENBRVNDLEtBRlQ7QUFHRCxPQUxDLENBQUY7QUFPQXJCLE1BQUFBLFFBQVEsQ0FBQyw2Q0FBRCxFQUFnRCxZQUFZO0FBQ2xFa0IsUUFBQUEsRUFBRSxDQUFDLHNCQUFELEVBQXlCLFlBQVk7QUFDckMsZ0JBQU1VLE9BQU8sR0FBRztBQUFDSixZQUFBQSxLQUFLLEVBQUU7QUFBUixXQUFoQjtBQUNBLGdCQUFNSyxPQUFPLEdBQUc7QUFBQ0wsWUFBQUEsS0FBSyxFQUFFO0FBQVIsV0FBaEI7QUFDQXZCLFVBQUFBLE1BQU0sQ0FBQ2tCLGNBQVAsQ0FBc0IsUUFBdEIsRUFBZ0MsTUFBaEMsRUFBd0NTLE9BQXhDO0FBQ0E5QixVQUFBQSxNQUFNLENBQUMsTUFDTEcsTUFBTSxDQUFDa0IsY0FBUCxDQUFzQixRQUF0QixFQUFnQyxNQUFoQyxFQUF3Q1UsT0FBeEMsQ0FESSxDQUFOLENBRUVILEdBRkYsQ0FFTU4sRUFGTixDQUVTQyxLQUZUO0FBR0QsU0FQQyxDQUFGO0FBUUQsT0FUTyxDQUFSO0FBVUQsS0FsQk8sQ0FBUjtBQW1CRCxHQXRHTyxDQUFSO0FBd0dBckIsRUFBQUEsUUFBUSxDQUFDLGFBQUQsRUFBZ0IsWUFBWTtBQUNsQ0EsSUFBQUEsUUFBUSxDQUFDLDhCQUFELEVBQWlDLFlBQVk7QUFDbkRrQixNQUFBQSxFQUFFLENBQUMsY0FBRCxFQUFpQixZQUFZO0FBQzdCcEIsUUFBQUEsTUFBTSxDQUFDLE1BQU1HLE1BQU0sQ0FBQzZCLFNBQVAsRUFBUCxDQUFOLENBQWlDVixFQUFqQyxDQUFvQ0MsS0FBcEMsQ0FBMENsQix1QkFBMUM7QUFDRCxPQUZDLENBQUY7QUFHRCxLQUpPLENBQVI7QUFNQUgsSUFBQUEsUUFBUSxDQUFDLDhCQUFELEVBQWlDLFlBQVk7QUFDbkRNLE1BQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCTCxRQUFBQSxNQUFNLENBQUM4QixjQUFQO0FBQ0QsT0FGUyxDQUFWO0FBSUFiLE1BQUFBLEVBQUUsQ0FBQyx3QkFBRCxFQUEyQixZQUFZO0FBQ3ZDcEIsUUFBQUEsTUFBTSxDQUFDRyxNQUFNLENBQUM2QixTQUFQLEVBQUQsQ0FBTixDQUEyQlYsRUFBM0IsQ0FBOEJZLEdBQTlCLENBQWtDQywyQkFBbEM7QUFDRCxPQUZDLENBQUY7QUFHRCxLQVJPLENBQVI7QUFVQWpDLElBQUFBLFFBQVEsQ0FBQyx1REFBRCxFQUEwRCxZQUFZO0FBQzVFTSxNQUFBQSxVQUFVLENBQUMsWUFBWTtBQUNyQkwsUUFBQUEsTUFBTSxDQUFDOEIsY0FBUDtBQUNELE9BRlMsQ0FBVjtBQUlBL0IsTUFBQUEsUUFBUSxDQUFDLHNDQUFELEVBQXlDLFlBQVk7QUFDM0RrQixRQUFBQSxFQUFFLENBQUMsK0JBQUQsRUFBa0MsWUFBWTtBQUM5Q3BCLFVBQUFBLE1BQU0sQ0FBQ0csTUFBTSxDQUFDNkIsU0FBUCxDQUFpQkksZ0NBQWpCLENBQUQsQ0FBTixDQUFrRGQsRUFBbEQsQ0FBcURZLEdBQXJELENBQ0VDLDJCQURGO0FBR0QsU0FKQyxDQUFGO0FBS0QsT0FOTyxDQUFSO0FBUUFqQyxNQUFBQSxRQUFRLENBQUMsbUNBQUQsRUFBc0MsWUFBWTtBQUN4RGtCLFFBQUFBLEVBQUUsQ0FBQyw0Q0FBRCxFQUErQyxZQUFZO0FBQzNEcEIsVUFBQUEsTUFBTSxDQUNKRyxNQUFNLENBQUM2QixTQUFQLENBQ0csR0FBRUksZ0NBQXdCLHdDQUQ3QixDQURJLENBQU4sQ0FJRWQsRUFKRixDQUlLZSxLQUpMLENBSVdDLEdBSlgsQ0FJZWhCLEVBSmYsQ0FJa0JZLEdBSmxCLENBS0VDLDRCQUFtQkksVUFBbkIsQ0FBOEJDLE1BQTlCLENBQXFDRCxVQUFyQyxDQUFnREUsT0FMbEQ7QUFPRCxTQVJDLENBQUY7QUFTRCxPQVZPLENBQVI7QUFZQXZDLE1BQUFBLFFBQVEsQ0FBQywyQkFBRCxFQUE4QixZQUFZO0FBQ2hEa0IsUUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUM3QnBCLFVBQUFBLE1BQU0sQ0FBQyxNQUFNRyxNQUFNLENBQUM2QixTQUFQLENBQWlCLGtCQUFqQixDQUFQLENBQU4sQ0FBbURWLEVBQW5ELENBQXNEQyxLQUF0RCxDQUNFakIsd0JBREY7QUFHRCxTQUpDLENBQUY7QUFLRCxPQU5PLENBQVI7QUFPRCxLQWhDTyxDQUFSO0FBa0NBSixJQUFBQSxRQUFRLENBQUMscURBQUQsRUFBd0QsWUFBWTtBQUMxRU0sTUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDckJMLFFBQUFBLE1BQU0sQ0FBQ2tCLGNBQVAsQ0FBc0IsUUFBdEIsRUFBZ0MsT0FBaEMsRUFBeUNxQixlQUF6QztBQUNBdkMsUUFBQUEsTUFBTSxDQUFDOEIsY0FBUDtBQUNELE9BSFMsQ0FBVjtBQUtBYixNQUFBQSxFQUFFLENBQUMsb0NBQUQsRUFBdUMsWUFBWTtBQUNuRHBCLFFBQUFBLE1BQU0sQ0FBQ0csTUFBTSxDQUFDNkIsU0FBUCxDQUFpQixtQkFBakIsQ0FBRCxDQUFOLENBQThDVixFQUE5QyxDQUFpRFksR0FBakQsQ0FDRVEsZUFERjtBQUdELE9BSkMsQ0FBRjtBQUtELEtBWE8sQ0FBUjtBQVlELEdBL0RPLENBQVI7QUFpRUF4QyxFQUFBQSxRQUFRLENBQUMseUJBQUQsRUFBNEIsWUFBWTtBQUM5Q0EsSUFBQUEsUUFBUSxDQUFDLDhCQUFELEVBQWlDLFlBQVk7QUFDbkRrQixNQUFBQSxFQUFFLENBQUMsY0FBRCxFQUFpQixZQUFZO0FBQzdCcEIsUUFBQUEsTUFBTSxDQUFDLE1BQU1HLE1BQU0sQ0FBQ3dDLHFCQUFQLEVBQVAsQ0FBTixDQUE2Q3JCLEVBQTdDLENBQWdEQyxLQUFoRCxDQUNFbEIsdUJBREY7QUFHRCxPQUpDLENBQUY7QUFLRCxLQU5PLENBQVI7QUFRQUgsSUFBQUEsUUFBUSxDQUFDLDhCQUFELEVBQWlDLFlBQVk7QUFDbkRrQixNQUFBQSxFQUFFLENBQUMsZ0VBQUQsRUFBbUUsWUFBWTtBQUMvRWpCLFFBQUFBLE1BQU0sQ0FBQzhCLGNBQVA7QUFDQSxjQUFNVyxRQUFRLEdBQUd6QyxNQUFNLENBQUN3QyxxQkFBUCxFQUFqQjtBQUNBM0MsUUFBQUEsTUFBTSxDQUFDNEMsUUFBRCxDQUFOLENBQWlCdEIsRUFBakIsQ0FBb0JZLEdBQXBCLENBQXdCVyxvQkFBeEI7QUFDRCxPQUpDLENBQUY7QUFNQTNDLE1BQUFBLFFBQVEsQ0FBQyx5Q0FBRCxFQUE0QyxZQUFZO0FBQzlEa0IsUUFBQUEsRUFBRSxDQUFDLHNFQUFELEVBQXlFLFlBQVk7QUFDckZqQixVQUFBQSxNQUFNLENBQUNrQixjQUFQLENBQXNCLFFBQXRCLEVBQWdDLE9BQWhDLEVBQXlDcUIsZUFBekM7QUFDQXZDLFVBQUFBLE1BQU0sQ0FBQzhCLGNBQVA7QUFDQSxnQkFBTVcsUUFBUSxHQUFHekMsTUFBTSxDQUFDd0MscUJBQVAsRUFBakI7QUFFQTNDLFVBQUFBLE1BQU0sQ0FBQzRDLFFBQUQsQ0FBTixDQUFpQnRCLEVBQWpCLENBQW9Cd0IsSUFBcEIsQ0FBeUJDLFFBQXpCLENBQWtDLHFCQUFsQyxFQUF5RCxFQUF6RDtBQUNELFNBTkMsQ0FBRjtBQU9ELE9BUk8sQ0FBUjtBQVNELEtBaEJPLENBQVI7QUFpQkQsR0ExQk8sQ0FBUjtBQTRCQTdDLEVBQUFBLFFBQVEsQ0FBQyxpQkFBRCxFQUFvQixZQUFZO0FBQ3RDQSxJQUFBQSxRQUFRLENBQUMsOEJBQUQsRUFBaUMsWUFBWTtBQUNuRGtCLE1BQUFBLEVBQUUsQ0FBQyxjQUFELEVBQWlCLFlBQVk7QUFDN0JwQixRQUFBQSxNQUFNLENBQUMsTUFBTUcsTUFBTSxDQUFDNkMsYUFBUCxFQUFQLENBQU4sQ0FBcUMxQixFQUFyQyxDQUF3Q0MsS0FBeEMsQ0FBOENsQix1QkFBOUM7QUFDRCxPQUZDLENBQUY7QUFHRCxLQUpPLENBQVI7QUFNQUgsSUFBQUEsUUFBUSxDQUFDLHNCQUFELEVBQXlCLFlBQVk7QUFDM0NNLE1BQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCTCxRQUFBQSxNQUFNLENBQUNjLFdBQVA7QUFDQWQsUUFBQUEsTUFBTSxDQUFDOEIsY0FBUDtBQUNELE9BSFMsQ0FBVjtBQUtBYixNQUFBQSxFQUFFLENBQUMseUJBQUQsRUFBNEIsWUFBWTtBQUN4Q3BCLFFBQUFBLE1BQU0sQ0FBQ0csTUFBTSxDQUFDNkMsYUFBUCxFQUFELENBQU4sQ0FBK0IxQixFQUEvQixDQUFrQ1ksR0FBbEMsQ0FBc0NlLHdCQUF0QztBQUNELE9BRkMsQ0FBRjtBQUdELEtBVE8sQ0FBUjtBQVdBL0MsSUFBQUEsUUFBUSxDQUFDLGlDQUFELEVBQW9DLFlBQVk7QUFDdEQsVUFBSWdELFFBQUo7QUFFQTFDLE1BQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCTCxRQUFBQSxNQUFNLENBQUNrQixjQUFQLENBQ0UsUUFERixFQUVFLE1BRkYsRUFLRUwsT0FBTyxDQUFDLGtEQUFELENBQVAsQ0FBNERtQyxPQUw5RDtBQU9BaEQsUUFBQUEsTUFBTSxDQUFDOEIsY0FBUDtBQUdBaUIsUUFBQUEsUUFBUSxHQUFHLENBQ1QsR0FBR0Qsd0JBRE0sRUFFVDtBQUNFOUMsVUFBQUEsTUFBTSxFQUFFO0FBQ05pRCxZQUFBQSxJQUFJLEVBQUUsU0FEQTtBQUVOQyxZQUFBQSxPQUFPLEVBQUUsQ0FGSDtBQUdOQyxZQUFBQSxPQUFPLEVBQUUsS0FISDtBQUlOQyxZQUFBQSxXQUFXLEVBQUU7QUFKUCxXQURWO0FBT0VDLFVBQUFBLE9BQU8sRUFBRTtBQUNQQyxZQUFBQSxJQUFJLEVBQUUsdUJBREM7QUFFUEMsWUFBQUEsT0FBTyxFQUFFLFFBRkY7QUFHUEMsWUFBQUEsT0FBTyxFQUFFLE1BSEY7QUFJUEMsWUFBQUEsR0FBRyxFQUFFLG9EQUpFO0FBS1BDLFlBQUFBLEdBQUcsRUFBRSxtQ0FMRTtBQU1QQyxZQUFBQSxJQUFJLEVBQUUsZ0NBTkM7QUFPUEMsWUFBQUEsWUFBWSxFQUFFdEM7QUFQUDtBQVBYLFNBRlMsRUFtQlQ7QUFDRXRCLFVBQUFBLE1BQU0sRUFBRTtBQUNOaUQsWUFBQUEsSUFBSSxFQUFFLFFBREE7QUFFTkcsWUFBQUEsV0FBVyxFQUFFLHlDQUZQO0FBR05KLFlBQUFBLE9BQU8sRUFBRTtBQUhILFdBRFY7QUFNRUssVUFBQUEsT0FBTyxFQUFFO0FBQ1BDLFlBQUFBLElBQUksRUFBRSxvQkFEQztBQUVQQyxZQUFBQSxPQUFPLEVBQUUsUUFGRjtBQUdQQyxZQUFBQSxPQUFPLEVBQUUsTUFIRjtBQUlQQyxZQUFBQSxHQUFHLEVBQUUsaURBSkU7QUFLUEMsWUFBQUEsR0FBRyxFQUFFLG1DQUxFO0FBTVBDLFlBQUFBLElBQUksRUFBRSxnQ0FOQztBQU9QQyxZQUFBQSxZQUFZLEVBQUU7QUFQUDtBQU5YLFNBbkJTLENBQVg7QUFvQ0QsT0EvQ1MsQ0FBVjtBQWlEQTNDLE1BQUFBLEVBQUUsQ0FBQyx5QkFBRCxFQUE0QixZQUFZO0FBQ3hDcEIsUUFBQUEsTUFBTSxDQUFDRyxNQUFNLENBQUM2QyxhQUFQLEVBQUQsQ0FBTixDQUErQjFCLEVBQS9CLENBQWtDWSxHQUFsQyxDQUFzQ2dCLFFBQXRDO0FBQ0QsT0FGQyxDQUFGO0FBR0QsS0F2RE8sQ0FBUjtBQXdERCxHQTFFTyxDQUFSO0FBNEVBaEQsRUFBQUEsUUFBUSxDQUFDLGtCQUFELEVBQXFCLFlBQVk7QUFDdkNBLElBQUFBLFFBQVEsQ0FBQyx1Q0FBRCxFQUEwQyxZQUFZO0FBQzVEa0IsTUFBQUEsRUFBRSxDQUFDLDBEQUFELEVBQTZELFlBQVk7QUFDekVwQixRQUFBQSxNQUFNLENBQUNHLE1BQU0sQ0FBQzhCLGNBQVAsRUFBRCxDQUFOLENBQWdDWCxFQUFoQyxDQUFtQ1ksR0FBbkMsQ0FBdUM7QUFDckMsV0FBQ0UsZ0NBQUQsR0FBMkJEO0FBRFUsU0FBdkM7QUFHRCxPQUpDLENBQUY7QUFLRCxLQU5PLENBQVI7QUFRQWpDLElBQUFBLFFBQVEsQ0FBQyxrQ0FBRCxFQUFxQyxZQUFZO0FBQ3ZETSxNQUFBQSxVQUFVLENBQUMsWUFBWTtBQUNyQkwsUUFBQUEsTUFBTSxDQUFDa0IsY0FBUCxDQUFzQixRQUF0QixFQUFnQyxPQUFoQyxFQUF5Q3FCLGVBQXpDO0FBQ0QsT0FGUyxDQUFWO0FBSUF0QixNQUFBQSxFQUFFLENBQUMsOEhBQUQsRUFBaUksWUFBWTtBQUM3SSxjQUFNNEMsa0JBQWtCLEdBQUdDLGdCQUFFQyxTQUFGLENBQVkvQiwyQkFBWixDQUEzQjs7QUFDQTZCLFFBQUFBLGtCQUFrQixDQUFDekIsVUFBbkIsQ0FBOEJDLE1BQTlCLENBQXFDRCxVQUFyQyxDQUFnRDRCLE1BQWhELENBQXVENUIsVUFBdkQsQ0FBa0U2QixLQUFsRSxHQUNFO0FBQUNDLFVBQUFBLElBQUksRUFBRSxtQkFBUDtBQUE0QkMsVUFBQUEsUUFBUSxFQUFFO0FBQXRDLFNBREY7QUFFQXRFLFFBQUFBLE1BQU0sQ0FBQ0csTUFBTSxDQUFDOEIsY0FBUCxFQUFELENBQU4sQ0FBZ0NYLEVBQWhDLENBQW1DWSxHQUFuQyxDQUF1QztBQUNyQyxXQUFDRSxnQ0FBRCxHQUEyQjRCLGtCQURVO0FBRXJDLCtCQUFxQnRCO0FBRmdCLFNBQXZDO0FBSUQsT0FSQyxDQUFGO0FBU0QsS0FkTyxDQUFSO0FBZUQsR0F4Qk8sQ0FBUjtBQTBCQXhDLEVBQUFBLFFBQVEsQ0FBQyxlQUFELEVBQWtCLFlBQVk7QUFDcENBLElBQUFBLFFBQVEsQ0FBQyw4QkFBRCxFQUFpQyxZQUFZO0FBQ25Ea0IsTUFBQUEsRUFBRSxDQUFDLG9CQUFELEVBQXVCLFlBQVk7QUFDbkNqQixRQUFBQSxNQUFNLENBQUM4QixjQUFQO0FBQ0FqQyxRQUFBQSxNQUFNLENBQUNHLE1BQU0sQ0FBQ29FLFdBQVAsRUFBRCxDQUFOLENBQTZCakQsRUFBN0IsQ0FBZ0NrRCxFQUFoQyxDQUFtQ0MsSUFBbkM7QUFDRCxPQUhDLENBQUY7QUFJRCxLQUxPLENBQVI7QUFPQXZFLElBQUFBLFFBQVEsQ0FBQyxrQ0FBRCxFQUFxQyxZQUFZO0FBQ3ZEa0IsTUFBQUEsRUFBRSxDQUFDLHFCQUFELEVBQXdCLFlBQVk7QUFDcENqQixRQUFBQSxNQUFNLENBQUNjLFdBQVA7QUFDQWpCLFFBQUFBLE1BQU0sQ0FBQ0csTUFBTSxDQUFDb0UsV0FBUCxFQUFELENBQU4sQ0FBNkJqRCxFQUE3QixDQUFnQ2tELEVBQWhDLENBQW1DRSxLQUFuQztBQUNELE9BSEMsQ0FBRjtBQUlELEtBTE8sQ0FBUjtBQU1ELEdBZE8sQ0FBUjtBQWdCQXhFLEVBQUFBLFFBQVEsQ0FBQyxZQUFELEVBQWUsWUFBWTtBQUNqQ0EsSUFBQUEsUUFBUSxDQUFDLDhCQUFELEVBQWlDLFlBQVk7QUFDbkRrQixNQUFBQSxFQUFFLENBQUMsY0FBRCxFQUFpQixZQUFZO0FBQzdCcEIsUUFBQUEsTUFBTSxDQUFDLE1BQU1HLE1BQU0sQ0FBQ3dFLFFBQVAsQ0FBZ0IsS0FBaEIsQ0FBUCxDQUFOLENBQXFDckQsRUFBckMsQ0FBd0NDLEtBQXhDLENBQThDbEIsdUJBQTlDO0FBQ0QsT0FGQyxDQUFGO0FBR0QsS0FKTyxDQUFSO0FBTUFILElBQUFBLFFBQVEsQ0FBQyxrREFBRCxFQUFxRCxZQUFZO0FBQ3ZFTSxNQUFBQSxVQUFVLENBQUMsWUFBWTtBQUNyQkwsUUFBQUEsTUFBTSxDQUFDOEIsY0FBUDtBQUNELE9BRlMsQ0FBVjtBQUlBL0IsTUFBQUEsUUFBUSxDQUFDLHdDQUFELEVBQTJDLFlBQVk7QUFDN0RrQixRQUFBQSxFQUFFLENBQUMsY0FBRCxFQUFpQixZQUFZO0FBQzdCcEIsVUFBQUEsTUFBTSxDQUFDLE1BQU1HLE1BQU0sQ0FBQ3dFLFFBQVAsQ0FBZ0IsS0FBaEIsRUFBdUIsS0FBdkIsQ0FBUCxDQUFOLENBQTRDckQsRUFBNUMsQ0FBK0NDLEtBQS9DLENBQ0VqQix3QkFERjtBQUdELFNBSkMsQ0FBRjtBQUtELE9BTk8sQ0FBUjtBQVFBSixNQUFBQSxRQUFRLENBQUMsbUNBQUQsRUFBc0MsWUFBWTtBQUN4REEsUUFBQUEsUUFBUSxDQUFDLDZCQUFELEVBQWdDLFlBQVk7QUFDbERrQixVQUFBQSxFQUFFLENBQUMsMkNBQUQsRUFBOEMsWUFBWTtBQUMxRHBCLFlBQUFBLE1BQU0sQ0FBQ0csTUFBTSxDQUFDd0UsUUFBUCxDQUFnQjtBQUFDbkMsY0FBQUEsTUFBTSxFQUFFO0FBQUNDLGdCQUFBQSxPQUFPLEVBQUU7QUFBVjtBQUFULGFBQWhCLENBQUQsQ0FBTixDQUEwRG5CLEVBQTFELENBQTZEWSxHQUE3RCxDQUNFLEVBREY7QUFHRCxXQUpDLENBQUY7QUFLRCxTQU5PLENBQVI7QUFRQWhDLFFBQUFBLFFBQVEsQ0FBQyxnQ0FBRCxFQUFtQyxZQUFZO0FBQ3JEa0IsVUFBQUEsRUFBRSxDQUFDLDBDQUFELEVBQTZDLFlBQVk7QUFDekRwQixZQUFBQSxNQUFNLENBQUNHLE1BQU0sQ0FBQ3dFLFFBQVAsQ0FBZ0I7QUFBQ2xDLGNBQUFBLE9BQU8sRUFBRTtBQUFWLGFBQWhCLENBQUQsQ0FBTixDQUFnRG5CLEVBQWhELENBQW1Ea0QsRUFBbkQsQ0FBc0RJLEVBQXRELENBQXlELE9BQXpELEVBQ0d0QyxHQURILENBQ09oQixFQURQLENBQ1VNLEdBRFYsQ0FDYzRDLEVBRGQsQ0FDaUJLLEtBRGpCO0FBRUQsV0FIQyxDQUFGO0FBSUQsU0FMTyxDQUFSO0FBTUQsT0FmTyxDQUFSO0FBaUJBM0UsTUFBQUEsUUFBUSxDQUFDLCtCQUFELEVBQWtDLFlBQVk7QUFDcERBLFFBQUFBLFFBQVEsQ0FBQyw2QkFBRCxFQUFnQyxZQUFZO0FBQ2xEa0IsVUFBQUEsRUFBRSxDQUFDLDJDQUFELEVBQThDLFlBQVk7QUFDMURwQixZQUFBQSxNQUFNLENBQ0pHLE1BQU0sQ0FBQ3dFLFFBQVAsQ0FDRSxXQURGLEVBRUUsbURBRkYsQ0FESSxDQUFOLENBS0VyRCxFQUxGLENBS0tZLEdBTEwsQ0FLUyxFQUxUO0FBTUQsV0FQQyxDQUFGO0FBUUQsU0FUTyxDQUFSO0FBV0FoQyxRQUFBQSxRQUFRLENBQUMsZ0NBQUQsRUFBbUMsWUFBWTtBQUNyRGtCLFVBQUFBLEVBQUUsQ0FBQywwQ0FBRCxFQUE2QyxZQUFZO0FBQ3pEcEIsWUFBQUEsTUFBTSxDQUNKRyxNQUFNLENBQUN3RSxRQUFQLENBQ0UsV0FERixFQUVFLGdEQUZGLENBREksQ0FBTixDQUtFckQsRUFMRixDQUtLa0QsRUFMTCxDQUtRSSxFQUxSLENBS1csT0FMWCxFQUtvQnRDLEdBTHBCLENBS3dCaEIsRUFMeEIsQ0FLMkJNLEdBTDNCLENBSytCNEMsRUFML0IsQ0FLa0NLLEtBTGxDO0FBTUQsV0FQQyxDQUFGO0FBUUQsU0FUTyxDQUFSO0FBVUQsT0F0Qk8sQ0FBUjtBQXVCRCxLQXJETyxDQUFSO0FBdURBM0UsSUFBQUEsUUFBUSxDQUFDLCtDQUFELEVBQWtELFlBQVk7QUFDcEVNLE1BQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCTCxRQUFBQSxNQUFNLENBQUNrQixjQUFQLENBQXNCLFFBQXRCLEVBQWdDLE9BQWhDLEVBQXlDcUIsZUFBekM7QUFDQXZDLFFBQUFBLE1BQU0sQ0FBQzhCLGNBQVA7QUFDRCxPQUhTLENBQVY7QUFLQS9CLE1BQUFBLFFBQVEsQ0FBQyx3Q0FBRCxFQUEyQyxZQUFZO0FBQzdEa0IsUUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUM3QnBCLFVBQUFBLE1BQU0sQ0FBQyxNQUFNRyxNQUFNLENBQUN3RSxRQUFQLENBQWdCLEtBQWhCLEVBQXVCLEtBQXZCLENBQVAsQ0FBTixDQUE0Q3JELEVBQTVDLENBQStDQyxLQUEvQyxDQUNFakIsd0JBREY7QUFHRCxTQUpDLENBQUY7QUFLRCxPQU5PLENBQVI7QUFRQUosTUFBQUEsUUFBUSxDQUFDLG1DQUFELEVBQXNDLFlBQVk7QUFDeERBLFFBQUFBLFFBQVEsQ0FBQyw2QkFBRCxFQUFnQyxZQUFZO0FBQ2xEa0IsVUFBQUEsRUFBRSxDQUFDLDJDQUFELEVBQThDLFlBQVk7QUFDMURwQixZQUFBQSxNQUFNLENBQ0pHLE1BQU0sQ0FBQ3dFLFFBQVAsQ0FBZ0I7QUFBQ25DLGNBQUFBLE1BQU0sRUFBRTtBQUFDMkIsZ0JBQUFBLE1BQU0sRUFBRTtBQUFDQyxrQkFBQUEsS0FBSyxFQUFFO0FBQUNVLG9CQUFBQSxNQUFNLEVBQUU7QUFBVDtBQUFSO0FBQVQ7QUFBVCxhQUFoQixDQURJLENBQU4sQ0FFRXhELEVBRkYsQ0FFS1ksR0FGTCxDQUVTLEVBRlQ7QUFHRCxXQUpDLENBQUY7QUFLRCxTQU5PLENBQVI7QUFRQWhDLFFBQUFBLFFBQVEsQ0FBQyxnQ0FBRCxFQUFtQyxZQUFZO0FBQ3JEa0IsVUFBQUEsRUFBRSxDQUFDLDBDQUFELEVBQTZDLFlBQVk7QUFDekRwQixZQUFBQSxNQUFNLENBQ0pHLE1BQU0sQ0FBQ3dFLFFBQVAsQ0FBZ0I7QUFBQ25DLGNBQUFBLE1BQU0sRUFBRTtBQUFDMkIsZ0JBQUFBLE1BQU0sRUFBRTtBQUFDQyxrQkFBQUEsS0FBSyxFQUFFO0FBQUNVLG9CQUFBQSxNQUFNLEVBQUU7QUFBVDtBQUFSO0FBQVQ7QUFBVCxhQUFoQixDQURJLENBQU4sQ0FFRXhELEVBRkYsQ0FFS2tELEVBRkwsQ0FFUUksRUFGUixDQUVXLE9BRlgsRUFFb0J0QyxHQUZwQixDQUV3QmhCLEVBRnhCLENBRTJCTSxHQUYzQixDQUUrQjRDLEVBRi9CLENBRWtDSyxLQUZsQztBQUdELFdBSkMsQ0FBRjtBQUtELFNBTk8sQ0FBUjtBQU9ELE9BaEJPLENBQVI7QUFrQkEzRSxNQUFBQSxRQUFRLENBQUMsK0JBQUQsRUFBa0MsWUFBWTtBQUNwREEsUUFBQUEsUUFBUSxDQUFDLDZCQUFELEVBQWdDLFlBQVk7QUFDbERrQixVQUFBQSxFQUFFLENBQUMsMkNBQUQsRUFBOEMsWUFBWTtBQUMxRHBCLFlBQUFBLE1BQU0sQ0FDSkcsTUFBTSxDQUFDd0UsUUFBUCxDQUFnQixFQUFoQixFQUFvQixzQ0FBcEIsQ0FESSxDQUFOLENBRUVyRCxFQUZGLENBRUtZLEdBRkwsQ0FFUyxFQUZUO0FBR0QsV0FKQyxDQUFGO0FBS0QsU0FOTyxDQUFSO0FBUUFoQyxRQUFBQSxRQUFRLENBQUMsZ0NBQUQsRUFBbUMsWUFBWTtBQUNyRGtCLFVBQUFBLEVBQUUsQ0FBQywwQ0FBRCxFQUE2QyxZQUFZO0FBQ3pEcEIsWUFBQUEsTUFBTSxDQUNKRyxNQUFNLENBQUN3RSxRQUFQLENBQWdCLEdBQWhCLEVBQXFCLHNDQUFyQixDQURJLENBQU4sQ0FFRXJELEVBRkYsQ0FFS2tELEVBRkwsQ0FFUUksRUFGUixDQUVXLE9BRlgsRUFFb0J0QyxHQUZwQixDQUV3QmhCLEVBRnhCLENBRTJCTSxHQUYzQixDQUUrQjRDLEVBRi9CLENBRWtDSyxLQUZsQztBQUdELFdBSkMsQ0FBRjtBQUtELFNBTk8sQ0FBUjtBQU9ELE9BaEJPLENBQVI7QUFpQkQsS0FqRE8sQ0FBUjtBQWtERCxHQWhITyxDQUFSO0FBaUhELENBdGRPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgYXBwaXVtQ29uZmlnU2NoZW1hIGZyb20gJy4uLy4uL2xpYi9zY2hlbWEvYXBwaXVtLWNvbmZpZy1zY2hlbWEnO1xuaW1wb3J0IGRlZmF1bHRBcmdzRml4dHVyZSBmcm9tICcuLi9maXh0dXJlcy9kZWZhdWx0LWFyZ3MnO1xuaW1wb3J0IERSSVZFUl9TQ0hFTUFfRklYVFVSRSBmcm9tICcuLi9maXh0dXJlcy9kcml2ZXIuc2NoZW1hJztcbmltcG9ydCBmbGF0dGVuZWRTY2hlbWFGaXh0dXJlIGZyb20gJy4uL2ZpeHR1cmVzL2ZsYXR0ZW5lZC1zY2hlbWEnO1xuaW1wb3J0IHtyZXdpcmVtb2NrfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7QVBQSVVNX0NPTkZJR19TQ0hFTUFfSUR9IGZyb20gJy4uLy4uL2xpYi9zY2hlbWEvYXJnLXNwZWMnO1xuXG5jb25zdCB7ZXhwZWN0fSA9IGNoYWk7XG5cbmRlc2NyaWJlKCdzY2hlbWEnLCBmdW5jdGlvbiAoKSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLi9saWIvc2NoZW1hL3NjaGVtYScpfSAqL1xuICBsZXQgc2NoZW1hO1xuICAvKiogQHR5cGUge2ltcG9ydCgnc2lub24nKS5TaW5vblNhbmRib3h9ICovXG4gIGxldCBzYW5kYm94O1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi4vLi4vbGliL3NjaGVtYS9zY2hlbWEnKS5TY2hlbWFGaW5hbGl6YXRpb25FcnJvcn1cbiAgICovXG4gIGxldCBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcjtcblxuICAvKipcbiAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4uLy4uL2xpYi9zY2hlbWEvc2NoZW1hJykuU2NoZW1hVW5rbm93blNjaGVtYUVycm9yfVxuICAgKi9cbiAgbGV0IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcjtcblxuICBsZXQgbW9ja3M7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcblxuICAgIG1vY2tzID0ge1xuICAgICAgJy4uLy4uL2xpYi9leHRlbnNpb24tY29uZmlnJzoge1xuICAgICAgICBEUklWRVJfVFlQRTogJ2RyaXZlcicsXG4gICAgICAgIFBMVUdJTl9UWVBFOiAncGx1Z2luJyxcbiAgICAgIH0sXG5cbiAgICAgICdyZXNvbHZlLWZyb20nOiBzYW5kYm94LnN0dWIoKSxcblxuICAgICAgJ0BzaWR2aW5kL2JldHRlci1hanYtZXJyb3JzJzogc2FuZGJveC5zdHViKCksXG4gICAgfTtcblxuICAgIHNjaGVtYSA9IHJld2lyZW1vY2sucHJveHkoKCkgPT4gcmVxdWlyZSgnLi4vLi4vbGliL3NjaGVtYS9zY2hlbWEnKSwgbW9ja3MpO1xuICAgIFNjaGVtYUZpbmFsaXphdGlvbkVycm9yID0gc2NoZW1hLlNjaGVtYUZpbmFsaXphdGlvbkVycm9yO1xuICAgIFNjaGVtYVVua25vd25TY2hlbWFFcnJvciA9IHNjaGVtYS5TY2hlbWFVbmtub3duU2NoZW1hRXJyb3I7XG4gICAgc2NoZW1hLnJlc2V0U2NoZW1hKCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWdpc3RlclNjaGVtYSgpJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdlcnJvciBjb25kaXRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgZGVzY3JpYmUoJ3doZW4gcHJvdmlkZWQgbm8gcGFyYW1ldGVycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhIFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgZXhwZWN0KCgpID0+IHNjaGVtYS5yZWdpc3RlclNjaGVtYSgpKS50by50aHJvdyhcbiAgICAgICAgICAgIFR5cGVFcnJvcixcbiAgICAgICAgICAgICdFeHBlY3RlZCBub25lbXB0eSBleHRlbnNpb24gdHlwZSwgZXh0ZW5zaW9uIG5hbWUgYW5kIHNjaGVtYSBwYXJhbWV0ZXJzJyxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBgdHlwZWAgYW5kIGBuYW1lYCwgYnV0IG5vdCBgc2NoZW1hYCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhIFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHNjaGVtYS5yZWdpc3RlclNjaGVtYSgnZHJpdmVyJywgJ3dob29wZWVlJyksXG4gICAgICAgICAgKS50by50aHJvdyhcbiAgICAgICAgICAgIFR5cGVFcnJvcixcbiAgICAgICAgICAgICdFeHBlY3RlZCBub25lbXB0eSBleHRlbnNpb24gdHlwZSwgZXh0ZW5zaW9uIG5hbWUgYW5kIHNjaGVtYSBwYXJhbWV0ZXJzJyxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBgdHlwZWAsIGEgbm9uZW1wdHkgYG5hbWVgLCBidXQgYW4gZW1wdHkgYHNjaGVtYWAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoJ2RyaXZlcicsICd3aG9vcGVlZScsIHt9KSxcbiAgICAgICAgICApLnRvLnRocm93KFxuICAgICAgICAgICAgVHlwZUVycm9yLFxuICAgICAgICAgICAgJ0V4cGVjdGVkIG5vbmVtcHR5IGV4dGVuc2lvbiB0eXBlLCBleHRlbnNpb24gbmFtZSBhbmQgc2NoZW1hIHBhcmFtZXRlcnMnLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGB0eXBlYCBhbmQgbm9uZW1wdHkgYHNjaGVtYWAsIGJ1dCBubyBgbmFtZWAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoJ2RyaXZlcicsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICB0aXRsZTogJ3dob29wZWVlJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICkudG8udGhyb3coXG4gICAgICAgICAgICBUeXBlRXJyb3IsXG4gICAgICAgICAgICAnRXhwZWN0ZWQgbm9uZW1wdHkgZXh0ZW5zaW9uIHR5cGUsIGV4dGVuc2lvbiBuYW1lIGFuZCBzY2hlbWEgcGFyYW1ldGVycycsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3doZW4gcHJvdmlkZWQgYSBgdHlwZWAgYW5kIG5vbmVtcHR5IGBuYW1lYCwgYnV0IGFuIGludmFsaWQgYHNjaGVtYWAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hT2JqZWN0ID0gWzQ1XTtcbiAgICAgICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgICAgIHNjaGVtYS5yZWdpc3RlclNjaGVtYSgnZHJpdmVyJywgJ3dob29wZWVlJywgc2NoZW1hT2JqZWN0KSxcbiAgICAgICAgICApLnRvLnRocm93KC9zY2hlbWEgaXMgaW52YWxpZC9pKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gdGhlIHNjaGVtYSBpcyBpZGVudGljYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCBub3QgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWFPYmplY3QgPSB7dGl0bGU6ICd3aG9vcGVlJ307XG4gICAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoJ2RyaXZlcicsICd3aG9vcGVlJywgc2NoZW1hT2JqZWN0KTtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoJ2RyaXZlcicsICd3aG9vcGVlJywgc2NoZW1hT2JqZWN0KSxcbiAgICAgICAgICAgICkubm90LnRvLnRocm93KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBzY2hlbWEgaXMgZGlmZmVyZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWFPYmplY3QgPSB7dGl0bGU6ICd3aG9vcGVlJ307XG4gICAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoJ2RyaXZlcicsICd3aG9vcGVlJywgc2NoZW1hT2JqZWN0KTtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoJ2RyaXZlcicsICd3aG9vcGVlJywge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnY3VzaGlvbj8nLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICkudG8udGhyb3coRXJyb3IsIC9jb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWEvKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGEgbm9uZW1wdHkgYHR5cGVgLCBgc2NoZW1hYCBhbmQgYG5hbWVgJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCByZWdpc3RlciB0aGUgc2NoZW1hJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzY2hlbWFPYmplY3QgPSB7dGl0bGU6ICd3aG9vcGVlJ307XG4gICAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICAgIHNjaGVtYS5yZWdpc3RlclNjaGVtYSgnZHJpdmVyJywgJ3dob29wZWUnLCBzY2hlbWFPYmplY3QpLFxuICAgICAgICApLm5vdC50by50aHJvdygpO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBgbmFtZWAgaXMgbm90IHVuaXF1ZSBidXQgYHR5cGVgIGlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGJvdGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hMSA9IHt0aXRsZTogJ3Byby1za3ViJ307XG4gICAgICAgICAgY29uc3Qgc2NoZW1hMiA9IHt0aXRsZTogJ2FudGktc2t1Yid9O1xuICAgICAgICAgIHNjaGVtYS5yZWdpc3RlclNjaGVtYSgnZHJpdmVyJywgJ3NrdWInLCBzY2hlbWExKTtcbiAgICAgICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgICAgIHNjaGVtYS5yZWdpc3RlclNjaGVtYSgncGx1Z2luJywgJ3NrdWInLCBzY2hlbWEyKSxcbiAgICAgICAgICApLm5vdC50by50aHJvdygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2NoZW1hKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIG5vdCB5ZXQgY29tcGlsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gc2NoZW1hLmdldFNjaGVtYSgpKS50by50aHJvdyhTY2hlbWFGaW5hbGl6YXRpb25FcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHNjaGVtYSBhbHJlYWR5IGNvbXBpbGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc2NoZW1hJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3Qoc2NoZW1hLmdldFNjaGVtYSgpKS50by5lcWwoYXBwaXVtQ29uZmlnU2NoZW1hKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIGFscmVhZHkgY29tcGlsZWQgYW5kIHByb3ZpZGVkIGEgc2NoZW1hIElEJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHNjaGVtYSBJRCBpcyB0aGUgYmFzZSBzY2hlbWEgSUQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBiYXNlIHNjaGVtYScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBleHBlY3Qoc2NoZW1hLmdldFNjaGVtYShBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkpLnRvLmVxbChcbiAgICAgICAgICAgIGFwcGl1bUNvbmZpZ1NjaGVtYSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiB0aGUgc2NoZW1hIElEIGlzIGEgcmVmZXJlbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2NoZW1hIGZvciB0aGUgcmVmZXJlbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGV4cGVjdChcbiAgICAgICAgICAgIHNjaGVtYS5nZXRTY2hlbWEoXG4gICAgICAgICAgICAgIGAke0FQUElVTV9DT05GSUdfU0NIRU1BX0lEfSMvcHJvcGVydGllcy9zZXJ2ZXIvcHJvcGVydGllcy9hZGRyZXNzYCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKS50by5leGlzdC5hbmQudG8uZXFsKFxuICAgICAgICAgICAgYXBwaXVtQ29uZmlnU2NoZW1hLnByb3BlcnRpZXMuc2VydmVyLnByb3BlcnRpZXMuYWRkcmVzcyxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBzY2hlbWEgSUQgaXMgaW52YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBleHBlY3QoKCkgPT4gc2NoZW1hLmdldFNjaGVtYSgnc2NoZW1hLXRoZS1jbG93bicpKS50by50aHJvdyhcbiAgICAgICAgICAgIFNjaGVtYVVua25vd25TY2hlbWFFcnJvcixcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIGFscmVhZHkgY29tcGlsZWQgaW5jbHVkaW5nIGFuIGV4dGVuc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoJ2RyaXZlcicsICdzdHVmZicsIERSSVZFUl9TQ0hFTUFfRklYVFVSRSk7XG4gICAgICAgIHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBleHRlbnNpb24gc2NoZW1hJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3Qoc2NoZW1hLmdldFNjaGVtYSgnZHJpdmVyLXN0dWZmLmpzb24nKSkudG8uZXFsKFxuICAgICAgICAgIERSSVZFUl9TQ0hFTUFfRklYVFVSRSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0RGVmYXVsdHNGcm9tU2NoZW1hKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIG5vdCB5ZXQgY29tcGlsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gc2NoZW1hLmdldERlZmF1bHRzRnJvbVNjaGVtYSgpKS50by50aHJvdyhcbiAgICAgICAgICBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcixcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIGFscmVhZHkgY29tcGlsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhIFJlY29yZCBvYmplY3Qgd2l0aCBvbmx5IGRlZmluZWQgZGVmYXVsdCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpO1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IHNjaGVtYS5nZXREZWZhdWx0c0Zyb21TY2hlbWEoKTtcbiAgICAgICAgZXhwZWN0KGRlZmF1bHRzKS50by5lcWwoZGVmYXVsdEFyZ3NGaXh0dXJlKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBleHRlbnNpb24gc2NoZW1hcyBpbmNsdWRlIGRlZmF1bHRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIFJlY29yZCBvYmplY3QgY29udGFpbmluZyBkZWZhdWx0cyBmb3IgdGhlIGV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2NoZW1hLnJlZ2lzdGVyU2NoZW1hKCdkcml2ZXInLCAnc3R1ZmYnLCBEUklWRVJfU0NIRU1BX0ZJWFRVUkUpO1xuICAgICAgICAgIHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpO1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRzID0gc2NoZW1hLmdldERlZmF1bHRzRnJvbVNjaGVtYSgpO1xuICAgICAgICAgIC8vIGV4dGVuc2lvbnMgaGF2ZSBhIGtleSB0aGF0IGxvb2tzIGxpa2UgYSBrZXlwYXRoLiB3ZSBtYXkgd2FudCB0byBjaGFuZ2UgdGhhdFxuICAgICAgICAgIGV4cGVjdChkZWZhdWx0cykudG8uaGF2ZS5wcm9wZXJ0eSgnZHJpdmVyLnN0dWZmLmFuc3dlcicsIDUwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZsYXR0ZW5TY2hlbWEoKScsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnd2hlbiBzY2hlbWEgbm90IHlldCBjb21waWxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEuZmxhdHRlblNjaGVtYSgpKS50by50aHJvdyhTY2hlbWFGaW5hbGl6YXRpb25FcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHNjaGVtYSBjb21waWxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEucmVzZXRTY2hlbWEoKTtcbiAgICAgICAgc2NoZW1hLmZpbmFsaXplU2NoZW1hKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmbGF0dGVuIGEgc2NoZW1hJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3Qoc2NoZW1hLmZsYXR0ZW5TY2hlbWEoKSkudG8uZXFsKGZsYXR0ZW5lZFNjaGVtYUZpeHR1cmUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBleHRlbnNpb25zIHByb3ZpZGUgc2NoZW1hcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBleHBlY3RlZDtcblxuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVtYS5yZWdpc3RlclNjaGVtYShcbiAgICAgICAgICAnZHJpdmVyJyxcbiAgICAgICAgICAnZmFrZScsXG4gICAgICAgICAgLy8gVFMgY29tcGxhaW5zIGFib3V0IHRoaXMgcmVxdWlyZSgpXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHJlcXVpcmUoJ0BhcHBpdW0vZmFrZS1kcml2ZXIvYnVpbGQvbGliL2Zha2UtZHJpdmVyLXNjaGVtYScpLmRlZmF1bHQsXG4gICAgICAgICk7XG4gICAgICAgIHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpO1xuXG4gICAgICAgIC8vIHRoZXNlIHByb3BzIHdvdWxkIGJlIGFkZGVkIGJ5IHRoZSBmYWtlLWRyaXZlciBleHRlbnNpb25cbiAgICAgICAgZXhwZWN0ZWQgPSBbXG4gICAgICAgICAgLi4uZmxhdHRlbmVkU2NoZW1hRml4dHVyZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2ludGVnZXInLFxuICAgICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgICAgICBtYXhpbXVtOiA2NTUzNSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcG9ydCB0byB1c2UgZm9yIHRoZSBmYWtlIHdlYiBzZXJ2ZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFyZ1NwZWM6IHtcbiAgICAgICAgICAgICAgbmFtZTogJ3NpbGx5LXdlYi1zZXJ2ZXItcG9ydCcsXG4gICAgICAgICAgICAgIGV4dFR5cGU6ICdkcml2ZXInLFxuICAgICAgICAgICAgICBleHROYW1lOiAnZmFrZScsXG4gICAgICAgICAgICAgIHJlZjogJ2RyaXZlci1mYWtlLmpzb24jL3Byb3BlcnRpZXMvc2lsbHktd2ViLXNlcnZlci1wb3J0JyxcbiAgICAgICAgICAgICAgYXJnOiAnZHJpdmVyLWZha2Utc2lsbHktd2ViLXNlcnZlci1wb3J0JyxcbiAgICAgICAgICAgICAgZGVzdDogJ2RyaXZlci5mYWtlLnNpbGx5V2ViU2VydmVyUG9ydCcsXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgaG9zdCB0byB1c2UgZm9yIHRoZSBmYWtlIHdlYiBzZXJ2ZXInLFxuICAgICAgICAgICAgICBkZWZhdWx0OiAnc2lsbHlob3N0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcmdTcGVjOiB7XG4gICAgICAgICAgICAgIG5hbWU6ICdzaWxseVdlYlNlcnZlckhvc3QnLFxuICAgICAgICAgICAgICBleHRUeXBlOiAnZHJpdmVyJyxcbiAgICAgICAgICAgICAgZXh0TmFtZTogJ2Zha2UnLFxuICAgICAgICAgICAgICByZWY6ICdkcml2ZXItZmFrZS5qc29uIy9wcm9wZXJ0aWVzL3NpbGx5V2ViU2VydmVySG9zdCcsXG4gICAgICAgICAgICAgIGFyZzogJ2RyaXZlci1mYWtlLXNpbGx5LXdlYi1zZXJ2ZXItaG9zdCcsXG4gICAgICAgICAgICAgIGRlc3Q6ICdkcml2ZXIuZmFrZS5zaWxseVdlYlNlcnZlckhvc3QnLFxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICdzaWxseWhvc3QnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmxhdHRlbiBhIHNjaGVtYScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KHNjaGVtYS5mbGF0dGVuU2NoZW1hKCkpLnRvLmVxbChleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZpbmFsaXplU2NoZW1hKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ3doZW4gbm8gZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHNjaGVtYXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhIFJlY29yZCBjb250YWluaW5nIHRoZSBzaW5nbGUgYmFzZSBzY2hlbWEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChzY2hlbWEuZmluYWxpemVTY2hlbWEoKSkudG8uZXFsKHtcbiAgICAgICAgICBbQVBQSVVNX0NPTkZJR19TQ0hFTUFfSURdOiBhcHBpdW1Db25maWdTY2hlbWEsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBleHRlbnNpb25zIHJlZ2lzdGVyIHNjaGVtYXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NoZW1hLnJlZ2lzdGVyU2NoZW1hKCdkcml2ZXInLCAnc3R1ZmYnLCBEUklWRVJfU0NIRU1BX0ZJWFRVUkUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgUmVjb3JkIGNvbnRhaW5pbmcgYWxsIGV4dGVuc2lvbiBzY2hlbWFzIF9hbmRfIHRoZSBiYXNlIHNjaGVtYSBjb250YWluaW5nIHJlZmVyZW5jZXMgdG8gdGhlIGV4dGVuc2lvbiBzY2hlbWFzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBiYXNlU2NoZW1hV2l0aFJlZnMgPSBfLmNsb25lRGVlcChhcHBpdW1Db25maWdTY2hlbWEpO1xuICAgICAgICBiYXNlU2NoZW1hV2l0aFJlZnMucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllcy5kcml2ZXIucHJvcGVydGllcy5zdHVmZiA9XG4gICAgICAgICAgeyRyZWY6ICdkcml2ZXItc3R1ZmYuanNvbicsICRjb21tZW50OiAnc3R1ZmYnfTtcbiAgICAgICAgZXhwZWN0KHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpKS50by5lcWwoe1xuICAgICAgICAgIFtBUFBJVU1fQ09ORklHX1NDSEVNQV9JRF06IGJhc2VTY2hlbWFXaXRoUmVmcyxcbiAgICAgICAgICAnZHJpdmVyLXN0dWZmLmpzb24nOiBEUklWRVJfU0NIRU1BX0ZJWFRVUkUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc0ZpbmFsaXplZCgpJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBzY2hlbWEgaXMgZmluYWxpemVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NoZW1hLmZpbmFsaXplU2NoZW1hKCk7XG4gICAgICAgIGV4cGVjdChzY2hlbWEuaXNGaW5hbGl6ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3doZW4gdGhlIHNjaGVtYSBpcyBub3QgZmluYWxpemVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVtYS5yZXNldFNjaGVtYSgpO1xuICAgICAgICBleHBlY3Qoc2NoZW1hLmlzRmluYWxpemVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2YWxpZGF0ZSgpJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCd3aGVuIHNjaGVtYSBub3QgeWV0IGNvbXBpbGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IHNjaGVtYS52YWxpZGF0ZSgnZm9vJykpLnRvLnRocm93KFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIGFscmVhZHkgY29tcGlsZWQsIHdpdGggbm8gZXh0ZW5zaW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEuZmluYWxpemVTY2hlbWEoKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhbiBpbnZhbGlkIHNjaGVtYSBJRCByZWYnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+IHNjaGVtYS52YWxpZGF0ZSgnZm9vJywgJ2JhcicpKS50by50aHJvdyhcbiAgICAgICAgICAgIFNjaGVtYVVua25vd25TY2hlbWFFcnJvcixcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBub3QgcHJvdmlkZWQgYSBzY2hlbWEgSUQgcmVmJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhIHZhbGlkIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGFycmF5IG9mIG5vIGVycm9ycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChzY2hlbWEudmFsaWRhdGUoe3NlcnZlcjoge2FkZHJlc3M6ICcxMjcuMC4wLjEnfX0pKS50by5lcWwoXG4gICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gcHJvdmlkZWQgYW4gaW52YWxpZCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGVycm9ycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChzY2hlbWEudmFsaWRhdGUoe2FkZHJlc3M6ICcxMjcuMC4wLjEnfSkpLnRvLmJlLmFuKCdhcnJheScpXG4gICAgICAgICAgICAgIC5hbmQudG8ubm90LmJlLmVtcHR5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhIHNjaGVtYSBJRCByZWYnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGEgdmFsaWQgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgb2Ygbm8gZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICBzY2hlbWEudmFsaWRhdGUoXG4gICAgICAgICAgICAgICAgJzEyNy4wLjAuMScsXG4gICAgICAgICAgICAgICAgJ2FwcGl1bS5qc29uIy9wcm9wZXJ0aWVzL3NlcnZlci9wcm9wZXJ0aWVzL2FkZHJlc3MnLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKS50by5lcWwoW10pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhbiBpbnZhbGlkIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICBzY2hlbWEudmFsaWRhdGUoXG4gICAgICAgICAgICAgICAgJzEyNy4wLjAuMScsXG4gICAgICAgICAgICAgICAgJ2FwcGl1bS5qc29uIy9wcm9wZXJ0aWVzL3NlcnZlci9wcm9wZXJ0aWVzL3BvcnQnLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKS50by5iZS5hbignYXJyYXknKS5hbmQudG8ubm90LmJlLmVtcHR5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIGFscmVhZHkgY29tcGlsZWQsIHdpdGggZXh0ZW5zaW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoJ2RyaXZlcicsICdzdHVmZicsIERSSVZFUl9TQ0hFTUFfRklYVFVSRSk7XG4gICAgICAgIHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGFuIGludmFsaWQgc2NoZW1hIElEIHJlZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBleHBlY3QoKCkgPT4gc2NoZW1hLnZhbGlkYXRlKCdmb28nLCAnYmFyJykpLnRvLnRocm93KFxuICAgICAgICAgICAgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIG5vdCBwcm92aWRlZCBhIHNjaGVtYSBJRCByZWYnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGEgdmFsaWQgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgb2Ygbm8gZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICBzY2hlbWEudmFsaWRhdGUoe3NlcnZlcjoge2RyaXZlcjoge3N0dWZmOiB7YW5zd2VyOiA5OX19fX0pLFxuICAgICAgICAgICAgKS50by5lcWwoW10pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhbiBpbnZhbGlkIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICBzY2hlbWEudmFsaWRhdGUoe3NlcnZlcjoge2RyaXZlcjoge3N0dWZmOiB7YW5zd2VyOiAxMDF9fX19KSxcbiAgICAgICAgICAgICkudG8uYmUuYW4oJ2FycmF5JykuYW5kLnRvLm5vdC5iZS5lbXB0eTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3doZW4gcHJvdmlkZWQgYSBzY2hlbWEgSUQgcmVmJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhIHZhbGlkIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGFycmF5IG9mIG5vIGVycm9ycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChcbiAgICAgICAgICAgICAgc2NoZW1hLnZhbGlkYXRlKDk5LCAnZHJpdmVyLXN0dWZmLmpzb24jL3Byb3BlcnRpZXMvYW5zd2VyJyksXG4gICAgICAgICAgICApLnRvLmVxbChbXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGFuIGludmFsaWQgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoXG4gICAgICAgICAgICAgIHNjaGVtYS52YWxpZGF0ZSgxMDEsICdkcml2ZXItc3R1ZmYuanNvbiMvcHJvcGVydGllcy9hbnN3ZXInKSxcbiAgICAgICAgICAgICkudG8uYmUuYW4oJ2FycmF5JykuYW5kLnRvLm5vdC5iZS5lbXB0eTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBAdGVtcGxhdGUgUCxSXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdzaW5vbicpLlNpbm9uU3R1YjxQLFI+fSBTaW5vblN0dWI8UCxSPlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuZGVmYXVsdFsnYWRkU2NoZW1hJ119IEFqdkFkZFNjaGVtYVxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuZGVmYXVsdFsnZ2V0U2NoZW1hJ119IEFqdkdldFNjaGVtYTxhbnk+XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYnKS5kZWZhdWx0Wyd2YWxpZGF0ZVNjaGVtYSddfSBBanZWYWxpZGF0ZVNjaGVtYVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2L2Rpc3QvY29yZScpLkFueVZhbGlkYXRlRnVuY3Rpb248YW55Pn0gQW55VmFsaWRhdGVGdW5jdGlvblxuICovXG4iXSwiZmlsZSI6InRlc3Qvc2NoZW1hL3NjaGVtYS1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
407
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3Qvc2NoZW1hL3NjaGVtYS1zcGVjcy5qcyJdLCJuYW1lcyI6WyJleHBlY3QiLCJjaGFpIiwiZGVzY3JpYmUiLCJzY2hlbWEiLCJzYW5kYm94IiwiU2NoZW1hRmluYWxpemF0aW9uRXJyb3IiLCJTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IiLCJTY2hlbWFVbnN1cHBvcnRlZFNjaGVtYUVycm9yIiwibW9ja3MiLCJiZWZvcmVFYWNoIiwic2lub24iLCJjcmVhdGVTYW5kYm94Iiwic3R1YiIsInJld2lyZW1vY2siLCJwcm94eSIsInJlcXVpcmUiLCJyZXNldFNjaGVtYSIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJpdCIsInJlZ2lzdGVyU2NoZW1hIiwidG8iLCJ0aHJvdyIsIlR5cGVFcnJvciIsIkRSSVZFUl9UWVBFIiwidW5kZWZpbmVkIiwidGl0bGUiLCIkYXN5bmMiLCJzY2hlbWFPYmplY3QiLCJub3QiLCJFcnJvciIsInNjaGVtYTEiLCJzY2hlbWEyIiwiUExVR0lOX1RZUEUiLCJnZXRTY2hlbWEiLCJmaW5hbGl6ZVNjaGVtYSIsImVxbCIsImFwcGl1bUNvbmZpZ1NjaGVtYSIsIkFQUElVTV9DT05GSUdfU0NIRU1BX0lEIiwiZXhpc3QiLCJhbmQiLCJwcm9wZXJ0aWVzIiwic2VydmVyIiwiYWRkcmVzcyIsIkRSSVZFUl9TQ0hFTUFfRklYVFVSRSIsImdldERlZmF1bHRzRm9yU2NoZW1hIiwiZGVmYXVsdHMiLCJkZWZhdWx0QXJnc0ZpeHR1cmUiLCJoYXZlIiwicHJvcGVydHkiLCJmbGF0dGVuU2NoZW1hIiwiZmxhdHRlbmVkU2NoZW1hRml4dHVyZSIsImV4cGVjdGVkIiwiZGVmYXVsdCIsInR5cGUiLCJtaW5pbXVtIiwibWF4aW11bSIsImRlc2NyaXB0aW9uIiwiYXJnU3BlYyIsIm5hbWUiLCJleHRUeXBlIiwiZXh0TmFtZSIsInJlZiIsImFyZyIsImRlc3QiLCJyYXdEZXN0IiwiZGVmYXVsdFZhbHVlIiwiYmFzZVNjaGVtYVdpdGhSZWZzIiwiXyIsImNsb25lRGVlcCIsImRyaXZlciIsInN0dWZmIiwiJHJlZiIsIiRjb21tZW50IiwiaXNGaW5hbGl6ZWQiLCJiZSIsInRydWUiLCJmYWxzZSIsInZhbGlkYXRlIiwiYW4iLCJlbXB0eSIsImFuc3dlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTTtBQUFDQSxFQUFBQTtBQUFELElBQVdDLElBQWpCO0FBRUFDLFFBQVEsQ0FBQyxRQUFELEVBQVcsWUFBWTtBQUU3QixNQUFJQyxNQUFKO0FBRUEsTUFBSUMsT0FBSjtBQUtBLE1BQUlDLHVCQUFKO0FBS0EsTUFBSUMsd0JBQUo7QUFLQSxNQUFJQyw0QkFBSjtBQUVBLE1BQUlDLEtBQUo7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDckJMLElBQUFBLE9BQU8sR0FBR00sZUFBTUMsYUFBTixFQUFWO0FBRUFILElBQUFBLEtBQUssR0FBRztBQUNOLHNCQUFnQkosT0FBTyxDQUFDUSxJQUFSLEVBRFY7QUFFTixvQ0FBOEJSLE9BQU8sQ0FBQ1EsSUFBUjtBQUZ4QixLQUFSO0FBS0FULElBQUFBLE1BQU0sR0FBR1Usb0JBQVdDLEtBQVgsQ0FBaUIsTUFBTUMsT0FBTyxDQUFDLHlCQUFELENBQTlCLEVBQTJEUCxLQUEzRCxDQUFUO0FBQ0FILElBQUFBLHVCQUF1QixHQUFHRixNQUFNLENBQUNFLHVCQUFqQztBQUNBQyxJQUFBQSx3QkFBd0IsR0FBR0gsTUFBTSxDQUFDRyx3QkFBbEM7QUFDQUMsSUFBQUEsNEJBQTRCLEdBQUdKLE1BQU0sQ0FBQ0ksNEJBQXRDO0FBQ0FKLElBQUFBLE1BQU0sQ0FBQ2EsV0FBUDtBQUNELEdBYlMsQ0FBVjtBQWVBQyxFQUFBQSxTQUFTLENBQUMsWUFBWTtBQUNwQmIsSUFBQUEsT0FBTyxDQUFDYyxPQUFSO0FBQ0QsR0FGUSxDQUFUO0FBSUFoQixFQUFBQSxRQUFRLENBQUMsa0JBQUQsRUFBcUIsWUFBWTtBQUN2Q0EsSUFB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Q0FFK0I4QyxFQUYvQixDQUVrQ0ssS0FGbEM7QUFHRCxXQUpDLENBQUY7QUFLRCxTQU5PLENBQVI7QUFPRCxPQWhCTyxDQUFSO0FBaUJELEtBakRPLENBQVI7QUFrREQsR0FoSE8sQ0FBUjtBQWlIRCxDQWhlTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFIH0gZnJvbSAnLi4vLi4vbGliL2V4dGVuc2lvbi1jb25maWcnO1xuaW1wb3J0IGFwcGl1bUNvbmZpZ1NjaGVtYSBmcm9tICcuLi8uLi9saWIvc2NoZW1hL2FwcGl1bS1jb25maWctc2NoZW1hJztcbmltcG9ydCB7IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEIH0gZnJvbSAnLi4vLi4vbGliL3NjaGVtYS9hcmctc3BlYyc7XG5pbXBvcnQgZGVmYXVsdEFyZ3NGaXh0dXJlIGZyb20gJy4uL2ZpeHR1cmVzL2RlZmF1bHQtYXJncyc7XG5pbXBvcnQgRFJJVkVSX1NDSEVNQV9GSVhUVVJFIGZyb20gJy4uL2ZpeHR1cmVzL2RyaXZlci5zY2hlbWEnO1xuaW1wb3J0IGZsYXR0ZW5lZFNjaGVtYUZpeHR1cmUgZnJvbSAnLi4vZml4dHVyZXMvZmxhdHRlbmVkLXNjaGVtYSc7XG5pbXBvcnQgeyByZXdpcmVtb2NrIH0gZnJvbSAnLi4vaGVscGVycyc7XG5cbmNvbnN0IHtleHBlY3R9ID0gY2hhaTtcblxuZGVzY3JpYmUoJ3NjaGVtYScsIGZ1bmN0aW9uICgpIHtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uL2xpYi9zY2hlbWEvc2NoZW1hJyl9ICovXG4gIGxldCBzY2hlbWE7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdzaW5vbicpLlNpbm9uU2FuZGJveH0gKi9cbiAgbGV0IHNhbmRib3g7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuLi8uLi9saWIvc2NoZW1hL3NjaGVtYScpLlNjaGVtYUZpbmFsaXphdGlvbkVycm9yfVxuICAgKi9cbiAgbGV0IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi4vLi4vbGliL3NjaGVtYS9zY2hlbWEnKS5TY2hlbWFVbmtub3duU2NoZW1hRXJyb3J9XG4gICAqL1xuICBsZXQgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi4vLi4vbGliL3NjaGVtYS9zY2hlbWEnKS5TY2hlbWFVbnN1cHBvcnRlZFNjaGVtYUVycm9yfVxuICAgKi9cbiAgbGV0IFNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3I7XG5cbiAgbGV0IG1vY2tzO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICBtb2NrcyA9IHtcbiAgICAgICdyZXNvbHZlLWZyb20nOiBzYW5kYm94LnN0dWIoKSxcbiAgICAgICdAc2lkdmluZC9iZXR0ZXItYWp2LWVycm9ycyc6IHNhbmRib3guc3R1YigpLFxuICAgIH07XG5cbiAgICBzY2hlbWEgPSByZXdpcmVtb2NrLnByb3h5KCgpID0+IHJlcXVpcmUoJy4uLy4uL2xpYi9zY2hlbWEvc2NoZW1hJyksIG1vY2tzKTtcbiAgICBTY2hlbWFGaW5hbGl6YXRpb25FcnJvciA9IHNjaGVtYS5TY2hlbWFGaW5hbGl6YXRpb25FcnJvcjtcbiAgICBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IgPSBzY2hlbWEuU2NoZW1hVW5rbm93blNjaGVtYUVycm9yO1xuICAgIFNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3IgPSBzY2hlbWEuU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvcjtcbiAgICBzY2hlbWEucmVzZXRTY2hlbWEoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlZ2lzdGVyU2NoZW1hKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ2Vycm9yIGNvbmRpdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBubyBwYXJhbWV0ZXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGEgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoKTtcbiAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IsIC9leHBlY3RlZCBleHRlbnNpb24gdHlwZS9pKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3doZW4gcHJvdmlkZWQgYHR5cGVgIGFuZCBgbmFtZWAsIGJ1dCBub3QgYHNjaGVtYWAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoRFJJVkVSX1RZUEUsICd3aG9vcGVlZScpLFxuICAgICAgICAgICkudG8udGhyb3coVHlwZUVycm9yLCAvZXhwZWN0ZWQgZXh0ZW5zaW9uIHR5cGUvaSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGB0eXBlYCBhbmQgbm9uZW1wdHkgYHNjaGVtYWAsIGJ1dCBubyBgbmFtZWAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoRFJJVkVSX1RZUEUsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICB0aXRsZTogJ3dob29wZWVlJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICkudG8udGhyb3coVHlwZUVycm9yLCAvZXhwZWN0ZWQgZXh0ZW5zaW9uIHR5cGUvaSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBzY2hlbWEgaXMgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIGlzIGEgb2JqZWN0IGJ1dCBub3QgYSBwbGFpbiBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgc2NoZW1hLnJlZ2lzdGVyU2NoZW1hKERSSVZFUl9UWVBFLCAnd2hvb3BlZWUnLCBbNDVdKTtcbiAgICAgICAgICAgIH0pLnRvLnRocm93KFxuICAgICAgICAgICAgICBTY2hlbWFVbnN1cHBvcnRlZFNjaGVtYUVycm9yLFxuICAgICAgICAgICAgICAvbXVzdCBiZSBhIHBsYWluIG9iamVjdC9pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gdGhlIHNjaGVtYSBpcyBhc3luYycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoRFJJVkVSX1RZUEUsICd3aG9vcGVlJywgeyRhc3luYzogdHJ1ZX0pO1xuICAgICAgICAgICAgfSkudG8udGhyb3coXG4gICAgICAgICAgICAgIFNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3IsXG4gICAgICAgICAgICAgIC9jYW5ub3QgYmUgYW4gYXN5bmMgc2NoZW1hL2ksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnd2hlbiB0aGUgc2NoZW1hIGlzIGJvb2xlYW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgc2NoZW1hLnJlZ2lzdGVyU2NoZW1hKERSSVZFUl9UWVBFLCAnd2hvb3BlZScsIHRydWUpO1xuICAgICAgICAgICAgfSkudG8udGhyb3coU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHNjaGVtYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBzY2hlbWEgaXMgaWRlbnRpY2FsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgbm90IHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hT2JqZWN0ID0ge3RpdGxlOiAnd2hvb3BlZSd9O1xuICAgICAgICAgICAgc2NoZW1hLnJlZ2lzdGVyU2NoZW1hKERSSVZFUl9UWVBFLCAnd2hvb3BlZScsIHNjaGVtYU9iamVjdCk7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgICAgICAgc2NoZW1hLnJlZ2lzdGVyU2NoZW1hKERSSVZFUl9UWVBFLCAnd2hvb3BlZScsIHNjaGVtYU9iamVjdCksXG4gICAgICAgICAgICApLm5vdC50by50aHJvdygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnd2hlbiB0aGUgc2NoZW1hIGlzIGRpZmZlcmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hT2JqZWN0ID0ge3RpdGxlOiAnd2hvb3BlZSd9O1xuICAgICAgICAgICAgc2NoZW1hLnJlZ2lzdGVyU2NoZW1hKERSSVZFUl9UWVBFLCAnd2hvb3BlZScsIHNjaGVtYU9iamVjdCk7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgICAgICAgc2NoZW1hLnJlZ2lzdGVyU2NoZW1hKERSSVZFUl9UWVBFLCAnd2hvb3BlZScsIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ2N1c2hpb24/JyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLnRvLnRocm93KEVycm9yLCAvY29uZmxpY3RzIHdpdGggYW4gZXhpc3Rpbmcgc2NoZW1hLyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhIG5vbmVtcHR5IGB0eXBlYCwgYHNjaGVtYWAgYW5kIGBuYW1lYCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgcmVnaXN0ZXIgdGhlIHNjaGVtYScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hT2JqZWN0ID0ge3RpdGxlOiAnd2hvb3BlZSd9O1xuICAgICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoRFJJVkVSX1RZUEUsICd3aG9vcGVlJywgc2NoZW1hT2JqZWN0KSxcbiAgICAgICAgKS5ub3QudG8udGhyb3coKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiB0aGUgYG5hbWVgIGlzIG5vdCB1bmlxdWUgYnV0IGB0eXBlYCBpcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZWdpc3RlciBib3RoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYTEgPSB7dGl0bGU6ICdwcm8tc2t1Yid9O1xuICAgICAgICAgIGNvbnN0IHNjaGVtYTIgPSB7dGl0bGU6ICdhbnRpLXNrdWInfTtcbiAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoRFJJVkVSX1RZUEUsICdza3ViJywgc2NoZW1hMSk7XG4gICAgICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoUExVR0lOX1RZUEUsICdza3ViJywgc2NoZW1hMiksXG4gICAgICAgICAgKS5ub3QudG8udGhyb3coKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFNjaGVtYSgpJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCd3aGVuIHNjaGVtYSBub3QgeWV0IGNvbXBpbGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IHNjaGVtYS5nZXRTY2hlbWEoKSkudG8udGhyb3coU2NoZW1hRmluYWxpemF0aW9uRXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBzY2hlbWEgYWxyZWFkeSBjb21waWxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEuZmluYWxpemVTY2hlbWEoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHNjaGVtYScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KHNjaGVtYS5nZXRTY2hlbWEoKSkudG8uZXFsKGFwcGl1bUNvbmZpZ1NjaGVtYSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHNjaGVtYSBhbHJlYWR5IGNvbXBpbGVkIGFuZCBwcm92aWRlZCBhIHNjaGVtYSBJRCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEuZmluYWxpemVTY2hlbWEoKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBzY2hlbWEgSUQgaXMgdGhlIGJhc2Ugc2NoZW1hIElEJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgYmFzZSBzY2hlbWEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZXhwZWN0KHNjaGVtYS5nZXRTY2hlbWEoQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpKS50by5lcWwoXG4gICAgICAgICAgICBhcHBpdW1Db25maWdTY2hlbWEsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3doZW4gdGhlIHNjaGVtYSBJRCBpcyBhIHJlZmVyZW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNjaGVtYSBmb3IgdGhlIHJlZmVyZW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBleHBlY3QoXG4gICAgICAgICAgICBzY2hlbWEuZ2V0U2NoZW1hKFxuICAgICAgICAgICAgICBgJHtBUFBJVU1fQ09ORklHX1NDSEVNQV9JRH0jL3Byb3BlcnRpZXMvc2VydmVyL3Byb3BlcnRpZXMvYWRkcmVzc2AsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICkudG8uZXhpc3QuYW5kLnRvLmVxbChcbiAgICAgICAgICAgIGFwcGl1bUNvbmZpZ1NjaGVtYS5wcm9wZXJ0aWVzLnNlcnZlci5wcm9wZXJ0aWVzLmFkZHJlc3MsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIElEIGlzIGludmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+IHNjaGVtYS5nZXRTY2hlbWEoJ3NjaGVtYS10aGUtY2xvd24nKSkudG8udGhyb3coXG4gICAgICAgICAgICBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHNjaGVtYSBhbHJlYWR5IGNvbXBpbGVkIGluY2x1ZGluZyBhbiBleHRlbnNpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NoZW1hLnJlZ2lzdGVyU2NoZW1hKERSSVZFUl9UWVBFLCAnc3R1ZmYnLCBEUklWRVJfU0NIRU1BX0ZJWFRVUkUpO1xuICAgICAgICBzY2hlbWEuZmluYWxpemVTY2hlbWEoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgZXh0ZW5zaW9uIHNjaGVtYScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KHNjaGVtYS5nZXRTY2hlbWEoJ2RyaXZlci1zdHVmZi5qc29uJykpLnRvLmVxbChcbiAgICAgICAgICBEUklWRVJfU0NIRU1BX0ZJWFRVUkUsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldERlZmF1bHRzRm9yU2NoZW1hKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIG5vdCB5ZXQgY29tcGlsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gc2NoZW1hLmdldERlZmF1bHRzRm9yU2NoZW1hKCkpLnRvLnRocm93KFxuICAgICAgICAgIFNjaGVtYUZpbmFsaXphdGlvbkVycm9yLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBzY2hlbWEgYWxyZWFkeSBjb21waWxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgUmVjb3JkIG9iamVjdCB3aXRoIG9ubHkgZGVmaW5lZCBkZWZhdWx0IHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NoZW1hLmZpbmFsaXplU2NoZW1hKCk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0gc2NoZW1hLmdldERlZmF1bHRzRm9yU2NoZW1hKCk7XG4gICAgICAgIGV4cGVjdChkZWZhdWx0cykudG8uZXFsKGRlZmF1bHRBcmdzRml4dHVyZSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3doZW4gZXh0ZW5zaW9uIHNjaGVtYXMgaW5jbHVkZSBkZWZhdWx0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBSZWNvcmQgb2JqZWN0IGNvbnRhaW5pbmcgZGVmYXVsdHMgZm9yIHRoZSBleHRlbnNpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNjaGVtYS5yZWdpc3RlclNjaGVtYShEUklWRVJfVFlQRSwgJ3N0dWZmJywgRFJJVkVSX1NDSEVNQV9GSVhUVVJFKTtcbiAgICAgICAgICBzY2hlbWEuZmluYWxpemVTY2hlbWEoKTtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0cyA9IHNjaGVtYS5nZXREZWZhdWx0c0ZvclNjaGVtYSgpO1xuICAgICAgICAgIC8vIGV4dGVuc2lvbnMgaGF2ZSBhIGtleSB0aGF0IGxvb2tzIGxpa2UgYSBrZXlwYXRoLiB3ZSBtYXkgd2FudCB0byBjaGFuZ2UgdGhhdFxuICAgICAgICAgIGV4cGVjdChkZWZhdWx0cykudG8uaGF2ZS5wcm9wZXJ0eSgnZHJpdmVyLnN0dWZmLmFuc3dlcicsIDUwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZsYXR0ZW5TY2hlbWEoKScsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnd2hlbiBzY2hlbWEgbm90IHlldCBjb21waWxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEuZmxhdHRlblNjaGVtYSgpKS50by50aHJvdyhTY2hlbWFGaW5hbGl6YXRpb25FcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHNjaGVtYSBjb21waWxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEucmVzZXRTY2hlbWEoKTtcbiAgICAgICAgc2NoZW1hLmZpbmFsaXplU2NoZW1hKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmbGF0dGVuIGEgc2NoZW1hJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3Qoc2NoZW1hLmZsYXR0ZW5TY2hlbWEoKSkudG8uZXFsKGZsYXR0ZW5lZFNjaGVtYUZpeHR1cmUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBleHRlbnNpb25zIHByb3ZpZGUgc2NoZW1hcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBleHBlY3RlZDtcblxuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVtYS5yZWdpc3RlclNjaGVtYShcbiAgICAgICAgICBEUklWRVJfVFlQRSxcbiAgICAgICAgICAnZmFrZScsXG4gICAgICAgICAgLy8gVFMgY29tcGxhaW5zIGFib3V0IHRoaXMgcmVxdWlyZSgpXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHJlcXVpcmUoJ0BhcHBpdW0vZmFrZS1kcml2ZXIvYnVpbGQvbGliL2Zha2UtZHJpdmVyLXNjaGVtYScpLmRlZmF1bHQsXG4gICAgICAgICk7XG4gICAgICAgIHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpO1xuXG4gICAgICAgIC8vIHRoZXNlIHByb3BzIHdvdWxkIGJlIGFkZGVkIGJ5IHRoZSBmYWtlLWRyaXZlciBleHRlbnNpb25cbiAgICAgICAgZXhwZWN0ZWQgPSBbXG4gICAgICAgICAgLi4uZmxhdHRlbmVkU2NoZW1hRml4dHVyZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2ludGVnZXInLFxuICAgICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgICAgICBtYXhpbXVtOiA2NTUzNSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcG9ydCB0byB1c2UgZm9yIHRoZSBmYWtlIHdlYiBzZXJ2ZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFyZ1NwZWM6IHtcbiAgICAgICAgICAgICAgbmFtZTogJ3NpbGx5LXdlYi1zZXJ2ZXItcG9ydCcsXG4gICAgICAgICAgICAgIGV4dFR5cGU6IERSSVZFUl9UWVBFLFxuICAgICAgICAgICAgICBleHROYW1lOiAnZmFrZScsXG4gICAgICAgICAgICAgIHJlZjogJ2RyaXZlci1mYWtlLmpzb24jL3Byb3BlcnRpZXMvc2lsbHktd2ViLXNlcnZlci1wb3J0JyxcbiAgICAgICAgICAgICAgYXJnOiAnZHJpdmVyLWZha2Utc2lsbHktd2ViLXNlcnZlci1wb3J0JyxcbiAgICAgICAgICAgICAgZGVzdDogJ2RyaXZlci5mYWtlLnNpbGx5V2ViU2VydmVyUG9ydCcsXG4gICAgICAgICAgICAgIHJhd0Rlc3Q6ICdzaWxseVdlYlNlcnZlclBvcnQnLFxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGhvc3QgdG8gdXNlIGZvciB0aGUgZmFrZSB3ZWIgc2VydmVyJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogJ3NpbGx5aG9zdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXJnU3BlYzoge1xuICAgICAgICAgICAgICBuYW1lOiAnc2lsbHlXZWJTZXJ2ZXJIb3N0JyxcbiAgICAgICAgICAgICAgZXh0VHlwZTogRFJJVkVSX1RZUEUsXG4gICAgICAgICAgICAgIGV4dE5hbWU6ICdmYWtlJyxcbiAgICAgICAgICAgICAgcmVmOiAnZHJpdmVyLWZha2UuanNvbiMvcHJvcGVydGllcy9zaWxseVdlYlNlcnZlckhvc3QnLFxuICAgICAgICAgICAgICBhcmc6ICdkcml2ZXItZmFrZS1zaWxseS13ZWItc2VydmVyLWhvc3QnLFxuICAgICAgICAgICAgICBkZXN0OiAnZHJpdmVyLmZha2Uuc2lsbHlXZWJTZXJ2ZXJIb3N0JyxcbiAgICAgICAgICAgICAgcmF3RGVzdDogJ3NpbGx5V2ViU2VydmVySG9zdCcsXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ3NpbGx5aG9zdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmbGF0dGVuIGEgc2NoZW1hJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3Qoc2NoZW1hLmZsYXR0ZW5TY2hlbWEoKSkudG8uZXFsKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmluYWxpemVTY2hlbWEoKScsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnd2hlbiBubyBleHRlbnNpb25zIHJlZ2lzdGVyZWQgc2NoZW1hcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgUmVjb3JkIGNvbnRhaW5pbmcgdGhlIHNpbmdsZSBiYXNlIHNjaGVtYScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpKS50by5lcWwoe1xuICAgICAgICAgIFtBUFBJVU1fQ09ORklHX1NDSEVNQV9JRF06IGFwcGl1bUNvbmZpZ1NjaGVtYSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIGV4dGVuc2lvbnMgcmVnaXN0ZXIgc2NoZW1hcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoRFJJVkVSX1RZUEUsICdzdHVmZicsIERSSVZFUl9TQ0hFTUFfRklYVFVSRSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBSZWNvcmQgY29udGFpbmluZyBhbGwgZXh0ZW5zaW9uIHNjaGVtYXMgX2FuZF8gdGhlIGJhc2Ugc2NoZW1hIGNvbnRhaW5pbmcgcmVmZXJlbmNlcyB0byB0aGUgZXh0ZW5zaW9uIHNjaGVtYXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGJhc2VTY2hlbWFXaXRoUmVmcyA9IF8uY2xvbmVEZWVwKGFwcGl1bUNvbmZpZ1NjaGVtYSk7XG4gICAgICAgIGJhc2VTY2hlbWFXaXRoUmVmcy5wcm9wZXJ0aWVzLnNlcnZlci5wcm9wZXJ0aWVzLmRyaXZlci5wcm9wZXJ0aWVzLnN0dWZmID1cbiAgICAgICAgICB7JHJlZjogJ2RyaXZlci1zdHVmZi5qc29uJywgJGNvbW1lbnQ6ICdzdHVmZid9O1xuICAgICAgICBleHBlY3Qoc2NoZW1hLmZpbmFsaXplU2NoZW1hKCkpLnRvLmVxbCh7XG4gICAgICAgICAgW0FQUElVTV9DT05GSUdfU0NIRU1BX0lEXTogYmFzZVNjaGVtYVdpdGhSZWZzLFxuICAgICAgICAgICdkcml2ZXItc3R1ZmYuanNvbic6IERSSVZFUl9TQ0hFTUFfRklYVFVSRSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRmluYWxpemVkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ3doZW4gdGhlIHNjaGVtYSBpcyBmaW5hbGl6ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEuZmluYWxpemVTY2hlbWEoKTtcbiAgICAgICAgZXhwZWN0KHNjaGVtYS5pc0ZpbmFsaXplZCgpKS50by5iZS50cnVlO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiB0aGUgc2NoZW1hIGlzIG5vdCBmaW5hbGl6ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NoZW1hLnJlc2V0U2NoZW1hKCk7XG4gICAgICAgIGV4cGVjdChzY2hlbWEuaXNGaW5hbGl6ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkYXRlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIG5vdCB5ZXQgY29tcGlsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gc2NoZW1hLnZhbGlkYXRlKCdmb28nKSkudG8udGhyb3coU2NoZW1hRmluYWxpemF0aW9uRXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBzY2hlbWEgYWxyZWFkeSBjb21waWxlZCwgd2l0aCBubyBleHRlbnNpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGFuIGludmFsaWQgc2NoZW1hIElEIHJlZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBleHBlY3QoKCkgPT4gc2NoZW1hLnZhbGlkYXRlKCdmb28nLCAnYmFyJykpLnRvLnRocm93KFxuICAgICAgICAgICAgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIG5vdCBwcm92aWRlZCBhIHNjaGVtYSBJRCByZWYnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGEgdmFsaWQgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgb2Ygbm8gZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHNjaGVtYS52YWxpZGF0ZSh7c2VydmVyOiB7YWRkcmVzczogJzEyNy4wLjAuMSd9fSkpLnRvLmVxbChcbiAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhbiBpbnZhbGlkIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHNjaGVtYS52YWxpZGF0ZSh7YWRkcmVzczogJzEyNy4wLjAuMSd9KSkudG8uYmUuYW4oJ2FycmF5JylcbiAgICAgICAgICAgICAgLmFuZC50by5ub3QuYmUuZW1wdHk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGEgc2NoZW1hIElEIHJlZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gcHJvdmlkZWQgYSB2YWxpZCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBhcnJheSBvZiBubyBlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoXG4gICAgICAgICAgICAgIHNjaGVtYS52YWxpZGF0ZShcbiAgICAgICAgICAgICAgICAnMTI3LjAuMC4xJyxcbiAgICAgICAgICAgICAgICAnYXBwaXVtLmpzb24jL3Byb3BlcnRpZXMvc2VydmVyL3Byb3BlcnRpZXMvYWRkcmVzcycsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLnRvLmVxbChbXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGFuIGludmFsaWQgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoXG4gICAgICAgICAgICAgIHNjaGVtYS52YWxpZGF0ZShcbiAgICAgICAgICAgICAgICAnMTI3LjAuMC4xJyxcbiAgICAgICAgICAgICAgICAnYXBwaXVtLmpzb24jL3Byb3BlcnRpZXMvc2VydmVyL3Byb3BlcnRpZXMvcG9ydCcsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLnRvLmJlLmFuKCdhcnJheScpLmFuZC50by5ub3QuYmUuZW1wdHk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBzY2hlbWEgYWxyZWFkeSBjb21waWxlZCwgd2l0aCBleHRlbnNpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVtYS5yZWdpc3RlclNjaGVtYShEUklWRVJfVFlQRSwgJ3N0dWZmJywgRFJJVkVSX1NDSEVNQV9GSVhUVVJFKTtcbiAgICAgICAgc2NoZW1hLmZpbmFsaXplU2NoZW1hKCk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3doZW4gcHJvdmlkZWQgYW4gaW52YWxpZCBzY2hlbWEgSUQgcmVmJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEudmFsaWRhdGUoJ2ZvbycsICdiYXInKSkudG8udGhyb3coXG4gICAgICAgICAgICBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3doZW4gbm90IHByb3ZpZGVkIGEgc2NoZW1hIElEIHJlZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gcHJvdmlkZWQgYSB2YWxpZCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBhcnJheSBvZiBubyBlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoXG4gICAgICAgICAgICAgIHNjaGVtYS52YWxpZGF0ZSh7c2VydmVyOiB7ZHJpdmVyOiB7c3R1ZmY6IHthbnN3ZXI6IDk5fX19fSksXG4gICAgICAgICAgICApLnRvLmVxbChbXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGFuIGludmFsaWQgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoXG4gICAgICAgICAgICAgIHNjaGVtYS52YWxpZGF0ZSh7c2VydmVyOiB7ZHJpdmVyOiB7c3R1ZmY6IHthbnN3ZXI6IDEwMX19fX0pLFxuICAgICAgICAgICAgKS50by5iZS5hbignYXJyYXknKS5hbmQudG8ubm90LmJlLmVtcHR5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhIHNjaGVtYSBJRCByZWYnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGEgdmFsaWQgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgb2Ygbm8gZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICBzY2hlbWEudmFsaWRhdGUoOTksICdkcml2ZXItc3R1ZmYuanNvbiMvcHJvcGVydGllcy9hbnN3ZXInKSxcbiAgICAgICAgICAgICkudG8uZXFsKFtdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gcHJvdmlkZWQgYW4gaW52YWxpZCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGVycm9ycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChcbiAgICAgICAgICAgICAgc2NoZW1hLnZhbGlkYXRlKDEwMSwgJ2RyaXZlci1zdHVmZi5qc29uIy9wcm9wZXJ0aWVzL2Fuc3dlcicpLFxuICAgICAgICAgICAgKS50by5iZS5hbignYXJyYXknKS5hbmQudG8ubm90LmJlLmVtcHR5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBQLFJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3Npbm9uJykuU2lub25TdHViPFAsUj59IFNpbm9uU3R1YjxQLFI+XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYnKS5kZWZhdWx0WydhZGRTY2hlbWEnXX0gQWp2QWRkU2NoZW1hXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYnKS5kZWZhdWx0WydnZXRTY2hlbWEnXX0gQWp2R2V0U2NoZW1hPGFueT5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FqdicpLmRlZmF1bHRbJ3ZhbGlkYXRlU2NoZW1hJ119IEFqdlZhbGlkYXRlU2NoZW1hXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYvZGlzdC9jb3JlJykuQW55VmFsaWRhdGVGdW5jdGlvbjxhbnk+fSBBbnlWYWxpZGF0ZUZ1bmN0aW9uXG4gKi9cbiJdLCJmaWxlIjoidGVzdC9zY2hlbWEvc2NoZW1hLXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -10,6 +10,12 @@ var _helpers = require("./helpers");
|
|
|
10
10
|
|
|
11
11
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
12
12
|
|
|
13
|
+
var _colors = require("@dabh/colors");
|
|
14
|
+
|
|
15
|
+
var _sinon = _interopRequireDefault(require("sinon"));
|
|
16
|
+
|
|
17
|
+
var _logger = _interopRequireDefault(require("../lib/logger"));
|
|
18
|
+
|
|
13
19
|
describe('utils', function () {
|
|
14
20
|
describe('parseCapsForInnerDriver()', function () {
|
|
15
21
|
it('should return an error if only JSONWP provided', function () {
|
|
@@ -249,7 +255,7 @@ describe('utils', function () {
|
|
|
249
255
|
});
|
|
250
256
|
it('should not allow deletion', function () {
|
|
251
257
|
const map = new _utils.ReadonlyMap([['foo', 'bar']]);
|
|
252
|
-
|
|
258
|
+
map.delete('foo').should.be.false;
|
|
253
259
|
});
|
|
254
260
|
it('should not allow clearing', function () {
|
|
255
261
|
const map = new _utils.ReadonlyMap([['foo', 'bar']]);
|
|
@@ -260,7 +266,23 @@ describe('utils', function () {
|
|
|
260
266
|
(() => map.set('foo', 'baz')).should.throw();
|
|
261
267
|
});
|
|
262
268
|
});
|
|
269
|
+
describe('inspect()', function () {
|
|
270
|
+
let sandbox;
|
|
271
|
+
beforeEach(function () {
|
|
272
|
+
sandbox = _sinon.default.createSandbox();
|
|
273
|
+
sandbox.spy(_logger.default, 'info');
|
|
274
|
+
});
|
|
275
|
+
afterEach(function () {
|
|
276
|
+
sandbox.restore();
|
|
277
|
+
});
|
|
278
|
+
it('should log the result of inspecting a value', function () {
|
|
279
|
+
(0, _utils.inspect)({
|
|
280
|
+
foo: 'bar'
|
|
281
|
+
});
|
|
282
|
+
(0, _colors.stripColors)(_logger.default.info.firstCall.firstArg).should.equal('{ foo: \'bar\' }');
|
|
283
|
+
});
|
|
284
|
+
});
|
|
263
285
|
});require('source-map-support').install();
|
|
264
286
|
|
|
265
287
|
|
|
266
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvdXRpbHMtc3BlY3MuanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJpdCIsImVycm9yIiwicHJvdG9jb2wiLCJCQVNFX0NBUFMiLCJzaG91bGQiLCJlcXVhbCIsIm1lc3NhZ2UiLCJtYXRjaCIsImRlc2lyZWRDYXBzIiwicHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzIiwicHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzIiwidW5kZWZpbmVkIiwiVzNDX0NBUFMiLCJkZWVwIiwibm90IiwiZXhpc3QiLCJkZWZhdWx0VzNDQ2FwcyIsImV4cGVjdGVkRGVmYXVsdENhcHMiLCJmb28iLCJiYXoiLCJhbHdheXNNYXRjaCIsInJlcyIsImVxbCIsImpzb253cENvZGUiLCJ3M2NTdGF0dXMiLCJfc3RhY2t0cmFjZSIsImVyciIsImhlbGxvIiwicHJlc2VuY2UiLCJfIiwiaXNFcnJvciIsImJlIiwidHJ1ZSIsInczY0NhcHMiLCJmaXJzdE1hdGNoIiwicGxhdGZvcm1OYW1lIiwicHJvcGVydHlOYW1lIiwiaW5jbHVkZXMiLCJzb21lQ2FwIiwiYnJvd3Nlck5hbWUiLCJzb21lT3RoZXJDYXAiLCJ5ZXRBbm90aGVyQ2FwIiwiY2FwcyIsInNldHRpbmdzIiwic2V0dGluZ05hbWUiLCJzZXR0aW5nTmFtZTIiLCJrZXkiLCJtYXAiLCJSZWFkb25seU1hcCIsInNldCIsInRocm93IiwiZ2V0IiwiZGVsZXRlIiwiY2xlYXIiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUlBOztBQUNBOztBQUVBQSxRQUFRLENBQUMsT0FBRCxFQUFVLFlBQVk7QUFDNUJBLEVBQUFBLFFBQVEsQ0FBQywyQkFBRCxFQUE4QixZQUFZO0FBQ2hEQyxJQUFBQSxFQUFFLENBQUMsZ0RBQUQsRUFBbUQsWUFBWTtBQUMvRCxVQUFJO0FBQUNDLFFBQUFBLEtBQUQ7QUFBUUMsUUFBQUE7QUFBUixVQUFvQixvQ0FBd0JDLGtCQUF4QixDQUF4QjtBQUNBRCxNQUFBQSxRQUFRLENBQUNFLE1BQVQsQ0FB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QWUsS0FBZixDQUFQLEVBQThCN0MsTUFBOUIsQ0FBcUM4QyxLQUFyQztBQUNELEtBSEMsQ0FBRjtBQUlELEdBMUJPLENBQVI7QUEyQkQsQ0F2T08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLCBpbnNlcnRBcHBpdW1QcmVmaXhlcywgcHVsbFNldHRpbmdzLFxuICByZW1vdmVBcHBpdW1QcmVmaXhlcywgUmVhZG9ubHlNYXBcbn0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IEJBU0VfQ0FQUywgVzNDX0NBUFMgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuZGVzY3JpYmUoJ3V0aWxzJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgncGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlcnJvciBpZiBvbmx5IEpTT05XUCBwcm92aWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCB7ZXJyb3IsIHByb3RvY29sfSA9IHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKEJBU0VfQ0FQUyk7XG4gICAgICBwcm90b2NvbC5zaG91bGQuZXF1YWwoJ1czQycpO1xuICAgICAgZXJyb3IubWVzc2FnZS5zaG91bGQubWF0Y2goL1czQy8pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIFczQyBjYXBzIHVuY2hhbmdlZCBpZiBvbmx5IFczQyBjYXBzIHdlcmUgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQge2Rlc2lyZWRDYXBzLCBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcywgcHJvdG9jb2x9ID0gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIodW5kZWZpbmVkLCBXM0NfQ0FQUyk7XG4gICAgICBkZXNpcmVkQ2Fwcy5zaG91bGQuZGVlcC5lcXVhbChCQVNFX0NBUFMpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMpO1xuICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLnNob3VsZC5kZWVwLmVxdWFsKFczQ19DQVBTKTtcbiAgICAgIHByb3RvY29sLnNob3VsZC5lcXVhbCgnVzNDJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gSlNPTldQIGFuZCBXM0MgY2FwcyBpZiBib3RoIHdlcmUgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQge2Rlc2lyZWRDYXBzLCBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcywgcHJvdG9jb2x9ID0gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoQkFTRV9DQVBTLCBXM0NfQ0FQUyk7XG4gICAgICBkZXNpcmVkQ2Fwcy5zaG91bGQuZGVlcC5lcXVhbChCQVNFX0NBUFMpO1xuICAgICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLnNob3VsZC5kZWVwLmVxdWFsKEJBU0VfQ0FQUyk7XG4gICAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMuc2hvdWxkLmRlZXAuZXF1YWwoVzNDX0NBUFMpO1xuICAgICAgcHJvdG9jb2wuc2hvdWxkLmVxdWFsKCdXM0MnKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGluY2x1ZGUgZGVmYXVsdCBjYXBhYmlsaXRpZXMgaW4gcmVzdWx0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRXM0NDYXBzID0ge1xuICAgICAgICAnYXBwaXVtOmZvbyc6ICdiYXInLFxuICAgICAgICAnYXBwaXVtOmJheic6ICdibGEnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkRGVmYXVsdENhcHMgPSB7XG4gICAgICAgIGZvbzogJ2JhcicsXG4gICAgICAgIGJhejogJ2JsYScsXG4gICAgICB9O1xuICAgICAgY29uc3Qge1xuICAgICAgICBkZXNpcmVkQ2FwcyxcbiAgICAgICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXNcbiAgICAgIH0gPSBwYXJzZUNhcHNGb3JJbm5lckRyaXZlcihCQVNFX0NBUFMsIFczQ19DQVBTLCB7fSwgZGVmYXVsdFczQ0NhcHMpO1xuICAgICAgZGVzaXJlZENhcHMuc2hvdWxkLmRlZXAuZXF1YWwoe1xuICAgICAgICAuLi5leHBlY3RlZERlZmF1bHRDYXBzLFxuICAgICAgICAuLi5CQVNFX0NBUFMsXG4gICAgICB9KTtcbiAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcy5zaG91bGQuZGVlcC5lcXVhbCh7XG4gICAgICAgIC4uLmV4cGVjdGVkRGVmYXVsdENhcHMsXG4gICAgICAgIC4uLkJBU0VfQ0FQU1xuICAgICAgfSk7XG4gICAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2guc2hvdWxkLmRlZXAuZXF1YWwoe1xuICAgICAgICAuLi5pbnNlcnRBcHBpdW1QcmVmaXhlcyhleHBlY3RlZERlZmF1bHRDYXBzKSxcbiAgICAgICAgLi4uaW5zZXJ0QXBwaXVtUHJlZml4ZXMoQkFTRV9DQVBTKVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBhbGxvdyB2YWxpZCBkZWZhdWx0IGNhcGFiaWxpdGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKG51bGwsIFczQ19DQVBTLCB7fSwge1xuICAgICAgICAnYXBwaXVtOmZvbyc6ICdiYXIyJyxcbiAgICAgIH0pO1xuICAgICAgcmVzLnByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcy5hbHdheXNNYXRjaFsnYXBwaXVtOmZvbyddLnNob3VsZC5lcWwoJ2JhcjInKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyBpbnZhbGlkIGRlZmF1bHQgY2FwYWJpbGl0aWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzID0gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIobnVsbCwgVzNDX0NBUFMsIHt9LCB7XG4gICAgICAgIGZvbzogJ2JhcicsICdhcHBpdW06Zm9vMic6ICdiYXIyJyxcbiAgICAgIH0pO1xuICAgICAgcmVzLmVycm9yLnNob3VsZC5lcWwoe1xuICAgICAgICBqc29ud3BDb2RlOiA2MSwgZXJyb3I6ICdpbnZhbGlkIGFyZ3VtZW50JywgdzNjU3RhdHVzOiA0MDAsIF9zdGFja3RyYWNlOiBudWxsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJlamVjdCBpZiBXM0MgY2FwcyBhcmUgbm90IHBhc3NpbmcgY29uc3RyYWludHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlcnIgPSBwYXJzZUNhcHNGb3JJbm5lckRyaXZlcih1bmRlZmluZWQsIFczQ19DQVBTLCB7aGVsbG86IHtwcmVzZW5jZTogdHJ1ZX19KS5lcnJvcjtcbiAgICAgIGVyci5tZXNzYWdlLnNob3VsZC5tYXRjaCgvJ2hlbGxvJyBjYW4ndCBiZSBibGFuay8pO1xuICAgICAgXy5pc0Vycm9yKGVycikuc2hvdWxkLmJlLnRydWU7XG5cbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIG9ubHkgYWNjZXB0IFczQyBjYXBzIHRoYXQgaGF2ZSBwYXNzaW5nIGNvbnN0cmFpbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHczY0NhcHMgPSB7XG4gICAgICAgIC4uLlczQ19DQVBTLFxuICAgICAgICBmaXJzdE1hdGNoOiBbXG4gICAgICAgICAge2ZvbzogJ2Jhcid9LFxuICAgICAgICAgIHsnYXBwaXVtOmhlbGxvJzogJ3dvcmxkJ30sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoQkFTRV9DQVBTLCB3M2NDYXBzLCB7aGVsbG86IHtwcmVzZW5jZTogdHJ1ZX19KS5lcnJvci5zaG91bGQuZXFsKHtcbiAgICAgICAganNvbndwQ29kZTogNjEsIGVycm9yOiAnaW52YWxpZCBhcmd1bWVudCcsIHczY1N0YXR1czogNDAwLCBfc3RhY2t0cmFjZTogbnVsbFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBhZGQgYXBwaXVtIHByZWZpeGVzIHRvIFczQyBjYXBzIHRoYXQgYXJlIG5vdCBzdGFuZGFyZCBpbiBXM0MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBwYXJzZUNhcHNGb3JJbm5lckRyaXZlcih1bmRlZmluZWQsIHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdGYWtlJyxcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdQUk9QX05BTUUnLFxuICAgICAgICB9LFxuICAgICAgfSkuZXJyb3IuZXJyb3Iuc2hvdWxkLmluY2x1ZGVzKCdpbnZhbGlkIGFyZ3VtZW50Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW1vdmVBcHBpdW1QcmVmaXhlcygpJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIGFwcGl1bSBwcmVmaXhlcyBmcm9tIGNhcCBuYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZUFwcGl1bVByZWZpeGVzKHtcbiAgICAgICAgJ2FwcGl1bTpjYXAxJzogJ3ZhbHVlMScsXG4gICAgICAgICdtczpjYXAyJzogJ3ZhbHVlMicsXG4gICAgICAgIHNvbWVDYXA6ICdzb21lQ2FwJyxcbiAgICAgIH0pLnNob3VsZC5lcWwoe1xuICAgICAgICAnY2FwMSc6ICd2YWx1ZTEnLFxuICAgICAgICAnbXM6Y2FwMic6ICd2YWx1ZTInLFxuICAgICAgICBzb21lQ2FwOiAnc29tZUNhcCcsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2luc2VydEFwcGl1bVByZWZpeGVzKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhcHBseSBwcmVmaXhlcyB0byBub24tc3RhbmRhcmQgY2FwYWJpbGl0aWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaW5zZXJ0QXBwaXVtUHJlZml4ZXMoe1xuICAgICAgICBzb21lQ2FwOiAnc29tZUNhcCcsXG4gICAgICB9KS5zaG91bGQuZGVlcC5lcXVhbCh7XG4gICAgICAgICdhcHBpdW06c29tZUNhcCc6ICdzb21lQ2FwJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgbm90IGFwcGx5IHByZWZpeGVzIHRvIHN0YW5kYXJkIGNhcGFiaWxpdGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGluc2VydEFwcGl1bVByZWZpeGVzKHtcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdCcm93c2VyTmFtZScsXG4gICAgICAgIHBsYXRmb3JtTmFtZTogJ1BsYXRmb3JtTmFtZScsXG4gICAgICB9KS5zaG91bGQuZGVlcC5lcXVhbCh7XG4gICAgICAgIGJyb3dzZXJOYW1lOiAnQnJvd3Nlck5hbWUnLFxuICAgICAgICBwbGF0Zm9ybU5hbWU6ICdQbGF0Zm9ybU5hbWUnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBub3QgYXBwbHkgcHJlZml4ZXMgdG8gY2FwYWJpbGl0aWVzIHRoYXQgYWxyZWFkeSBoYXZlIGEgcHJlZml4JywgZnVuY3Rpb24gKCkge1xuICAgICAgaW5zZXJ0QXBwaXVtUHJlZml4ZXMoe1xuICAgICAgICAnYXBwaXVtOnNvbWVDYXAnOiAnc29tZUNhcCcsXG4gICAgICAgICdtb3o6c29tZU90aGVyQ2FwJzogJ3NvbWVPdGhlckNhcCcsXG4gICAgICB9KS5zaG91bGQuZGVlcC5lcXVhbCh7XG4gICAgICAgICdhcHBpdW06c29tZUNhcCc6ICdzb21lQ2FwJyxcbiAgICAgICAgJ21vejpzb21lT3RoZXJDYXAnOiAnc29tZU90aGVyQ2FwJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgYXBwbHkgcHJlZml4ZXMgdG8gbm9uLXByZWZpeGVkLCBub24tc3RhbmRhcmQgY2FwYWJpbGl0aWVzOyBzaG91bGQgbm90IGFwcGx5IHByZWZpeGVzIHRvIGFueSBvdGhlciBjYXBhYmlsaXRpZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpbnNlcnRBcHBpdW1QcmVmaXhlcyh7XG4gICAgICAgICdhcHBpdW06c29tZUNhcCc6ICdzb21lQ2FwJyxcbiAgICAgICAgJ21vejpzb21lT3RoZXJDYXAnOiAnc29tZU90aGVyQ2FwJyxcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdCcm93c2VyTmFtZScsXG4gICAgICAgIHBsYXRmb3JtTmFtZTogJ1BsYXRmb3JtTmFtZScsXG4gICAgICAgIHNvbWVPdGhlckNhcDogJ3NvbWVPdGhlckNhcCcsXG4gICAgICAgIHlldEFub3RoZXJDYXA6ICd5ZXRBbm90aGVyQ2FwJyxcbiAgICAgIH0pLnNob3VsZC5kZWVwLmVxdWFsKHtcbiAgICAgICAgJ2FwcGl1bTpzb21lQ2FwJzogJ3NvbWVDYXAnLFxuICAgICAgICAnbW96OnNvbWVPdGhlckNhcCc6ICdzb21lT3RoZXJDYXAnLFxuICAgICAgICBicm93c2VyTmFtZTogJ0Jyb3dzZXJOYW1lJyxcbiAgICAgICAgcGxhdGZvcm1OYW1lOiAnUGxhdGZvcm1OYW1lJyxcbiAgICAgICAgJ2FwcGl1bTpzb21lT3RoZXJDYXAnOiAnc29tZU90aGVyQ2FwJyxcbiAgICAgICAgJ2FwcGl1bTp5ZXRBbm90aGVyQ2FwJzogJ3lldEFub3RoZXJDYXAnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwdWxsU2V0dGluZ3MoKScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHB1bGwgc2V0dGluZ3MgZnJvbSBjYXBzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2FwcyA9IHtcbiAgICAgICAgcGxhdGZvcm1OYW1lOiAnZm9vJyxcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdiYXInLFxuICAgICAgICAnc2V0dGluZ3Nbc2V0dGluZ05hbWVdJzogJ2JheicsXG4gICAgICAgICdzZXR0aW5nc1tzZXR0aW5nTmFtZTJdJzogJ2JhejInLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0gcHVsbFNldHRpbmdzKGNhcHMpO1xuICAgICAgc2V0dGluZ3Muc2hvdWxkLmVxbCh7XG4gICAgICAgIHNldHRpbmdOYW1lOiAnYmF6JyxcbiAgICAgICAgc2V0dGluZ05hbWUyOiAnYmF6MicsXG4gICAgICB9KTtcbiAgICAgIGNhcHMuc2hvdWxkLmVxbCh7XG4gICAgICAgIHBsYXRmb3JtTmFtZTogJ2ZvbycsXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnYmFyJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcHVsbCBzZXR0aW5ncyBkaWN0IGlmIG9iamVjdCB2YWx1ZXMgYXJlIHByZXNlbnQgaW4gY2FwcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhcHMgPSB7XG4gICAgICAgIHBsYXRmb3JtTmFtZTogJ2ZvbycsXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnYmFyJyxcbiAgICAgICAgJ3NldHRpbmdzW3NldHRpbmdOYW1lXSc6IHtrZXk6ICdiYXonfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHB1bGxTZXR0aW5ncyhjYXBzKTtcbiAgICAgIHNldHRpbmdzLnNob3VsZC5lcWwoe1xuICAgICAgICBzZXR0aW5nTmFtZToge2tleTogJ2Jheid9LFxuICAgICAgfSk7XG4gICAgICBjYXBzLnNob3VsZC5lcWwoe1xuICAgICAgICBwbGF0Zm9ybU5hbWU6ICdmb28nLFxuICAgICAgICBicm93c2VyTmFtZTogJ2JhcicsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHB1bGwgZW1wdHkgZGljdCBpZiBubyBzZXR0aW5ncyBhcmUgcHJlc2VudCBpbiBjYXBzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2FwcyA9IHtcbiAgICAgICAgcGxhdGZvcm1OYW1lOiAnZm9vJyxcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdiYXInLFxuICAgICAgICAnc2V0dGluZ1tzZXR0aW5nTmFtZV0nOiAnYmF6JyxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHB1bGxTZXR0aW5ncyhjYXBzKTtcbiAgICAgIHNldHRpbmdzLnNob3VsZC5lcWwoe30pO1xuICAgICAgY2Fwcy5zaG91bGQuZXFsKHtcbiAgICAgICAgcGxhdGZvcm1OYW1lOiAnZm9vJyxcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdiYXInLFxuICAgICAgICAnc2V0dGluZ1tzZXR0aW5nTmFtZV0nOiAnYmF6JyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcHVsbCBlbXB0eSBkaWN0IGlmIGNhcHMgYXJlIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2FwcyA9IHt9O1xuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBwdWxsU2V0dGluZ3MoY2Fwcyk7XG4gICAgICBzZXR0aW5ncy5zaG91bGQuZXFsKHt9KTtcbiAgICAgIGNhcHMuc2hvdWxkLmVxbCh7fSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSZWFkb25seU1hcCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGFsbG93IHdyaXRpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtYXAgPSBuZXcgUmVhZG9ubHlNYXAoKTtcbiAgICAgICgoKSA9PiBtYXAuc2V0KCdmb28nLCAnYmFyJykpLnNob3VsZC5ub3QudGhyb3coKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyByZWFkaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWFwID0gbmV3IFJlYWRvbmx5TWFwKFtbJ2ZvbycsICdiYXInXV0pO1xuICAgICAgKCgpID0+IG1hcC5nZXQoJ2ZvbycpKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyBkZWxldGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBSZWFkb25seU1hcChbWydmb28nLCAnYmFyJ11dKTtcbiAgICAgICgoKSA9PiBtYXAuZGVsZXRlKCdmb28nKSkuc2hvdWxkLnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyBjbGVhcmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBSZWFkb25seU1hcChbWydmb28nLCAnYmFyJ11dKTtcbiAgICAgICgoKSA9PiBtYXAuY2xlYXIoKSkuc2hvdWxkLnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyB1cGRhdGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBSZWFkb25seU1hcChbWydmb28nLCAnYmFyJ11dKTtcbiAgICAgICgoKSA9PiBtYXAuc2V0KCdmb28nLCAnYmF6JykpLnNob3VsZC50aHJvdygpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L3V0aWxzLXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
288
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvdXRpbHMtc3BlY3MuanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJpdCIsImVycm9yIiwicHJvdG9jb2wiLCJCQVNFX0NBUFMiLCJzaG91bGQiLCJlcXVhbCIsIm1lc3NhZ2UiLCJtYXRjaCIsImRlc2lyZWRDYXBzIiwicHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzIiwicHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzIiwidW5kZWZpbmVkIiwiVzNDX0NBUFMiLCJkZWVwIiwibm90IiwiZXhpc3QiLCJkZWZhdWx0VzNDQ2FwcyIsImV4cGVjdGVkRGVmYXVsdENhcHMiLCJmb28iLCJiYXoiLCJhbHdheXNNYXRjaCIsInJlcyIsImVxbCIsImpzb253cENvZGUiLCJ3M2NTdGF0dXMiLCJfc3RhY2t0cmFjZSIsImVyciIsImhlbGxvIiwicHJlc2VuY2UiLCJfIiwiaXNFcnJvciIsImJlIiwidHJ1ZSIsInczY0NhcHMiLCJmaXJzdE1hdGNoIiwicGxhdGZvcm1OYW1lIiwicHJvcGVydHlOYW1lIiwiaW5jbHVkZXMiLCJzb21lQ2FwIiwiYnJvd3Nlck5hbWUiLCJzb21lT3RoZXJDYXAiLCJ5ZXRBbm90aGVyQ2FwIiwiY2FwcyIsInNldHRpbmdzIiwic2V0dGluZ05hbWUiLCJzZXR0aW5nTmFtZTIiLCJrZXkiLCJtYXAiLCJSZWFkb25seU1hcCIsInNldCIsInRocm93IiwiZ2V0IiwiZGVsZXRlIiwiZmFsc2UiLCJjbGVhciIsInNhbmRib3giLCJiZWZvcmVFYWNoIiwic2lub24iLCJjcmVhdGVTYW5kYm94Iiwic3B5IiwibG9nZ2VyIiwiYWZ0ZXJFYWNoIiwicmVzdG9yZSIsImluZm8iLCJmaXJzdENhbGwiLCJmaXJzdEFyZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUFBLFFBQVEsQ0FBQyxPQUFELEVBQVUsWUFBWTtBQUM1QkEsRUFBQUEsUUFBUSxDQUFDLDJCQUFELEVBQThCLFlBQVk7QUFD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QywyQkFBRCxFQUE4QixZQUFZO0FBQzFDLFlBQU0rQyxHQUFHLEdBQUcsSUFBSUMsa0JBQUosQ0FBZ0IsQ0FBQyxDQUFDLEtBQUQsRUFBUSxLQUFSLENBQUQsQ0FBaEIsQ0FBWjtBQUNBLE9BQUMsTUFBTUQsR0FBRyxDQUFDRSxHQUFKLENBQVEsS0FBUixFQUFlLEtBQWYsQ0FBUCxFQUE4QjdDLE1BQTlCLENBQXFDOEMsS0FBckM7QUFDRCxLQUhDLENBQUY7QUFJRCxHQTFCTyxDQUFSO0FBNEJBbkQsRUFBQUEsUUFBUSxDQUFDLFdBQUQsRUFBYyxZQUFZO0FBS2hDLFFBQUl3RCxPQUFKO0FBQ0FDLElBQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCRCxNQUFBQSxPQUFPLEdBQUdFLGVBQU1DLGFBQU4sRUFBVjtBQUNBSCxNQUFBQSxPQUFPLENBQUNJLEdBQVIsQ0FBWUMsZUFBWixFQUFvQixNQUFwQjtBQUNELEtBSFMsQ0FBVjtBQUtBQyxJQUFBQSxTQUFTLENBQUMsWUFBWTtBQUNwQk4sTUFBQUEsT0FBTyxDQUFDTyxPQUFSO0FBQ0QsS0FGUSxDQUFUO0FBSUE5RCxJQUFBQSxFQUFFLENBQUMsNkNBQUQsRUFBZ0QsWUFBWTtBQUM1RCwwQkFBUTtBQUFDa0IsUUFBQUEsR0FBRyxFQUFFO0FBQU4sT0FBUjtBQUNBLCtCQUFxRDBDLGdCQUFPRyxJQUFSLENBQWNDLFNBQWQsQ0FBd0JDLFFBQTVFLEVBQ0c3RCxNQURILENBQ1VDLEtBRFYsQ0FDZ0Isa0JBRGhCO0FBRUQsS0FKQyxDQUFGO0FBS0QsR0FwQk8sQ0FBUjtBQXFCRCxDQTdQTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIsIGluc2VydEFwcGl1bVByZWZpeGVzLCBwdWxsU2V0dGluZ3MsXG4gIHJlbW92ZUFwcGl1bVByZWZpeGVzLCBSZWFkb25seU1hcCwgaW5zcGVjdFxufSBmcm9tICcuLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgQkFTRV9DQVBTLCBXM0NfQ0FQUyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgc3RyaXBDb2xvcnMgfSBmcm9tICdAZGFiaC9jb2xvcnMnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbGliL2xvZ2dlcic7XG5cbmRlc2NyaWJlKCd1dGlscycsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ3BhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZXJyb3IgaWYgb25seSBKU09OV1AgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQge2Vycm9yLCBwcm90b2NvbH0gPSBwYXJzZUNhcHNGb3JJbm5lckRyaXZlcihCQVNFX0NBUFMpO1xuICAgICAgcHJvdG9jb2wuc2hvdWxkLmVxdWFsKCdXM0MnKTtcbiAgICAgIGVycm9yLm1lc3NhZ2Uuc2hvdWxkLm1hdGNoKC9XM0MvKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBXM0MgY2FwcyB1bmNoYW5nZWQgaWYgb25seSBXM0MgY2FwcyB3ZXJlIHByb3ZpZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHtkZXNpcmVkQ2FwcywgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLCBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMsIHByb3RvY29sfSA9IHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKHVuZGVmaW5lZCwgVzNDX0NBUFMpO1xuICAgICAgZGVzaXJlZENhcHMuc2hvdWxkLmRlZXAuZXF1YWwoQkFTRV9DQVBTKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QocHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcy5zaG91bGQuZGVlcC5lcXVhbChXM0NfQ0FQUyk7XG4gICAgICBwcm90b2NvbC5zaG91bGQuZXF1YWwoJ1czQycpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIEpTT05XUCBhbmQgVzNDIGNhcHMgaWYgYm90aCB3ZXJlIHByb3ZpZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHtkZXNpcmVkQ2FwcywgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLCBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMsIHByb3RvY29sfSA9IHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKEJBU0VfQ0FQUywgVzNDX0NBUFMpO1xuICAgICAgZGVzaXJlZENhcHMuc2hvdWxkLmRlZXAuZXF1YWwoQkFTRV9DQVBTKTtcbiAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcy5zaG91bGQuZGVlcC5lcXVhbChCQVNFX0NBUFMpO1xuICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLnNob3VsZC5kZWVwLmVxdWFsKFczQ19DQVBTKTtcbiAgICAgIHByb3RvY29sLnNob3VsZC5lcXVhbCgnVzNDJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBpbmNsdWRlIGRlZmF1bHQgY2FwYWJpbGl0aWVzIGluIHJlc3VsdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VzNDQ2FwcyA9IHtcbiAgICAgICAgJ2FwcGl1bTpmb28nOiAnYmFyJyxcbiAgICAgICAgJ2FwcGl1bTpiYXonOiAnYmxhJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZERlZmF1bHRDYXBzID0ge1xuICAgICAgICBmb286ICdiYXInLFxuICAgICAgICBiYXo6ICdibGEnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGVzaXJlZENhcHMsXG4gICAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzXG4gICAgICB9ID0gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoQkFTRV9DQVBTLCBXM0NfQ0FQUywge30sIGRlZmF1bHRXM0NDYXBzKTtcbiAgICAgIGRlc2lyZWRDYXBzLnNob3VsZC5kZWVwLmVxdWFsKHtcbiAgICAgICAgLi4uZXhwZWN0ZWREZWZhdWx0Q2FwcyxcbiAgICAgICAgLi4uQkFTRV9DQVBTLFxuICAgICAgfSk7XG4gICAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMuc2hvdWxkLmRlZXAuZXF1YWwoe1xuICAgICAgICAuLi5leHBlY3RlZERlZmF1bHRDYXBzLFxuICAgICAgICAuLi5CQVNFX0NBUFNcbiAgICAgIH0pO1xuICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoLnNob3VsZC5kZWVwLmVxdWFsKHtcbiAgICAgICAgLi4uaW5zZXJ0QXBwaXVtUHJlZml4ZXMoZXhwZWN0ZWREZWZhdWx0Q2FwcyksXG4gICAgICAgIC4uLmluc2VydEFwcGl1bVByZWZpeGVzKEJBU0VfQ0FQUylcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgYWxsb3cgdmFsaWQgZGVmYXVsdCBjYXBhYmlsaXRpZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXMgPSBwYXJzZUNhcHNGb3JJbm5lckRyaXZlcihudWxsLCBXM0NfQ0FQUywge30sIHtcbiAgICAgICAgJ2FwcGl1bTpmb28nOiAnYmFyMicsXG4gICAgICB9KTtcbiAgICAgIHJlcy5wcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2hbJ2FwcGl1bTpmb28nXS5zaG91bGQuZXFsKCdiYXIyJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgaW52YWxpZCBkZWZhdWx0IGNhcGFiaWxpdGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKG51bGwsIFczQ19DQVBTLCB7fSwge1xuICAgICAgICBmb286ICdiYXInLCAnYXBwaXVtOmZvbzInOiAnYmFyMicsXG4gICAgICB9KTtcbiAgICAgIHJlcy5lcnJvci5zaG91bGQuZXFsKHtcbiAgICAgICAganNvbndwQ29kZTogNjEsIGVycm9yOiAnaW52YWxpZCBhcmd1bWVudCcsIHczY1N0YXR1czogNDAwLCBfc3RhY2t0cmFjZTogbnVsbFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZWplY3QgaWYgVzNDIGNhcHMgYXJlIG5vdCBwYXNzaW5nIGNvbnN0cmFpbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXJyID0gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIodW5kZWZpbmVkLCBXM0NfQ0FQUywge2hlbGxvOiB7cHJlc2VuY2U6IHRydWV9fSkuZXJyb3I7XG4gICAgICBlcnIubWVzc2FnZS5zaG91bGQubWF0Y2goLydoZWxsbycgY2FuJ3QgYmUgYmxhbmsvKTtcbiAgICAgIF8uaXNFcnJvcihlcnIpLnNob3VsZC5iZS50cnVlO1xuXG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBvbmx5IGFjY2VwdCBXM0MgY2FwcyB0aGF0IGhhdmUgcGFzc2luZyBjb25zdHJhaW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCB3M2NDYXBzID0ge1xuICAgICAgICAuLi5XM0NfQ0FQUyxcbiAgICAgICAgZmlyc3RNYXRjaDogW1xuICAgICAgICAgIHtmb286ICdiYXInfSxcbiAgICAgICAgICB7J2FwcGl1bTpoZWxsbyc6ICd3b3JsZCd9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKEJBU0VfQ0FQUywgdzNjQ2Fwcywge2hlbGxvOiB7cHJlc2VuY2U6IHRydWV9fSkuZXJyb3Iuc2hvdWxkLmVxbCh7XG4gICAgICAgIGpzb253cENvZGU6IDYxLCBlcnJvcjogJ2ludmFsaWQgYXJndW1lbnQnLCB3M2NTdGF0dXM6IDQwMCwgX3N0YWNrdHJhY2U6IG51bGxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgYWRkIGFwcGl1bSBwcmVmaXhlcyB0byBXM0MgY2FwcyB0aGF0IGFyZSBub3Qgc3RhbmRhcmQgaW4gVzNDJywgZnVuY3Rpb24gKCkge1xuICAgICAgcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIodW5kZWZpbmVkLCB7XG4gICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZScsXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnUFJPUF9OQU1FJyxcbiAgICAgICAgfSxcbiAgICAgIH0pLmVycm9yLmVycm9yLnNob3VsZC5pbmNsdWRlcygnaW52YWxpZCBhcmd1bWVudCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlQXBwaXVtUHJlZml4ZXMoKScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSBhcHBpdW0gcHJlZml4ZXMgZnJvbSBjYXAgbmFtZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZW1vdmVBcHBpdW1QcmVmaXhlcyh7XG4gICAgICAgICdhcHBpdW06Y2FwMSc6ICd2YWx1ZTEnLFxuICAgICAgICAnbXM6Y2FwMic6ICd2YWx1ZTInLFxuICAgICAgICBzb21lQ2FwOiAnc29tZUNhcCcsXG4gICAgICB9KS5zaG91bGQuZXFsKHtcbiAgICAgICAgJ2NhcDEnOiAndmFsdWUxJyxcbiAgICAgICAgJ21zOmNhcDInOiAndmFsdWUyJyxcbiAgICAgICAgc29tZUNhcDogJ3NvbWVDYXAnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpbnNlcnRBcHBpdW1QcmVmaXhlcygpJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYXBwbHkgcHJlZml4ZXMgdG8gbm9uLXN0YW5kYXJkIGNhcGFiaWxpdGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGluc2VydEFwcGl1bVByZWZpeGVzKHtcbiAgICAgICAgc29tZUNhcDogJ3NvbWVDYXAnLFxuICAgICAgfSkuc2hvdWxkLmRlZXAuZXF1YWwoe1xuICAgICAgICAnYXBwaXVtOnNvbWVDYXAnOiAnc29tZUNhcCcsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIG5vdCBhcHBseSBwcmVmaXhlcyB0byBzdGFuZGFyZCBjYXBhYmlsaXRpZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpbnNlcnRBcHBpdW1QcmVmaXhlcyh7XG4gICAgICAgIGJyb3dzZXJOYW1lOiAnQnJvd3Nlck5hbWUnLFxuICAgICAgICBwbGF0Zm9ybU5hbWU6ICdQbGF0Zm9ybU5hbWUnLFxuICAgICAgfSkuc2hvdWxkLmRlZXAuZXF1YWwoe1xuICAgICAgICBicm93c2VyTmFtZTogJ0Jyb3dzZXJOYW1lJyxcbiAgICAgICAgcGxhdGZvcm1OYW1lOiAnUGxhdGZvcm1OYW1lJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgbm90IGFwcGx5IHByZWZpeGVzIHRvIGNhcGFiaWxpdGllcyB0aGF0IGFscmVhZHkgaGF2ZSBhIHByZWZpeCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGluc2VydEFwcGl1bVByZWZpeGVzKHtcbiAgICAgICAgJ2FwcGl1bTpzb21lQ2FwJzogJ3NvbWVDYXAnLFxuICAgICAgICAnbW96OnNvbWVPdGhlckNhcCc6ICdzb21lT3RoZXJDYXAnLFxuICAgICAgfSkuc2hvdWxkLmRlZXAuZXF1YWwoe1xuICAgICAgICAnYXBwaXVtOnNvbWVDYXAnOiAnc29tZUNhcCcsXG4gICAgICAgICdtb3o6c29tZU90aGVyQ2FwJzogJ3NvbWVPdGhlckNhcCcsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGFwcGx5IHByZWZpeGVzIHRvIG5vbi1wcmVmaXhlZCwgbm9uLXN0YW5kYXJkIGNhcGFiaWxpdGllczsgc2hvdWxkIG5vdCBhcHBseSBwcmVmaXhlcyB0byBhbnkgb3RoZXIgY2FwYWJpbGl0aWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaW5zZXJ0QXBwaXVtUHJlZml4ZXMoe1xuICAgICAgICAnYXBwaXVtOnNvbWVDYXAnOiAnc29tZUNhcCcsXG4gICAgICAgICdtb3o6c29tZU90aGVyQ2FwJzogJ3NvbWVPdGhlckNhcCcsXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnQnJvd3Nlck5hbWUnLFxuICAgICAgICBwbGF0Zm9ybU5hbWU6ICdQbGF0Zm9ybU5hbWUnLFxuICAgICAgICBzb21lT3RoZXJDYXA6ICdzb21lT3RoZXJDYXAnLFxuICAgICAgICB5ZXRBbm90aGVyQ2FwOiAneWV0QW5vdGhlckNhcCcsXG4gICAgICB9KS5zaG91bGQuZGVlcC5lcXVhbCh7XG4gICAgICAgICdhcHBpdW06c29tZUNhcCc6ICdzb21lQ2FwJyxcbiAgICAgICAgJ21vejpzb21lT3RoZXJDYXAnOiAnc29tZU90aGVyQ2FwJyxcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdCcm93c2VyTmFtZScsXG4gICAgICAgIHBsYXRmb3JtTmFtZTogJ1BsYXRmb3JtTmFtZScsXG4gICAgICAgICdhcHBpdW06c29tZU90aGVyQ2FwJzogJ3NvbWVPdGhlckNhcCcsXG4gICAgICAgICdhcHBpdW06eWV0QW5vdGhlckNhcCc6ICd5ZXRBbm90aGVyQ2FwJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHVsbFNldHRpbmdzKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwdWxsIHNldHRpbmdzIGZyb20gY2FwcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhcHMgPSB7XG4gICAgICAgIHBsYXRmb3JtTmFtZTogJ2ZvbycsXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnYmFyJyxcbiAgICAgICAgJ3NldHRpbmdzW3NldHRpbmdOYW1lXSc6ICdiYXonLFxuICAgICAgICAnc2V0dGluZ3Nbc2V0dGluZ05hbWUyXSc6ICdiYXoyJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHB1bGxTZXR0aW5ncyhjYXBzKTtcbiAgICAgIHNldHRpbmdzLnNob3VsZC5lcWwoe1xuICAgICAgICBzZXR0aW5nTmFtZTogJ2JheicsXG4gICAgICAgIHNldHRpbmdOYW1lMjogJ2JhejInLFxuICAgICAgfSk7XG4gICAgICBjYXBzLnNob3VsZC5lcWwoe1xuICAgICAgICBwbGF0Zm9ybU5hbWU6ICdmb28nLFxuICAgICAgICBicm93c2VyTmFtZTogJ2JhcicsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHB1bGwgc2V0dGluZ3MgZGljdCBpZiBvYmplY3QgdmFsdWVzIGFyZSBwcmVzZW50IGluIGNhcHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjYXBzID0ge1xuICAgICAgICBwbGF0Zm9ybU5hbWU6ICdmb28nLFxuICAgICAgICBicm93c2VyTmFtZTogJ2JhcicsXG4gICAgICAgICdzZXR0aW5nc1tzZXR0aW5nTmFtZV0nOiB7a2V5OiAnYmF6J30sXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBwdWxsU2V0dGluZ3MoY2Fwcyk7XG4gICAgICBzZXR0aW5ncy5zaG91bGQuZXFsKHtcbiAgICAgICAgc2V0dGluZ05hbWU6IHtrZXk6ICdiYXonfSxcbiAgICAgIH0pO1xuICAgICAgY2Fwcy5zaG91bGQuZXFsKHtcbiAgICAgICAgcGxhdGZvcm1OYW1lOiAnZm9vJyxcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdiYXInLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBwdWxsIGVtcHR5IGRpY3QgaWYgbm8gc2V0dGluZ3MgYXJlIHByZXNlbnQgaW4gY2FwcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhcHMgPSB7XG4gICAgICAgIHBsYXRmb3JtTmFtZTogJ2ZvbycsXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnYmFyJyxcbiAgICAgICAgJ3NldHRpbmdbc2V0dGluZ05hbWVdJzogJ2JheicsXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBwdWxsU2V0dGluZ3MoY2Fwcyk7XG4gICAgICBzZXR0aW5ncy5zaG91bGQuZXFsKHt9KTtcbiAgICAgIGNhcHMuc2hvdWxkLmVxbCh7XG4gICAgICAgIHBsYXRmb3JtTmFtZTogJ2ZvbycsXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnYmFyJyxcbiAgICAgICAgJ3NldHRpbmdbc2V0dGluZ05hbWVdJzogJ2JheicsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHB1bGwgZW1wdHkgZGljdCBpZiBjYXBzIGFyZSBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhcHMgPSB7fTtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0gcHVsbFNldHRpbmdzKGNhcHMpO1xuICAgICAgc2V0dGluZ3Muc2hvdWxkLmVxbCh7fSk7XG4gICAgICBjYXBzLnNob3VsZC5lcWwoe30pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmVhZG9ubHlNYXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhbGxvdyB3cml0aW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWFwID0gbmV3IFJlYWRvbmx5TWFwKCk7XG4gICAgICAoKCkgPT4gbWFwLnNldCgnZm9vJywgJ2JhcicpKS5zaG91bGQubm90LnRocm93KCk7XG5cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxsb3cgcmVhZGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBSZWFkb25seU1hcChbWydmb28nLCAnYmFyJ11dKTtcbiAgICAgICgoKSA9PiBtYXAuZ2V0KCdmb28nKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgZGVsZXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtYXAgPSBuZXcgUmVhZG9ubHlNYXAoW1snZm9vJywgJ2JhciddXSk7XG4gICAgICBtYXAuZGVsZXRlKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyBjbGVhcmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBSZWFkb25seU1hcChbWydmb28nLCAnYmFyJ11dKTtcbiAgICAgICgoKSA9PiBtYXAuY2xlYXIoKSkuc2hvdWxkLnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyB1cGRhdGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBSZWFkb25seU1hcChbWydmb28nLCAnYmFyJ11dKTtcbiAgICAgICgoKSA9PiBtYXAuc2V0KCdmb28nLCAnYmF6JykpLnNob3VsZC50aHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaW5zcGVjdCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge2ltcG9ydCgnc2lub24nKS5TaW5vblNhbmRib3h9XG4gICAgICovXG4gICAgbGV0IHNhbmRib3g7XG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgICAgc2FuZGJveC5zcHkobG9nZ2VyLCAnaW5mbycpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBsb2cgdGhlIHJlc3VsdCBvZiBpbnNwZWN0aW5nIGEgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpbnNwZWN0KHtmb286ICdiYXInfSk7XG4gICAgICBzdHJpcENvbG9ycygvKiogQHR5cGUge2ltcG9ydCgnc2lub24nKS5TaW5vblN0dWJ9ICovKGxvZ2dlci5pbmZvKS5maXJzdENhbGwuZmlyc3RBcmcpXG4gICAgICAgIC5zaG91bGQuZXF1YWwoJ3sgZm9vOiBcXCdiYXJcXCcgfScpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L3V0aWxzLXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|